Elin Decompiled Documentation EA 23.102 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 bool CancelAI => false;
39
40 public override int GetPhase()
41 {
42 return 0;
43 }
44
45 public override void SetOwner(Chara _owner, bool onDeserialize = false)
46 {
47 base.SetOwner(_owner);
48 owner.conSleep = this;
49 if (owner.renderer != null)
50 {
52 }
53 }
54
55 public override void OnBeforeStart()
56 {
57 TraitPillow traitPillow = owner.pos.FindThing<TraitPillow>();
58 if (traitPillow != null)
59 {
60 owner.Say("pillow", owner, traitPillow.owner);
61 }
62 }
63
64 public override void Tick()
65 {
66 if (!succubusChecked && EClass._zone.isStarted && (base.value > 50 || pcSleep != 0))
67 {
69 succubusChecked = true;
70 }
71 if (owner.IsPC && pcSleep > 0)
72 {
74 {
75 if (EClass.pc.ride != null)
76 {
78 ActRide.Unride(EClass.pc, parasite: false, talk: false);
79 }
80 if (EClass.pc.parasite != null)
81 {
83 ActRide.Unride(EClass.pc, parasite: true, talk: false);
84 }
85 }
86 pcSleep--;
87 if (pcSleep != 0)
88 {
89 return;
90 }
91 int num = EClass.pc.sleepiness.GetPhase();
92 int num2 = ((num >= 3) ? 12 : ((num >= 2) ? 10 : ((num >= 1) ? 7 : 5)));
93 num2 += EClass.pc.stamina.GetPhase() switch
94 {
95 2 => 2,
96 1 => 3,
97 0 => 4,
98 _ => 0,
99 };
100 num2 += EClass.rnd(3) - EClass.rnd(2);
102 if (EClass.pc.isDead)
103 {
104 return;
105 }
106 base.value = 1;
107 slept = true;
108 if (!EClass.pc.pos.IsInSpot<TraitPillowStrange>())
109 {
110 foreach (Chara chara in EClass._map.charas)
111 {
112 if (chara.host != null || chara.noMove || chara.conSuspend != null || chara.isRestrained || chara.IsPC)
113 {
114 continue;
115 }
116 bool flag = chara.GetBool(123);
117 if (!flag && chara.IsPCFaction && chara.race.tag.Contains("sleepBeside") && EClass.rnd(5) == 0)
118 {
119 flag = true;
120 }
121 if (flag)
122 {
123 chara.MoveImmediate(EClass.pc.pos);
124 chara.SetDir(chara.IsPCC ? EClass.pc.dir : 0);
125 chara.Say("sleep_beside", chara, EClass.pc);
126 if (!chara.HasCondition<ConSleep>())
127 {
128 chara.AddCondition<ConSleep>(20 + EClass.rnd(25), force: true);
129 }
130 }
131 }
132 }
133 foreach (Chara member in EClass.pc.party.members)
134 {
135 if (!member.IsPC && !member.HasCondition<ConSleep>())
136 {
137 member.AddCondition<ConSleep>(5 + EClass.rnd(10), force: true);
138 }
139 }
140 owner.RemoveCondition<ConBleed>();
141 owner.RemoveCondition<ConPoison>();
142 owner.RemoveCondition<ConMiasma>();
143 EClass.ui.AddLayer<LayerSleep>().Sleep(num2, pcBed, pcPillow);
144 return;
145 }
146 if (EClass.rnd(50) == 0 && !owner.IsPC)
147 {
148 if (EClass.rnd(10) == 0)
149 {
150 owner.Talk("sleepFav", (EClass.rnd(2) == 0) ? owner.GetFavCat().GetName().ToLower() : owner.GetFavFood().GetName());
151 if (!owner.knowFav && owner.isSynced)
152 {
153 Msg.Say("noteFav", owner);
154 owner.knowFav = true;
155 }
156 }
157 else
158 {
159 owner.Talk("sleep");
160 }
161 }
162 if (!(owner.ai is GoalSleep) || owner.CurrentSpan != TimeTable.Span.Sleep)
163 {
164 owner.HealHP(EClass.rnd(4) + 1);
165 owner.mana.Mod(EClass.rnd(3) + 1);
166 if (!owner.IsPC)
167 {
168 owner.stamina.Mod(EClass.rnd(2) + 1);
169 }
170 Mod(-1);
171 }
172 }
173
174 public static void SuccubusVisit(Chara tg)
175 {
176 if (tg.pos.IsInSpot<TraitPillowStrange>())
177 {
178 return;
179 }
180 foreach (Chara chara in EClass._map.charas)
181 {
182 if (chara == tg || chara.IsPC || EClass.rnd(3) != 0 || chara.IsDisabled || !chara.IsIdle)
183 {
184 continue;
185 }
186 Thing thing = chara.things.Find<TraitDreamBug>();
187 if ((!chara.HasElement(1216) && thing == null) || chara.host != null || (tg.IsPC && thing == null && EClass.rnd(200) != 0))
188 {
189 continue;
190 }
191 chara.Teleport(tg.pos);
192 if (chara.Dist(tg.pos) > 2)
193 {
194 continue;
195 }
196 if (thing != null)
197 {
198 tg.Say("dreambug_teleport", chara, tg);
199 thing.ModCharge(-1);
200 if (thing.c_charges <= 0)
201 {
202 tg.Say("dreambug_destroy", chara, thing);
203 thing.Destroy();
204 }
205 }
206 chara.SetAI(new AI_Fuck
207 {
208 target = tg,
209 succubus = true
210 });
211 }
212 }
213
214 public static void SuccubusSleep(Chara tg)
215 {
216 EClass._map.charas.ForeachReverse(delegate(Chara c)
217 {
218 if (c.ai is AI_Fuck { IsRunning: not false } aI_Fuck && aI_Fuck.target == tg)
219 {
220 aI_Fuck.Finish();
221 aI_Fuck.Cancel();
222 if (!c.HasCondition<ConSleep>())
223 {
224 c.AddCondition<ConSleep>(100 + EClass.rnd(100), force: true);
225 }
226 }
227 });
228 }
229
230 public override void OnRemoved()
231 {
232 owner.conSleep = null;
233 owner.renderer.RefreshSprite();
234 owner.renderer.SetFirst(first: true, owner.pos.PositionAuto());
235 if (!owner.IsPC)
236 {
237 owner.sleepiness.Set(0);
238 return;
239 }
240 if (owner.IsPC)
241 {
242 if (uidRide != 0)
243 {
244 Chara chara = EClass._map.FindChara(uidRide);
245 if (chara != null)
246 {
247 ActRide.Ride(EClass.pc, chara, parasite: false, talk: false);
248 }
249 }
250 if (uidParasite != 0)
251 {
252 Chara chara2 = EClass._map.FindChara(uidParasite);
253 if (chara2 != null)
254 {
255 ActRide.Ride(EClass.pc, chara2, parasite: true, talk: false);
256 }
257 }
258 }
259 if (owner.isDead)
260 {
261 return;
262 }
263 TraitPillow traitPillow = (pcPillow?.trait as TraitPillow) ?? EClass.pc.pos.FindThing<TraitPillow>();
264 if (pickup)
265 {
266 TryPick(pcBed, posBed);
267 TryPick(pcPillow, posPillow);
268 }
269 if (slept)
270 {
272 if (thing != null && thing.c_lockLv == 0 && !EClass._zone.IsRegion)
273 {
274 foreach (Thing item in thing.things.List((Thing _t) => _t.trait is TraitSpellbook || _t.trait is TraitAncientbook || _t.id == "234"))
275 {
276 TraitBaseSpellbook traitBaseSpellbook = item.trait as TraitBaseSpellbook;
277 if (item.trait is TraitAncientbook && item.isOn)
278 {
279 continue;
280 }
281 int c_charges = item.c_charges;
282 for (int i = 0; i < c_charges; i++)
283 {
284 if (EClass.pc.isDead)
285 {
286 return;
287 }
288 int num = traitBaseSpellbook.GetActDuration(EClass.pc) + 1;
289 bool flag = false;
290 for (int j = 0; j < num; j++)
291 {
292 if (!traitBaseSpellbook.TryProgress(new AIProgress
293 {
294 owner = EClass.pc
295 }))
296 {
297 flag = true;
298 if (!EClass.pc.isDead)
299 {
300 break;
301 }
302 return;
303 }
304 }
305 if (!flag)
306 {
307 traitBaseSpellbook.OnRead(EClass.pc);
308 }
309 }
310 }
311 }
312 }
313 if (EClass.pc.isDead || !slept)
314 {
315 return;
316 }
319 if (traitPillow is TraitPillowGod traitPillowGod)
320 {
321 traitPillowGod.Deity.Talk("morning");
322 }
323 foreach (Chara member in EClass.pc.party.members)
324 {
325 if (traitPillow is TraitPillowJure)
326 {
327 member.SAN.Mod(-15);
328 }
329 }
330 static void TryPick(Thing t, ItemPosition pos)
331 {
332 if (t != null)
333 {
334 t = EClass._map.FindThing(t.uid);
335 if (t != null && t.ExistsOnMap && !t.isNPCProperty)
336 {
337 if (pos != null)
338 {
339 Card card = ((pos.uidContainer == EClass.pc.uid) ? ((Card)EClass.pc) : ((Card)EClass.pc.things.Find(pos.uidContainer)));
340 if (card != null)
341 {
342 EClass.pc.PlaySound("pick_thing");
343 EClass.pc.Say("pick_thing", EClass.pc, t);
344 t = card.AddThing(t, tryStack: false, pos.invX, pos.invY);
345 t.invX = pos.invX;
346 t.invY = pos.invY;
348 return;
349 }
350 }
351 EClass.pc.Pick(t);
353 }
354 }
355 }
356 }
357}
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, bool parasite=false, 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:5153
string id
Definition: Card.cs:31
bool isNPCProperty
Definition: Card.cs:526
bool HasElement(int ele, int req=1)
Definition: Card.cs:5214
bool isRestrained
Definition: Card.cs:538
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5404
int c_lockLv
Definition: Card.cs:924
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3680
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:5949
bool ExistsOnMap
Definition: Card.cs:1961
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:3627
void Destroy()
Definition: Card.cs:4538
bool noMove
Definition: Card.cs:742
ThingContainer things
Definition: Card.cs:34
int Dist(Card c)
Definition: Card.cs:6777
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
Definition: Card.cs:5127
int dir
Definition: Card.cs:142
int c_charges
Definition: Card.cs:1205
CardRenderer renderer
Definition: Card.cs:57
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6046
Definition: Chara.cs:10
SourceCategory.Row GetFavCat()
Definition: Chara.cs:7274
Stats sleepiness
Definition: Chara.cs:965
AIAct ai
Definition: Chara.cs:187
ConSuspend conSuspend
Definition: Chara.cs:101
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8415
override bool IsPC
Definition: Chara.cs:597
Chara host
Definition: Chara.cs:33
bool knowFav
Definition: Chara.cs:398
Party party
Definition: Chara.cs:43
bool HasCondition(string alias)
Definition: Chara.cs:8568
AIAct SetAI(AIAct g)
Definition: Chara.cs:8045
bool IsIdle
Definition: Chara.cs:806
override bool IsDisabled
Definition: Chara.cs:570
override bool isSynced
Definition: Chara.cs:676
override bool IsPCFaction
Definition: Chara.cs:656
Stats SAN
Definition: Chara.cs:967
Stats mana
Definition: Chara.cs:963
Stats stamina
Definition: Chara.cs:955
SourceThing.Row GetFavFood()
Definition: Chara.cs:7254
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
override void SetDir(int d)
Definition: Chara.cs:3198
bool isDead
Definition: Chara.cs:374
TimeTable.Span CurrentSpan
Definition: Chara.cs:789
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:3920
override bool IsPCC
Definition: Chara.cs:667
SourceRace.Row race
Definition: Chara.cs:449
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:45
static void SuccubusSleep(Chara tg)
Definition: ConSleep.cs:214
override bool CancelAI
Definition: ConSleep.cs:38
bool slept
Definition: ConSleep.cs:26
bool pickup
Definition: ConSleep.cs:23
ItemPosition posBed
Definition: ConSleep.cs:17
override void OnBeforeStart()
Definition: ConSleep.cs:55
override bool ConsumeTurn
Definition: ConSleep.cs:36
override int GetPhase()
Definition: ConSleep.cs:40
ItemPosition posPillow
Definition: ConSleep.cs:20
override void OnRemoved()
Definition: ConSleep.cs:230
override void Tick()
Definition: ConSleep.cs:64
static void SuccubusVisit(Chara tg)
Definition: ConSleep.cs:174
int uidRide
Definition: ConSleep.cs:29
Thing pcBed
Definition: ConSleep.cs:11
Definition: EClass.cs:5
static int rnd(int a)
Definition: EClass.cs:50
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:2570
Chara FindChara(string id)
Definition: Map.cs:2546
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:1553
RecipeManager recipes
Definition: Player.cs:898
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1104
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