Elin Decompiled Documentation EA 23.324 Nightly
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 bool ShouldEndMimicry => false;
27
28 public override void OnStart()
29 {
30 owner.SetTempHand(-1, -1);
31 owner.ShowEmo();
32 }
33
34 public override IEnumerable<Status> Run()
35 {
36 while (true)
37 {
38 if (owner.held != null)
39 {
41 }
42 if (owner.nextUse != null)
43 {
44 Thing nextUse = owner.nextUse;
45 owner.nextUse = null;
46 if (nextUse.parent == owner && !nextUse.isDestroyed)
47 {
48 owner.TryUse(nextUse);
49 }
50 yield return KeepRunning();
51 }
53 {
54 if (EClass.rnd(5) == 0)
55 {
56 owner.Talk("onFire");
57 }
59 {
60 yield return Restart();
61 }
62 }
63 if (EClass.rnd(owner.IsPCParty ? 10 : 100) == 0 && owner.hunger.GetPhase() >= 3)
64 {
65 Thing thing = (owner.IsPCFaction ? owner.FindBestFoodToEat() : owner.things.Find((Thing a) => owner.CanEat(a, owner.IsPCFaction) && !a.c_isImportant, recursive: false));
66 if (thing == null && owner.IsPCFaction && EClass._zone.IsPCFaction)
67 {
69 if (thing != null)
70 {
71 owner.Pick(thing);
72 }
73 }
74 if (thing == null && !owner.IsPCFaction)
75 {
76 if (EClass.rnd(8) != 0)
77 {
78 owner.hunger.Mod(-30);
79 }
80 else if (!owner.things.IsFull())
81 {
82 thing = ThingGen.CreateFromCategory("food", EClass.rnd(EClass.rnd(60) + 1) + 10);
83 if (thing.trait.CanEat(owner))
84 {
85 thing.isNPCProperty = true;
86 thing = owner.AddThing(thing);
87 }
88 else
89 {
90 thing = null;
91 }
92 }
93 }
94 if (thing != null)
95 {
96 if (owner.IsPCParty)
97 {
99 }
101 {
102 owner.InstantEat(thing, sound: false);
103 yield return Restart();
104 }
105 else if (thing.Num == 1 || !owner.things.IsFull())
106 {
107 yield return Do(new AI_Eat
108 {
109 target = thing
110 });
111 }
112 }
113 else if (!EClass._zone.IsRegion && owner.HasElement(1250))
114 {
115 Chara target = null;
116 for (int k = 0; k < 10; k++)
117 {
118 Chara chara = EClass._map.charas.RandomItem();
119 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)))))
120 {
121 target = chara;
122 }
123 }
124 if (target != null)
125 {
126 yield return DoGoto(target);
127 owner.UseAbility("ActBloodsuck", target);
128 yield return Success();
129 }
130 }
131 }
132 if (!EClass._zone.IsRegion)
133 {
134 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>())
135 {
137 yield return KeepRunning();
138 }
139 if (EClass.rnd(3) == 0 && owner.mana.value > 0)
140 {
141 Act actHeal = null;
142 Act actRevive = null;
143 foreach (ActList.Item item in owner.ability.list.items)
144 {
145 Act act = item.act;
146 if (act.id == 8430)
147 {
148 actRevive = act;
149 }
150 string[] abilityType = act.source.abilityType;
151 if (!abilityType.IsEmpty() && (abilityType[0] == "heal" || abilityType[0] == "hot"))
152 {
153 actHeal = item.act;
154 }
155 }
156 if (actHeal != null)
157 {
158 List<Chara> list = (owner.IsPCParty ? EClass.pc.party.members : new List<Chara> { owner });
159 foreach (Chara item2 in list)
160 {
161 if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(actHeal.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
162 {
163 owner.UseAbility(actHeal, item2);
164 yield return KeepRunning();
165 break;
166 }
167 }
168 if ((owner.id == "priest" || owner.id == "priest2") && !owner.IsPCParty && owner.Dist(EClass.pc) <= 4)
169 {
170 if (EClass.pc.hp < EClass.pc.MaxHP)
171 {
172 if (owner.UseAbility(actHeal, EClass.pc, null, pt: true))
173 {
174 owner.AddCooldown(actHeal.id, 5);
175 owner.Talk("no_problem");
177 }
178 }
179 else if (!EClass.pc.HasCondition<ConHolyVeil>() && owner.UseAbility(8500, EClass.pc, null, pt: true))
180 {
181 owner.AddCooldown(8500, 30);
182 owner.Talk("no_problem");
183 }
184 }
185 }
186 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))
187 {
188 yield return KeepRunning();
189 }
190 }
191 }
193 {
195 if (owner.sharedCheckTurn < 0 && EClass.rnd(EClass.debug.enable ? 2 : 20) == 0)
196 {
199 owner.sharedCheckTurn += (EClass.debug.enable ? 20 : 200);
200 }
201 }
202 if ((EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (owner.IsPCParty ? 10 : (owner.IsPCFaction ? 2 : 0)) > EClass.rnd(100))
203 {
204 Thing thing2 = owner.things.Find("polish_powder");
205 if (thing2 != null && EClass._map.props.installed.Find<TraitGrindstone>() != null)
206 {
207 foreach (Thing thing10 in owner.things)
208 {
209 if (!thing10.IsEquipment || thing10.encLV >= 0)
210 {
211 continue;
212 }
213 for (int l = 0; l < 5; l++)
214 {
215 if (thing10.encLV >= 0)
216 {
217 break;
218 }
219 owner.Say("polish", owner, thing10);
220 thing10.ModEncLv(1);
221 thing2.ModNum(-1);
222 if (thing2.isDestroyed)
223 {
224 break;
225 }
226 }
227 if (thing2.isDestroyed)
228 {
229 break;
230 }
231 }
232 }
233 }
234 if (owner.IsPCParty)
235 {
237 {
238 TraitShackle traitShackle = owner.pos.FindThing<TraitShackle>();
239 if (traitShackle != null && traitShackle.AllowTraining)
240 {
242 {
243 shackle = traitShackle
244 });
245 }
246 yield return Restart();
247 }
248 if (EClass.rnd(20) == 0)
249 {
250 Thing thing3 = owner.things.Find((Thing a) => a.parent == owner && a.isGifted && (a.category.id == "skillbook" || a.category.id == "ancientbook"));
251 if (thing3 != null && thing3.trait.CanRead(owner) && (thing3.Num == 1 || !owner.things.IsFull()))
252 {
253 yield return Do(new AI_Read
254 {
255 target = thing3
256 });
257 }
258 }
259 if (!EClass._zone.IsRegion)
260 {
261 if (EClass.rnd(100) == 0 && owner.HasElement(1227))
262 {
263 List<Chara> list2 = new List<Chara>();
264 foreach (Chara member in EClass.pc.party.members)
265 {
266 if (member.Evalue(1227) > 0)
267 {
268 list2.Add(member);
269 }
270 }
271 if (list2.Count > 2 + EClass.pc.party.EvalueTotal(1272, (Chara c) => c.IsPC || c.faith == EClass.game.religions.Harmony))
272 {
273 list2.Remove(owner);
274 owner.SetEnemy(list2.RandomItem());
275 yield return Success();
276 }
277 }
278 if (EClass.rnd(20) == 0 && owner.IsMarried)
279 {
280 List<Chara> list3 = new List<Chara>();
281 foreach (Chara member2 in EClass.pc.party.members)
282 {
283 if (member2 != owner && member2.IsMarried)
284 {
285 list3.Add(member2);
286 }
287 }
288 if (list3.Count > EClass.pc.Evalue(1276))
289 {
290 owner.SetEnemy(list3.RandomItem());
291 yield return Success();
292 }
293 }
294 }
295 if (EClass.rnd(150) == 0 && owner.host != null && owner.host.parasite == owner && owner.GetInt(108) == 1)
296 {
297 owner.host.PlaySound("whip");
298 owner.host.Say("use_whip3", owner, owner.host);
299 owner.Talk("insult");
300 owner.host.PlayAnime(AnimeID.Shiver);
301 owner.host.DamageHP(5 + EClass.rndHalf(owner.host.MaxHP / 5), 919, 100, AttackSource.Condition);
303 yield return KeepRunning();
304 }
305 if (EClass.rnd(EClass.debug.enable ? 2 : 20) == 0 && owner.CanSee(EClass.pc) && !(EClass.pc.ai is AI_Eat))
306 {
308 }
309 if (owner.isSynced && EClass.rnd((owner.host == null) ? 200 : 150) == 0 && owner.GetInt(106) == 0)
310 {
311 if (EClass.rnd(2) == 0 && owner.GetInt(108) == 1)
312 {
313 owner.Talk("insult");
314 }
315 else
316 {
318 }
319 }
320 if (EClass.rnd(100) == 0 && EClass._zone.IsTown)
321 {
323 }
324 if ((EClass.rnd(20) == 0 || EClass.debug.enable) && owner.GetCurrency() >= 500)
325 {
326 bool flag = EClass._zone.IsTown;
328 {
329 foreach (Chara member3 in EClass._zone.branch.members)
330 {
331 if (member3.ExistsOnMap && member3.trait is TraitTrainer)
332 {
333 flag = true;
334 }
335 }
336 }
337 if (flag)
338 {
339 bool flag2 = false;
340 foreach (Element value in owner.elements.dict.Values)
341 {
342 if (!(value.source.category != "skill") && value.vTempPotential < 900)
343 {
344 flag2 = true;
345 break;
346 }
347 }
348 if (flag2)
349 {
350 int num2 = owner.GetCurrency();
351 if (num2 >= 20000)
352 {
353 num2 = 20000;
354 }
355 owner.PlaySound("pay");
356 int num3 = num2 / 200;
357 foreach (Element value2 in owner.elements.dict.Values)
358 {
359 if (!(value2.source.category != "skill"))
360 {
361 int num4 = num3 * 100 / (100 + (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) * (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) / 100);
362 num4 += 1 + EClass.rnd(3);
363 owner.elements.ModTempPotential(value2.id, Mathf.Max(1, num4), 9999);
364 }
365 }
366 Msg.Say("party_train", owner, Lang._currency(num2));
367 owner.PlaySound("ding_potential");
368 owner.ModCurrency(-num2);
369 }
370 }
371 }
372 if (EClass.rnd(100) == 0 && EClass.pc.ai is AI_Fish && owner.stamina.value > 0 && owner.things.Find<TraitToolFishing>() != null)
373 {
374 Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(0, 3);
375 if (randomPointInRadius != null)
376 {
377 randomPointInRadius = AI_Fish.GetFishingPoint(randomPointInRadius);
378 if (randomPointInRadius.IsValid)
379 {
380 yield return Do(new AI_Fish
381 {
382 pos = randomPointInRadius
383 });
384 }
385 }
386 }
387 }
388 if (owner.c_uidMaster != 0)
389 {
390 Chara chara2 = owner.master;
391 if (chara2 == null || !chara2.IsAliveInCurrentZone)
392 {
393 chara2 = owner.FindMaster();
394 }
395 if (chara2 != null && chara2.IsAliveInCurrentZone)
396 {
397 if (owner.enemy == null)
398 {
399 owner.SetEnemy(chara2.enemy);
400 }
401 int num5 = owner.Dist(chara2.pos);
402 if (owner.source.aiIdle != "root" && num5 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
403 {
404 if (owner.HasAccess(chara2.pos))
405 {
406 owner.TryMoveTowards(chara2.pos);
407 }
408 yield return KeepRunning();
409 continue;
410 }
411 }
412 }
413 if (!EClass._zone.IsRegion)
414 {
415 if (EClass.rnd(5) == 0 && owner.HasElement(1425) && owner.mimicry == null)
416 {
417 owner.UseAbility(8794, owner);
418 }
419 if (EClass.rnd((!(owner.id == "unseenhand")) ? 10 : (owner.isSummon ? 9999 : 2)) == 0 && owner.HasElement(1427) && owner.mimicry == null)
420 {
421 owner.UseAbility(8796, owner);
422 }
424 {
426 {
427 owner.DoHostileAction(c, immediate: true);
429 if (owner.mimicry != null)
430 {
431 owner.mimicry.Reveal(c, surprise: true);
432 }
433 });
434 }
435 }
436 if (owner.mimicry != null && owner.HasElement(1429))
437 {
439 }
440 Party party = owner.party;
441 if (party == null || party.leader == owner || !party.leader.IsAliveInCurrentZone || owner.host != null || !EClass._zone.PetFollow)
442 {
443 break;
444 }
445 if (owner.source.aiIdle == "root")
446 {
447 yield return KeepRunning();
448 continue;
449 }
451 {
452 yield return KeepRunning();
453 continue;
454 }
455 if (owner.HasAccess(party.leader.pos) && owner.TryMoveTowards(party.leader.pos) == Card.MoveResult.Fail && owner.Dist(party.leader) > 4)
456 {
458 bool flag3 = (EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (EClass.pc.enemy == null || !EClass.pc.enemy.IsAliveInCurrentZone);
459 if (moveFailCount >= (flag3 ? 100 : 10))
460 {
461 owner.Teleport(party.leader.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), silent: false, force: true);
462 moveFailCount = 0;
463 }
464 }
465 else
466 {
467 moveFailCount = 0;
468 }
469 yield return KeepRunning();
470 }
471 if (EClass._zone.IsNefia && EClass._zone.Boss == owner && EClass.rnd(20) == 0)
472 {
474 }
475 if (EClass._zone.IsRegion && EClass.rnd(10) != 0)
476 {
477 yield return Restart();
478 }
479 if (((owner.homeBranch != null && owner.homeBranch == EClass.Branch && EClass.rnd(100) == 0) || (owner.IsGuest() && EClass.rnd(50) == 0)) && owner.FindBed() == null)
480 {
482 }
483 if (!EClass._zone.IsRegion)
484 {
485 switch (owner.id)
486 {
487 case "azzrasizzle":
488 case "geist":
489 {
490 if ((owner.IsPCFactionOrMinion && owner.IsPCParty) || EClass.rnd(20) != 0)
491 {
492 break;
493 }
494 Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
495 if (nearestPoint == null)
496 {
497 break;
498 }
499 foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion && _c.id != "cocoon" && _c.id != "cocoon_alien"))
500 {
501 item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
502 }
503 if (owner != null)
504 {
506 {
507 EClass.pc.ai.Cancel();
508 }
509 owner.Teleport(nearestPoint);
510 }
511 yield return Success();
512 break;
513 }
514 case "spider_queen":
515 {
516 if (EClass.rnd(20) != 0 || !owner.CanDuplicate(DuplicateCondition.SpiderEgg) || EClass._zone.IsUserZone)
517 {
518 break;
519 }
520 int j = 0;
521 owner.pos.ForeachNeighbor(delegate(Point p)
522 {
523 if (p.HasChara && p.FirstChara.id == "cocoon")
524 {
525 j++;
526 }
527 });
528 if (j < 2)
529 {
530 Point randomPoint = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
531 if (randomPoint != null)
532 {
533 Chara chara3 = EClass._zone.SpawnMob("cocoon", randomPoint);
534 owner.Say("egglay", owner);
536 }
537 }
538 break;
539 }
540 case "mech_scarab":
541 {
543 {
544 break;
545 }
546 int i = 0;
547 owner.pos.ForeachNeighbor(delegate(Point p)
548 {
549 if (p.HasChara && p.FirstChara.id == "mech_scarab")
550 {
551 i++;
552 }
553 });
554 if (i >= 2)
555 {
556 break;
557 }
558 Point randomPoint2 = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
559 if (randomPoint2 != null)
560 {
561 Card c2 = EClass._zone.AddCard(owner.Duplicate(), randomPoint2);
562 if (randomPoint2.Distance(EClass.pc.pos) < EClass.pc.GetHearingRadius())
563 {
564 Msg.Say("self_dupe", owner, c2);
565 }
566 }
567 break;
568 }
569 case "marshmallow_monster":
570 if (owner.TryFuse(0.001f))
571 {
572 yield return Success();
573 }
574 break;
575 }
576 }
577 if (owner.IsMinion && owner.master != null && owner.master.id == "keeper_garden" && !(owner.master.ai is GoalCombat))
578 {
580 yield return Success();
581 }
583 {
584 Room room = owner.pos.cell.room;
585 if (room != null)
586 {
587 Point point = null;
588 if (owner.memberType == FactionMemberType.Guest && room.data.accessType != 0)
589 {
590 point = FindMovePoint(BaseArea.AccessType.Public);
591 }
592 else if (owner.memberType == FactionMemberType.Default && room.data.accessType == BaseArea.AccessType.Private)
593 {
594 point = FindMovePoint(BaseArea.AccessType.Resident) ?? FindMovePoint(BaseArea.AccessType.Public);
595 }
596 if (point != null)
597 {
598 yield return DoGoto(point);
599 }
600 }
601 }
602 string id;
603 int num;
605 {
606 if (owner.IsPCFaction && owner.GetInt(32) + 4320 < EClass.world.date.GetRaw())
607 {
608 if (owner.GetInt(32) != 0 && Zone.okaerinko < 10)
609 {
610 owner.Talk("welcomeBack");
611 Zone.okaerinko++;
612 }
614 }
616 {
618 {
619 id = "money";
620 num = EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(500)))) + 1;
621 string[] strs = new string[4] { "1294", "1294", "1130", "1131" };
622 ThrowMethod throwMethod = ThrowMethod.Reward;
624 {
625 owner.Talk("curse_wed");
626 throwMethod = ThrowMethod.Punish;
627 SetId("stone", 1);
628 if (EClass.rnd(3) == 0)
629 {
630 SetId("shuriken", 1);
631 }
632 if (EClass.rnd(3) == 0)
633 {
634 SetId("explosive", 1);
635 }
636 if (EClass.rnd(3) == 0)
637 {
638 SetId("explosive_mega", 1);
639 }
640 if (EClass.rnd(3) == 0)
641 {
642 SetId("rock", 1);
643 }
644 }
645 else
646 {
647 if (EClass.rnd(2) == 0)
648 {
649 owner.PlaySound((EClass.rnd(3) == 0) ? "clap1" : ((EClass.rnd(2) == 0) ? "clap2" : "clap3"));
650 }
651 owner.Talk("grats_wed");
652 if (EClass.rnd(5) == 0)
653 {
654 SetId("money2", 1);
655 }
656 if (EClass.rnd(4) == 0)
657 {
658 SetId("plat", 1);
659 }
660 if (EClass.rnd(3) == 0)
661 {
662 SetId(strs.RandomItem(), 1);
663 }
664 }
665 Thing thing4 = ThingGen.Create(id, -1, owner.LV).SetNum(num);
666 thing4.SetRandomDir();
667 ActThrow.Throw(owner, EClass.pc.pos, thing4, throwMethod);
668 if (EClass.pc.IsAliveInCurrentZone && throwMethod == ThrowMethod.Reward && thing4.ExistsOnMap && thing4.pos.Equals(EClass.pc.pos) && !strs.Contains(thing4.id))
669 {
670 EClass.pc.Pick(thing4);
671 }
672 }
673 else if (EClass.rnd(5) == 0 && owner.hostility >= Hostility.Neutral && EClass.pc.IsPCC && EClass.pc.pccData.state == PCCState.Undie && !EClass.pc.pos.cell.IsTopWaterAndNoSnow)
674 {
675 owner.Talk("pervert3");
676 }
677 else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
678 {
679 bool flag4 = EClass._zone is Zone_Derphy;
680 string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
681 if (!text.IsEmpty())
682 {
683 owner.Talk(text);
684 }
685 if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
686 {
687 Thing t2 = ThingGen.Create("stone", -1, owner.LV);
688 AI_PlayMusic.ignoreDamage = true;
690 AI_PlayMusic.ignoreDamage = false;
691 }
692 }
693 else
694 {
695 owner.TalkTopic("fov");
696 }
697 owner.turnLastSeen = EClass.player.stats.turns;
698 }
699 }
700 if (EClass.rnd(25) == 0 && owner.IsInMutterDistance())
701 {
703 {
704 owner.PlayAnime(AnimeID.Shiver);
705 }
707 if (tC == null || tC.pop.items.Count == 0)
708 {
709 if (owner.noMove)
710 {
711 foreach (Thing thing11 in owner.pos.Things)
712 {
713 if (thing11.IsInstalled && thing11.trait is TraitGeneratorWheel)
714 {
715 owner.Talk("labor");
716 owner.PlayAnime(AnimeID.Shiver);
717 yield return Restart();
718 }
719 }
720 }
721 if (owner.isDrunk && (owner.race.id == "cat" || owner.id == "sailor"))
722 {
723 owner.Talk("drunk_cat");
724 }
725 else if (owner.isRestrained)
726 {
727 owner.Talk("restrained");
728 }
729 else if (owner.GetInt(106) == 0 && !owner.IsPCParty)
730 {
731 if (owner.HasElement(1232) && EClass.rnd(4) == 0)
732 {
733 owner.Talk("baby");
734 }
735 else if (EClass.rnd((owner.host == null) ? 2 : 10) == 0 && owner.isSynced && owner.TalkTopic().IsEmpty())
736 {
737 owner.Talk(owner.pos.IsHotSpring ? "hotspring" : "idle");
738 }
739 }
740 }
741 }
742 if (EClass.rnd(8) == 0 && owner.race.id == "chicken")
743 {
744 owner.PlaySound("Animal/Chicken/chicken");
745 }
746 if (EClass.rnd(80) == 0 && owner.race.id == "cat")
747 {
748 owner.PlaySound("Animal/Cat/cat");
749 }
750 if (owner.trait.IdAmbience != null && owner.IsInMutterDistance(15))
751 {
752 float mtp = 1f;
753 Room room2 = owner.Cell.room;
754 Room room3 = EClass.pc.Cell.room;
755 if (room2 != room3 && room3 != null)
756 {
757 mtp = ((room2?.lot != room3?.lot) ? 0.4f : 0.7f);
758 }
759 EClass.Sound.PlayAmbience(owner.trait.IdAmbience, owner.pos.Position(), mtp);
760 }
761 if (EClass.rnd((EClass._zone is Zone_Wedding && !owner.HasCondition<ConDrunk>()) ? 30 : 2000) == 0 && owner.IsHuman && (owner.host == null || owner.host.ride != owner))
762 {
763 Thing thing5 = owner.things.Find((Thing a) => !a.IsNegativeGift && a.trait.CanDrink(owner), recursive: false);
764 if (thing5 != null && thing5.trait is TraitPotion && owner.IsPCParty)
765 {
766 thing5 = null;
767 }
768 bool flag5 = EClass.Branch != null && EClass.Branch.policies.IsActive(2503);
769 if (owner.homeBranch != null && owner.homeBranch.policies.IsActive(2503))
770 {
771 flag5 = true;
772 }
773 if (thing5 == null && !flag5)
774 {
775 thing5 = ThingGen.Create("crimAle");
776 owner.Drink(thing5);
777 }
778 if (thing5 != null && !thing5.isDestroyed)
779 {
780 owner.TryUse(thing5);
781 yield return Restart();
782 }
783 }
784 if (EClass.rnd(owner.IsPCParty ? 1000 : 200) == 0 && owner.isDrunk && (owner.isSynced || EClass.rnd(5) == 0))
785 {
786 DoSomethingToCharaInRadius(3, null, delegate(Chara c)
787 {
788 owner.Say("drunk_mess", owner, c);
789 owner.Talk("drunk_mess");
790 bool flag7 = EClass.rnd(5) == 0 && !c.IsPC;
791 if (c.IsPCParty && owner.hostility >= Hostility.Friend)
792 {
793 flag7 = false;
794 }
795 if (flag7)
796 {
797 owner.Say("drunk_counter", c, owner);
798 c.Talk("drunk_counter");
800 }
801 });
802 }
803 if (EClass.rnd(100) == 0 && owner.trait.CanFish && owner.stamina.value > 0)
804 {
805 Point fishingPoint = AI_Fish.GetFishingPoint(owner.pos);
806 if (fishingPoint.IsValid)
807 {
808 yield return Do(new AI_Fish
809 {
810 pos = fishingPoint
811 });
812 }
813 }
814 string idAct = owner.source.actIdle.RandomItem();
815 if (EClass.rnd(EClass.world.date.IsNight ? 1500 : 15000) == 0 && !owner.IsPCFaction && !owner.noMove)
816 {
817 owner.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
818 }
819 if (!owner.noMove)
820 {
821 if (EClass.rnd(3) == 0 && owner.IsCat)
822 {
823 Chara chara4 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem());
824 Thing thing6 = chara4.things.Find<TraitFoodChuryu>();
825 if (chara4 != owner && thing6 != null)
826 {
827 yield return Do(new AI_Churyu
828 {
829 churyu = thing6,
830 slave = chara4
831 });
832 }
833 }
834 if (EClass.rnd(100) == 0 && (owner.HasHobbyOrWork("Pet") || owner.HasHobbyOrWork("Fluffy")))
835 {
836 yield return Do(new AI_Mofu());
837 }
838 }
839 if (EClass.rnd((owner.host != null && owner.GetInt(106) != 0) ? 1000 : 40) == 0 && owner.IsHuman)
840 {
841 DoSomethingToNearChara((Chara c) => (!c.IsPCParty || EClass.rnd(5) == 0) && c.IsMofuable && !owner.IsHostile(c) && !c.IsInCombat && owner.CanSee(c), delegate(Chara c)
842 {
843 owner.Cuddle(c);
844 });
845 yield return KeepRunning();
846 }
847 if (EClass.rnd(100) == 0)
848 {
849 bool flag6 = owner.HasElement(1291);
850 if (owner.trait is TraitBitch || flag6)
851 {
852 Chara chara5 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0);
853 if (chara5 != null)
854 {
855 yield return Do(new AI_Fuck
856 {
857 target = chara5,
858 variation = ((!flag6) ? AI_Fuck.Variation.Bitch : AI_Fuck.Variation.MotherMilk)
859 });
860 }
861 }
862 }
863 if (EClass.rnd(50) == 0 && owner.trait is TraitBard)
864 {
865 yield return Do(new AI_PlayMusic());
866 }
867 if (EClass.rnd(4) == 0 && TryPerformIdleUse())
868 {
869 yield return Restart();
870 }
871 if (EClass.rnd(20) == 0 && owner.trait.IdleAct())
872 {
873 yield return Restart();
874 }
875 if (idAct == "janitor" && EClass.rnd(5) == 0)
876 {
877 DoSomethingToCharaInRadius(4, null, delegate(Chara c)
878 {
879 if (c.HasElement(1211) && !(EClass._zone is Zone_Casino))
880 {
881 owner.Talk("snail");
882 Thing t4 = ThingGen.Create("1142");
883 ActThrow.Throw(owner, c.pos, t4);
884 }
885 });
886 yield return Restart();
887 }
889 {
890 TraitShackle traitShackle2 = owner.pos.FindThing<TraitShackle>();
891 if (traitShackle2 != null && traitShackle2.AllowTraining)
892 {
894 {
895 shackle = traitShackle2
896 });
897 yield return Restart();
898 }
899 }
900 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>())
901 {
903 }
904 if (EClass.rnd(200) == 0 && !owner.noMove)
905 {
906 Point cleanPoint = AI_Clean.GetCleanPoint(owner, 4);
907 if (cleanPoint != null)
908 {
909 yield return Do(new AI_Clean
910 {
911 pos = cleanPoint
912 });
913 }
914 }
915 if (EClass.rnd(owner.isSynced ? 10 : 2000) == 0 && owner.ability.Has(5058))
916 {
917 if (!owner.UseAbility(5058) && !owner.IsPCFaction)
918 {
921 if (owner.isSynced)
922 {
924 }
925 }
926 yield return Restart();
927 }
928 if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
929 {
930 foreach (Chara chara6 in EClass._map.charas)
931 {
932 if (EClass.rnd(3) != 0 && chara6 != owner && chara6.pos.cell.IsSnowTile && chara6.Dist(owner) <= 6 && Los.IsVisible(chara6, owner))
933 {
934 Thing t3 = ThingGen.Create("snow");
935 ActThrow.Throw(owner, chara6.pos, t3);
936 break;
937 }
938 }
939 }
940 if (EClass.rnd(EClass.debug.enable ? 3 : 30) == 0)
941 {
942 Thing thing7 = owner.things.Find<TraitBall>();
943 if (thing7 == null)
944 {
946 {
947 owner.pos.ForeachNeighbor(delegate(Point p)
948 {
949 Card card2 = p.FindThing<TraitBall>()?.owner;
950 if (card2 != null)
951 {
952 owner.Pick(card2.Thing);
953 }
954 });
955 }
956 }
957 else
958 {
959 foreach (Chara chara7 in EClass._map.charas)
960 {
961 if (EClass.rnd(3) != 0 && chara7 != owner && chara7.Dist(owner) <= 6 && chara7.Dist(owner) >= 3 && Los.IsVisible(chara7, owner))
962 {
963 ActThrow.Throw(owner, chara7.pos, thing7);
964 break;
965 }
966 }
967 }
968 }
969 if (EClass.rnd(20) == 0 && AI_Shopping.TryShop(owner, realtime: true))
970 {
971 yield return Restart();
972 }
973 if (EClass.rnd(20) == 0 && owner.IsPCFaction && AI_Shopping.TryRestock(owner, realtime: true))
974 {
975 yield return Restart();
976 }
978 if (owner.idleActTimer <= 0 && !owner.source.actIdle.IsEmpty())
979 {
980 owner.idleActTimer = 10 + EClass.rnd(50);
981 switch (idAct)
982 {
983 case "torture_snail":
984 DoSomethingToNearChara((Chara c) => c.race.id == "snail", delegate(Chara c)
985 {
986 owner.Say("use_whip3", owner, c);
987 owner.PlaySound("whip");
988 owner.Talk("insult");
989 if (c.IsPC)
990 {
991 Steam.GetAchievement(ID_Achievement.SNAIL);
992 }
993 c.PlayAnime(AnimeID.Shiver);
994 c.OnInsulted();
995 });
996 break;
997 case "buffMage":
998 if (EClass.rnd(2) == 0)
999 {
1000 TryCast<ConHolyVeil>(EffectId.HolyVeil, 300 + EClass.rnd(300));
1001 }
1002 else
1003 {
1004 TryCast<ConLevitate>(EffectId.Levitate, 300 + EClass.rnd(300));
1005 }
1006 break;
1007 case "buffThief":
1008 TryCast<ConNightVision>(EffectId.CatsEye, 100 + EClass.rnd(100));
1009 break;
1010 case "buffGuildWatch":
1011 TryCast<ConGravity>(EffectId.Gravity, 300 + EClass.rnd(300));
1012 break;
1013 case "buffHealer":
1014 TryCast(EffectId.Heal);
1015 break;
1016 case "readBook":
1017 {
1018 if (EClass.rnd(2) == 0 || (owner.IsPCParty && EClass.rnd(20) != 0))
1019 {
1020 break;
1021 }
1022 List<Thing> list4 = owner.things.List((Thing a) => a.parent == owner && (a.category.id == "spellbook" || a.category.id == "ancientbook" || a.category.id == "skillbook"), onlyAccessible: true);
1023 Thing thing8 = null;
1024 if (list4.Count > 0)
1025 {
1026 thing8 = list4.RandomItem();
1027 if (!thing8.trait.CanRead(owner))
1028 {
1029 thing8 = null;
1030 }
1031 }
1032 if (thing8 == null)
1033 {
1034 if (owner.things.IsFull())
1035 {
1036 break;
1037 }
1038 thing8 = ThingGen.CreateFromCategory((EClass.rnd(5) != 0) ? "spellbook" : "ancientbook");
1039 thing8.isNPCProperty = true;
1040 }
1041 if (!(thing8.id == "1084") || !owner.IsPCFaction)
1042 {
1043 if (!owner.HasElement(285))
1044 {
1045 owner.elements.ModBase(285, 1);
1046 }
1047 yield return Do(new AI_Read
1048 {
1049 target = thing8
1050 });
1051 }
1052 break;
1053 }
1054 default:
1055 if (LangGame.Has("idle_" + idAct))
1056 {
1057 IdleActText(idAct);
1058 }
1059 break;
1060 }
1061 yield return Restart();
1062 }
1063 if (owner.host != null)
1064 {
1065 yield return Restart();
1066 }
1068 {
1070 {
1071 yield return DoGoto(owner.orgPos);
1072 }
1073 yield return Restart();
1074 }
1076 {
1077 yield return DoGoto(EClass.pc);
1078 }
1079 if (EClass.rnd(100) == 0 && !owner.IsPCFaction)
1080 {
1081 if (owner.id == "ashland" || owner.id == "fiama")
1082 {
1083 Card card = EClass._map.Installed.traits.restSpots.RandomItem();
1084 if (card != null)
1085 {
1086 yield return DoGotoSpot(card);
1087 }
1088 else
1089 {
1090 Room room4 = owner.FindRoom();
1091 if (room4 != null)
1092 {
1093 yield return DoGoto(room4.GetRandomPoint().GetNearestPoint());
1094 }
1095 }
1096 }
1098 {
1099 yield return DoGoto(owner.orgPos, 0, ignoreConnection: false, delegate
1100 {
1101 if (!EClass._zone.IsPCFaction)
1102 {
1103 owner.Teleport(owner.orgPos, silent: false, force: true);
1104 }
1105 return Status.Success;
1106 });
1107 }
1108 }
1109 if (EClass.rnd(100) == 0 && owner.id == "bee")
1110 {
1111 Thing thing9 = EClass._map.ListThing<TraitBeekeep>()?.RandomItem();
1112 if (thing9 != null)
1113 {
1114 yield return DoGoto(thing9.pos);
1115 }
1116 }
1117 if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
1118 {
1119 for (int m = 0; m < 100; m++)
1120 {
1121 Point randomPoint3 = EClass._map.GetRandomPoint();
1122 if (randomPoint3.IsDeepWater && !randomPoint3.IsBlocked)
1123 {
1124 yield return DoGoto(randomPoint3);
1125 break;
1126 }
1127 }
1128 }
1129 string aiIdle = owner.source.aiIdle;
1130 if (!(aiIdle == "stand") && !(aiIdle == "root"))
1131 {
1132 if (EClass.rnd(15) == 0 && (owner.mimicry == null || owner.mimicry.IsChara))
1133 {
1134 owner.MoveRandom();
1135 }
1136 if (owner == null)
1137 {
1138 yield return Cancel();
1139 }
1140 }
1141 if (EClass._zone.IsPCFaction && owner.IsPCFaction && !owner.IsPCParty && (owner.GetWork("Clean") != null || owner.GetWork("Chore") != null) && !(EClass.pc.ai is AI_UseCrafter))
1142 {
1143 AI_Haul aI_Haul = AI_Haul.TryGetAI(owner);
1144 if (aI_Haul != null)
1145 {
1146 yield return Do(aI_Haul);
1147 }
1148 }
1149 yield return Restart();
1150 Point FindMovePoint(BaseArea.AccessType type)
1151 {
1152 for (int n = 0; n < 20; n++)
1153 {
1154 Point randomPoint4 = owner.pos.GetRandomPoint(5 + n, requireLos: false);
1155 if (randomPoint4 != null && randomPoint4.IsInBounds && (randomPoint4.cell.room == null || randomPoint4.cell.room.data.accessType == type))
1156 {
1157 return randomPoint4;
1158 }
1159 }
1160 return null;
1161 }
1162 void SetId(string _id, int _num)
1163 {
1164 id = _id;
1165 num = _num;
1166 }
1167 }
1168
1169 public void IdleActText(string id)
1170 {
1171 string text = "idle_" + id;
1172 owner.PlaySound(text);
1173 if (Lang.Game.map.ContainsKey(text))
1174 {
1175 owner.Say(text, owner);
1176 }
1177 }
1178
1179 public void TryCast<T>(EffectId id, int power = 100) where T : Condition
1180 {
1181 if (!owner.HasCondition<T>())
1182 {
1183 TryCast(id, power);
1184 }
1185 }
1186
1187 public void TryCast(EffectId id, int power = 100)
1188 {
1189 owner.Say("idle_cast", owner);
1190 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1191 }
1192
1194 {
1195 _listRoom.Clear();
1196 foreach (BaseArea item in ((IEnumerable<BaseArea>)EClass._map.rooms.listRoom).Concat((IEnumerable<BaseArea>)EClass._map.rooms.listArea))
1197 {
1198 if (item.type != null && item.type.uidCharas.Contains(owner.uid))
1199 {
1200 _listRoom.Add(item);
1201 }
1202 }
1203 return _listRoom.RandomItem();
1204 }
1205
1206 public Chara DoSomethingToNearChara(Func<Chara, bool> funcPickChara, Action<Chara> action = null)
1207 {
1208 List<Chara> list = owner.pos.ListCharasInNeighbor(delegate(Chara c)
1209 {
1210 if (c == owner || !owner.CanSee(c))
1211 {
1212 return false;
1213 }
1214 return funcPickChara == null || funcPickChara(c);
1215 });
1216 if (list.Count > 0)
1217 {
1218 Chara chara = list.RandomItem();
1219 action?.Invoke(chara);
1220 return chara;
1221 }
1222 return null;
1223 }
1224
1225 public Chara DoSomethingToCharaInRadius(int radius, Func<Chara, bool> funcPickChara, Action<Chara> action = null)
1226 {
1227 List<Chara> list = owner.pos.ListCharasInRadius(owner, radius, delegate(Chara c)
1228 {
1229 if (c == owner || !owner.CanSee(c))
1230 {
1231 return false;
1232 }
1233 return funcPickChara == null || funcPickChara(c);
1234 });
1235 if (list.Count > 0)
1236 {
1237 Chara chara = list.RandomItem();
1238 action?.Invoke(chara);
1239 return chara;
1240 }
1241 return null;
1242 }
1243
1244 public bool TryPerformIdleUse()
1245 {
1246 for (int i = 0; i < 10; i++)
1247 {
1248 if (owner == null)
1249 {
1250 return true;
1251 }
1252 Point randomPoint = owner.pos.GetRandomPoint(7, requireLos: true, allowChara: true, allowBlocked: true);
1253 if (randomPoint == null || randomPoint.detail == null)
1254 {
1255 continue;
1256 }
1257 foreach (Thing thing in randomPoint.detail.things)
1258 {
1259 if (!thing.IsInstalled)
1260 {
1261 continue;
1262 }
1263 int num = owner.Dist(thing);
1264 if (EClass.rnd((owner.memberType == FactionMemberType.Guest) ? 5 : 50) == 0 && thing.HasTag(CTAG.tourism) && num <= 2)
1265 {
1266 owner.LookAt(thing);
1267 owner.Talk("nice_statue");
1268 return true;
1269 }
1270 if (EClass.rnd(thing.trait.IdleUseChance) == 0 && thing.trait.IdleUse(owner, num))
1271 {
1272 if (owner != null)
1273 {
1274 owner.LookAt(thing);
1275 }
1276 return true;
1277 }
1278 }
1279 }
1280 return false;
1281 }
1282}
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
ClearInventoryType
if(!match.Success)
DuplicateCondition
EditorTag
Definition: EditorTag.cs:2
EffectId
Definition: EffectId.cs:2
FactionMemberType
Hostility
Definition: Hostility.cs:2
ID_Achievement
MinionType
Definition: MinionType.cs:2
ThrowMethod
Definition: ThrowMethod.cs:2
Definition: AIAct.cs:6
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:430
virtual Status Cancel()
Definition: AIAct.cs:305
new Chara owner
Definition: AIAct.cs:14
Status
Definition: AIAct.cs:8
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:475
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:446
Status KeepRunning()
Definition: AIAct.cs:335
Status Restart()
Definition: AIAct.cs:251
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:289
Variation
Definition: AI_Fuck.cs:13
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:1206
BaseArea GetRandomAssignedRoom()
Definition: AI_Idle.cs:1193
int moveFailCount
Definition: AI_Idle.cs:16
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
override IEnumerable< Status > Run()
Definition: AI_Idle.cs:34
override bool IsIdle
Definition: AI_Idle.cs:20
override bool ShouldEndMimicry
Definition: AI_Idle.cs:26
override bool InformCancel
Definition: AI_Idle.cs:22
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1225
int maxRepeat
Definition: AI_Idle.cs:14
override int MaxRestart
Definition: AI_Idle.cs:24
void IdleActText(string id)
Definition: AI_Idle.cs:1169
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1244
override void OnStart()
Definition: AI_Idle.cs:28
void TryCast(EffectId id, int power=100)
Definition: AI_Idle.cs:1187
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:1017
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
Stage CurrentStage
Definition: Affinity.cs:32
bool IsWeddingHater
Definition: Affinity.cs:36
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
GlobalCharaList globalCharas
Definition: CardManager.cs:46
TC GetTC(string id)
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:78
MinionType c_minionType
Definition: Card.cs:1015
bool IsPCFactionOrMinion
Definition: Card.cs:2342
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:6154
bool isSummon
Definition: Card.cs:713
ElementContainerCard elements
Definition: Card.cs:42
string id
Definition: Card.cs:36
bool IsRestrainedResident
Definition: Card.cs:2328
bool isRestrained
Definition: Card.cs:569
CardRenderer HostRenderer
Definition: Card.cs:2512
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6594
void SetInt(string id, int value=0)
Definition: Card.cs:2586
int GetHearingRadius()
Definition: Card.cs:6843
int c_uidMaster
Definition: Card.cs:1489
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3273
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:7154
int hp
Definition: Card.cs:245
ICardParent parent
Definition: Card.cs:56
bool ExistsOnMap
Definition: Card.cs:2137
Thing SetNum(int a)
Definition: Card.cs:3669
int GetCurrency(string id="money")
Definition: Card.cs:4149
Thing c_bloodData
Definition: Card.cs:1969
bool HasTag(CTAG tag)
Definition: Card.cs:2728
Point pos
Definition: Card.cs:60
bool IsInMutterDistance(int d=10)
Definition: Card.cs:8191
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6562
Trait trait
Definition: Card.cs:54
void ModCurrency(int a, string id="money")
Definition: Card.cs:4135
int encLV
Definition: Card.cs:329
bool IsEquipment
Definition: Card.cs:2227
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4271
void ModEncLv(int a)
Definition: Card.cs:4020
bool c_isImportant
Definition: Card.cs:1051
MoveResult
Definition: Card.cs:13
bool noMove
Definition: Card.cs:773
bool HasEditorTag(EditorTag tag)
Definition: Card.cs:2733
ThingContainer things
Definition: Card.cs:39
bool IsInstalled
Definition: Card.cs:2451
virtual Thing Thing
Definition: Card.cs:2110
int Evalue(int ele)
Definition: Card.cs:2704
int Dist(Card c)
Definition: Card.cs:8147
bool isGifted
Definition: Card.cs:785
Cell Cell
Definition: Card.cs:2107
void SetRandomDir()
Definition: Card.cs:6656
int Num
Definition: Card.cs:161
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6613
SourceCategory.Row category
Definition: Card.cs:2101
void ModNum(int a, bool notify=true)
Definition: Card.cs:3689
int GetInt(string id, int? defaultInt=null)
Definition: Card.cs:2567
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6336
int LV
Definition: Card.cs:389
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7272
Room room
Definition: Cell.cs:110
bool IsSnowTile
Definition: Cell.cs:790
bool IsTopWaterAndNoSnow
Definition: Cell.cs:720
bool HasFire
Definition: Cell.cs:684
ActList list
Definition: CharaAbility.cs:13
bool Has(int id)
Definition: Chara.cs:10
void OnInsulted()
Definition: Chara.cs:8609
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:9332
override bool IsAliveInCurrentZone
Definition: Chara.cs:567
Thing FindBestFoodToEat()
Definition: Chara.cs:7938
new TraitChara trait
Definition: Chara.cs:509
Hostility OriginalHostility
Definition: Chara.cs:475
Card held
Definition: Chara.cs:70
AIAct ai
Definition: Chara.cs:206
bool TryUse(Thing t)
Definition: Chara.cs:8275
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6536
int sharedCheckTurn
Definition: Chara.cs:120
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7959
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9751
Faction faction
Definition: Chara.cs:431
override bool IsPC
Definition: Chara.cs:630
bool isDrunk
Definition: Chara.cs:126
Chara host
Definition: Chara.cs:33
Chara GetNearbyCatToSniff()
Definition: Chara.cs:8515
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1309
bool IsMofuable
Definition: Chara.cs:1158
override bool IsPCParty
Definition: Chara.cs:633
Party party
Definition: Chara.cs:43
bool IsInCombat
Definition: Chara.cs:911
TraitBed TryAssignBed()
Definition: Chara.cs:7718
void PickHeld(bool msg=false)
Definition: Chara.cs:4762
bool HasCondition(string alias)
Definition: Chara.cs:9916
void Banish(Chara owner)
Definition: Chara.cs:2532
AIAct SetAI(AIAct g)
Definition: Chara.cs:9371
bool IsIdle
Definition: Chara.cs:900
TraitBed FindBed()
Definition: Chara.cs:7706
bool CanDuplicate(DuplicateCondition con=DuplicateCondition.Default)
Definition: Chara.cs:1886
Stats hunger
Definition: Chara.cs:1201
override bool IsMinion
Definition: Chara.cs:645
override bool isSynced
Definition: Chara.cs:709
Point orgPos
Definition: Chara.cs:21
bool IsHuman
Definition: Chara.cs:926
bool MoveRandom()
Definition: Chara.cs:2794
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7736
override bool IsPCFaction
Definition: Chara.cs:689
bool CanSee(Card c)
Definition: Chara.cs:1277
bool HasAccess(Card c)
Definition: Chara.cs:1343
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7984
Chara Duplicate()
Definition: Chara.cs:1940
override int MaxHP
Definition: Chara.cs:726
void TryClearInventory()
Definition: Chara.cs:8980
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:9014
SourceChara.Row source
Definition: Chara.cs:162
Stats mana
Definition: Chara.cs:1213
FactionMemberType memberType
Definition: Chara.cs:46
string TalkTopic(string topic="calm")
Definition: Chara.cs:7327
Stats stamina
Definition: Chara.cs:1205
bool MoveNeighborDefinitely()
Definition: Chara.cs:2808
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:6081
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:7050
Chara parasite
Definition: Chara.cs:30
Chara master
Definition: Chara.cs:88
Chara ride
Definition: Chara.cs:27
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:9152
bool IsGuest()
Definition: Chara.cs:6940
Hobby GetWork(string id)
Definition: Chara.cs:9482
Thing nextUse
Definition: Chara.cs:100
Affinity affinity
Definition: Chara.cs:318
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2834
Religion faith
Definition: Chara.cs:443
bool IsMarried
Definition: Chara.cs:615
Chara enemy
Definition: Chara.cs:86
CharaAbility ability
Definition: Chara.cs:428
Chara FindMaster()
Definition: Chara.cs:2603
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6619
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6668
Room FindRoom()
Definition: Chara.cs:8331
Point GetDestination()
Definition: Chara.cs:7618
int turnLastSeen
Definition: Chara.cs:112
FactionBranch homeBranch
Definition: Chara.cs:1113
void Drink(Card t)
Definition: Chara.cs:5383
Hostility hostility
Definition: Chara.cs:295
bool IsHostile()
Definition: Chara.cs:6849
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7774
ConBaseTransmuteMimic mimicry
Definition: Chara.cs:106
PCCData pccData
Definition: Chara.cs:67
Chara SetHostility(Hostility h)
Definition: Chara.cs:1505
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4542
void Sniff(Chara c)
Definition: Chara.cs:8527
override bool IsPCC
Definition: Chara.cs:700
bool TryFuse(float chance=1f)
Definition: Chara.cs:1830
int idleActTimer
Definition: Chara.cs:114
bool IsCat
Definition: Chara.cs:1034
SourceRace.Row race
Definition: Chara.cs:468
override void Reveal(Card attacker=null, bool surprise=false)
Definition: ConHOT.cs:4
int AllyDistance(Chara c)
bool enable
Definition: CoreDebug.cs:301
static int GetFoodScore(Thing food)
Definition: CraftUtil.cs:142
int GetRaw(int offsetHours=0)
Definition: Date.cs:328
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:301
int id
Definition: ELEMENT.cs:257
SourceElement.Row source
Definition: ELEMENT.cs:280
int vTempPotential
Definition: ELEMENT.cs:265
Act act
Definition: ELEMENT.cs:401
Thing GetMeal(Chara c)
List< Chara > members
PolicyManager policies
ConfigTactics tactics
Definition: Game.cs:91
ReligionManager religions
Definition: Game.cs:159
CardManager cards
Definition: Game.cs:156
Config config
Definition: Game.cs:219
static bool Has(string id)
Definition: LangGame.cs:99
Definition: Lang.cs:7
static LangGame Game
Definition: Lang.cs:49
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:161
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:2260
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:208
int EvalueTotal(int ele, Func< Chara, bool > funcIf=null)
Definition: Party.cs:195
Chara leader
Definition: Party.cs:31
List< Chara > members
Definition: Party.cs:19
int turns
Definition: Player.cs:84
int karma
Definition: Player.cs:945
Stats stats
Definition: Player.cs:1083
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:553
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1403
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:624
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
Definition: Point.cs:1206
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1226
bool Equals(int _x, int _z)
Definition: Point.cs:966
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:878
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:788
int Distance(Point p)
Definition: Point.cs:995
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:1146
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:774
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: Steam.cs:10
static void GetAchievement(ID_Achievement id)
Definition: Steam.cs:51
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:110
virtual AI_Idle.Behaviour IdleBehaviour
Definition: TraitChara.cs:18
virtual string IdAmbience
Definition: TraitChara.cs:138
virtual bool CanFish
Definition: TraitChara.cs:140
virtual bool IdleAct()
Definition: TraitChara.cs:142
TraitMap restSpots
Definition: TraitManager.cs:10
virtual bool AllowTraining
Definition: TraitShackle.cs:15
virtual bool CanRead(Chara c)
Definition: Trait.cs:1156
virtual bool CanEat(Chara c)
Definition: Trait.cs:1165
virtual int IdleUseChance
Definition: Trait.cs:375
virtual bool IdleUse(Chara c, int dist)
Definition: Trait.cs:679
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1174
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
static int okaerinko
Definition: Zone.cs:31
virtual bool IsNefia
Definition: Zone.cs:289
FactionBranch branch
Definition: Zone.cs:34
virtual bool IsUserZone
Definition: Zone.cs:275
Chara Boss
Definition: Zone.cs:88
virtual bool IsTown
Definition: Zone.cs:227
Chara SpawnMob(string id, Point pos=null)
Definition: Zone.cs:2885
virtual bool PetFollow
Definition: Zone.cs:291
bool IsPCFaction
Definition: Zone.cs:477
virtual bool IsUnderwater
Definition: Zone.cs:273
Card AddCard(Card t, Point point)
Definition: Zone.cs:2086