Elin Decompiled Documentation EA 23.247 Stable Patch 1
Loading...
Searching...
No Matches
AI_Idle Class Reference
Inheritance diagram for AI_Idle:
AIAct Act Element EClass

Public Types

enum  Behaviour { Default , NoMove }
 
- Public Types inherited from AIAct
enum  Status { Running , Fail , Success }
 
- Public Types inherited from Act
enum  CostType { None , MP , SP }
 

Public Member Functions

override void OnStart ()
 
override IEnumerable< StatusRun ()
 
void IdleActText (string id)
 
void TryCast< T > (EffectId id, int power=100)
 
void TryCast (EffectId id, int power=100)
 
BaseArea GetRandomAssignedRoom ()
 
Chara DoSomethingToNearChara (Func< Chara, bool > funcPickChara, Action< Chara > action=null)
 
Chara DoSomethingToCharaInRadius (int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
 
bool TryPerformIdleUse ()
 
- Public Member Functions inherited from AIAct
override string ToString ()
 
override MultiSprite GetStateIcon ()
 
virtual bool ShouldAllyAttack (Chara tg)
 
virtual Point GetDestination ()
 
AIProgress GetProgress ()
 
string GetCurrentActionText ()
 
override bool IsToolValid ()
 
virtual void OnStart ()
 
void SetOwner (Chara c)
 
virtual void OnSetOwner ()
 
void SetChild (AIAct seq, Func< Status > _onChildFail=null)
 
void Start ()
 
override bool Perform ()
 
Status Restart ()
 
Status Success (Action action=null)
 
virtual void OnSuccess ()
 
bool TryCancel (Card c)
 
virtual Status Cancel ()
 
virtual void OnCancel ()
 
virtual void OnCancelOrSuccess ()
 
virtual bool CanManualCancel ()
 
Status KeepRunning ()
 
void Reset ()
 
virtual void OnReset ()
 
Status Tick ()
 
virtual IEnumerable< StatusRun ()
 
Status TickChild ()
 
Status Do (AIAct _seq, Func< Status > _onChildFail=null)
 
Status DoGotoInteraction (Point pos, Func< Status > _onChildFail=null)
 
Status DoGoto (Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
 
Status DoGoto (Card card, Func< Status > _onChildFail=null)
 
Status DoGoto (Card card, int dist, Func< Status > _onChildFail=null)
 
Status DoGotoSpot (Card card, Func< Status > _onChildFail=null)
 
Status DoGoto< T > (Func< Status > _onChildFail=null)
 
Status DoGotoSpot< T > (Func< Status > _onChildFail=null, bool ignoreAccessType=false)
 
Status DoGrab (Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
 
Status DoGrab< T > ()
 
Status DoProgress ()
 
Status DoIdle (int repeat=3)
 
Status DoWait (int count=1)
 
virtual AIProgress CreateProgress ()
 
virtual void OnCreateProgress (Progress_Custom p)
 
virtual bool CanProgress ()
 
virtual void OnBeforeProgress ()
 
virtual void OnProgress ()
 
virtual void OnProgressComplete ()
 
void SimulateZone (int days)
 
virtual void OnSimulateZone (int days)
 
virtual void OnSimulatePosition ()
 
- Public Member Functions inherited from Act
virtual CursorInfo GetCursorIcon (Card c)
 
virtual MultiSprite GetStateIcon ()
 
override Sprite GetSprite ()
 
virtual bool ShowMouseHint (Card c)
 
virtual bool IsValidTC (Card c)
 
virtual string GetHintText (string str="")
 
virtual string GetText (string str="")
 
virtual string GetTextSmall (Card c)
 
bool IsTargetHostileParty ()
 
virtual Color GetActPlanColor ()
 
virtual bool Perform ()
 
virtual bool CanPerform ()
 
bool Perform (Chara _cc, Card _tc=null, Point _tp=null)
 
bool CanPerform (Chara _cc, Card _tc=null, Point _tp=null)
 
virtual bool IsToolValid ()
 
new void SetImage (Image image)
 
virtual void OnMarkMapHighlights ()
 
virtual bool ShouldMapHighlight (Point p)
 
- Public Member Functions inherited from Element
virtual SourceElement.Row GetSource ()
 
virtual int GetSourcePotential (int v)
 
virtual Sprite GetSprite ()
 
int GetMaterialSourceValue (Thing t, int v)
 
virtual long GetSourceValue (long v, int lv, SourceValueType type)
 
virtual Sprite GetIcon (string suffix="")
 
bool IsActive (Card c)
 
int SortVal (bool charaSheet=false)
 
virtual bool CanLink (ElementContainer owner)
 
bool HasTag (string tag)
 
void SetImage (Image i)
 
virtual string GetDetail ()
 
bool IsFactionElement (Chara c)
 
Element GetParent (Card c)
 
void WriteNote (UINote n, ElementContainer owner=null, Action< UINote > onWriteNote=null)
 
void WriteNoteWithRef (UINote n, ElementContainer owner, Action< UINote > onWriteNote, Element refEle)
 
void _WriteNote (UINote n, Chara c, Act act)
 
void AddHeaderAbility (UINote n)
 
void _WriteNote (UINote n, ElementContainer owner, Action< UINote > onWriteNote, bool isRef, bool addHeader=true)
 
void AddEncNote (UINote n, Card Card, ElementContainer.NoteMode mode=ElementContainer.NoteMode.Default, Func< Element, string, string > funcText=null, Action< UINote, Element > onAddNote=null)
 
virtual void OnWriteNote (UINote n, ElementContainer owner)
 
virtual void OnChangeValue ()
 
void CheckLevelBonus (ElementContainer owner, UINote n=null)
 
int GetSortVal (UIList.SortMode m)
 
virtual Act.Cost GetCost (Chara c)
 
virtual int GetPower (Card c)
 
virtual void SetTextValue (UIText text)
 
virtual bool IsPurchaseFeatReqMet (ElementContainer owner, int lv=-1)
 
virtual void WritePurchaseReq (UINote n, int lv=1)
 

Public Attributes

int maxRepeat = 10
 
int moveFailCount
 
- Public Attributes inherited from AIAct
new Chara owner
 
Status status
 
IEnumerator< StatusEnumerator
 
AIAct child
 
AIAct parent
 
byte restartCount
 
Func< StatusonChildFail
 
Func< bool > isFail
 
- Public Attributes inherited from Element
SourceElement.Row _source
 
int id
 
int vBase
 
int vExp
 
int vPotential
 
int vTempPotential
 
int vLink
 
int vSource
 
int vSourcePotential
 
ElementContainer owner
 

Properties

override bool IsIdle [get]
 
override bool InformCancel [get]
 
override int MaxRestart [get]
 
- Properties inherited from AIAct
virtual bool IsRunning [get]
 
bool IsChildRunning [get]
 
bool IsMoveAI [get]
 
virtual int MaxRestart [get]
 
virtual new string Name [get]
 
virtual MultiSprite stateIcon [get]
 
virtual Sprite actionIcon [get]
 
virtual bool IsNoGoal [get]
 
virtual bool IsAutoTurn [get]
 
virtual bool IsIdle [get]
 
virtual bool CancelOnAggro [get]
 
virtual bool PushChara [get]
 
virtual int MaxProgress [get]
 
virtual bool ShowProgress [get]
 
virtual bool UseTurbo [get]
 
virtual int CurrentProgress [get]
 
virtual bool ShowCursor [get]
 
virtual bool CancelWhenDamaged [get]
 
virtual bool CancelWhenMoved [get]
 
virtual bool InformCancel [get]
 
virtual Thing RenderThing [get]
 
AIAct Current [get]
 
override bool IsAct [get]
 
override bool ShowPotential [get]
 
override bool UsePotential [get]
 
override bool ShowRelativeAttribute [get]
 
virtual bool HasProgress [get]
 
- Properties inherited from Act
override bool ShowPotential [get]
 
override bool UsePotential [get]
 
override bool ShowRelativeAttribute [get]
 
virtual CursorInfo CursorIcon [get]
 
virtual string ID [get]
 
virtual bool IsAct [get]
 
virtual bool WillEndTurn [get]
 
virtual bool CloseLayers [get]
 
virtual int LeftHand [get]
 
virtual int RightHand [get]
 
virtual int ElementPowerMod [get]
 
virtual bool ShowMapHighlight [get]
 
virtual bool ShowMapHighlightBlock [get]
 
virtual bool PickHeldOnStart [get]
 
virtual bool DropHeldOnStart [get]
 
virtual bool CanPressRepeat [get]
 
virtual bool CanAutofire [get]
 
virtual bool ResetAxis [get]
 
virtual bool RequireTool [get]
 
virtual bool IsHostileAct [get]
 
virtual bool HideRightInfo [get]
 
virtual bool HaveLongPressAction [get]
 
virtual float Radius [get]
 
virtual int PerformDistance [get]
 
virtual int MaxRadius [get]
 
virtual TargetType TargetType [get]
 
virtual bool LocalAct [get]
 
virtual bool CanRapidFire [get]
 
virtual float RapidDelay [get]
 
virtual bool ShowAuto [get]
 
virtual bool IsCrime [get]
 
- Properties inherited from Element
SourceElement.Row source [get]
 
virtual int DisplayValue [get]
 
virtual int MinValue [get]
 
int Value [get]
 
int ValueWithoutLink [get]
 
virtual int MinPotential [get]
 
int Potential [get]
 
virtual bool CanGainExp [get]
 
bool IsFlag [get]
 
virtual string Name [get]
 
virtual string FullName [get]
 
virtual int ExpToNext [get]
 
virtual bool UseExpMod [get]
 
virtual int CostTrain [get]
 
virtual int CostLearn [get]
 
virtual bool ShowXP [get]
 
virtual bool ShowMsgOnValueChanged [get]
 
virtual bool ShowValue [get]
 
virtual bool ShowPotential [get]
 
virtual bool UsePotential [get]
 
virtual bool PotentialAsStock [get]
 
virtual bool ShowRelativeAttribute [get]
 
virtual bool ShowBonuses [get]
 
virtual string ShortName [get]
 
bool IsGlobalElement [get]
 
bool IsFactionWideElement [get]
 
bool IsPartyWideElement [get]
 
virtual bool ShowEncNumber [get]
 
bool IsTrait [get]
 
bool IsFoodTrait [get]
 
bool IsFoodTraitMain [get]
 
bool IsMainAttribute [get]
 
Act act [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Static Private Attributes

static List< BaseArea_listRoom = new List<BaseArea>()
 

Additional Inherited Members

- Static Public Member Functions inherited from Act
static void SetReference (Chara _cc, Card _tc=null, Point _tp=null)
 
static void SetTool (Thing t)
 
- Static Public Member Functions inherited from Element
static string GetName (string alias)
 
static SourceElement.Row Get (int id)
 
static Dictionary< int, int > GetElementMap (int[] list)
 
static Dictionary< int, int > GetElementMap (int[] list, Dictionary< int, int > map)
 
static SourceElement.Row GetRandomElement (int lv=1, bool useWeight=true)
 
static Element Create (int id, int v=0)
 
static Element Create (string id, int v=1)
 
static int GetId (string alias)
 
static int GetResistLv (int v)
 
static int GetResistDamage (int dmg, int v, int power=0)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (int _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 
- Static Public Attributes inherited from Act
static Chara CC
 
static Card TC
 
static Point TP = new Point()
 
static Thing TOOL
 
static int powerMod = 100
 
static bool forcePt
 
static Act CurrentAct
 
- Static Public Attributes inherited from Element
const int Div = 5
 
static Element Void = new Element()
 
static int[] List_MainAttributes = new int[9] { 70, 72, 71, 77, 74, 75, 76, 73, 79 }
 
static int[] List_MainAttributesMajor = new int[8] { 70, 72, 71, 77, 74, 75, 76, 73 }
 
static int[] List_Body = new int[4] { 70, 72, 71, 77 }
 
static int[] List_Mind = new int[4] { 74, 75, 76, 73 }
 
static List< SourceElement.RowListElements = new List<SourceElement.Row>()
 
static List< SourceElement.RowListAttackElements = new List<SourceElement.Row>()
 
- Static Public Attributes inherited from EClass
static Core core
 

Detailed Description

Definition at line 6 of file AI_Idle.cs.

Member Enumeration Documentation

◆ Behaviour

Enumerator
Default 
NoMove 

Definition at line 8 of file AI_Idle.cs.

Member Function Documentation

◆ DoSomethingToCharaInRadius()

Chara AI_Idle.DoSomethingToCharaInRadius ( int  radius,
Func< Chara, bool >  funcPickChara,
Action< Chara action = null 
)
inline

Definition at line 1066 of file AI_Idle.cs.

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 }
new Chara owner
Definition: AIAct.cs:14
Point pos
Definition: Card.cs:59
Definition: Chara.cs:10
bool CanSee(Card c)
Definition: Chara.cs:1218
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1220

References Chara.CanSee(), Point.ListCharasInRadius(), and Card.pos.

Referenced by Run().

◆ DoSomethingToNearChara()

Chara AI_Idle.DoSomethingToNearChara ( Func< Chara, bool >  funcPickChara,
Action< Chara action = null 
)
inline

Definition at line 1047 of file AI_Idle.cs.

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 }
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
Definition: Point.cs:1200

References Chara.CanSee(), Point.ListCharasInNeighbor(), and Card.pos.

Referenced by Run().

◆ GetRandomAssignedRoom()

BaseArea AI_Idle.GetRandomAssignedRoom ( )
inline

Definition at line 1034 of file AI_Idle.cs.

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 }
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
int uid
Definition: Card.cs:122
Definition: EClass.cs:6
static Map _map
Definition: EClass.cs:19
RoomManager rooms
Definition: Map.cs:31
List< Room > listRoom
Definition: RoomManager.cs:13
List< Area > listArea
Definition: RoomManager.cs:10

References EClass._map, item, RoomManager.listArea, RoomManager.listRoom, and Map.rooms.

◆ IdleActText()

void AI_Idle.IdleActText ( string  id)
inline

Definition at line 1010 of file AI_Idle.cs.

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 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6177
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6830
int id
Definition: ELEMENT.cs:250
Definition: Lang.cs:6
static LangGame Game
Definition: Lang.cs:48

References Lang.Game.

Referenced by Run().

◆ OnStart()

override void AI_Idle.OnStart ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 26 of file AI_Idle.cs.

27 {
28 owner.SetTempHand(-1, -1);
29 owner.ShowEmo();
30 }
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6145
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6703

References AIAct.owner, Chara.SetTempHand(), and Card.ShowEmo().

◆ Run()

override IEnumerable< Status > AI_Idle.Run ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 32 of file AI_Idle.cs.

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.IsPCParty)
73 {
74 if (!owner.IsPCFaction && 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 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.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
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
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
int moveFailCount
Definition: AI_Idle.cs:16
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1066
void IdleActText(string id)
Definition: AI_Idle.cs:1010
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1085
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
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:5871
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
int GetHearingRadius()
Definition: Card.cs:6422
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:6733
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 IsInMutterDistance(int d=10)
Definition: Card.cs:7721
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:7677
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:6196
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:5932
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)
void OnInsulted()
Definition: Chara.cs:8159
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:8835
override bool IsAliveInCurrentZone
Definition: Chara.cs:561
Thing FindBestFoodToEat()
Definition: Chara.cs:7542
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:7870
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6261
int sharedCheckTurn
Definition: Chara.cs:118
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7563
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9244
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:8070
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:7322
void PickHeld(bool msg=false)
Definition: Chara.cs:4519
bool HasCondition(string alias)
Definition: Chara.cs:9405
void Banish(Chara owner)
Definition: Chara.cs:2330
AIAct SetAI(AIAct g)
Definition: Chara.cs:8874
bool IsIdle
Definition: Chara.cs:853
TraitBed FindBed()
Definition: Chara.cs:7310
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:7340
override bool IsPCFaction
Definition: Chara.cs:671
bool HasAccess(Card c)
Definition: Chara.cs:1280
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7588
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:8517
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:6961
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:5828
Chara parasite
Definition: Chara.cs:30
Chara master
Definition: Chara.cs:88
bool IsGuest()
Definition: Chara.cs:6613
Hobby GetWork(string id)
Definition: Chara.cs:8985
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:6300
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6349
Room FindRoom()
Definition: Chara.cs:7926
Point GetDestination()
Definition: Chara.cs:7229
int turnLastSeen
Definition: Chara.cs:110
FactionBranch homeBranch
Definition: Chara.cs:1066
void Drink(Card t)
Definition: Chara.cs:5099
Hostility hostility
Definition: Chara.cs:291
bool IsHostile()
Definition: Chara.cs:6526
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7378
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:8082
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
static Game game
Definition: EClass.cs:9
static Zone _zone
Definition: EClass.cs:21
static World world
Definition: EClass.cs:41
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
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
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
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
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
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
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:112
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 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

References Lang._currency(), EClass._map, EClass._zone, Chara.ability, AreaData.accessType, Element.act, Zone.AddCard(), Chara.AddCondition(), Card.AddThing(), Chara.ai, TraitShackle.AllowTraining, ConfigTactics.AllyDistance(), Chara.Banish(), Zone.Boss, EClass.Branch, Zone.branch, Card.c_bloodData, Card.c_isImportant, Card.c_minionType, Card.c_uidMaster, AIAct.Cancel(), Trait.CanDrink(), Chara.CanDuplicate(), Trait.CanEat(), Chara.CanEat(), TraitChara.CanFish, Trait.CanRead(), Chara.CanSee(), Chara.CanSeeLos(), card, Game.cards, Card.category, Card.Cell, Point.cell, Map.charas, Chara.ClearInventory(), Game.config, ThingGen.Create(), ThingGen.CreateFromCategory(), Chara.Cuddle(), Card.DamageHP(), BaseArea.data, World.date, EClass.debug, ElementContainer.dict, Card.Dist(), Point.Distance(), AIAct.Do(), AIAct.DoGoto(), AIAct.DoGotoSpot(), Chara.DoHostileAction(), DoSomethingToCharaInRadius(), DoSomethingToNearChara(), Chara.Drink(), Chara.Duplicate(), Card.elements, CoreDebug.enable, Card.encLV, Chara.enemy, Point.Equals(), Card.Evalue(), Party.EvalueTotal(), Card.ExistsOnMap, Chara.faction, Chara.faith, Props.Find(), ThingContainer.Find(), Chara.FindBed(), Chara.FindBestFoodToEat(), Chara.FindMaster(), Chara.FindRoom(), Point.FindThing(), Point.FirstChara, Point.ForeachNeighbor(), EClass.game, AI_Clean.GetCleanPoint(), Card.GetCurrency(), Chara.GetDestination(), AI_Fish.GetFishingPoint(), CraftUtil.GetFoodScore(), Card.GetHearingRadius(), BaseCard.GetInt(), FactionBranch.GetMeal(), Chara.GetNearbyCatToSniff(), Point.GetNearestPoint(), Stats.GetPhase(), BaseArea.GetRandomPoint(), Point.GetRandomPoint(), Point.GetRandomPointInRadius(), Date.GetRaw(), CardRenderer.GetTC(), CardManager.globalCharas, ReligionManager.Harmony, CharaAbility.Has(), LangGame.Has(), Chara.HasAccess(), Point.HasChara, Chara.HasCondition(), Card.HasEditorTag(), Party.HasElement(), Card.HasElement(), Cell.HasFire, Chara.HasHobbyOrWork(), Chara.held, Chara.homeBranch, Chara.host, Chara.hostility, Card.HostRenderer, Card.hp, Chara.hunger, Card.id, Element.id, TraitChara.IdAmbience, TraitChara.IdleAct(), IdleActText(), Chara.idleActTimer, TraitChara.IdleBehaviour, if(), Map.Installed, PropsManager.installed, LayerCraft.Instance, LayerDragGrid.Instance, Chara.InstantEat(), PolicyManager.IsActive(), Chara.IsAliveInCurrentZone, Point.IsBlocked, Chara.IsCat, Card.isDestroyed, Chara.isDrunk, Card.IsEquipment, ThingContainer.IsFull(), Card.isGifted, Chara.IsGuest(), Chara.IsHostile(), Point.IsHotSpring, Chara.IsHuman, Chara.IsIdle, Point.IsInBounds, Chara.IsInCombat, Card.IsInMutterDistance(), Card.IsInstalled, Chara.IsMinion, Chara.IsMofuable, Zone.IsNefia, Date.IsNight, Chara.IsPC, Chara.IsPCC, Chara.IsPCFaction, Zone.IsPCFaction, Card.IsPCFactionOrMinion, Chara.IsPCParty, Spatial.IsRegion, Card.isRestrained, Card.IsRestrainedResident, Thing.IsSharedContainer, Cell.IsSnowTile, Chara.isSynced, Cell.IsTopWaterAndNoSnow, Zone.IsTown, Zone.IsUserZone, Point.IsValid, Los.IsVisible(), item, ActList.items, PopManager.items, Player.karma, AIAct.KeepRunning(), Party.leader, CharaAbility.list, ThingContainer.List(), Room.lot, Chara.mana, Chara.master, Stats.max, Chara.MaxHP, FactionBranch.members, Party.members, Chara.memberType, Stats.Mod(), ElementContainer.ModBase(), Card.ModCurrency(), Card.ModEncLv(), Card.ModNum(), ElementContainer.ModTempPotential(), moveFailCount, Chara.MoveNeighborDefinitely(), Chara.nextUse, Card.noMove, Card.Num, Zone.okaerinko, Chara.OnInsulted(), Chara.orgPos, Chara.OriginalHostility, AIAct.owner, Chara.parasite, Card.parent, Chara.party, EClass.pc, Chara.pccData, Zone.PetFollow, Chara.Pick(), Chara.PickHeld(), Card.PlayAnime(), EClass.player, Card.PlaySound(), FactionBranch.policies, TCText.pop, Card.pos, Point.Position(), Map.props, Chara.race, Game.religions, AIAct.Restart(), TraitManager.restSpots, EClass.rnd(), EClass.rndHalf(), Cell.room, Msg.Say(), Card.Say(), Chara.SetAI(), Chara.SetEnemy(), Chara.SetHostility(), BaseCard.SetInt(), Chara.sharedCheckTurn, Chara.Sniff(), EClass.Sound, Chara.source, Element.source, Zone.SpawnMob(), Chara.stamina, Player.stats, AIAct.Success, Game.Config.tactics, Card.Talk(), Chara.TalkTopic(), Card.Teleport(), Card.Thing, Card.things, Point.Things, ActThrow.Throw(), Card.trait, Chara.trait, Props.traits, Chara.TryAssignBed(), TryCast(), Chara.TryMoveTowards(), TryPerformIdleUse(), Chara.TryPutSharedItems(), AI_Shopping.TryRestock(), AI_Shopping.TryShop(), Chara.TryTakeSharedItems(), Chara.TryUse(), Chara.turnLastSeen, Player.Stats.turns, Chara.UseAbility(), Stats.value, Element.ValueWithoutLink, Element.vTempPotential, and EClass.world.

◆ TryCast()

void AI_Idle.TryCast ( EffectId  id,
int  power = 100 
)
inline

Definition at line 1028 of file AI_Idle.cs.

1029 {
1030 owner.Say("idle_cast", owner);
1031 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1032 }
BlessedState
Definition: BlessedState.cs:2
static void Proc(EffectId id, Card cc, Card tc=null, int power=100, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:1021

References ActEffect.Proc().

Referenced by Run().

◆ TryCast< T >()

void AI_Idle.TryCast< T > ( EffectId  id,
int  power = 100 
)
inline
Type Constraints
T :Condition 

Definition at line 1020 of file AI_Idle.cs.

1020 : Condition
1021 {
1022 if (!owner.HasCondition<T>())
1023 {
1024 TryCast(id, power);
1025 }
1026 }

◆ TryPerformIdleUse()

bool AI_Idle.TryPerformIdleUse ( )
inline

Definition at line 1085 of file AI_Idle.cs.

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 }
CTAG
Definition: CTAG.cs:2
bool HasTag(CTAG tag)
Definition: Card.cs:2595
List< Thing > things
Definition: CellDetail.cs:11
override void LookAt(Card c)
Definition: Chara.cs:3528
CellDetail detail
Definition: Point.cs:71
virtual int IdleUseChance
Definition: Trait.cs:364
virtual bool IdleUse(Chara c, int dist)
Definition: Trait.cs:648

References Point.detail, Point.GetRandomPoint(), Card.HasTag(), Trait.IdleUse(), Trait.IdleUseChance, Card.IsInstalled, EClass.rnd(), Card.things, and Card.trait.

Referenced by Run().

Member Data Documentation

◆ _listRoom

List<BaseArea> AI_Idle._listRoom = new List<BaseArea>()
staticprivate

Definition at line 18 of file AI_Idle.cs.

◆ maxRepeat

int AI_Idle.maxRepeat = 10

Definition at line 14 of file AI_Idle.cs.

◆ moveFailCount

int AI_Idle.moveFailCount

Definition at line 16 of file AI_Idle.cs.

Referenced by Run().

Property Documentation

◆ InformCancel

override bool AI_Idle.InformCancel
get

Definition at line 22 of file AI_Idle.cs.

◆ IsIdle

override bool AI_Idle.IsIdle
get

Definition at line 20 of file AI_Idle.cs.

◆ MaxRestart

override int AI_Idle.MaxRestart
get

Definition at line 24 of file AI_Idle.cs.


The documentation for this class was generated from the following file: