Elin Decompiled Documentation EA 23.333 Myaightly 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 ()
 
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 1234 of file AI_Idle.cs.

1235 {
1236 List<Chara> list = owner.pos.ListCharasInRadius(owner, radius, delegate(Chara c)
1237 {
1238 if (c == owner || !owner.CanSee(c))
1239 {
1240 return false;
1241 }
1242 return funcPickChara == null || funcPickChara(c);
1243 });
1244 if (list.Count > 0)
1245 {
1246 Chara chara = list.RandomItem();
1247 action?.Invoke(chara);
1248 return chara;
1249 }
1250 return null;
1251 }
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 1215 of file AI_Idle.cs.

1216 {
1217 List<Chara> list = owner.pos.ListCharasInNeighbor(delegate(Chara c)
1218 {
1219 if (c == owner || !owner.CanSee(c))
1220 {
1221 return false;
1222 }
1223 return funcPickChara == null || funcPickChara(c);
1224 });
1225 if (list.Count > 0)
1226 {
1227 Chara chara = list.RandomItem();
1228 action?.Invoke(chara);
1229 return chara;
1230 }
1231 return null;
1232 }
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 1202 of file AI_Idle.cs.

1203 {
1204 _listRoom.Clear();
1205 foreach (BaseArea item in ((IEnumerable<BaseArea>)EClass._map.rooms.listRoom).Concat((IEnumerable<BaseArea>)EClass._map.rooms.listArea))
1206 {
1207 if (item.type != null && item.type.uidCharas.Contains(owner.uid))
1208 {
1209 _listRoom.Add(item);
1210 }
1211 }
1212 return _listRoom.RandomItem();
1213 }
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 1178 of file AI_Idle.cs.

1179 {
1180 string text = "idle_" + id;
1181 owner.PlaySound(text);
1182 if (Lang.Game.map.ContainsKey(text))
1183 {
1184 owner.Say(text, owner);
1185 }
1186 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6626
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7304
int id
Definition: ELEMENT.cs:259
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:6594
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:7074

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 if (owner == null)
175 {
176 yield return Success();
177 }
178 owner.AddCooldown(actHeal.id, 5);
179 owner.Talk("no_problem");
181 }
182 }
183 else if (!EClass.pc.HasCondition<ConHolyVeil>() && owner.UseAbility(8500, EClass.pc, null, pt: true))
184 {
185 if (owner == null)
186 {
187 yield return Success();
188 }
189 owner.AddCooldown(8500, 30);
190 owner.Talk("no_problem");
191 }
192 }
193 }
194 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))
195 {
196 yield return KeepRunning();
197 }
198 }
199 }
201 {
203 if (owner.sharedCheckTurn < 0 && EClass.rnd(EClass.debug.enable ? 2 : 20) == 0)
204 {
207 owner.sharedCheckTurn += (EClass.debug.enable ? 20 : 200);
208 }
209 }
210 if ((EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (owner.IsPCParty ? 10 : (owner.IsPCFaction ? 2 : 0)) > EClass.rnd(100))
211 {
212 Thing thing2 = owner.things.Find("polish_powder");
213 if (thing2 != null && EClass._map.props.installed.Find<TraitGrindstone>() != null)
214 {
215 foreach (Thing thing10 in owner.things)
216 {
217 if (!thing10.IsEquipment || thing10.encLV >= 0)
218 {
219 continue;
220 }
221 for (int l = 0; l < 5; l++)
222 {
223 if (thing10.encLV >= 0)
224 {
225 break;
226 }
227 owner.Say("polish", owner, thing10);
228 thing10.ModEncLv(1);
229 thing2.ModNum(-1);
230 if (thing2.isDestroyed)
231 {
232 break;
233 }
234 }
235 if (thing2.isDestroyed)
236 {
237 break;
238 }
239 }
240 }
241 }
242 if (owner.IsPCParty)
243 {
245 {
246 TraitShackle traitShackle = owner.pos.FindThing<TraitShackle>();
247 if (traitShackle != null && traitShackle.AllowTraining)
248 {
250 {
251 shackle = traitShackle
252 });
253 }
254 yield return Restart();
255 }
256 if (EClass.rnd(20) == 0)
257 {
258 Thing thing3 = owner.things.Find((Thing a) => a.parent == owner && a.isGifted && (a.category.id == "skillbook" || a.category.id == "ancientbook"));
259 if (thing3 != null && thing3.trait.CanRead(owner) && (thing3.Num == 1 || !owner.things.IsFull()))
260 {
261 yield return Do(new AI_Read
262 {
263 target = thing3
264 });
265 }
266 }
267 if (!EClass._zone.IsRegion)
268 {
269 if (EClass.rnd(100) == 0 && owner.HasElement(1227))
270 {
271 List<Chara> list2 = new List<Chara>();
272 foreach (Chara member in EClass.pc.party.members)
273 {
274 if (member.Evalue(1227) > 0)
275 {
276 list2.Add(member);
277 }
278 }
279 if (list2.Count > 2 + EClass.pc.party.EvalueTotal(1272, (Chara c) => c.IsPC || c.faith == EClass.game.religions.Harmony))
280 {
281 list2.Remove(owner);
282 owner.SetEnemy(list2.RandomItem());
283 yield return Success();
284 }
285 }
286 if (EClass.rnd(20) == 0 && owner.IsMarried)
287 {
288 List<Chara> list3 = new List<Chara>();
289 foreach (Chara member2 in EClass.pc.party.members)
290 {
291 if (member2 != owner && member2.IsMarried)
292 {
293 list3.Add(member2);
294 }
295 }
296 if (list3.Count > EClass.pc.Evalue(1276))
297 {
298 owner.SetEnemy(list3.RandomItem());
299 yield return Success();
300 }
301 }
302 }
303 if (EClass.rnd(150) == 0 && owner.host != null && owner.host.parasite == owner && owner.GetInt(108) == 1)
304 {
305 owner.host.PlaySound("whip");
306 owner.host.Say("use_whip3", owner, owner.host);
307 owner.Talk("insult");
308 owner.host.PlayAnime(AnimeID.Shiver);
309 owner.host.DamageHP(5 + EClass.rndHalf(owner.host.MaxHP / 5), 919, 100, AttackSource.Condition);
311 yield return KeepRunning();
312 }
313 if (EClass.rnd(EClass.debug.enable ? 2 : 20) == 0 && owner.CanSee(EClass.pc) && !(EClass.pc.ai is AI_Eat))
314 {
316 }
317 if (owner.isSynced && EClass.rnd((owner.host == null) ? 200 : 150) == 0 && owner.GetInt(106) == 0)
318 {
319 if (EClass.rnd(2) == 0 && owner.GetInt(108) == 1)
320 {
321 owner.Talk("insult");
322 }
323 else
324 {
326 }
327 }
328 if (EClass.rnd(100) == 0 && EClass._zone.IsTown)
329 {
331 }
332 if ((EClass.rnd(20) == 0 || EClass.debug.enable) && owner.GetCurrency() >= 500)
333 {
334 bool flag = EClass._zone.IsTown;
336 {
337 foreach (Chara member3 in EClass._zone.branch.members)
338 {
339 if (member3.ExistsOnMap && member3.trait is TraitTrainer)
340 {
341 flag = true;
342 }
343 }
344 }
345 if (flag)
346 {
347 bool flag2 = false;
348 foreach (Element value in owner.elements.dict.Values)
349 {
350 if (!(value.source.category != "skill") && value.vTempPotential < 900)
351 {
352 flag2 = true;
353 break;
354 }
355 }
356 if (flag2)
357 {
358 int num2 = owner.GetCurrency();
359 if (num2 >= 20000)
360 {
361 num2 = 20000;
362 }
363 owner.PlaySound("pay");
364 int num3 = num2 / 200;
365 foreach (Element value2 in owner.elements.dict.Values)
366 {
367 if (!(value2.source.category != "skill"))
368 {
369 int num4 = num3 * 100 / (100 + (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) * (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) / 100);
370 num4 += 1 + EClass.rnd(3);
371 owner.elements.ModTempPotential(value2.id, Mathf.Max(1, num4), 9999);
372 }
373 }
374 Msg.Say("party_train", owner, Lang._currency(num2));
375 owner.PlaySound("ding_potential");
376 owner.ModCurrency(-num2);
377 }
378 }
379 }
380 if (EClass.rnd(100) == 0 && EClass.pc.ai is AI_Fish && owner.stamina.value > 0 && owner.things.Find<TraitToolFishing>() != null)
381 {
382 Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(0, 3);
383 if (randomPointInRadius != null)
384 {
385 randomPointInRadius = AI_Fish.GetFishingPoint(randomPointInRadius);
386 if (randomPointInRadius.IsValid)
387 {
388 yield return Do(new AI_Fish
389 {
390 pos = randomPointInRadius
391 });
392 }
393 }
394 }
395 }
396 if (owner.c_uidMaster != 0)
397 {
398 Chara chara2 = owner.master;
399 if (chara2 == null || !chara2.IsAliveInCurrentZone)
400 {
401 chara2 = owner.FindMaster();
402 }
403 if (chara2 != null && chara2.IsAliveInCurrentZone)
404 {
405 if (owner.enemy == null)
406 {
407 owner.SetEnemy(chara2.enemy);
408 }
409 int num5 = owner.Dist(chara2.pos);
410 if (owner.source.aiIdle != "root" && num5 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
411 {
412 if (owner.HasAccess(chara2.pos))
413 {
414 owner.TryMoveTowards(chara2.pos);
415 }
416 yield return KeepRunning();
417 continue;
418 }
419 }
420 }
421 if (!EClass._zone.IsRegion)
422 {
423 if (EClass.rnd(5) == 0 && owner.HasElement(1425) && owner.mimicry == null)
424 {
425 owner.UseAbility(8794, owner);
426 }
427 if (EClass.rnd((!(owner.id == "unseenhand")) ? 10 : (owner.isSummon ? 9999 : 2)) == 0 && owner.HasElement(1427) && owner.mimicry == null)
428 {
429 owner.UseAbility(8796, owner);
430 }
432 {
434 {
435 owner.DoHostileAction(c, immediate: true);
437 if (owner.mimicry != null)
438 {
439 owner.mimicry.Reveal(c, surprise: true);
440 }
441 });
442 }
443 }
444 if (owner.mimicry != null && owner.HasElement(1429))
445 {
447 }
448 Party party = owner.party;
449 if (party == null || party.leader == owner || !party.leader.IsAliveInCurrentZone || owner.host != null || !EClass._zone.PetFollow)
450 {
451 break;
452 }
453 if (owner.source.aiIdle == "root")
454 {
455 yield return KeepRunning();
456 continue;
457 }
459 {
460 yield return KeepRunning();
461 continue;
462 }
463 if (owner.HasAccess(party.leader.pos) && owner.TryMoveTowards(party.leader.pos) == Card.MoveResult.Fail && owner.Dist(party.leader) > 4)
464 {
466 bool flag3 = (EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (EClass.pc.enemy == null || !EClass.pc.enemy.IsAliveInCurrentZone);
467 if (moveFailCount >= (flag3 ? 100 : 10))
468 {
469 owner.Teleport(party.leader.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), silent: false, force: true);
470 moveFailCount = 0;
471 }
472 }
473 else
474 {
475 moveFailCount = 0;
476 }
477 yield return KeepRunning();
478 }
479 if (EClass._zone.IsNefia && EClass._zone.Boss == owner && EClass.rnd(20) == 0)
480 {
482 }
483 if (EClass._zone.IsRegion && EClass.rnd(10) != 0)
484 {
485 yield return Restart();
486 }
487 if (((owner.homeBranch != null && owner.homeBranch == EClass.Branch && EClass.rnd(100) == 0) || (owner.IsGuest() && EClass.rnd(50) == 0)) && owner.FindBed() == null)
488 {
490 }
491 if (!EClass._zone.IsRegion)
492 {
493 switch (owner.id)
494 {
495 case "azzrasizzle":
496 case "geist":
497 {
499 {
500 break;
501 }
502 Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
503 if (nearestPoint == null)
504 {
505 break;
506 }
507 foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion && _c.id != "cocoon" && _c.id != "cocoon_alien"))
508 {
509 item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
510 }
511 if (owner != null)
512 {
514 {
515 EClass.pc.ai.Cancel();
516 }
517 owner.Teleport(nearestPoint);
518 }
519 yield return Success();
520 break;
521 }
522 case "spider_queen":
523 {
524 if (EClass.rnd(20) != 0 || !owner.CanDuplicate(DuplicateCondition.SpiderEgg) || EClass._zone.IsUserZone)
525 {
526 break;
527 }
528 int j = 0;
529 owner.pos.ForeachNeighbor(delegate(Point p)
530 {
531 if (p.HasChara && p.FirstChara.id == "cocoon")
532 {
533 j++;
534 }
535 });
536 if (j < 2)
537 {
538 Point randomPoint = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
539 if (randomPoint != null)
540 {
541 Chara chara3 = EClass._zone.SpawnMob("cocoon", randomPoint);
542 owner.Say("egglay", owner);
544 }
545 }
546 break;
547 }
548 case "mech_scarab":
549 {
551 {
552 break;
553 }
554 int i = 0;
555 owner.pos.ForeachNeighbor(delegate(Point p)
556 {
557 if (p.HasChara && p.FirstChara.id == "mech_scarab")
558 {
559 i++;
560 }
561 });
562 if (i >= 2)
563 {
564 break;
565 }
566 Point randomPoint2 = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
567 if (randomPoint2 != null)
568 {
569 Card c2 = EClass._zone.AddCard(owner.Duplicate(), randomPoint2);
570 if (randomPoint2.Distance(EClass.pc.pos) < EClass.pc.GetHearingRadius())
571 {
572 Msg.Say("self_dupe", owner, c2);
573 }
574 }
575 break;
576 }
577 case "imotoroid":
578 case "marshmallow_monster":
579 if (owner.TryFuse(0.001f))
580 {
581 yield return Success();
582 }
583 break;
584 }
585 }
586 if (owner.IsMinion && owner.master != null && owner.master.id == "keeper_garden" && !(owner.master.ai is GoalCombat))
587 {
589 yield return Success();
590 }
592 {
593 Room room = owner.pos.cell.room;
594 if (room != null)
595 {
596 Point point = null;
597 if (owner.memberType == FactionMemberType.Guest && room.data.accessType != 0)
598 {
599 point = FindMovePoint(BaseArea.AccessType.Public);
600 }
601 else if (owner.memberType == FactionMemberType.Default && room.data.accessType == BaseArea.AccessType.Private)
602 {
603 point = FindMovePoint(BaseArea.AccessType.Resident) ?? FindMovePoint(BaseArea.AccessType.Public);
604 }
605 if (point != null)
606 {
607 yield return DoGoto(point);
608 }
609 }
610 }
611 string id;
612 int num;
614 {
615 if (owner.IsPCFaction && owner.GetInt(32) + 4320 < EClass.world.date.GetRaw())
616 {
617 if (owner.GetInt(32) != 0 && Zone.okaerinko < 10)
618 {
619 owner.Talk("welcomeBack");
620 Zone.okaerinko++;
621 }
623 }
625 {
627 {
628 id = "money";
629 num = EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(500)))) + 1;
630 string[] strs = new string[4] { "1294", "1294", "1130", "1131" };
631 ThrowMethod throwMethod = ThrowMethod.Reward;
633 {
634 owner.Talk("curse_wed");
635 throwMethod = ThrowMethod.Punish;
636 SetId("stone", 1);
637 if (EClass.rnd(3) == 0)
638 {
639 SetId("shuriken", 1);
640 }
641 if (EClass.rnd(3) == 0)
642 {
643 SetId("explosive", 1);
644 }
645 if (EClass.rnd(3) == 0)
646 {
647 SetId("explosive_mega", 1);
648 }
649 if (EClass.rnd(3) == 0)
650 {
651 SetId("rock", 1);
652 }
653 }
654 else
655 {
656 if (EClass.rnd(2) == 0)
657 {
658 owner.PlaySound((EClass.rnd(3) == 0) ? "clap1" : ((EClass.rnd(2) == 0) ? "clap2" : "clap3"));
659 }
660 owner.Talk("grats_wed");
661 if (EClass.rnd(5) == 0)
662 {
663 SetId("money2", 1);
664 }
665 if (EClass.rnd(4) == 0)
666 {
667 SetId("plat", 1);
668 }
669 if (EClass.rnd(3) == 0)
670 {
671 SetId(strs.RandomItem(), 1);
672 }
673 }
674 Thing thing4 = ThingGen.Create(id, -1, owner.LV).SetNum(num);
675 thing4.SetRandomDir();
676 ActThrow.Throw(owner, EClass.pc.pos, thing4, throwMethod);
677 if (EClass.pc.IsAliveInCurrentZone && throwMethod == ThrowMethod.Reward && thing4.ExistsOnMap && thing4.pos.Equals(EClass.pc.pos) && !strs.Contains(thing4.id))
678 {
679 EClass.pc.Pick(thing4);
680 }
681 }
682 else if (EClass.rnd(5) == 0 && owner.hostility >= Hostility.Neutral && EClass.pc.IsPCC && EClass.pc.pccData.state == PCCState.Undie && !EClass.pc.pos.cell.IsTopWaterAndNoSnow)
683 {
684 owner.Talk("pervert3");
685 }
686 else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
687 {
688 bool flag4 = EClass._zone is Zone_Derphy;
689 string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
690 if (!text.IsEmpty())
691 {
692 owner.Talk(text);
693 }
694 if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
695 {
696 Thing t2 = ThingGen.Create("stone", -1, owner.LV);
697 AI_PlayMusic.ignoreDamage = true;
699 AI_PlayMusic.ignoreDamage = false;
700 }
701 }
702 else
703 {
704 owner.TalkTopic("fov");
705 }
706 owner.turnLastSeen = EClass.player.stats.turns;
707 }
708 }
709 if (EClass.rnd(25) == 0 && owner.IsInMutterDistance())
710 {
712 {
713 owner.PlayAnime(AnimeID.Shiver);
714 }
716 if (tC == null || tC.pop.items.Count == 0)
717 {
718 if (owner.noMove)
719 {
720 foreach (Thing thing11 in owner.pos.Things)
721 {
722 if (thing11.IsInstalled && thing11.trait is TraitGeneratorWheel)
723 {
724 owner.Talk("labor");
725 owner.PlayAnime(AnimeID.Shiver);
726 yield return Restart();
727 }
728 }
729 }
730 if (owner.isDrunk && (owner.race.id == "cat" || owner.id == "sailor"))
731 {
732 owner.Talk("drunk_cat");
733 }
734 else if (owner.isRestrained)
735 {
736 owner.Talk("restrained");
737 }
738 else if (owner.GetInt(106) == 0 && !owner.IsPCParty)
739 {
740 if (owner.HasElement(1232) && EClass.rnd(4) == 0)
741 {
742 owner.Talk("baby");
743 }
744 else if (EClass.rnd((owner.host == null) ? 2 : 10) == 0 && owner.isSynced && owner.TalkTopic().IsEmpty())
745 {
746 owner.Talk(owner.pos.IsHotSpring ? "hotspring" : "idle");
747 }
748 }
749 }
750 }
751 if (EClass.rnd(8) == 0 && owner.race.id == "chicken")
752 {
753 owner.PlaySound("Animal/Chicken/chicken");
754 }
755 if (EClass.rnd(80) == 0 && owner.race.id == "cat")
756 {
757 owner.PlaySound("Animal/Cat/cat");
758 }
759 if (owner.trait.IdAmbience != null && owner.IsInMutterDistance(15))
760 {
761 float mtp = 1f;
762 Room room2 = owner.Cell.room;
763 Room room3 = EClass.pc.Cell.room;
764 if (room2 != room3 && room3 != null)
765 {
766 mtp = ((room2?.lot != room3?.lot) ? 0.4f : 0.7f);
767 }
768 EClass.Sound.PlayAmbience(owner.trait.IdAmbience, owner.pos.Position(), mtp);
769 }
770 if (EClass.rnd((EClass._zone is Zone_Wedding && !owner.HasCondition<ConDrunk>()) ? 30 : 2000) == 0 && owner.IsHuman && (owner.host == null || owner.host.ride != owner))
771 {
772 Thing thing5 = owner.things.Find((Thing a) => !a.IsNegativeGift && a.trait.CanDrink(owner), recursive: false);
773 if (thing5 != null && thing5.trait is TraitPotion && owner.IsPCParty)
774 {
775 thing5 = null;
776 }
777 bool flag5 = EClass.Branch != null && EClass.Branch.policies.IsActive(2503);
778 if (owner.homeBranch != null && owner.homeBranch.policies.IsActive(2503))
779 {
780 flag5 = true;
781 }
782 if (thing5 == null && !flag5)
783 {
784 thing5 = ThingGen.Create("crimAle");
785 owner.Drink(thing5);
786 }
787 if (thing5 != null && !thing5.isDestroyed)
788 {
789 owner.TryUse(thing5);
790 yield return Restart();
791 }
792 }
793 if (EClass.rnd(owner.IsPCParty ? 1000 : 200) == 0 && owner.isDrunk && (owner.isSynced || EClass.rnd(5) == 0))
794 {
795 DoSomethingToCharaInRadius(3, null, delegate(Chara c)
796 {
797 owner.Say("drunk_mess", owner, c);
798 owner.Talk("drunk_mess");
799 bool flag7 = EClass.rnd(5) == 0 && !c.IsPC;
800 if (c.IsPCParty && owner.hostility >= Hostility.Friend)
801 {
802 flag7 = false;
803 }
804 if (flag7)
805 {
806 owner.Say("drunk_counter", c, owner);
807 c.Talk("drunk_counter");
809 }
810 });
811 }
812 if (EClass.rnd(100) == 0 && owner.trait.CanFish && owner.stamina.value > 0)
813 {
814 Point fishingPoint = AI_Fish.GetFishingPoint(owner.pos);
815 if (fishingPoint.IsValid)
816 {
817 yield return Do(new AI_Fish
818 {
819 pos = fishingPoint
820 });
821 }
822 }
823 string idAct = owner.source.actIdle.RandomItem();
824 if (EClass.rnd(EClass.world.date.IsNight ? 1500 : 15000) == 0 && !owner.IsPCFaction && !owner.noMove)
825 {
826 owner.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
827 }
828 if (!owner.noMove)
829 {
830 if (EClass.rnd(3) == 0 && owner.IsCat)
831 {
832 Chara chara4 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem());
833 Thing thing6 = chara4.things.Find<TraitFoodChuryu>();
834 if (chara4 != owner && thing6 != null)
835 {
836 yield return Do(new AI_Churyu
837 {
838 churyu = thing6,
839 slave = chara4
840 });
841 }
842 }
843 if (EClass.rnd(100) == 0 && (owner.HasHobbyOrWork("Pet") || owner.HasHobbyOrWork("Fluffy")))
844 {
845 yield return Do(new AI_Mofu());
846 }
847 }
848 if (EClass.rnd((owner.host != null && owner.GetInt(106) != 0) ? 1000 : 40) == 0 && owner.IsHuman)
849 {
850 DoSomethingToNearChara((Chara c) => (!c.IsPCParty || EClass.rnd(5) == 0) && c.IsMofuable && !owner.IsHostile(c) && !c.IsInCombat && owner.CanSee(c), delegate(Chara c)
851 {
852 owner.Cuddle(c);
853 });
854 yield return KeepRunning();
855 }
856 if (EClass.rnd(100) == 0)
857 {
858 bool flag6 = owner.HasElement(1291);
859 if (owner.trait is TraitBitch || flag6)
860 {
861 Chara chara5 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0);
862 if (chara5 != null)
863 {
864 yield return Do(new AI_Fuck
865 {
866 target = chara5,
867 variation = ((!flag6) ? AI_Fuck.Variation.Bitch : AI_Fuck.Variation.MotherMilk)
868 });
869 }
870 }
871 }
872 if (EClass.rnd(50) == 0 && owner.trait is TraitBard)
873 {
874 yield return Do(new AI_PlayMusic());
875 }
876 if (EClass.rnd(4) == 0 && TryPerformIdleUse())
877 {
878 yield return Restart();
879 }
880 if (EClass.rnd(20) == 0 && owner.trait.IdleAct())
881 {
882 yield return Restart();
883 }
884 if (idAct == "janitor" && EClass.rnd(5) == 0)
885 {
886 DoSomethingToCharaInRadius(4, null, delegate(Chara c)
887 {
888 if (c.HasElement(1211) && !(EClass._zone is Zone_Casino))
889 {
890 owner.Talk("snail");
891 Thing t4 = ThingGen.Create("1142");
892 ActThrow.Throw(owner, c.pos, t4);
893 }
894 });
895 yield return Restart();
896 }
898 {
899 TraitShackle traitShackle2 = owner.pos.FindThing<TraitShackle>();
900 if (traitShackle2 != null && traitShackle2.AllowTraining)
901 {
903 {
904 shackle = traitShackle2
905 });
906 yield return Restart();
907 }
908 }
909 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>())
910 {
912 }
913 if (EClass.rnd(200) == 0 && !owner.noMove)
914 {
915 Point cleanPoint = AI_Clean.GetCleanPoint(owner, 4);
916 if (cleanPoint != null)
917 {
918 yield return Do(new AI_Clean
919 {
920 pos = cleanPoint
921 });
922 }
923 }
924 if (EClass.rnd(owner.isSynced ? 10 : 2000) == 0 && owner.ability.Has(5058))
925 {
926 if (!owner.UseAbility(5058) && !owner.IsPCFaction)
927 {
930 if (owner.isSynced)
931 {
933 }
934 }
935 yield return Restart();
936 }
937 if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
938 {
939 foreach (Chara chara6 in EClass._map.charas)
940 {
941 if (EClass.rnd(3) != 0 && chara6 != owner && chara6.pos.cell.IsSnowTile && chara6.Dist(owner) <= 6 && Los.IsVisible(chara6, owner))
942 {
943 Thing t3 = ThingGen.Create("snow");
944 ActThrow.Throw(owner, chara6.pos, t3);
945 break;
946 }
947 }
948 }
949 if (EClass.rnd(EClass.debug.enable ? 3 : 30) == 0)
950 {
951 Thing thing7 = owner.things.Find<TraitBall>();
952 if (thing7 == null)
953 {
955 {
956 owner.pos.ForeachNeighbor(delegate(Point p)
957 {
958 Card card2 = p.FindThing<TraitBall>()?.owner;
959 if (card2 != null)
960 {
961 owner.Pick(card2.Thing);
962 }
963 });
964 }
965 }
966 else
967 {
968 foreach (Chara chara7 in EClass._map.charas)
969 {
970 if (EClass.rnd(3) != 0 && chara7 != owner && chara7.Dist(owner) <= 6 && chara7.Dist(owner) >= 3 && Los.IsVisible(chara7, owner))
971 {
972 ActThrow.Throw(owner, chara7.pos, thing7);
973 break;
974 }
975 }
976 }
977 }
978 if (EClass.rnd(20) == 0 && AI_Shopping.TryShop(owner, realtime: true))
979 {
980 yield return Restart();
981 }
982 if (EClass.rnd(20) == 0 && owner.IsPCFaction && AI_Shopping.TryRestock(owner, realtime: true))
983 {
984 yield return Restart();
985 }
987 if (owner.idleActTimer <= 0 && !owner.source.actIdle.IsEmpty())
988 {
989 owner.idleActTimer = 10 + EClass.rnd(50);
990 switch (idAct)
991 {
992 case "torture_snail":
993 DoSomethingToNearChara((Chara c) => c.race.id == "snail", delegate(Chara c)
994 {
995 owner.Say("use_whip3", owner, c);
996 owner.PlaySound("whip");
997 owner.Talk("insult");
998 if (c.IsPC)
999 {
1000 Steam.GetAchievement(ID_Achievement.SNAIL);
1001 }
1002 c.PlayAnime(AnimeID.Shiver);
1003 c.OnInsulted();
1004 });
1005 break;
1006 case "buffMage":
1007 if (EClass.rnd(2) == 0)
1008 {
1009 TryCast<ConHolyVeil>(EffectId.HolyVeil, 300 + EClass.rnd(300));
1010 }
1011 else
1012 {
1013 TryCast<ConLevitate>(EffectId.Levitate, 300 + EClass.rnd(300));
1014 }
1015 break;
1016 case "buffThief":
1017 TryCast<ConNightVision>(EffectId.CatsEye, 100 + EClass.rnd(100));
1018 break;
1019 case "buffGuildWatch":
1020 TryCast<ConGravity>(EffectId.Gravity, 300 + EClass.rnd(300));
1021 break;
1022 case "buffHealer":
1023 TryCast(EffectId.Heal);
1024 break;
1025 case "readBook":
1026 {
1027 if (EClass.rnd(2) == 0 || (owner.IsPCParty && EClass.rnd(20) != 0))
1028 {
1029 break;
1030 }
1031 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);
1032 Thing thing8 = null;
1033 if (list4.Count > 0)
1034 {
1035 thing8 = list4.RandomItem();
1036 if (!thing8.trait.CanRead(owner))
1037 {
1038 thing8 = null;
1039 }
1040 }
1041 if (thing8 == null)
1042 {
1043 if (owner.things.IsFull())
1044 {
1045 break;
1046 }
1047 thing8 = ThingGen.CreateFromCategory((EClass.rnd(5) != 0) ? "spellbook" : "ancientbook");
1048 thing8.isNPCProperty = true;
1049 }
1050 if (!(thing8.id == "1084") || !owner.IsPCFaction)
1051 {
1052 if (!owner.HasElement(285))
1053 {
1054 owner.elements.ModBase(285, 1);
1055 }
1056 yield return Do(new AI_Read
1057 {
1058 target = thing8
1059 });
1060 }
1061 break;
1062 }
1063 default:
1064 if (LangGame.Has("idle_" + idAct))
1065 {
1066 IdleActText(idAct);
1067 }
1068 break;
1069 }
1070 yield return Restart();
1071 }
1072 if (owner.host != null)
1073 {
1074 yield return Restart();
1075 }
1077 {
1079 {
1080 yield return DoGoto(owner.orgPos);
1081 }
1082 yield return Restart();
1083 }
1085 {
1086 yield return DoGoto(EClass.pc);
1087 }
1088 if (EClass.rnd(100) == 0 && !owner.IsPCFaction)
1089 {
1090 if (owner.id == "ashland" || owner.id == "fiama")
1091 {
1092 Card card = EClass._map.Installed.traits.restSpots.RandomItem();
1093 if (card != null)
1094 {
1095 yield return DoGotoSpot(card);
1096 }
1097 else
1098 {
1099 Room room4 = owner.FindRoom();
1100 if (room4 != null)
1101 {
1102 yield return DoGoto(room4.GetRandomPoint().GetNearestPoint());
1103 }
1104 }
1105 }
1107 {
1108 yield return DoGoto(owner.orgPos, 0, ignoreConnection: false, delegate
1109 {
1110 if (!EClass._zone.IsPCFaction)
1111 {
1112 owner.Teleport(owner.orgPos, silent: false, force: true);
1113 }
1114 return Status.Success;
1115 });
1116 }
1117 }
1118 if (EClass.rnd(100) == 0 && owner.id == "bee")
1119 {
1120 Thing thing9 = EClass._map.ListThing<TraitBeekeep>()?.RandomItem();
1121 if (thing9 != null)
1122 {
1123 yield return DoGoto(thing9.pos);
1124 }
1125 }
1126 if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
1127 {
1128 for (int m = 0; m < 100; m++)
1129 {
1130 Point randomPoint3 = EClass._map.GetRandomPoint();
1131 if (randomPoint3.IsDeepWater && !randomPoint3.IsBlocked)
1132 {
1133 yield return DoGoto(randomPoint3);
1134 break;
1135 }
1136 }
1137 }
1138 string aiIdle = owner.source.aiIdle;
1139 if (!(aiIdle == "stand") && !(aiIdle == "root"))
1140 {
1141 if (EClass.rnd(15) == 0 && (owner.mimicry == null || owner.mimicry.IsChara))
1142 {
1143 owner.MoveRandom();
1144 }
1145 if (owner == null)
1146 {
1147 yield return Cancel();
1148 }
1149 }
1150 if (EClass._zone.IsPCFaction && owner.IsPCFaction && !owner.IsPCParty && (owner.GetWork("Clean") != null || owner.GetWork("Chore") != null) && !(EClass.pc.ai is AI_UseCrafter))
1151 {
1152 AI_Haul aI_Haul = AI_Haul.TryGetAI(owner);
1153 if (aI_Haul != null)
1154 {
1155 yield return Do(aI_Haul);
1156 }
1157 }
1158 yield return Restart();
1159 Point FindMovePoint(BaseArea.AccessType type)
1160 {
1161 for (int n = 0; n < 20; n++)
1162 {
1163 Point randomPoint4 = owner.pos.GetRandomPoint(5 + n, requireLos: false);
1164 if (randomPoint4 != null && randomPoint4.IsInBounds && (randomPoint4.cell.room == null || randomPoint4.cell.room.data.accessType == type))
1165 {
1166 return randomPoint4;
1167 }
1168 }
1169 return null;
1170 }
1171 void SetId(string _id, int _num)
1172 {
1173 id = _id;
1174 num = _num;
1175 }
1176 }
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:1215
int moveFailCount
Definition: AI_Idle.cs:16
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1234
void IdleActText(string id)
Definition: AI_Idle.cs:1178
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1253
void TryCast(EffectId id, int power=100)
Definition: AI_Idle.cs:1196
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:6175
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:6875
int c_uidMaster
Definition: Card.cs:1489
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3277
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:7186
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:3673
int GetCurrency(string id="money")
Definition: Card.cs:4153
Thing c_bloodData
Definition: Card.cs:1969
bool IsInMutterDistance(int d=10)
Definition: Card.cs:8229
Trait trait
Definition: Card.cs:54
void ModCurrency(int a, string id="money")
Definition: Card.cs:4139
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:4273
void ModEncLv(int a)
Definition: Card.cs:4024
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:8185
bool isGifted
Definition: Card.cs:785
Cell Cell
Definition: Card.cs:2107
void SetRandomDir()
Definition: Card.cs:6688
int Num
Definition: Card.cs:161
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6645
SourceCategory.Row category
Definition: Card.cs:2101
void ModNum(int a, bool notify=true)
Definition: Card.cs:3693
int GetInt(string id, int? defaultInt=null)
Definition: Card.cs:2567
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6364
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:8651
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:9374
override bool IsAliveInCurrentZone
Definition: Chara.cs:567
Thing FindBestFoodToEat()
Definition: Chara.cs:7970
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:8307
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6560
int sharedCheckTurn
Definition: Chara.cs:120
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7991
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9798
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:8557
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:7750
void PickHeld(bool msg=false)
Definition: Chara.cs:4785
bool HasCondition(string alias)
Definition: Chara.cs:9970
void Banish(Chara owner)
Definition: Chara.cs:2547
AIAct SetAI(AIAct g)
Definition: Chara.cs:9413
bool IsIdle
Definition: Chara.cs:900
TraitBed FindBed()
Definition: Chara.cs:7738
bool CanDuplicate(DuplicateCondition con=DuplicateCondition.Default)
Definition: Chara.cs:1897
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:2809
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7768
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:8016
Chara Duplicate()
Definition: Chara.cs:1955
override int MaxHP
Definition: Chara.cs:726
void TryClearInventory()
Definition: Chara.cs:9022
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:9056
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:7359
Stats stamina
Definition: Chara.cs:1205
bool MoveNeighborDefinitely()
Definition: Chara.cs:2823
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:6105
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:9194
bool IsGuest()
Definition: Chara.cs:6964
Hobby GetWork(string id)
Definition: Chara.cs:9524
Thing nextUse
Definition: Chara.cs:100
Affinity affinity
Definition: Chara.cs:318
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2849
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:2618
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6643
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6692
Room FindRoom()
Definition: Chara.cs:8363
Point GetDestination()
Definition: Chara.cs:7650
int turnLastSeen
Definition: Chara.cs:112
FactionBranch homeBranch
Definition: Chara.cs:1113
void Drink(Card t)
Definition: Chara.cs:5407
Hostility hostility
Definition: Chara.cs:295
bool IsHostile()
Definition: Chara.cs:6873
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7806
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:4565
void Sniff(Chara c)
Definition: Chara.cs:8569
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:303
SourceElement.Row source
Definition: ELEMENT.cs:282
int vTempPotential
Definition: ELEMENT.cs:267
Act act
Definition: ELEMENT.cs:403
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:2261
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:140
virtual bool CanFish
Definition: TraitChara.cs:142
virtual bool IdleAct()
Definition: TraitChara.cs:144
TraitMap restSpots
Definition: TraitManager.cs:10
virtual bool AllowTraining
Definition: TraitShackle.cs:15
virtual bool CanRead(Chara c)
Definition: Trait.cs:1162
virtual bool CanEat(Chara c)
Definition: Trait.cs:1171
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1180
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:2910
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:2098

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

1197 {
1198 owner.Say("idle_cast", owner);
1199 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1200 }
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:1068

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

1188 : Condition
1189 {
1190 if (!owner.HasCondition<T>())
1191 {
1192 TryCast(id, power);
1193 }
1194 }

◆ TryPerformIdleUse()

bool AI_Idle.TryPerformIdleUse ( )
inline

Definition at line 1253 of file AI_Idle.cs.

1254 {
1255 for (int i = 0; i < 10; i++)
1256 {
1257 if (owner == null)
1258 {
1259 return true;
1260 }
1261 Point randomPoint = owner.pos.GetRandomPoint(7, requireLos: true, allowChara: true, allowBlocked: true);
1262 if (randomPoint == null || randomPoint.detail == null)
1263 {
1264 continue;
1265 }
1266 foreach (Thing thing in randomPoint.detail.things)
1267 {
1268 if (!thing.IsInstalled)
1269 {
1270 continue;
1271 }
1272 int num = owner.Dist(thing);
1273 if (EClass.rnd((owner.memberType == FactionMemberType.Guest) ? 5 : 50) == 0 && thing.HasTag(CTAG.tourism) && num <= 2)
1274 {
1275 owner.LookAt(thing);
1276 owner.Talk("nice_statue");
1277 return true;
1278 }
1279 if (EClass.rnd(thing.trait.IdleUseChance) == 0 && thing.trait.IdleUse(owner, num))
1280 {
1281 if (owner != null)
1282 {
1283 owner.LookAt(thing);
1284 }
1285 return true;
1286 }
1287 }
1288 }
1289 return false;
1290 }
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:3775
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: