Elin Decompiled Documentation EA 23.324 Nightly
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 ()
 
GetChild< T > ()
 
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, bool ignoreConnection=false, 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 ()
 
bool Perform (Chara _cc, Card _tc=null, Point _tp=null)
 
virtual bool ValidatePerform (Chara _cc, Card _tc, Point _tp)
 
virtual bool CanPerform ()
 
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, bool shorten=false)
 
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]
 
override bool ShouldEndMimicry [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 ShouldEndMimicry [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]
 
- 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 long GetResistDamage (long 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 (long _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 1225 of file AI_Idle.cs.

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

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 1206 of file AI_Idle.cs.

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

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

Referenced by Run().

◆ GetRandomAssignedRoom()

BaseArea AI_Idle.GetRandomAssignedRoom ( )
inline

Definition at line 1193 of file AI_Idle.cs.

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 }
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
int uid
Definition: Card.cs:125
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 1169 of file AI_Idle.cs.

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

References Lang.Game.

Referenced by Run().

◆ OnStart()

override void AI_Idle.OnStart ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 28 of file AI_Idle.cs.

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

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

◆ Run()

override IEnumerable< Status > AI_Idle.Run ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 34 of file AI_Idle.cs.

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 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.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
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:430
virtual Status Cancel()
Definition: AIAct.cs:305
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
int moveFailCount
Definition: AI_Idle.cs:16
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1225
void IdleActText(string id)
Definition: AI_Idle.cs:1169
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1244
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
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
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 IsInMutterDistance(int d=10)
Definition: Card.cs:8191
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
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)
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 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
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
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:301
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
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
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
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
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
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 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

References Lang._currency(), EClass._map, EClass._zone, Chara.ability, AreaData.accessType, Element.act, Zone.AddCard(), Chara.AddCondition(), Chara.AddCooldown(), Card.AddThing(), Chara.affinity, 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(), Affinity.CurrentStage, 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, Steam.GetAchievement(), AI_Clean.GetCleanPoint(), Card.GetCurrency(), Chara.GetDestination(), AI_Fish.GetFishingPoint(), CraftUtil.GetFoodScore(), Card.GetHearingRadius(), Card.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.IsMarried, 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, Card.isSummon, Chara.isSynced, Cell.IsTopWaterAndNoSnow, Zone.IsTown, Zone.IsUserZone, Point.IsValid, Los.IsVisible(), Affinity.IsWeddingHater, item, ActList.items, PopManager.items, Player.karma, AIAct.KeepRunning(), Party.leader, CharaAbility.list, ThingContainer.List(), Room.lot, Card.LV, Chara.mana, Chara.master, Stats.max, Chara.MaxHP, FactionBranch.members, Party.members, Chara.memberType, Chara.mimicry, 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, ConBaseTransmuteMimic.Reveal(), Chara.ride, EClass.rnd(), EClass.rndHalf(), Cell.room, Msg.Say(), Card.Say(), Chara.SetAI(), Chara.SetEnemy(), Chara.SetHostility(), Card.SetInt(), Card.SetNum(), Card.SetRandomDir(), 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.TryClearInventory(), Chara.TryFuse(), Chara.TryMoveTowards(), TryPerformIdleUse(), Chara.TryPutSharedItems(), AI_Shopping.TryRestock(), AI_Shopping.TryShop(), Chara.TryTakeSharedItems(), Chara.TryUse(), Point.TryWitnessCrime(), 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 1187 of file AI_Idle.cs.

1188 {
1189 owner.Say("idle_cast", owner);
1190 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1191 }
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:1017

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 1179 of file AI_Idle.cs.

1179 : Condition
1180 {
1181 if (!owner.HasCondition<T>())
1182 {
1183 TryCast(id, power);
1184 }
1185 }

◆ TryPerformIdleUse()

bool AI_Idle.TryPerformIdleUse ( )
inline

Definition at line 1244 of file AI_Idle.cs.

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

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.

◆ ShouldEndMimicry

override bool AI_Idle.ShouldEndMimicry
get

Definition at line 26 of file AI_Idle.cs.


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