Elin Decompiled Documentation EA 23.254 Nightly Patch 1
Loading...
Searching...
No Matches
AI_Idle.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5
6public class AI_Idle : AIAct
7{
8 public enum Behaviour
9 {
10 Default,
11 NoMove
12 }
13
14 public int maxRepeat = 10;
15
16 public int moveFailCount;
17
18 private static List<BaseArea> _listRoom = new List<BaseArea>();
19
20 public override bool IsIdle => !base.IsChildRunning;
21
22 public override bool InformCancel => false;
23
24 public override int MaxRestart => maxRepeat;
25
26 public override void OnStart()
27 {
28 owner.SetTempHand(-1, -1);
29 owner.ShowEmo();
30 }
31
32 public override IEnumerable<Status> Run()
33 {
34 while (true)
35 {
36 if (owner.held != null)
37 {
39 }
40 if (owner.nextUse != null)
41 {
42 Thing nextUse = owner.nextUse;
43 owner.nextUse = null;
44 if (nextUse.parent == owner && !nextUse.isDestroyed)
45 {
46 owner.TryUse(nextUse);
47 }
48 yield return KeepRunning();
49 }
51 {
52 if (EClass.rnd(5) == 0)
53 {
54 owner.Talk("onFire");
55 }
57 {
58 yield return Restart();
59 }
60 }
61 if (EClass.rnd(owner.IsPCParty ? 10 : 100) == 0 && owner.hunger.GetPhase() >= 3)
62 {
63 Thing thing = (owner.IsPCFaction ? owner.FindBestFoodToEat() : owner.things.Find((Thing a) => owner.CanEat(a, owner.IsPCFaction) && !a.c_isImportant, recursive: false));
64 if (thing == null && owner.IsPCFaction && EClass._zone.IsPCFaction)
65 {
67 if (thing != null)
68 {
69 owner.Pick(thing);
70 }
71 }
72 if (thing == null && !owner.IsPCFaction)
73 {
74 if (EClass.rnd(8) != 0)
75 {
76 owner.hunger.Mod(-30);
77 }
78 else if (!owner.things.IsFull())
79 {
80 thing = ThingGen.CreateFromCategory("food", EClass.rnd(EClass.rnd(60) + 1) + 10);
81 if (thing.trait.CanEat(owner))
82 {
83 thing.isNPCProperty = true;
84 thing = owner.AddThing(thing);
85 }
86 else
87 {
88 thing = null;
89 }
90 }
91 }
92 if (thing != null)
93 {
95 {
96 owner.InstantEat(thing, sound: false);
97 yield return Restart();
98 }
99 else if (thing.Num == 1 || !owner.things.IsFull())
100 {
101 yield return Do(new AI_Eat
102 {
103 target = thing
104 });
105 }
106 }
107 else if (!EClass._zone.IsRegion && owner.HasElement(1250))
108 {
109 Chara target = null;
110 for (int k = 0; k < 10; k++)
111 {
112 Chara chara = EClass._map.charas.RandomItem();
113 if (chara != owner && chara.Evalue(964) <= 0 && (target == null || (chara.c_bloodData != null && (target.c_bloodData == null || CraftUtil.GetFoodScore(chara.c_bloodData) > CraftUtil.GetFoodScore(target.c_bloodData)))))
114 {
115 target = chara;
116 }
117 }
118 if (target != null)
119 {
120 yield return DoGoto(target);
121 owner.UseAbility("ActBloodsuck", target);
122 yield return Success();
123 }
124 }
125 }
126 if (!EClass._zone.IsRegion)
127 {
128 if (EClass.rnd(10) == 0 && owner.ability.Has(6627) && ((float)owner.hp < (float)owner.MaxHP * 0.8f || EClass.rnd(10) == 0) && owner.GetNearbyCatToSniff() != null && !owner.HasCondition<ConHOT>())
129 {
131 yield return KeepRunning();
132 }
133 if (EClass.rnd(3) == 0 && owner.mana.value > 0)
134 {
135 Act act = null;
136 Act actRevive = null;
137 foreach (ActList.Item item in owner.ability.list.items)
138 {
139 Act act2 = item.act;
140 if (act2.id == 8430)
141 {
142 actRevive = act2;
143 }
144 string[] abilityType = act2.source.abilityType;
145 if (!abilityType.IsEmpty() && (abilityType[0] == "heal" || abilityType[0] == "hot"))
146 {
147 act = item.act;
148 }
149 }
150 if (act != null)
151 {
152 List<Chara> list = (owner.IsPCParty ? EClass.pc.party.members : new List<Chara> { owner });
153 foreach (Chara item2 in list)
154 {
155 if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(act.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
156 {
157 owner.UseAbility(act, item2);
158 yield return KeepRunning();
159 break;
160 }
161 }
162 }
163 if (actRevive != null && owner.IsPCFaction && EClass.game.cards.globalCharas.Where((KeyValuePair<int, Chara> a) => a.Value.isDead && a.Value.faction == EClass.pc.faction && !a.Value.isSummon && a.Value.c_wasInPcParty).ToList().Count > 0 && owner.UseAbility(actRevive.source.alias, owner))
164 {
165 yield return KeepRunning();
166 }
167 }
168 }
170 {
172 if (owner.sharedCheckTurn < 0 && EClass.rnd(EClass.debug.enable ? 2 : 20) == 0)
173 {
176 owner.sharedCheckTurn += (EClass.debug.enable ? 20 : 200);
177 }
178 }
179 if ((EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (owner.IsPCParty ? 10 : (owner.IsPCFaction ? 2 : 0)) > EClass.rnd(100))
180 {
181 Thing thing2 = owner.things.Find("polish_powder");
182 if (thing2 != null && EClass._map.props.installed.Find<TraitGrindstone>() != null)
183 {
184 foreach (Thing thing9 in owner.things)
185 {
186 if (!thing9.IsEquipment || thing9.encLV >= 0)
187 {
188 continue;
189 }
190 for (int l = 0; l < 5; l++)
191 {
192 if (thing9.encLV >= 0)
193 {
194 break;
195 }
196 owner.Say("polish", owner, thing9);
197 thing9.ModEncLv(1);
198 thing2.ModNum(-1);
199 if (thing2.isDestroyed)
200 {
201 break;
202 }
203 }
204 if (thing2.isDestroyed)
205 {
206 break;
207 }
208 }
209 }
210 }
211 if (owner.IsPCParty)
212 {
214 {
215 TraitShackle traitShackle = owner.pos.FindThing<TraitShackle>();
216 if (traitShackle != null && traitShackle.AllowTraining)
217 {
219 {
220 shackle = traitShackle
221 });
222 }
223 yield return Restart();
224 }
225 if (EClass.rnd(20) == 0)
226 {
227 Thing thing3 = owner.things.Find((Thing a) => a.parent == owner && a.isGifted && (a.category.id == "skillbook" || a.category.id == "ancientbook"));
228 if (thing3 != null && thing3.trait.CanRead(owner) && (thing3.Num == 1 || !owner.things.IsFull()))
229 {
230 yield return Do(new AI_Read
231 {
232 target = thing3
233 });
234 }
235 }
236 if (EClass.rnd(100) == 0 && !EClass._zone.IsRegion && owner.HasElement(1227))
237 {
238 List<Chara> list2 = new List<Chara>();
239 foreach (Chara member in EClass.pc.party.members)
240 {
241 if (member.Evalue(1227) > 0)
242 {
243 list2.Add(member);
244 }
245 }
246 if (list2.Count > 2 + EClass.pc.party.EvalueTotal(1272, (Chara c) => c.IsPC || c.faith == EClass.game.religions.Harmony))
247 {
248 list2.Remove(owner);
249 owner.SetEnemy(list2.RandomItem());
250 yield return Success();
251 }
252 }
253 if (EClass.rnd(150) == 0 && owner.host != null && owner.host.parasite == owner && owner.GetInt(108) == 1)
254 {
255 owner.host.PlaySound("whip");
256 owner.host.Say("use_whip3", owner, owner.host);
257 owner.Talk("insult");
258 owner.host.PlayAnime(AnimeID.Shiver);
259 owner.host.DamageHP(5 + EClass.rndHalf(owner.host.MaxHP / 5), 919, 100, AttackSource.Condition);
261 yield return KeepRunning();
262 }
263 if (EClass.rnd(EClass.debug.enable ? 2 : 20) == 0 && owner.CanSee(EClass.pc) && !(EClass.pc.ai is AI_Eat))
264 {
266 }
267 if (owner.isSynced && EClass.rnd((owner.host == null) ? 200 : 150) == 0 && owner.GetInt(106) == 0)
268 {
269 if (EClass.rnd(2) == 0 && owner.GetInt(108) == 1)
270 {
271 owner.Talk("insult");
272 }
273 else
274 {
276 }
277 }
278 if (EClass.rnd(100) == 0 && EClass._zone.IsTown)
279 {
281 }
282 if ((EClass.rnd(20) == 0 || EClass.debug.enable) && owner.GetCurrency() >= 500)
283 {
284 bool flag = EClass._zone.IsTown;
286 {
287 foreach (Chara member2 in EClass._zone.branch.members)
288 {
289 if (member2.ExistsOnMap && member2.trait is TraitTrainer)
290 {
291 flag = true;
292 }
293 }
294 }
295 if (flag)
296 {
297 bool flag2 = false;
298 foreach (Element value in owner.elements.dict.Values)
299 {
300 if (!(value.source.category != "skill") && value.vTempPotential < 900)
301 {
302 flag2 = true;
303 break;
304 }
305 }
306 if (flag2)
307 {
308 int num = owner.GetCurrency();
309 if (num >= 20000)
310 {
311 num = 20000;
312 }
313 owner.PlaySound("pay");
314 int num2 = num / 200;
315 foreach (Element value2 in owner.elements.dict.Values)
316 {
317 if (!(value2.source.category != "skill"))
318 {
319 int num3 = num2 * 100 / (100 + (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) * (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) / 100);
320 num3 += 1 + EClass.rnd(3);
321 owner.elements.ModTempPotential(value2.id, Mathf.Max(1, num3), 9999);
322 }
323 }
324 Msg.Say("party_train", owner, Lang._currency(num));
325 owner.PlaySound("ding_potential");
326 owner.ModCurrency(-num);
327 }
328 }
329 }
330 if (EClass.rnd(100) == 0 && EClass.pc.ai is AI_Fish && owner.stamina.value > 0 && owner.things.Find<TraitToolFishing>() != null)
331 {
332 Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(0, 3);
333 if (randomPointInRadius != null)
334 {
335 randomPointInRadius = AI_Fish.GetFishingPoint(randomPointInRadius);
336 if (randomPointInRadius.IsValid)
337 {
338 yield return Do(new AI_Fish
339 {
340 pos = randomPointInRadius
341 });
342 }
343 }
344 }
345 }
346 if (owner.c_uidMaster != 0)
347 {
348 Chara chara2 = owner.master;
349 if (chara2 == null || !chara2.IsAliveInCurrentZone)
350 {
351 chara2 = owner.FindMaster();
352 }
353 if (chara2 != null && chara2.IsAliveInCurrentZone)
354 {
355 if (owner.enemy == null)
356 {
357 owner.SetEnemy(chara2.enemy);
358 }
359 int num4 = owner.Dist(chara2.pos);
360 if (owner.source.aiIdle != "root" && num4 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
361 {
362 if (owner.HasAccess(chara2.pos))
363 {
364 owner.TryMoveTowards(chara2.pos);
365 }
366 yield return KeepRunning();
367 continue;
368 }
369 }
370 }
371 Party party = owner.party;
372 if (party == null || party.leader == owner || !party.leader.IsAliveInCurrentZone || owner.host != null || !EClass._zone.PetFollow)
373 {
374 break;
375 }
376 if (owner.source.aiIdle == "root")
377 {
378 yield return KeepRunning();
379 continue;
380 }
382 {
383 yield return KeepRunning();
384 continue;
385 }
386 if (owner.HasAccess(party.leader.pos) && owner.TryMoveTowards(party.leader.pos) == Card.MoveResult.Fail && owner.Dist(party.leader) > 4)
387 {
389 bool flag3 = (EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (EClass.pc.enemy == null || !EClass.pc.enemy.IsAliveInCurrentZone);
390 if (moveFailCount >= (flag3 ? 100 : 10))
391 {
392 owner.Teleport(party.leader.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), silent: false, force: true);
393 moveFailCount = 0;
394 }
395 }
396 else
397 {
398 moveFailCount = 0;
399 }
400 yield return KeepRunning();
401 }
402 if (EClass._zone.IsNefia && EClass._zone.Boss == owner && EClass.rnd(20) == 0)
403 {
405 }
406 if (EClass._zone.IsRegion && EClass.rnd(10) != 0)
407 {
408 yield return Restart();
409 }
410 if (((owner.homeBranch != null && owner.homeBranch == EClass.Branch && EClass.rnd(100) == 0) || (owner.IsGuest() && EClass.rnd(50) == 0)) && owner.FindBed() == null)
411 {
413 }
414 if (!EClass._zone.IsRegion)
415 {
416 switch (owner.id)
417 {
418 case "azzrasizzle":
419 case "geist":
420 {
421 if (EClass.rnd(20) != 0)
422 {
423 break;
424 }
425 Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
426 if (nearestPoint == null)
427 {
428 break;
429 }
430 foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion && _c.id != "cocoon"))
431 {
432 item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
433 }
434 if (owner != null)
435 {
437 {
438 EClass.pc.ai.Cancel();
439 }
440 owner.Teleport(nearestPoint);
441 }
442 yield return Success();
443 break;
444 }
445 case "spider_queen":
446 {
447 if (EClass.rnd(20) != 0 || !owner.CanDuplicate() || EClass._zone.IsUserZone)
448 {
449 break;
450 }
451 int i = 0;
452 owner.pos.ForeachNeighbor(delegate(Point p)
453 {
454 if (p.HasChara && p.FirstChara.id == "cocoon")
455 {
456 i++;
457 }
458 });
459 if (i < 2)
460 {
461 Point randomPoint2 = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
462 if (randomPoint2 != null)
463 {
464 Chara chara3 = EClass._zone.SpawnMob("cocoon", randomPoint2);
465 owner.Say("layegg", owner);
467 }
468 }
469 break;
470 }
471 case "mech_scarab":
472 {
473 if (EClass.rnd(20) != 0 || !owner.CanDuplicate() || EClass._zone.IsUserZone)
474 {
475 break;
476 }
477 int j = 0;
478 owner.pos.ForeachNeighbor(delegate(Point p)
479 {
480 if (p.HasChara && p.FirstChara.id == "mech_scarab")
481 {
482 j++;
483 }
484 });
485 if (j >= 2)
486 {
487 break;
488 }
489 Point randomPoint = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
490 if (randomPoint != null)
491 {
492 Card c2 = EClass._zone.AddCard(owner.Duplicate(), randomPoint);
493 if (randomPoint.Distance(EClass.pc.pos) < EClass.pc.GetHearingRadius())
494 {
495 Msg.Say("self_dupe", owner, c2);
496 }
497 }
498 break;
499 }
500 }
501 }
502 if (owner.IsMinion && owner.master != null && owner.master.id == "keeper_garden" && !(owner.master.ai is GoalCombat))
503 {
505 yield return Success();
506 }
508 {
509 Room room = owner.pos.cell.room;
510 if (room != null)
511 {
512 Point point = null;
513 if (owner.memberType == FactionMemberType.Guest && room.data.accessType != 0)
514 {
515 point = FindMovePoint(BaseArea.AccessType.Public);
516 }
517 else if (owner.memberType == FactionMemberType.Default && room.data.accessType == BaseArea.AccessType.Private)
518 {
519 point = FindMovePoint(BaseArea.AccessType.Resident) ?? FindMovePoint(BaseArea.AccessType.Public);
520 }
521 if (point != null)
522 {
523 yield return DoGoto(point);
524 }
525 }
526 }
528 {
529 if (owner.IsPCFaction && owner.GetInt(32) + 4320 < EClass.world.date.GetRaw())
530 {
531 if (owner.GetInt(32) != 0 && Zone.okaerinko < 10)
532 {
533 owner.Talk("welcomeBack");
534 Zone.okaerinko++;
535 }
537 }
539 {
540 if (EClass.rnd(5) == 0 && owner.hostility >= Hostility.Neutral && EClass.pc.IsPCC && EClass.pc.pccData.state == PCCState.Undie && !EClass.pc.pos.cell.IsTopWaterAndNoSnow)
541 {
542 owner.Talk("pervert3");
543 }
544 else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
545 {
546 bool flag4 = EClass._zone is Zone_Derphy;
547 string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
548 if (!text.IsEmpty())
549 {
550 owner.Talk(text);
551 }
552 if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
553 {
554 Thing t2 = ThingGen.Create("stone");
555 AI_PlayMusic.ignoreDamage = true;
557 AI_PlayMusic.ignoreDamage = false;
558 }
559 }
560 else
561 {
562 owner.TalkTopic("fov");
563 }
564 owner.turnLastSeen = EClass.player.stats.turns;
565 }
566 }
567 if (EClass.rnd(25) == 0 && owner.IsInMutterDistance())
568 {
570 {
571 owner.PlayAnime(AnimeID.Shiver);
572 }
574 if (tC == null || tC.pop.items.Count == 0)
575 {
576 if (owner.noMove)
577 {
578 foreach (Thing thing10 in owner.pos.Things)
579 {
580 if (thing10.IsInstalled && thing10.trait is TraitGeneratorWheel)
581 {
582 owner.Talk("labor");
583 owner.PlayAnime(AnimeID.Shiver);
584 yield return Restart();
585 }
586 }
587 }
588 if (owner.isDrunk && (owner.race.id == "cat" || owner.id == "sailor"))
589 {
590 owner.Talk("drunk_cat");
591 }
592 else if (owner.isRestrained)
593 {
594 owner.Talk("restrained");
595 }
596 else if (owner.GetInt(106) == 0 && !owner.IsPCParty)
597 {
598 if (owner.HasElement(1232) && EClass.rnd(4) == 0)
599 {
600 owner.Talk("baby");
601 }
602 else if (EClass.rnd((owner.host == null) ? 2 : 10) == 0 && owner.isSynced && owner.TalkTopic().IsEmpty())
603 {
604 owner.Talk(owner.pos.IsHotSpring ? "hotspring" : "idle");
605 }
606 }
607 }
608 }
609 if (EClass.rnd(8) == 0 && owner.race.id == "chicken")
610 {
611 owner.PlaySound("Animal/Chicken/chicken");
612 }
613 if (EClass.rnd(80) == 0 && owner.race.id == "cat")
614 {
615 owner.PlaySound("Animal/Cat/cat");
616 }
617 if (owner.trait.IdAmbience != null && owner.IsInMutterDistance(15))
618 {
619 float mtp = 1f;
620 Room room2 = owner.Cell.room;
621 Room room3 = EClass.pc.Cell.room;
622 if (room2 != room3 && room3 != null)
623 {
624 mtp = ((room2?.lot != room3?.lot) ? 0.4f : 0.7f);
625 }
626 EClass.Sound.PlayAmbience(owner.trait.IdAmbience, owner.pos.Position(), mtp);
627 }
628 if (EClass.rnd(2000) == 0 && owner.IsHuman && (owner.host == null || owner.host.ride != owner))
629 {
630 Thing thing4 = owner.things.Find((Thing a) => !a.IsNegativeGift && a.trait.CanDrink(owner), recursive: false);
631 if (thing4 != null && thing4.trait is TraitPotion && owner.IsPCParty)
632 {
633 thing4 = null;
634 }
635 bool flag5 = EClass.Branch != null && EClass.Branch.policies.IsActive(2503);
636 if (owner.homeBranch != null && owner.homeBranch.policies.IsActive(2503))
637 {
638 flag5 = true;
639 }
640 if (thing4 == null && !flag5)
641 {
642 thing4 = ThingGen.Create("crimAle");
643 owner.Drink(thing4);
644 }
645 if (thing4 != null && !thing4.isDestroyed)
646 {
647 owner.TryUse(thing4);
648 yield return Restart();
649 }
650 }
651 if (EClass.rnd(owner.IsPCParty ? 1000 : 200) == 0 && owner.isDrunk && (owner.isSynced || EClass.rnd(5) == 0))
652 {
653 DoSomethingToCharaInRadius(3, null, delegate(Chara c)
654 {
655 owner.Say("drunk_mess", owner, c);
656 owner.Talk("drunk_mess");
657 bool flag6 = EClass.rnd(5) == 0 && !c.IsPC;
658 if (c.IsPCParty && owner.hostility >= Hostility.Friend)
659 {
660 flag6 = false;
661 }
662 if (flag6)
663 {
664 owner.Say("drunk_counter", c, owner);
665 c.Talk("drunk_counter");
667 }
668 });
669 }
670 if (EClass.rnd(100) == 0 && owner.trait.CanFish && owner.stamina.value > 0)
671 {
672 Point fishingPoint = AI_Fish.GetFishingPoint(owner.pos);
673 if (fishingPoint.IsValid)
674 {
675 yield return Do(new AI_Fish
676 {
677 pos = fishingPoint
678 });
679 }
680 }
681 string idAct = owner.source.actIdle.RandomItem();
682 if (EClass.rnd(EClass.world.date.IsNight ? 1500 : 15000) == 0 && !owner.IsPCFaction && !owner.noMove)
683 {
684 owner.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
685 }
686 if (!owner.noMove)
687 {
688 if (EClass.rnd(3) == 0 && owner.IsCat)
689 {
690 Chara chara4 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem());
691 Thing thing5 = chara4.things.Find<TraitFoodChuryu>();
692 if (chara4 != owner && thing5 != null)
693 {
694 yield return Do(new AI_Churyu
695 {
696 churyu = thing5,
697 slave = chara4
698 });
699 }
700 }
701 if (EClass.rnd(100) == 0 && (owner.HasHobbyOrWork("Pet") || owner.HasHobbyOrWork("Fluffy")))
702 {
703 yield return Do(new AI_Mofu());
704 }
705 }
706 if (EClass.rnd((owner.host != null && owner.GetInt(106) != 0) ? 1000 : 40) == 0 && owner.IsHuman)
707 {
708 DoSomethingToNearChara((Chara c) => (!c.IsPCParty || EClass.rnd(5) == 0) && c.IsMofuable && !owner.IsHostile(c) && !c.IsInCombat && owner.CanSee(c), delegate(Chara c)
709 {
710 owner.Cuddle(c);
711 });
712 yield return KeepRunning();
713 }
714 if (EClass.rnd(100) == 0 && owner.trait is TraitBitch)
715 {
716 Chara chara5 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0);
717 if (chara5 != null)
718 {
719 yield return Do(new AI_Fuck
720 {
721 target = chara5,
722 variation = AI_Fuck.Variation.Bitch
723 });
724 }
725 }
726 if (EClass.rnd(50) == 0 && owner.trait is TraitBard)
727 {
728 yield return Do(new AI_PlayMusic());
729 }
730 if (EClass.rnd(4) == 0 && TryPerformIdleUse())
731 {
732 yield return Restart();
733 }
734 if (EClass.rnd(20) == 0 && owner.trait.IdleAct())
735 {
736 yield return Restart();
737 }
738 if (idAct == "janitor" && EClass.rnd(5) == 0)
739 {
740 DoSomethingToCharaInRadius(4, null, delegate(Chara c)
741 {
742 if (c.HasElement(1211) && !(EClass._zone is Zone_Casino))
743 {
744 owner.Talk("snail");
745 Thing t4 = ThingGen.Create("1142");
746 ActThrow.Throw(owner, c.pos, t4);
747 }
748 });
749 yield return Restart();
750 }
752 {
753 TraitShackle traitShackle2 = owner.pos.FindThing<TraitShackle>();
754 if (traitShackle2 != null && traitShackle2.AllowTraining)
755 {
757 {
758 shackle = traitShackle2
759 });
760 yield return Restart();
761 }
762 }
763 if (!owner.IsPCFactionOrMinion && EClass.rnd(owner.isSynced ? 50 : 2000) == 0 && owner.hostility == Hostility.Neutral && EClass.pc.party.HasElement(1563) && !owner.race.tag.Contains("animal") && EClass._zone.IsTown && !EClass._zone.IsPCFaction && !owner.HasCondition<ConIncognito>())
764 {
766 }
767 if (EClass.rnd(200) == 0 && !owner.noMove)
768 {
769 Point cleanPoint = AI_Clean.GetCleanPoint(owner, 4);
770 if (cleanPoint != null)
771 {
772 yield return Do(new AI_Clean
773 {
774 pos = cleanPoint
775 });
776 }
777 }
778 if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
779 {
780 foreach (Chara chara6 in EClass._map.charas)
781 {
782 if (EClass.rnd(3) != 0 && chara6 != owner && chara6.pos.cell.IsSnowTile && chara6.Dist(owner) <= 6 && Los.IsVisible(chara6, owner))
783 {
784 Thing t3 = ThingGen.Create("snow");
785 ActThrow.Throw(owner, chara6.pos, t3);
786 break;
787 }
788 }
789 }
790 if (EClass.rnd(EClass.debug.enable ? 3 : 30) == 0)
791 {
792 Thing thing6 = owner.things.Find<TraitBall>();
793 if (thing6 == null)
794 {
796 {
797 owner.pos.ForeachNeighbor(delegate(Point p)
798 {
799 Card card2 = p.FindThing<TraitBall>()?.owner;
800 if (card2 != null)
801 {
802 owner.Pick(card2.Thing);
803 }
804 });
805 }
806 }
807 else
808 {
809 foreach (Chara chara7 in EClass._map.charas)
810 {
811 if (EClass.rnd(3) != 0 && chara7 != owner && chara7.Dist(owner) <= 6 && chara7.Dist(owner) >= 3 && Los.IsVisible(chara7, owner))
812 {
813 ActThrow.Throw(owner, chara7.pos, thing6);
814 break;
815 }
816 }
817 }
818 }
819 if (EClass.rnd(20) == 0 && AI_Shopping.TryShop(owner, realtime: true))
820 {
821 yield return Restart();
822 }
823 if (EClass.rnd(20) == 0 && owner.IsPCFaction && AI_Shopping.TryRestock(owner, realtime: true))
824 {
825 yield return Restart();
826 }
828 if (owner.idleActTimer <= 0 && !owner.source.actIdle.IsEmpty())
829 {
830 owner.idleActTimer = 10 + EClass.rnd(50);
831 switch (idAct)
832 {
833 case "torture_snail":
834 DoSomethingToNearChara((Chara c) => c.race.id == "snail", delegate(Chara c)
835 {
836 owner.Say("use_whip3", owner, c);
837 owner.PlaySound("whip");
838 owner.Talk("insult");
839 c.PlayAnime(AnimeID.Shiver);
840 c.OnInsulted();
841 });
842 break;
843 case "buffMage":
844 if (EClass.rnd(2) == 0)
845 {
846 TryCast<ConHolyVeil>(EffectId.HolyVeil, 300 + EClass.rnd(300));
847 }
848 else
849 {
850 TryCast<ConLevitate>(EffectId.Levitate, 300 + EClass.rnd(300));
851 }
852 break;
853 case "buffThief":
854 TryCast<ConNightVision>(EffectId.CatsEye, 100 + EClass.rnd(100));
855 break;
856 case "buffGuildWatch":
857 TryCast<ConGravity>(EffectId.Gravity, 300 + EClass.rnd(300));
858 break;
859 case "buffHealer":
860 TryCast(EffectId.Heal);
861 break;
862 case "readBook":
863 {
864 if (EClass.rnd(2) == 0 || (owner.IsPCParty && EClass.rnd(20) != 0))
865 {
866 break;
867 }
868 List<Thing> list3 = owner.things.List((Thing a) => a.parent == owner && (a.category.id == "spellbook" || a.category.id == "ancientbook" || a.category.id == "skillbook"), onlyAccessible: true);
869 Thing thing7 = null;
870 if (list3.Count > 0)
871 {
872 thing7 = list3.RandomItem();
873 if (!thing7.trait.CanRead(owner))
874 {
875 thing7 = null;
876 }
877 }
878 if (thing7 == null)
879 {
880 if (owner.things.IsFull())
881 {
882 break;
883 }
884 thing7 = ThingGen.CreateFromCategory((EClass.rnd(5) != 0) ? "spellbook" : "ancientbook");
885 thing7.isNPCProperty = true;
886 }
887 if (!(thing7.id == "1084") || !owner.IsPCFaction)
888 {
889 if (!owner.HasElement(285))
890 {
891 owner.elements.ModBase(285, 1);
892 }
893 yield return Do(new AI_Read
894 {
895 target = thing7
896 });
897 }
898 break;
899 }
900 default:
901 if (LangGame.Has("idle_" + idAct))
902 {
903 IdleActText(idAct);
904 }
905 break;
906 }
907 yield return Restart();
908 }
909 if (owner.host != null)
910 {
911 yield return Restart();
912 }
914 {
916 {
917 yield return DoGoto(owner.orgPos);
918 }
919 yield return Restart();
920 }
922 {
923 yield return DoGoto(EClass.pc);
924 }
925 if (EClass.rnd(100) == 0 && !owner.IsPCFaction)
926 {
927 if (owner.id == "ashland" || owner.id == "fiama")
928 {
930 if (card != null)
931 {
932 yield return DoGotoSpot(card);
933 }
934 else
935 {
936 Room room4 = owner.FindRoom();
937 if (room4 != null)
938 {
939 yield return DoGoto(room4.GetRandomPoint().GetNearestPoint());
940 }
941 }
942 }
944 {
945 yield return DoGoto(owner.orgPos, 0, ignoreConnection: false, delegate
946 {
947 if (!EClass._zone.IsPCFaction)
948 {
949 owner.Teleport(owner.orgPos, silent: false, force: true);
950 }
951 return Status.Success;
952 });
953 }
954 }
955 if (EClass.rnd(100) == 0 && owner.id == "bee")
956 {
957 Thing thing8 = EClass._map.ListThing<TraitBeekeep>()?.RandomItem();
958 if (thing8 != null)
959 {
960 yield return DoGoto(thing8.pos);
961 }
962 }
963 if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
964 {
965 for (int m = 0; m < 100; m++)
966 {
967 Point randomPoint3 = EClass._map.GetRandomPoint();
968 if (randomPoint3.IsDeepWater && !randomPoint3.IsBlocked)
969 {
970 yield return DoGoto(randomPoint3);
971 break;
972 }
973 }
974 }
975 string aiIdle = owner.source.aiIdle;
976 if (!(aiIdle == "stand") && !(aiIdle == "root"))
977 {
978 if (EClass.rnd(15) == 0)
979 {
981 }
982 if (owner == null)
983 {
984 yield return Cancel();
985 }
986 }
987 if (EClass._zone.IsPCFaction && owner.IsPCFaction && !owner.IsPCParty && (owner.GetWork("Clean") != null || owner.GetWork("Chore") != null) && !(EClass.pc.ai is AI_UseCrafter))
988 {
989 AI_Haul aI_Haul = AI_Haul.TryGetAI(owner);
990 if (aI_Haul != null)
991 {
992 yield return Do(aI_Haul);
993 }
994 }
995 yield return Restart();
996 Point FindMovePoint(BaseArea.AccessType type)
997 {
998 for (int n = 0; n < 20; n++)
999 {
1000 Point randomPoint4 = owner.pos.GetRandomPoint(5 + n, requireLos: false);
1001 if (randomPoint4 != null && randomPoint4.IsInBounds && (randomPoint4.cell.room == null || randomPoint4.cell.room.data.accessType == type))
1002 {
1003 return randomPoint4;
1004 }
1005 }
1006 return null;
1007 }
1008 }
1009
1010 public void IdleActText(string id)
1011 {
1012 string text = "idle_" + id;
1013 owner.PlaySound(text);
1014 if (Lang.Game.map.ContainsKey(text))
1015 {
1016 owner.Say(text, owner);
1017 }
1018 }
1019
1020 public void TryCast<T>(EffectId id, int power = 100) where T : Condition
1021 {
1022 if (!owner.HasCondition<T>())
1023 {
1024 TryCast(id, power);
1025 }
1026 }
1027
1028 public void TryCast(EffectId id, int power = 100)
1029 {
1030 owner.Say("idle_cast", owner);
1031 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1032 }
1033
1035 {
1036 _listRoom.Clear();
1037 foreach (BaseArea item in ((IEnumerable<BaseArea>)EClass._map.rooms.listRoom).Concat((IEnumerable<BaseArea>)EClass._map.rooms.listArea))
1038 {
1039 if (item.type != null && item.type.uidCharas.Contains(owner.uid))
1040 {
1041 _listRoom.Add(item);
1042 }
1043 }
1044 return _listRoom.RandomItem();
1045 }
1046
1047 public Chara DoSomethingToNearChara(Func<Chara, bool> funcPickChara, Action<Chara> action = null)
1048 {
1049 List<Chara> list = owner.pos.ListCharasInNeighbor(delegate(Chara c)
1050 {
1051 if (c == owner || !owner.CanSee(c))
1052 {
1053 return false;
1054 }
1055 return funcPickChara == null || funcPickChara(c);
1056 });
1057 if (list.Count > 0)
1058 {
1059 Chara chara = list.RandomItem();
1060 action?.Invoke(chara);
1061 return chara;
1062 }
1063 return null;
1064 }
1065
1066 public Chara DoSomethingToCharaInRadius(int radius, Func<Chara, bool> funcPickChara, Action<Chara> action = null)
1067 {
1068 List<Chara> list = owner.pos.ListCharasInRadius(owner, radius, delegate(Chara c)
1069 {
1070 if (c == owner || !owner.CanSee(c))
1071 {
1072 return false;
1073 }
1074 return funcPickChara == null || funcPickChara(c);
1075 });
1076 if (list.Count > 0)
1077 {
1078 Chara chara = list.RandomItem();
1079 action?.Invoke(chara);
1080 return chara;
1081 }
1082 return null;
1083 }
1084
1085 public bool TryPerformIdleUse()
1086 {
1087 for (int i = 0; i < 10; i++)
1088 {
1089 Point randomPoint = owner.pos.GetRandomPoint(7, requireLos: true, allowChara: true, allowBlocked: true);
1090 if (randomPoint == null || randomPoint.detail == null)
1091 {
1092 continue;
1093 }
1094 foreach (Thing thing in randomPoint.detail.things)
1095 {
1096 if (thing.IsInstalled)
1097 {
1098 int num = owner.Dist(thing);
1099 if (EClass.rnd((owner.memberType == FactionMemberType.Guest) ? 5 : 50) == 0 && thing.HasTag(CTAG.tourism) && num <= 2)
1100 {
1101 owner.LookAt(thing);
1102 owner.Talk("nice_statue");
1103 return true;
1104 }
1105 if (EClass.rnd(thing.trait.IdleUseChance) == 0 && thing.trait.IdleUse(owner, num))
1106 {
1107 owner.LookAt(thing);
1108 return true;
1109 }
1110 }
1111 }
1112 }
1113 return false;
1114 }
1115}
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
ClearInventoryType
EditorTag
Definition: EditorTag.cs:2
EffectId
Definition: EffectId.cs:2
FactionMemberType
Hostility
Definition: Hostility.cs:2
MinionType
Definition: MinionType.cs:2
ThrowMethod
Definition: ThrowMethod.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
Definition: AIAct.cs:6
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
new Chara owner
Definition: AIAct.cs:14
Status
Definition: AIAct.cs:8
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:461
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
Status KeepRunning()
Definition: AIAct.cs:321
Status Restart()
Definition: AIAct.cs:237
static Point GetCleanPoint(Chara c, int r=-1, int tries=10)
Definition: AI_Clean.cs:9
Definition: AI_Eat.cs:5
static Point GetFishingPoint(Point p)
Definition: AI_Fish.cs:276
static AI_Haul TryGetAI(Chara c)
Definition: AI_Haul.cs:76
Chara DoSomethingToNearChara(Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1047
BaseArea GetRandomAssignedRoom()
Definition: AI_Idle.cs:1034
int moveFailCount
Definition: AI_Idle.cs:16
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
override IEnumerable< Status > Run()
Definition: AI_Idle.cs:32
override bool IsIdle
Definition: AI_Idle.cs:20
override bool InformCancel
Definition: AI_Idle.cs:22
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1066
int maxRepeat
Definition: AI_Idle.cs:14
override int MaxRestart
Definition: AI_Idle.cs:24
void IdleActText(string id)
Definition: AI_Idle.cs:1010
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1085
override void OnStart()
Definition: AI_Idle.cs:26
void TryCast(EffectId id, int power=100)
Definition: AI_Idle.cs:1028
Behaviour
Definition: AI_Idle.cs:9
static bool TryRestock(Chara c, bool realtime)
Definition: AI_Shopping.cs:94
static bool TryShop(Chara c, bool realtime)
Definition: AI_Shopping.cs:10
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:1021
List< Item > items
Definition: ActList.cs:14
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
Definition: ActThrow.cs:97
Definition: ACT.cs:62
BaseArea.AccessType accessType
Definition: AreaData.cs:42
AccessType
Definition: BaseArea.cs:9
AreaData data
Definition: BaseArea.cs:29
virtual Point GetRandomPoint(bool walkable=true, bool allowChara=true)
Definition: BaseArea.cs:88
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
GlobalCharaList globalCharas
Definition: CardManager.cs:46
TC GetTC(string id)
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:75
MinionType c_minionType
Definition: Card.cs:988
bool IsPCFactionOrMinion
Definition: Card.cs:2272
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5872
ElementContainerCard elements
Definition: Card.cs:41
string id
Definition: Card.cs:35
bool IsRestrainedResident
Definition: Card.cs:2258
bool isRestrained
Definition: Card.cs:566
CardRenderer HostRenderer
Definition: Card.cs:2442
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6178
int GetHearingRadius()
Definition: Card.cs:6423
int c_uidMaster
Definition: Card.cs:1449
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3104
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6734
int hp
Definition: Card.cs:242
ICardParent parent
Definition: Card.cs:55
bool ExistsOnMap
Definition: Card.cs:2085
int GetCurrency(string id="money")
Definition: Card.cs:3975
Thing c_bloodData
Definition: Card.cs:1917
bool HasTag(CTAG tag)
Definition: Card.cs:2595
Point pos
Definition: Card.cs:59
bool IsInMutterDistance(int d=10)
Definition: Card.cs:7742
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6146
Trait trait
Definition: Card.cs:53
void ModCurrency(int a, string id="money")
Definition: Card.cs:3961
int encLV
Definition: Card.cs:326
bool IsEquipment
Definition: Card.cs:2173
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4063
void ModEncLv(int a)
Definition: Card.cs:3846
bool c_isImportant
Definition: Card.cs:1024
MoveResult
Definition: Card.cs:13
bool noMove
Definition: Card.cs:770
bool HasEditorTag(EditorTag tag)
Definition: Card.cs:2600
ThingContainer things
Definition: Card.cs:38
bool IsInstalled
Definition: Card.cs:2381
virtual Thing Thing
Definition: Card.cs:2058
int Evalue(int ele)
Definition: Card.cs:2571
int Dist(Card c)
Definition: Card.cs:7698
bool isGifted
Definition: Card.cs:782
Cell Cell
Definition: Card.cs:2055
int Num
Definition: Card.cs:158
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6197
SourceCategory.Row category
Definition: Card.cs:2049
void ModNum(int a, bool notify=true)
Definition: Card.cs:3515
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:5933
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6851
Room room
Definition: Cell.cs:102
bool IsSnowTile
Definition: Cell.cs:782
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool HasFire
Definition: Cell.cs:676
ActList list
Definition: CharaAbility.cs:12
bool Has(int id)
Definition: Chara.cs:10
void OnInsulted()
Definition: Chara.cs:8165
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:8841
override bool IsAliveInCurrentZone
Definition: Chara.cs:561
Thing FindBestFoodToEat()
Definition: Chara.cs:7548
new TraitChara trait
Definition: Chara.cs:503
Hostility OriginalHostility
Definition: Chara.cs:471
Card held
Definition: Chara.cs:70
AIAct ai
Definition: Chara.cs:202
bool TryUse(Thing t)
Definition: Chara.cs:7876
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6267
int sharedCheckTurn
Definition: Chara.cs:118
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7569
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9250
Faction faction
Definition: Chara.cs:427
override bool IsPC
Definition: Chara.cs:612
bool isDrunk
Definition: Chara.cs:124
Chara host
Definition: Chara.cs:33
Chara GetNearbyCatToSniff()
Definition: Chara.cs:8076
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1250
bool IsMofuable
Definition: Chara.cs:1099
override bool IsPCParty
Definition: Chara.cs:615
Party party
Definition: Chara.cs:43
bool IsInCombat
Definition: Chara.cs:864
TraitBed TryAssignBed()
Definition: Chara.cs:7328
void PickHeld(bool msg=false)
Definition: Chara.cs:4519
bool HasCondition(string alias)
Definition: Chara.cs:9411
void Banish(Chara owner)
Definition: Chara.cs:2330
AIAct SetAI(AIAct g)
Definition: Chara.cs:8880
bool IsIdle
Definition: Chara.cs:853
TraitBed FindBed()
Definition: Chara.cs:7316
Stats hunger
Definition: Chara.cs:1142
override bool IsMinion
Definition: Chara.cs:627
override bool isSynced
Definition: Chara.cs:691
Point orgPos
Definition: Chara.cs:21
bool IsHuman
Definition: Chara.cs:879
bool MoveRandom()
Definition: Chara.cs:2576
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7346
override bool IsPCFaction
Definition: Chara.cs:671
bool CanSee(Card c)
Definition: Chara.cs:1218
bool HasAccess(Card c)
Definition: Chara.cs:1280
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7594
Chara Duplicate()
Definition: Chara.cs:1783
override int MaxHP
Definition: Chara.cs:708
bool CanDuplicate()
Definition: Chara.cs:1758
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:8523
SourceChara.Row source
Definition: Chara.cs:158
Stats mana
Definition: Chara.cs:1154
FactionMemberType memberType
Definition: Chara.cs:46
string TalkTopic(string topic="calm")
Definition: Chara.cs:6967
Stats stamina
Definition: Chara.cs:1146
bool MoveNeighborDefinitely()
Definition: Chara.cs:2590
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5834
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6709
Chara parasite
Definition: Chara.cs:30
Chara master
Definition: Chara.cs:88
bool IsGuest()
Definition: Chara.cs:6619
Hobby GetWork(string id)
Definition: Chara.cs:8991
Thing nextUse
Definition: Chara.cs:100
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2616
Religion faith
Definition: Chara.cs:439
Chara enemy
Definition: Chara.cs:86
CharaAbility ability
Definition: Chara.cs:424
Chara FindMaster()
Definition: Chara.cs:2385
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6306
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6355
Room FindRoom()
Definition: Chara.cs:7932
Point GetDestination()
Definition: Chara.cs:7235
int turnLastSeen
Definition: Chara.cs:110
FactionBranch homeBranch
Definition: Chara.cs:1066
void Drink(Card t)
Definition: Chara.cs:5105
Hostility hostility
Definition: Chara.cs:291
bool IsHostile()
Definition: Chara.cs:6532
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7384
PCCData pccData
Definition: Chara.cs:67
Chara SetHostility(Hostility h)
Definition: Chara.cs:1434
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4303
void Sniff(Chara c)
Definition: Chara.cs:8088
override bool IsPCC
Definition: Chara.cs:682
int idleActTimer
Definition: Chara.cs:112
bool IsCat
Definition: Chara.cs:987
SourceRace.Row race
Definition: Chara.cs:464
Definition: ConHOT.cs:4
int AllyDistance(Chara c)
bool enable
Definition: CoreDebug.cs:286
static int GetFoodScore(Thing food)
Definition: CraftUtil.cs:141
int GetRaw(int offsetHours=0)
Definition: Date.cs:326
bool IsNight
Definition: Date.cs:112
Definition: EClass.cs:6
static Game game
Definition: EClass.cs:9
static Zone _zone
Definition: EClass.cs:21
static World world
Definition: EClass.cs:41
static Map _map
Definition: EClass.cs:19
static int rnd(long a)
Definition: EClass.cs:59
static FactionBranch Branch
Definition: EClass.cs:23
static int rndHalf(int a)
Definition: EClass.cs:97
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
static CoreDebug debug
Definition: EClass.cs:49
static SoundManager Sound
Definition: EClass.cs:47
Dictionary< int, Element > dict
Element ModTempPotential(int ele, int v, int threshMsg=0)
Element ModBase(int ele, int v)
int ValueWithoutLink
Definition: ELEMENT.cs:294
int id
Definition: ELEMENT.cs:250
SourceElement.Row source
Definition: ELEMENT.cs:273
int vTempPotential
Definition: ELEMENT.cs:258
Act act
Definition: ELEMENT.cs:394
Thing GetMeal(Chara c)
List< Chara > members
PolicyManager policies
ConfigTactics tactics
Definition: Game.cs:90
ReligionManager religions
Definition: Game.cs:158
CardManager cards
Definition: Game.cs:155
Config config
Definition: Game.cs:218
static bool Has(string id)
Definition: LangGame.cs:46
Definition: Lang.cs:6
static LangGame Game
Definition: Lang.cs:48
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:162
static LayerCraft Instance
Definition: LayerCraft.cs:8
static LayerDragGrid Instance
Definition: Los.cs:5
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
Definition: Los.cs:167
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
Definition: Map.cs:2215
PropsInstalled Installed
Definition: Map.cs:123
PropsManager props
Definition: Map.cs:91
RoomManager rooms
Definition: Map.cs:31
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
Definition: Party.cs:7
bool HasElement(int ele, bool excludePC=false)
Definition: Party.cs:194
int EvalueTotal(int ele, Func< Chara, bool > funcIf=null)
Definition: Party.cs:181
Chara leader
Definition: Party.cs:31
List< Chara > members
Definition: Party.cs:19
int turns
Definition: Player.cs:84
int karma
Definition: Player.cs:878
Stats stats
Definition: Player.cs:1016
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:548
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1397
CellDetail detail
Definition: Point.cs:71
bool IsBlocked
Definition: Point.cs:363
List< Thing > Things
Definition: Point.cs:338
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:619
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
Definition: Point.cs:1200
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1220
bool Equals(int _x, int _z)
Definition: Point.cs:960
bool IsValid
Definition: Point.cs:88
Point GetRandomPointInRadius(int minRadius, int maxRadius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=2000)
Definition: Point.cs:783
int Distance(Point p)
Definition: Point.cs:989
Chara FirstChara
Definition: Point.cs:288
bool IsInBounds
Definition: Point.cs:104
Cell cell
Definition: Point.cs:51
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140
bool HasChara
Definition: Point.cs:238
bool IsHotSpring
Definition: Point.cs:375
bool IsDeepWater
Definition: Point.cs:276
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
Definition: Point.cs:769
bool IsActive(int id, int days=-1)
List< PopItem > items
Definition: PopManager.cs:34
PropsInstalled installed
Definition: PropsManager.cs:8
TraitManager traits
Definition: Props.cs:18
Thing Find(int uid)
Definition: Props.cs:389
ReligionHarmony Harmony
List< Room > listRoom
Definition: RoomManager.cs:13
List< Area > listArea
Definition: RoomManager.cs:10
Definition: Room.cs:4
Lot lot
Definition: Room.cs:21
virtual bool IsRegion
Definition: Spatial.cs:515
virtual void Mod(int a)
Definition: Stats.cs:135
override int GetPhase()
Definition: Stats.cs:117
virtual int value
Definition: Stats.cs:56
virtual int max
Definition: Stats.cs:68
Definition: TCText.cs:6
PopManager pop
Definition: TCText.cs:9
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Thing Find(int uid)
bool IsFull(int y=0)
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
bool IsSharedContainer
Definition: Thing.cs:116
virtual AI_Idle.Behaviour IdleBehaviour
Definition: TraitChara.cs:17
virtual string IdAmbience
Definition: TraitChara.cs:135
virtual bool CanFish
Definition: TraitChara.cs:137
virtual bool IdleAct()
Definition: TraitChara.cs:139
TraitMap restSpots
Definition: TraitManager.cs:10
virtual bool AllowTraining
Definition: TraitShackle.cs:13
virtual bool CanRead(Chara c)
Definition: Trait.cs:970
virtual bool CanEat(Chara c)
Definition: Trait.cs:979
virtual int IdleUseChance
Definition: Trait.cs:364
virtual bool IdleUse(Chara c, int dist)
Definition: Trait.cs:648
virtual bool CanDrink(Chara c)
Definition: Trait.cs:988
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
static int okaerinko
Definition: Zone.cs:31
virtual bool IsNefia
Definition: Zone.cs:285
FactionBranch branch
Definition: Zone.cs:34
virtual bool IsUserZone
Definition: Zone.cs:271
Chara Boss
Definition: Zone.cs:86
virtual bool IsTown
Definition: Zone.cs:223
Chara SpawnMob(string id, Point pos=null)
Definition: Zone.cs:2741
virtual bool PetFollow
Definition: Zone.cs:287
bool IsPCFaction
Definition: Zone.cs:473
virtual bool IsUnderwater
Definition: Zone.cs:269
Card AddCard(Card t, Point point)
Definition: Zone.cs:1977