Elin Decompiled Documentation EA 23.166 Nightly
Loading...
Searching...
No Matches
ConSleep.cs
Go to the documentation of this file.
1using Newtonsoft.Json;
2
3public class ConSleep : BadCondition
4{
5 public bool succubusChecked;
6
7 [JsonProperty]
8 public int pcSleep;
9
10 [JsonProperty]
11 public Thing pcBed;
12
13 [JsonProperty]
15
16 [JsonProperty]
18
19 [JsonProperty]
21
22 [JsonProperty]
23 public bool pickup;
24
25 [JsonProperty]
26 public bool slept;
27
28 [JsonProperty]
29 public int uidRide;
30
31 [JsonProperty]
32 public int uidParasite;
33
34 public override Emo2 EmoIcon => Emo2.speeing;
35
36 public override bool ConsumeTurn => true;
37
38 public override int GetPhase()
39 {
40 return 0;
41 }
42
43 public override void SetOwner(Chara _owner, bool onDeserialize = false)
44 {
45 base.SetOwner(_owner);
46 owner.conSleep = this;
47 if (owner.renderer != null)
48 {
50 }
51 }
52
53 public override void OnBeforeStart()
54 {
55 TraitPillow traitPillow = owner.pos.FindThing<TraitPillow>();
56 if (traitPillow != null)
57 {
58 owner.Say("pillow", owner, traitPillow.owner);
59 }
60 }
61
62 public override void Tick()
63 {
64 if (!succubusChecked && EClass._zone.isStarted && (base.value > 50 || pcSleep != 0))
65 {
67 succubusChecked = true;
68 }
69 if (owner.IsPC && pcSleep > 0)
70 {
72 {
73 if (EClass.pc.ride != null)
74 {
76 ActRide.Unride(EClass.pc, parasite: false, talk: false);
77 }
78 if (EClass.pc.parasite != null)
79 {
81 ActRide.Unride(EClass.pc, parasite: true, talk: false);
82 }
83 }
84 pcSleep--;
85 if (pcSleep != 0)
86 {
87 return;
88 }
89 int num = EClass.pc.sleepiness.GetPhase();
90 int num2 = ((num >= 3) ? 12 : ((num >= 2) ? 10 : ((num >= 1) ? 7 : 5)));
91 num2 += EClass.pc.stamina.GetPhase() switch
92 {
93 2 => 2,
94 1 => 3,
95 0 => 4,
96 _ => 0,
97 };
98 num2 += EClass.rnd(3) - EClass.rnd(2);
100 if (EClass.pc.isDead)
101 {
102 return;
103 }
104 base.value = 1;
105 slept = true;
106 if (!EClass.pc.pos.IsInSpot<TraitPillowStrange>())
107 {
108 foreach (Chara chara in EClass._map.charas)
109 {
110 if (chara.host != null || chara.noMove || chara.conSuspend != null || chara.isRestrained || chara.IsPC)
111 {
112 continue;
113 }
114 bool flag = chara.GetBool(123);
115 if (!flag && chara.IsPCFaction && chara.race.tag.Contains("sleepBeside") && EClass.rnd(5) == 0)
116 {
117 flag = true;
118 }
119 if (flag)
120 {
121 chara.MoveImmediate(EClass.pc.pos);
122 chara.SetDir(chara.IsPCC ? EClass.pc.dir : 0);
123 chara.Say("sleep_beside", chara, EClass.pc);
124 if (!chara.HasCondition<ConSleep>())
125 {
126 chara.AddCondition<ConSleep>(20 + EClass.rnd(25), force: true);
127 }
128 }
129 }
130 }
131 foreach (Chara member in EClass.pc.party.members)
132 {
133 if (!member.IsPC && !member.HasCondition<ConSleep>())
134 {
135 member.AddCondition<ConSleep>(5 + EClass.rnd(10), force: true);
136 }
137 }
138 owner.RemoveCondition<ConBleed>();
139 owner.RemoveCondition<ConPoison>();
140 owner.RemoveCondition<ConMiasma>();
141 EClass.ui.AddLayer<LayerSleep>().Sleep(num2, pcBed, pcPillow);
142 return;
143 }
144 if (EClass.rnd(50) == 0 && !owner.IsPC)
145 {
146 if (EClass.rnd(10) == 0)
147 {
148 owner.Talk("sleepFav", (EClass.rnd(2) == 0) ? owner.GetFavCat().GetName().ToLower() : owner.GetFavFood().GetName());
149 if (!owner.knowFav && owner.isSynced)
150 {
151 Msg.Say("noteFav", owner);
152 owner.knowFav = true;
153 }
154 }
155 else
156 {
157 owner.Talk("sleep");
158 }
159 }
160 if (!(owner.ai is GoalSleep) || owner.CurrentSpan != TimeTable.Span.Sleep)
161 {
162 owner.HealHP(EClass.rnd(4) + 1);
163 owner.mana.Mod(EClass.rnd(3) + 1);
164 if (!owner.IsPC)
165 {
166 owner.stamina.Mod(EClass.rnd(2) + 1);
167 }
168 Mod(-1);
169 }
170 }
171
172 public static void SuccubusVisit(Chara tg)
173 {
174 if (tg.pos.IsInSpot<TraitPillowStrange>())
175 {
176 return;
177 }
178 foreach (Chara chara in EClass._map.charas)
179 {
180 if (chara == tg || chara.IsPC || chara.host != null || chara.IsDisabled || !chara.IsIdle || chara.Evalue(418) > 0 || tg.Evalue(418) > 0)
181 {
182 continue;
183 }
184 Thing thing = chara.things.Find<TraitDreamBug>();
185 if ((!chara.HasElement(1216) && thing == null) || (tg.Evalue(418) == 0 && (EClass.rnd(3) != 0 || (tg.IsPC && thing == null && EClass.rnd(200) != 0))))
186 {
187 continue;
188 }
189 chara.Teleport(tg.pos);
190 if (chara.Dist(tg.pos) > 2)
191 {
192 continue;
193 }
194 if (thing != null)
195 {
196 tg.Say("dreambug_teleport", chara, tg);
197 thing.ModCharge(-1);
198 if (thing.c_charges <= 0)
199 {
200 tg.Say("dreambug_destroy", chara, thing);
201 thing.Destroy();
202 }
203 }
204 chara.SetAI(new AI_Fuck
205 {
206 target = tg,
207 succubus = true
208 });
209 }
210 }
211
212 public static void SuccubusSleep(Chara tg)
213 {
214 EClass._map.charas.ForeachReverse(delegate(Chara c)
215 {
216 if (c.ai is AI_Fuck { IsRunning: not false } aI_Fuck && aI_Fuck.target == tg)
217 {
218 aI_Fuck.Finish();
219 aI_Fuck.Cancel();
220 if (!c.HasCondition<ConSleep>())
221 {
222 c.AddCondition<ConSleep>(100 + EClass.rnd(100), force: true);
223 }
224 }
225 });
226 }
227
228 public override void OnRemoved()
229 {
230 owner.conSleep = null;
231 owner.renderer.RefreshSprite();
232 owner.renderer.SetFirst(first: true, owner.pos.PositionAuto());
233 if (!owner.IsPC)
234 {
235 owner.sleepiness.Set(0);
236 return;
237 }
238 if (owner.IsPC)
239 {
240 if (uidRide != 0)
241 {
242 Chara chara = EClass._map.FindChara(uidRide);
243 if (chara != null)
244 {
245 ActRide.Ride(EClass.pc, chara, parasite: false, talk: false);
246 }
247 }
248 if (uidParasite != 0)
249 {
250 Chara chara2 = EClass._map.FindChara(uidParasite);
251 if (chara2 != null)
252 {
253 ActRide.Ride(EClass.pc, chara2, parasite: true, talk: false);
254 }
255 }
256 }
257 if (owner.isDead)
258 {
259 return;
260 }
261 TraitPillow traitPillow = (pcPillow?.trait as TraitPillow) ?? EClass.pc.pos.FindThing<TraitPillow>();
262 if (pickup)
263 {
264 TryPick(pcBed, posBed);
265 TryPick(pcPillow, posPillow);
266 }
267 if (slept)
268 {
270 if (thing != null && thing.c_lockLv == 0 && !EClass._zone.IsRegion)
271 {
272 foreach (Thing item in thing.things.List((Thing _t) => _t.trait is TraitSpellbook || _t.trait is TraitAncientbook || _t.id == "234"))
273 {
274 TraitBaseSpellbook traitBaseSpellbook = item.trait as TraitBaseSpellbook;
275 if (item.trait is TraitAncientbook && item.isOn)
276 {
277 continue;
278 }
279 int c_charges = item.c_charges;
280 for (int i = 0; i < c_charges; i++)
281 {
282 if (EClass.pc.isDead)
283 {
284 return;
285 }
286 int num = traitBaseSpellbook.GetActDuration(EClass.pc) + 1;
287 bool flag = false;
288 for (int j = 0; j < num; j++)
289 {
290 if (!traitBaseSpellbook.TryProgress(new AIProgress
291 {
292 owner = EClass.pc
293 }))
294 {
295 flag = true;
296 if (!EClass.pc.isDead)
297 {
298 break;
299 }
300 return;
301 }
302 }
303 if (!flag)
304 {
305 traitBaseSpellbook.OnRead(EClass.pc);
306 }
307 }
308 }
309 }
310 }
311 if (EClass.pc.isDead || !slept)
312 {
313 return;
314 }
317 if (traitPillow is TraitPillowGod traitPillowGod)
318 {
319 traitPillowGod.Deity.Talk("morning");
320 }
321 foreach (Chara member in EClass.pc.party.members)
322 {
323 if (traitPillow is TraitPillowJure)
324 {
325 member.SAN.Mod(-15);
326 }
327 }
328 static void TryPick(Thing t, ItemPosition pos)
329 {
330 if (t != null)
331 {
332 t = EClass._map.FindThing(t.uid);
333 if (t != null && t.ExistsOnMap && !t.isNPCProperty)
334 {
335 if (pos != null)
336 {
337 Card card = ((pos.uidContainer == EClass.pc.uid) ? ((Card)EClass.pc) : ((Card)EClass.pc.things.Find(pos.uidContainer)));
338 if (card != null)
339 {
340 EClass.pc.PlaySound("pick_thing");
341 EClass.pc.Say("pick_thing", EClass.pc, t);
342 t = card.AddThing(t, tryStack: false, pos.invX, pos.invY);
343 t.invX = pos.invX;
344 t.invY = pos.invY;
346 return;
347 }
348 }
349 EClass.pc.Pick(t);
351 }
352 }
353 }
354 }
355}
Emo2
Definition: Emo2.cs:2
Chara target
Definition: AI_Fuck.cs:12
static void Ride(Chara host, Chara t, bool parasite=false, bool talk=true)
Definition: ActRide.cs:47
static void Unride(Chara host, Chara mount, bool talk=true)
Definition: ActRide.cs:101
bool GetBool(int id)
Definition: BaseCard.cs:15
void Mod(int a, bool force=false)
void RefreshSprite()
Definition: Card.cs:11
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5505
string id
Definition: Card.cs:31
bool isNPCProperty
Definition: Card.cs:538
bool HasElement(int ele, int req=1)
Definition: Card.cs:5566
bool isRestrained
Definition: Card.cs:550
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
int c_lockLv
Definition: Card.cs:936
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3848
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6326
bool ExistsOnMap
Definition: Card.cs:2021
Point pos
Definition: Card.cs:55
int uid
Definition: Card.cs:118
Trait trait
Definition: Card.cs:49
void ModCharge(int a, bool destroy=false)
Definition: Card.cs:3795
void Destroy()
Definition: Card.cs:4783
bool noMove
Definition: Card.cs:754
ThingContainer things
Definition: Card.cs:34
int Evalue(int ele)
Definition: Card.cs:2507
int Dist(Card c)
Definition: Card.cs:7235
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
Definition: Card.cs:5479
int dir
Definition: Card.cs:142
int c_charges
Definition: Card.cs:1241
CardRenderer renderer
Definition: Card.cs:57
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6423
Definition: Chara.cs:10
SourceCategory.Row GetFavCat()
Definition: Chara.cs:7476
Stats sleepiness
Definition: Chara.cs:1008
AIAct ai
Definition: Chara.cs:198
ConSuspend conSuspend
Definition: Chara.cs:104
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8566
override bool IsPC
Definition: Chara.cs:608
Chara host
Definition: Chara.cs:33
bool knowFav
Definition: Chara.cs:409
Party party
Definition: Chara.cs:43
bool HasCondition(string alias)
Definition: Chara.cs:8723
AIAct SetAI(AIAct g)
Definition: Chara.cs:8196
bool IsIdle
Definition: Chara.cs:849
override bool IsDisabled
Definition: Chara.cs:581
override bool isSynced
Definition: Chara.cs:687
override bool IsPCFaction
Definition: Chara.cs:667
Stats SAN
Definition: Chara.cs:1010
Stats mana
Definition: Chara.cs:1006
Stats stamina
Definition: Chara.cs:998
SourceThing.Row GetFavFood()
Definition: Chara.cs:7456
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
override void SetDir(int d)
Definition: Chara.cs:3282
bool isDead
Definition: Chara.cs:385
TimeTable.Span CurrentSpan
Definition: Chara.cs:832
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4017
override bool IsPCC
Definition: Chara.cs:678
SourceRace.Row race
Definition: Chara.cs:460
int uidParasite
Definition: ConSleep.cs:32
override Emo2 EmoIcon
Definition: ConSleep.cs:34
bool succubusChecked
Definition: ConSleep.cs:5
int pcSleep
Definition: ConSleep.cs:8
Thing pcPillow
Definition: ConSleep.cs:14
override void SetOwner(Chara _owner, bool onDeserialize=false)
Definition: ConSleep.cs:43
static void SuccubusSleep(Chara tg)
Definition: ConSleep.cs:212
bool slept
Definition: ConSleep.cs:26
bool pickup
Definition: ConSleep.cs:23
ItemPosition posBed
Definition: ConSleep.cs:17
override void OnBeforeStart()
Definition: ConSleep.cs:53
override bool ConsumeTurn
Definition: ConSleep.cs:36
override int GetPhase()
Definition: ConSleep.cs:38
ItemPosition posPillow
Definition: ConSleep.cs:20
override void OnRemoved()
Definition: ConSleep.cs:228
override void Tick()
Definition: ConSleep.cs:62
static void SuccubusVisit(Chara tg)
Definition: ConSleep.cs:172
int uidRide
Definition: ConSleep.cs:29
Thing pcBed
Definition: ConSleep.cs:11
Definition: EClass.cs:5
static int rnd(int a)
Definition: EClass.cs:58
static Zone _zone
Definition: EClass.cs:20
static Map _map
Definition: EClass.cs:18
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static UI ui
Definition: EClass.cs:16
int uidContainer
Definition: ItemPosition.cs:6
static void SetDirty(Thing t)
Thing FindThing(Func< Thing, bool > func)
Definition: Map.cs:2577
Chara FindChara(string id)
Definition: Map.cs:2553
List< Chara > charas
Definition: Map.cs:81
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
List< Chara > members
Definition: Party.cs:18
void DreamSpell()
Definition: Player.cs:1672
RecipeManager recipes
Definition: Player.cs:1017
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1120
void OnSleep(bool ehe=false)
virtual bool IsRegion
Definition: Spatial.cs:501
virtual void Mod(int a)
Definition: Stats.cs:135
override int GetPhase()
Definition: Stats.cs:117
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Thing Find(int uid)
Definition: Thing.cs:8
override bool TryProgress(AIProgress p)
override void OnRead(Chara c)
override int GetActDuration(Chara c)
Card owner
Definition: Trait.cs:26
bool isStarted
Definition: Zone.cs:70