Elin Decompiled Documentation EA 23.289 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 1183 of file AI_Idle.cs.

1184 {
1185 List<Chara> list = owner.pos.ListCharasInRadius(owner, radius, delegate(Chara c)
1186 {
1187 if (c == owner || !owner.CanSee(c))
1188 {
1189 return false;
1190 }
1191 return funcPickChara == null || funcPickChara(c);
1192 });
1193 if (list.Count > 0)
1194 {
1195 Chara chara = list.RandomItem();
1196 action?.Invoke(chara);
1197 return chara;
1198 }
1199 return null;
1200 }
new Chara owner
Definition: AIAct.cs:14
Point pos
Definition: Card.cs:60
Definition: Chara.cs:10
bool CanSee(Card c)
Definition: Chara.cs:1244
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1220

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

Referenced by Run().

◆ DoSomethingToNearChara()

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

Definition at line 1164 of file AI_Idle.cs.

1165 {
1166 List<Chara> list = owner.pos.ListCharasInNeighbor(delegate(Chara c)
1167 {
1168 if (c == owner || !owner.CanSee(c))
1169 {
1170 return false;
1171 }
1172 return funcPickChara == null || funcPickChara(c);
1173 });
1174 if (list.Count > 0)
1175 {
1176 Chara chara = list.RandomItem();
1177 action?.Invoke(chara);
1178 return chara;
1179 }
1180 return null;
1181 }
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
Definition: Point.cs:1200

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

Referenced by Run().

◆ GetRandomAssignedRoom()

BaseArea AI_Idle.GetRandomAssignedRoom ( )
inline

Definition at line 1151 of file AI_Idle.cs.

1152 {
1153 _listRoom.Clear();
1154 foreach (BaseArea item in ((IEnumerable<BaseArea>)EClass._map.rooms.listRoom).Concat((IEnumerable<BaseArea>)EClass._map.rooms.listArea))
1155 {
1156 if (item.type != null && item.type.uidCharas.Contains(owner.uid))
1157 {
1158 _listRoom.Add(item);
1159 }
1160 }
1161 return _listRoom.RandomItem();
1162 }
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
int uid
Definition: Card.cs:123
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 1127 of file AI_Idle.cs.

1128 {
1129 string text = "idle_" + id;
1130 owner.PlaySound(text);
1131 if (Lang.Game.map.ContainsKey(text))
1132 {
1133 owner.Say(text, owner);
1134 }
1135 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6375
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
int id
Definition: ELEMENT.cs:255
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:6343
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:6852

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 {
97 {
98 owner.InstantEat(thing, sound: false);
99 yield return Restart();
100 }
101 else if (thing.Num == 1 || !owner.things.IsFull())
102 {
103 yield return Do(new AI_Eat
104 {
105 target = thing
106 });
107 }
108 }
109 else if (!EClass._zone.IsRegion && owner.HasElement(1250))
110 {
111 Chara target = null;
112 for (int k = 0; k < 10; k++)
113 {
114 Chara chara = EClass._map.charas.RandomItem();
115 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)))))
116 {
117 target = chara;
118 }
119 }
120 if (target != null)
121 {
122 yield return DoGoto(target);
123 owner.UseAbility("ActBloodsuck", target);
124 yield return Success();
125 }
126 }
127 }
128 if (!EClass._zone.IsRegion)
129 {
130 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>())
131 {
133 yield return KeepRunning();
134 }
135 if (EClass.rnd(3) == 0 && owner.mana.value > 0)
136 {
137 Act actHeal = null;
138 Act actRevive = null;
139 foreach (ActList.Item item in owner.ability.list.items)
140 {
141 Act act = item.act;
142 if (act.id == 8430)
143 {
144 actRevive = act;
145 }
146 string[] abilityType = act.source.abilityType;
147 if (!abilityType.IsEmpty() && (abilityType[0] == "heal" || abilityType[0] == "hot"))
148 {
149 actHeal = item.act;
150 }
151 }
152 if (actHeal != null)
153 {
154 List<Chara> list = (owner.IsPCParty ? EClass.pc.party.members : new List<Chara> { owner });
155 foreach (Chara item2 in list)
156 {
157 if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(actHeal.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
158 {
159 owner.UseAbility(actHeal, item2);
160 yield return KeepRunning();
161 break;
162 }
163 }
164 if (owner.id == "priest" && !owner.IsPCParty && owner.Dist(EClass.pc) <= 4)
165 {
166 if (EClass.pc.hp < EClass.pc.MaxHP)
167 {
168 if (owner.UseAbility(actHeal, EClass.pc, null, pt: true))
169 {
170 owner.AddCooldown(actHeal.id, 5);
171 owner.Talk("no_problem");
172 }
173 }
174 else if (!EClass.pc.HasCondition<ConHolyVeil>() && owner.UseAbility(8500, EClass.pc, null, pt: true))
175 {
176 owner.AddCooldown(8500, 30);
177 owner.Talk("no_problem");
178 }
179 }
180 }
181 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))
182 {
183 yield return KeepRunning();
184 }
185 }
186 }
188 {
190 if (owner.sharedCheckTurn < 0 && EClass.rnd(EClass.debug.enable ? 2 : 20) == 0)
191 {
194 owner.sharedCheckTurn += (EClass.debug.enable ? 20 : 200);
195 }
196 }
197 if ((EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (owner.IsPCParty ? 10 : (owner.IsPCFaction ? 2 : 0)) > EClass.rnd(100))
198 {
199 Thing thing2 = owner.things.Find("polish_powder");
200 if (thing2 != null && EClass._map.props.installed.Find<TraitGrindstone>() != null)
201 {
202 foreach (Thing thing10 in owner.things)
203 {
204 if (!thing10.IsEquipment || thing10.encLV >= 0)
205 {
206 continue;
207 }
208 for (int l = 0; l < 5; l++)
209 {
210 if (thing10.encLV >= 0)
211 {
212 break;
213 }
214 owner.Say("polish", owner, thing10);
215 thing10.ModEncLv(1);
216 thing2.ModNum(-1);
217 if (thing2.isDestroyed)
218 {
219 break;
220 }
221 }
222 if (thing2.isDestroyed)
223 {
224 break;
225 }
226 }
227 }
228 }
229 if (owner.IsPCParty)
230 {
232 {
233 TraitShackle traitShackle = owner.pos.FindThing<TraitShackle>();
234 if (traitShackle != null && traitShackle.AllowTraining)
235 {
237 {
238 shackle = traitShackle
239 });
240 }
241 yield return Restart();
242 }
243 if (EClass.rnd(20) == 0)
244 {
245 Thing thing3 = owner.things.Find((Thing a) => a.parent == owner && a.isGifted && (a.category.id == "skillbook" || a.category.id == "ancientbook"));
246 if (thing3 != null && thing3.trait.CanRead(owner) && (thing3.Num == 1 || !owner.things.IsFull()))
247 {
248 yield return Do(new AI_Read
249 {
250 target = thing3
251 });
252 }
253 }
254 if (!EClass._zone.IsRegion)
255 {
256 if (EClass.rnd(100) == 0 && owner.HasElement(1227))
257 {
258 List<Chara> list2 = new List<Chara>();
259 foreach (Chara member in EClass.pc.party.members)
260 {
261 if (member.Evalue(1227) > 0)
262 {
263 list2.Add(member);
264 }
265 }
266 if (list2.Count > 2 + EClass.pc.party.EvalueTotal(1272, (Chara c) => c.IsPC || c.faith == EClass.game.religions.Harmony))
267 {
268 list2.Remove(owner);
269 owner.SetEnemy(list2.RandomItem());
270 yield return Success();
271 }
272 }
273 if (EClass.rnd(20) == 0 && owner.IsMarried)
274 {
275 List<Chara> list3 = new List<Chara>();
276 foreach (Chara member2 in EClass.pc.party.members)
277 {
278 if (member2 != owner && member2.IsMarried)
279 {
280 list3.Add(member2);
281 }
282 }
283 if (list3.Count > EClass.pc.Evalue(1276))
284 {
285 owner.SetEnemy(list3.RandomItem());
286 yield return Success();
287 }
288 }
289 }
290 if (EClass.rnd(150) == 0 && owner.host != null && owner.host.parasite == owner && owner.GetInt(108) == 1)
291 {
292 owner.host.PlaySound("whip");
293 owner.host.Say("use_whip3", owner, owner.host);
294 owner.Talk("insult");
295 owner.host.PlayAnime(AnimeID.Shiver);
296 owner.host.DamageHP(5 + EClass.rndHalf(owner.host.MaxHP / 5), 919, 100, AttackSource.Condition);
298 yield return KeepRunning();
299 }
300 if (EClass.rnd(EClass.debug.enable ? 2 : 20) == 0 && owner.CanSee(EClass.pc) && !(EClass.pc.ai is AI_Eat))
301 {
303 }
304 if (owner.isSynced && EClass.rnd((owner.host == null) ? 200 : 150) == 0 && owner.GetInt(106) == 0)
305 {
306 if (EClass.rnd(2) == 0 && owner.GetInt(108) == 1)
307 {
308 owner.Talk("insult");
309 }
310 else
311 {
313 }
314 }
315 if (EClass.rnd(100) == 0 && EClass._zone.IsTown)
316 {
318 }
319 if ((EClass.rnd(20) == 0 || EClass.debug.enable) && owner.GetCurrency() >= 500)
320 {
321 bool flag = EClass._zone.IsTown;
323 {
324 foreach (Chara member3 in EClass._zone.branch.members)
325 {
326 if (member3.ExistsOnMap && member3.trait is TraitTrainer)
327 {
328 flag = true;
329 }
330 }
331 }
332 if (flag)
333 {
334 bool flag2 = false;
335 foreach (Element value in owner.elements.dict.Values)
336 {
337 if (!(value.source.category != "skill") && value.vTempPotential < 900)
338 {
339 flag2 = true;
340 break;
341 }
342 }
343 if (flag2)
344 {
345 int num2 = owner.GetCurrency();
346 if (num2 >= 20000)
347 {
348 num2 = 20000;
349 }
350 owner.PlaySound("pay");
351 int num3 = num2 / 200;
352 foreach (Element value2 in owner.elements.dict.Values)
353 {
354 if (!(value2.source.category != "skill"))
355 {
356 int num4 = num3 * 100 / (100 + (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) * (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) / 100);
357 num4 += 1 + EClass.rnd(3);
358 owner.elements.ModTempPotential(value2.id, Mathf.Max(1, num4), 9999);
359 }
360 }
361 Msg.Say("party_train", owner, Lang._currency(num2));
362 owner.PlaySound("ding_potential");
363 owner.ModCurrency(-num2);
364 }
365 }
366 }
367 if (EClass.rnd(100) == 0 && EClass.pc.ai is AI_Fish && owner.stamina.value > 0 && owner.things.Find<TraitToolFishing>() != null)
368 {
369 Point randomPointInRadius = EClass.pc.pos.GetRandomPointInRadius(0, 3);
370 if (randomPointInRadius != null)
371 {
372 randomPointInRadius = AI_Fish.GetFishingPoint(randomPointInRadius);
373 if (randomPointInRadius.IsValid)
374 {
375 yield return Do(new AI_Fish
376 {
377 pos = randomPointInRadius
378 });
379 }
380 }
381 }
382 }
383 if (owner.c_uidMaster != 0)
384 {
385 Chara chara2 = owner.master;
386 if (chara2 == null || !chara2.IsAliveInCurrentZone)
387 {
388 chara2 = owner.FindMaster();
389 }
390 if (chara2 != null && chara2.IsAliveInCurrentZone)
391 {
392 if (owner.enemy == null)
393 {
394 owner.SetEnemy(chara2.enemy);
395 }
396 int num5 = owner.Dist(chara2.pos);
397 if (owner.source.aiIdle != "root" && num5 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
398 {
399 if (owner.HasAccess(chara2.pos))
400 {
401 owner.TryMoveTowards(chara2.pos);
402 }
403 yield return KeepRunning();
404 continue;
405 }
406 }
407 }
408 if (!EClass._zone.IsRegion && owner.HasElement(1425) && EClass.rnd(5) == 0 && owner.mimicry == null)
409 {
410 owner.UseAbility(8794, owner);
411 }
412 Party party = owner.party;
413 if (party == null || party.leader == owner || !party.leader.IsAliveInCurrentZone || owner.host != null || !EClass._zone.PetFollow)
414 {
415 break;
416 }
417 if (owner.source.aiIdle == "root")
418 {
419 yield return KeepRunning();
420 continue;
421 }
423 {
424 yield return KeepRunning();
425 continue;
426 }
427 if (owner.HasAccess(party.leader.pos) && owner.TryMoveTowards(party.leader.pos) == Card.MoveResult.Fail && owner.Dist(party.leader) > 4)
428 {
430 bool flag3 = (EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (EClass.pc.enemy == null || !EClass.pc.enemy.IsAliveInCurrentZone);
431 if (moveFailCount >= (flag3 ? 100 : 10))
432 {
433 owner.Teleport(party.leader.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), silent: false, force: true);
434 moveFailCount = 0;
435 }
436 }
437 else
438 {
439 moveFailCount = 0;
440 }
441 yield return KeepRunning();
442 }
443 if (EClass._zone.IsNefia && EClass._zone.Boss == owner && EClass.rnd(20) == 0)
444 {
446 }
447 if (EClass._zone.IsRegion && EClass.rnd(10) != 0)
448 {
449 yield return Restart();
450 }
451 if (((owner.homeBranch != null && owner.homeBranch == EClass.Branch && EClass.rnd(100) == 0) || (owner.IsGuest() && EClass.rnd(50) == 0)) && owner.FindBed() == null)
452 {
454 }
455 if (!EClass._zone.IsRegion)
456 {
457 switch (owner.id)
458 {
459 case "azzrasizzle":
460 case "geist":
461 {
462 if (EClass.rnd(20) != 0)
463 {
464 break;
465 }
466 Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
467 if (nearestPoint == null)
468 {
469 break;
470 }
471 foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion && _c.id != "cocoon"))
472 {
473 item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
474 }
475 if (owner != null)
476 {
478 {
479 EClass.pc.ai.Cancel();
480 }
481 owner.Teleport(nearestPoint);
482 }
483 yield return Success();
484 break;
485 }
486 case "spider_queen":
487 {
488 if (EClass.rnd(20) != 0 || !owner.CanDuplicate() || EClass._zone.IsUserZone)
489 {
490 break;
491 }
492 int i = 0;
493 owner.pos.ForeachNeighbor(delegate(Point p)
494 {
495 if (p.HasChara && p.FirstChara.id == "cocoon")
496 {
497 i++;
498 }
499 });
500 if (i < 2)
501 {
502 Point randomPoint2 = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
503 if (randomPoint2 != null)
504 {
505 Chara chara3 = EClass._zone.SpawnMob("cocoon", randomPoint2);
506 owner.Say("egglay", owner);
508 }
509 }
510 break;
511 }
512 case "mech_scarab":
513 {
514 if (EClass.rnd(20) != 0 || !owner.CanDuplicate() || EClass._zone.IsUserZone)
515 {
516 break;
517 }
518 int j = 0;
519 owner.pos.ForeachNeighbor(delegate(Point p)
520 {
521 if (p.HasChara && p.FirstChara.id == "mech_scarab")
522 {
523 j++;
524 }
525 });
526 if (j >= 2)
527 {
528 break;
529 }
530 Point randomPoint = owner.pos.GetRandomPoint(1, requireLos: false, allowChara: false, allowBlocked: false, 20);
531 if (randomPoint != null)
532 {
533 Card c2 = EClass._zone.AddCard(owner.Duplicate(), randomPoint);
534 if (randomPoint.Distance(EClass.pc.pos) < EClass.pc.GetHearingRadius())
535 {
536 Msg.Say("self_dupe", owner, c2);
537 }
538 }
539 break;
540 }
541 }
542 }
543 if (owner.IsMinion && owner.master != null && owner.master.id == "keeper_garden" && !(owner.master.ai is GoalCombat))
544 {
546 yield return Success();
547 }
549 {
550 Room room = owner.pos.cell.room;
551 if (room != null)
552 {
553 Point point = null;
554 if (owner.memberType == FactionMemberType.Guest && room.data.accessType != 0)
555 {
556 point = FindMovePoint(BaseArea.AccessType.Public);
557 }
558 else if (owner.memberType == FactionMemberType.Default && room.data.accessType == BaseArea.AccessType.Private)
559 {
560 point = FindMovePoint(BaseArea.AccessType.Resident) ?? FindMovePoint(BaseArea.AccessType.Public);
561 }
562 if (point != null)
563 {
564 yield return DoGoto(point);
565 }
566 }
567 }
568 string id;
569 int num;
571 {
572 if (owner.IsPCFaction && owner.GetInt(32) + 4320 < EClass.world.date.GetRaw())
573 {
574 if (owner.GetInt(32) != 0 && Zone.okaerinko < 10)
575 {
576 owner.Talk("welcomeBack");
577 Zone.okaerinko++;
578 }
580 }
582 {
584 {
585 id = "money";
586 num = EClass.rnd(EClass.rnd(EClass.rnd(EClass.rnd(500)))) + 1;
587 string[] strs = new string[4] { "1294", "1294", "1130", "1131" };
588 ThrowMethod throwMethod = ThrowMethod.Reward;
590 {
591 owner.Talk("curse_wed");
592 throwMethod = ThrowMethod.Punish;
593 SetId("stone", 1);
594 if (EClass.rnd(3) == 0)
595 {
596 SetId("shuriken", 1);
597 }
598 if (EClass.rnd(3) == 0)
599 {
600 SetId("explosive", 1);
601 }
602 if (EClass.rnd(3) == 0)
603 {
604 SetId("explosive_mega", 1);
605 }
606 if (EClass.rnd(3) == 0)
607 {
608 SetId("rock", 1);
609 }
610 }
611 else
612 {
613 if (EClass.rnd(2) == 0)
614 {
615 owner.PlaySound((EClass.rnd(3) == 0) ? "clap1" : ((EClass.rnd(2) == 0) ? "clap2" : "clap3"));
616 }
617 owner.Talk("grats_wed");
618 if (EClass.rnd(5) == 0)
619 {
620 SetId("money2", 1);
621 }
622 if (EClass.rnd(4) == 0)
623 {
624 SetId("plat", 1);
625 }
626 if (EClass.rnd(3) == 0)
627 {
628 SetId(strs.RandomItem(), 1);
629 }
630 }
631 Thing thing4 = ThingGen.Create(id, -1, owner.LV).SetNum(num);
632 thing4.SetRandomDir();
633 ActThrow.Throw(owner, EClass.pc.pos, thing4, throwMethod);
634 if (EClass.pc.IsAliveInCurrentZone && throwMethod == ThrowMethod.Reward && thing4.ExistsOnMap && thing4.pos.Equals(EClass.pc.pos) && !strs.Contains(thing4.id))
635 {
636 EClass.pc.Pick(thing4);
637 }
638 }
639 else if (EClass.rnd(5) == 0 && owner.hostility >= Hostility.Neutral && EClass.pc.IsPCC && EClass.pc.pccData.state == PCCState.Undie && !EClass.pc.pos.cell.IsTopWaterAndNoSnow)
640 {
641 owner.Talk("pervert3");
642 }
643 else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
644 {
645 bool flag4 = EClass._zone is Zone_Derphy;
646 string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
647 if (!text.IsEmpty())
648 {
649 owner.Talk(text);
650 }
651 if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
652 {
653 Thing t2 = ThingGen.Create("stone", -1, owner.LV);
654 AI_PlayMusic.ignoreDamage = true;
656 AI_PlayMusic.ignoreDamage = false;
657 }
658 }
659 else
660 {
661 owner.TalkTopic("fov");
662 }
663 owner.turnLastSeen = EClass.player.stats.turns;
664 }
665 }
666 if (EClass.rnd(25) == 0 && owner.IsInMutterDistance())
667 {
669 {
670 owner.PlayAnime(AnimeID.Shiver);
671 }
673 if (tC == null || tC.pop.items.Count == 0)
674 {
675 if (owner.noMove)
676 {
677 foreach (Thing thing11 in owner.pos.Things)
678 {
679 if (thing11.IsInstalled && thing11.trait is TraitGeneratorWheel)
680 {
681 owner.Talk("labor");
682 owner.PlayAnime(AnimeID.Shiver);
683 yield return Restart();
684 }
685 }
686 }
687 if (owner.isDrunk && (owner.race.id == "cat" || owner.id == "sailor"))
688 {
689 owner.Talk("drunk_cat");
690 }
691 else if (owner.isRestrained)
692 {
693 owner.Talk("restrained");
694 }
695 else if (owner.GetInt(106) == 0 && !owner.IsPCParty)
696 {
697 if (owner.HasElement(1232) && EClass.rnd(4) == 0)
698 {
699 owner.Talk("baby");
700 }
701 else if (EClass.rnd((owner.host == null) ? 2 : 10) == 0 && owner.isSynced && owner.TalkTopic().IsEmpty())
702 {
703 owner.Talk(owner.pos.IsHotSpring ? "hotspring" : "idle");
704 }
705 }
706 }
707 }
708 if (EClass.rnd(8) == 0 && owner.race.id == "chicken")
709 {
710 owner.PlaySound("Animal/Chicken/chicken");
711 }
712 if (EClass.rnd(80) == 0 && owner.race.id == "cat")
713 {
714 owner.PlaySound("Animal/Cat/cat");
715 }
716 if (owner.trait.IdAmbience != null && owner.IsInMutterDistance(15))
717 {
718 float mtp = 1f;
719 Room room2 = owner.Cell.room;
720 Room room3 = EClass.pc.Cell.room;
721 if (room2 != room3 && room3 != null)
722 {
723 mtp = ((room2?.lot != room3?.lot) ? 0.4f : 0.7f);
724 }
725 EClass.Sound.PlayAmbience(owner.trait.IdAmbience, owner.pos.Position(), mtp);
726 }
727 if (EClass.rnd((EClass._zone is Zone_Wedding && !owner.HasCondition<ConDrunk>()) ? 30 : 2000) == 0 && owner.IsHuman && (owner.host == null || owner.host.ride != owner))
728 {
729 Thing thing5 = owner.things.Find((Thing a) => !a.IsNegativeGift && a.trait.CanDrink(owner), recursive: false);
730 if (thing5 != null && thing5.trait is TraitPotion && owner.IsPCParty)
731 {
732 thing5 = null;
733 }
734 bool flag5 = EClass.Branch != null && EClass.Branch.policies.IsActive(2503);
735 if (owner.homeBranch != null && owner.homeBranch.policies.IsActive(2503))
736 {
737 flag5 = true;
738 }
739 if (thing5 == null && !flag5)
740 {
741 thing5 = ThingGen.Create("crimAle");
742 owner.Drink(thing5);
743 }
744 if (thing5 != null && !thing5.isDestroyed)
745 {
746 owner.TryUse(thing5);
747 yield return Restart();
748 }
749 }
750 if (EClass.rnd(owner.IsPCParty ? 1000 : 200) == 0 && owner.isDrunk && (owner.isSynced || EClass.rnd(5) == 0))
751 {
752 DoSomethingToCharaInRadius(3, null, delegate(Chara c)
753 {
754 owner.Say("drunk_mess", owner, c);
755 owner.Talk("drunk_mess");
756 bool flag6 = EClass.rnd(5) == 0 && !c.IsPC;
757 if (c.IsPCParty && owner.hostility >= Hostility.Friend)
758 {
759 flag6 = false;
760 }
761 if (flag6)
762 {
763 owner.Say("drunk_counter", c, owner);
764 c.Talk("drunk_counter");
766 }
767 });
768 }
769 if (EClass.rnd(100) == 0 && owner.trait.CanFish && owner.stamina.value > 0)
770 {
771 Point fishingPoint = AI_Fish.GetFishingPoint(owner.pos);
772 if (fishingPoint.IsValid)
773 {
774 yield return Do(new AI_Fish
775 {
776 pos = fishingPoint
777 });
778 }
779 }
780 string idAct = owner.source.actIdle.RandomItem();
781 if (EClass.rnd(EClass.world.date.IsNight ? 1500 : 15000) == 0 && !owner.IsPCFaction && !owner.noMove)
782 {
783 owner.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
784 }
785 if (!owner.noMove)
786 {
787 if (EClass.rnd(3) == 0 && owner.IsCat)
788 {
789 Chara chara4 = ((EClass.rnd(5) == 0) ? EClass.pc.party.members.RandomItem() : EClass._map.charas.RandomItem());
790 Thing thing6 = chara4.things.Find<TraitFoodChuryu>();
791 if (chara4 != owner && thing6 != null)
792 {
793 yield return Do(new AI_Churyu
794 {
795 churyu = thing6,
796 slave = chara4
797 });
798 }
799 }
800 if (EClass.rnd(100) == 0 && (owner.HasHobbyOrWork("Pet") || owner.HasHobbyOrWork("Fluffy")))
801 {
802 yield return Do(new AI_Mofu());
803 }
804 }
805 if (EClass.rnd((owner.host != null && owner.GetInt(106) != 0) ? 1000 : 40) == 0 && owner.IsHuman)
806 {
807 DoSomethingToNearChara((Chara c) => (!c.IsPCParty || EClass.rnd(5) == 0) && c.IsMofuable && !owner.IsHostile(c) && !c.IsInCombat && owner.CanSee(c), delegate(Chara c)
808 {
809 owner.Cuddle(c);
810 });
811 yield return KeepRunning();
812 }
813 if (EClass.rnd(100) == 0 && owner.trait is TraitBitch)
814 {
815 Chara chara5 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0);
816 if (chara5 != null)
817 {
818 yield return Do(new AI_Fuck
819 {
820 target = chara5,
821 variation = AI_Fuck.Variation.Bitch
822 });
823 }
824 }
825 if (EClass.rnd(50) == 0 && owner.trait is TraitBard)
826 {
827 yield return Do(new AI_PlayMusic());
828 }
829 if (EClass.rnd(4) == 0 && TryPerformIdleUse())
830 {
831 yield return Restart();
832 }
833 if (EClass.rnd(20) == 0 && owner.trait.IdleAct())
834 {
835 yield return Restart();
836 }
837 if (idAct == "janitor" && EClass.rnd(5) == 0)
838 {
839 DoSomethingToCharaInRadius(4, null, delegate(Chara c)
840 {
841 if (c.HasElement(1211) && !(EClass._zone is Zone_Casino))
842 {
843 owner.Talk("snail");
844 Thing t4 = ThingGen.Create("1142");
845 ActThrow.Throw(owner, c.pos, t4);
846 }
847 });
848 yield return Restart();
849 }
851 {
852 TraitShackle traitShackle2 = owner.pos.FindThing<TraitShackle>();
853 if (traitShackle2 != null && traitShackle2.AllowTraining)
854 {
856 {
857 shackle = traitShackle2
858 });
859 yield return Restart();
860 }
861 }
862 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>())
863 {
865 }
866 if (EClass.rnd(200) == 0 && !owner.noMove)
867 {
868 Point cleanPoint = AI_Clean.GetCleanPoint(owner, 4);
869 if (cleanPoint != null)
870 {
871 yield return Do(new AI_Clean
872 {
873 pos = cleanPoint
874 });
875 }
876 }
877 if (EClass.rnd(owner.isSynced ? 10 : 2000) == 0 && owner.ability.Has(5058))
878 {
879 if (!owner.UseAbility(5058) && !owner.IsPCFaction)
880 {
883 if (owner.isSynced)
884 {
886 }
887 }
888 yield return Restart();
889 }
890 if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
891 {
892 foreach (Chara chara6 in EClass._map.charas)
893 {
894 if (EClass.rnd(3) != 0 && chara6 != owner && chara6.pos.cell.IsSnowTile && chara6.Dist(owner) <= 6 && Los.IsVisible(chara6, owner))
895 {
896 Thing t3 = ThingGen.Create("snow");
897 ActThrow.Throw(owner, chara6.pos, t3);
898 break;
899 }
900 }
901 }
902 if (EClass.rnd(EClass.debug.enable ? 3 : 30) == 0)
903 {
904 Thing thing7 = owner.things.Find<TraitBall>();
905 if (thing7 == null)
906 {
908 {
909 owner.pos.ForeachNeighbor(delegate(Point p)
910 {
911 Card card2 = p.FindThing<TraitBall>()?.owner;
912 if (card2 != null)
913 {
914 owner.Pick(card2.Thing);
915 }
916 });
917 }
918 }
919 else
920 {
921 foreach (Chara chara7 in EClass._map.charas)
922 {
923 if (EClass.rnd(3) != 0 && chara7 != owner && chara7.Dist(owner) <= 6 && chara7.Dist(owner) >= 3 && Los.IsVisible(chara7, owner))
924 {
925 ActThrow.Throw(owner, chara7.pos, thing7);
926 break;
927 }
928 }
929 }
930 }
931 if (EClass.rnd(20) == 0 && AI_Shopping.TryShop(owner, realtime: true))
932 {
933 yield return Restart();
934 }
935 if (EClass.rnd(20) == 0 && owner.IsPCFaction && AI_Shopping.TryRestock(owner, realtime: true))
936 {
937 yield return Restart();
938 }
940 if (owner.idleActTimer <= 0 && !owner.source.actIdle.IsEmpty())
941 {
942 owner.idleActTimer = 10 + EClass.rnd(50);
943 switch (idAct)
944 {
945 case "torture_snail":
946 DoSomethingToNearChara((Chara c) => c.race.id == "snail", delegate(Chara c)
947 {
948 owner.Say("use_whip3", owner, c);
949 owner.PlaySound("whip");
950 owner.Talk("insult");
951 c.PlayAnime(AnimeID.Shiver);
952 c.OnInsulted();
953 });
954 break;
955 case "buffMage":
956 if (EClass.rnd(2) == 0)
957 {
958 TryCast<ConHolyVeil>(EffectId.HolyVeil, 300 + EClass.rnd(300));
959 }
960 else
961 {
962 TryCast<ConLevitate>(EffectId.Levitate, 300 + EClass.rnd(300));
963 }
964 break;
965 case "buffThief":
966 TryCast<ConNightVision>(EffectId.CatsEye, 100 + EClass.rnd(100));
967 break;
968 case "buffGuildWatch":
969 TryCast<ConGravity>(EffectId.Gravity, 300 + EClass.rnd(300));
970 break;
971 case "buffHealer":
972 TryCast(EffectId.Heal);
973 break;
974 case "readBook":
975 {
976 if (EClass.rnd(2) == 0 || (owner.IsPCParty && EClass.rnd(20) != 0))
977 {
978 break;
979 }
980 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);
981 Thing thing8 = null;
982 if (list4.Count > 0)
983 {
984 thing8 = list4.RandomItem();
985 if (!thing8.trait.CanRead(owner))
986 {
987 thing8 = null;
988 }
989 }
990 if (thing8 == null)
991 {
992 if (owner.things.IsFull())
993 {
994 break;
995 }
996 thing8 = ThingGen.CreateFromCategory((EClass.rnd(5) != 0) ? "spellbook" : "ancientbook");
997 thing8.isNPCProperty = true;
998 }
999 if (!(thing8.id == "1084") || !owner.IsPCFaction)
1000 {
1001 if (!owner.HasElement(285))
1002 {
1003 owner.elements.ModBase(285, 1);
1004 }
1005 yield return Do(new AI_Read
1006 {
1007 target = thing8
1008 });
1009 }
1010 break;
1011 }
1012 default:
1013 if (LangGame.Has("idle_" + idAct))
1014 {
1015 IdleActText(idAct);
1016 }
1017 break;
1018 }
1019 yield return Restart();
1020 }
1021 if (owner.host != null)
1022 {
1023 yield return Restart();
1024 }
1026 {
1028 {
1029 yield return DoGoto(owner.orgPos);
1030 }
1031 yield return Restart();
1032 }
1034 {
1035 yield return DoGoto(EClass.pc);
1036 }
1037 if (EClass.rnd(100) == 0 && !owner.IsPCFaction)
1038 {
1039 if (owner.id == "ashland" || owner.id == "fiama")
1040 {
1041 Card card = EClass._map.Installed.traits.restSpots.RandomItem();
1042 if (card != null)
1043 {
1044 yield return DoGotoSpot(card);
1045 }
1046 else
1047 {
1048 Room room4 = owner.FindRoom();
1049 if (room4 != null)
1050 {
1051 yield return DoGoto(room4.GetRandomPoint().GetNearestPoint());
1052 }
1053 }
1054 }
1056 {
1057 yield return DoGoto(owner.orgPos, 0, ignoreConnection: false, delegate
1058 {
1059 if (!EClass._zone.IsPCFaction)
1060 {
1061 owner.Teleport(owner.orgPos, silent: false, force: true);
1062 }
1063 return Status.Success;
1064 });
1065 }
1066 }
1067 if (EClass.rnd(100) == 0 && owner.id == "bee")
1068 {
1069 Thing thing9 = EClass._map.ListThing<TraitBeekeep>()?.RandomItem();
1070 if (thing9 != null)
1071 {
1072 yield return DoGoto(thing9.pos);
1073 }
1074 }
1075 if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
1076 {
1077 for (int m = 0; m < 100; m++)
1078 {
1079 Point randomPoint3 = EClass._map.GetRandomPoint();
1080 if (randomPoint3.IsDeepWater && !randomPoint3.IsBlocked)
1081 {
1082 yield return DoGoto(randomPoint3);
1083 break;
1084 }
1085 }
1086 }
1087 string aiIdle = owner.source.aiIdle;
1088 if (!(aiIdle == "stand") && !(aiIdle == "root"))
1089 {
1090 if (EClass.rnd(15) == 0 && owner.mimicry == null)
1091 {
1092 owner.MoveRandom();
1093 }
1094 if (owner == null)
1095 {
1096 yield return Cancel();
1097 }
1098 }
1099 if (EClass._zone.IsPCFaction && owner.IsPCFaction && !owner.IsPCParty && (owner.GetWork("Clean") != null || owner.GetWork("Chore") != null) && !(EClass.pc.ai is AI_UseCrafter))
1100 {
1101 AI_Haul aI_Haul = AI_Haul.TryGetAI(owner);
1102 if (aI_Haul != null)
1103 {
1104 yield return Do(aI_Haul);
1105 }
1106 }
1107 yield return Restart();
1108 Point FindMovePoint(BaseArea.AccessType type)
1109 {
1110 for (int n = 0; n < 20; n++)
1111 {
1112 Point randomPoint4 = owner.pos.GetRandomPoint(5 + n, requireLos: false);
1113 if (randomPoint4 != null && randomPoint4.IsInBounds && (randomPoint4.cell.room == null || randomPoint4.cell.room.data.accessType == type))
1114 {
1115 return randomPoint4;
1116 }
1117 }
1118 return null;
1119 }
1120 void SetId(string _id, int _num)
1121 {
1122 id = _id;
1123 num = _num;
1124 }
1125 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
ClearInventoryType
EditorTag
Definition: EditorTag.cs:2
EffectId
Definition: EffectId.cs:2
FactionMemberType
Hostility
Definition: Hostility.cs:2
MinionType
Definition: MinionType.cs:2
ThrowMethod
Definition: ThrowMethod.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs: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:295
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:1164
int moveFailCount
Definition: AI_Idle.cs:16
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:1183
void IdleActText(string id)
Definition: AI_Idle.cs:1127
bool TryPerformIdleUse()
Definition: AI_Idle.cs:1202
void TryCast(EffectId id, int power=100)
Definition: AI_Idle.cs:1145
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
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
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
GlobalCharaList globalCharas
Definition: CardManager.cs:46
TC GetTC(string id)
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:76
MinionType c_minionType
Definition: Card.cs:1001
bool IsPCFactionOrMinion
Definition: Card.cs:2312
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5961
ElementContainerCard elements
Definition: Card.cs:42
string id
Definition: Card.cs:36
bool IsRestrainedResident
Definition: Card.cs:2298
bool isRestrained
Definition: Card.cs:567
CardRenderer HostRenderer
Definition: Card.cs:2482
int GetHearingRadius()
Definition: Card.cs:6624
int c_uidMaster
Definition: Card.cs:1475
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3180
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6935
int hp
Definition: Card.cs:243
ICardParent parent
Definition: Card.cs:56
bool ExistsOnMap
Definition: Card.cs:2123
Thing SetNum(int a)
Definition: Card.cs:3577
int GetCurrency(string id="money")
Definition: Card.cs:4057
Thing c_bloodData
Definition: Card.cs:1955
bool IsInMutterDistance(int d=10)
Definition: Card.cs:7953
Trait trait
Definition: Card.cs:54
void ModCurrency(int a, string id="money")
Definition: Card.cs:4043
int encLV
Definition: Card.cs:327
bool IsEquipment
Definition: Card.cs:2213
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4149
void ModEncLv(int a)
Definition: Card.cs:3928
bool c_isImportant
Definition: Card.cs:1037
MoveResult
Definition: Card.cs:13
bool noMove
Definition: Card.cs:771
bool HasEditorTag(EditorTag tag)
Definition: Card.cs:2640
ThingContainer things
Definition: Card.cs:39
bool IsInstalled
Definition: Card.cs:2421
virtual Thing Thing
Definition: Card.cs:2096
int Evalue(int ele)
Definition: Card.cs:2611
int Dist(Card c)
Definition: Card.cs:7909
bool isGifted
Definition: Card.cs:783
Cell Cell
Definition: Card.cs:2093
void SetRandomDir()
Definition: Card.cs:6437
int Num
Definition: Card.cs:159
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6394
SourceCategory.Row category
Definition: Card.cs:2087
void ModNum(int a, bool notify=true)
Definition: Card.cs:3597
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6122
int LV
Definition: Card.cs:387
Room room
Definition: Cell.cs:102
bool IsSnowTile
Definition: Cell.cs:782
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool HasFire
Definition: Cell.cs:676
ActList list
Definition: CharaAbility.cs:12
bool Has(int id)
void OnInsulted()
Definition: Chara.cs:8368
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:9044
override bool IsAliveInCurrentZone
Definition: Chara.cs:563
Thing FindBestFoodToEat()
Definition: Chara.cs:7727
new TraitChara trait
Definition: Chara.cs:505
Hostility OriginalHostility
Definition: Chara.cs:473
Card held
Definition: Chara.cs:70
AIAct ai
Definition: Chara.cs:204
bool TryUse(Thing t)
Definition: Chara.cs:8055
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6358
int sharedCheckTurn
Definition: Chara.cs:120
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7748
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9453
Faction faction
Definition: Chara.cs:429
override bool IsPC
Definition: Chara.cs:626
bool isDrunk
Definition: Chara.cs:126
Chara host
Definition: Chara.cs:33
Chara GetNearbyCatToSniff()
Definition: Chara.cs:8279
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1276
bool IsMofuable
Definition: Chara.cs:1125
override bool IsPCParty
Definition: Chara.cs:629
Party party
Definition: Chara.cs:43
bool IsInCombat
Definition: Chara.cs:878
TraitBed TryAssignBed()
Definition: Chara.cs:7507
void PickHeld(bool msg=false)
Definition: Chara.cs:4600
bool HasCondition(string alias)
Definition: Chara.cs:9614
void Banish(Chara owner)
Definition: Chara.cs:2391
AIAct SetAI(AIAct g)
Definition: Chara.cs:9083
bool IsIdle
Definition: Chara.cs:867
TraitBed FindBed()
Definition: Chara.cs:7495
Stats hunger
Definition: Chara.cs:1168
override bool IsMinion
Definition: Chara.cs:641
override bool isSynced
Definition: Chara.cs:705
Point orgPos
Definition: Chara.cs:21
bool IsHuman
Definition: Chara.cs:893
ConTransmuteMimic mimicry
Definition: Chara.cs:106
bool MoveRandom()
Definition: Chara.cs:2653
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7525
override bool IsPCFaction
Definition: Chara.cs:685
bool HasAccess(Card c)
Definition: Chara.cs:1306
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7773
Chara Duplicate()
Definition: Chara.cs:1817
override int MaxHP
Definition: Chara.cs:722
bool CanDuplicate()
Definition: Chara.cs:1792
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:8726
SourceChara.Row source
Definition: Chara.cs:160
Stats mana
Definition: Chara.cs:1180
FactionMemberType memberType
Definition: Chara.cs:46
string TalkTopic(string topic="calm")
Definition: Chara.cs:7124
Stats stamina
Definition: Chara.cs:1172
bool MoveNeighborDefinitely()
Definition: Chara.cs:2667
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5899
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:8864
bool IsGuest()
Definition: Chara.cs:6762
Hobby GetWork(string id)
Definition: Chara.cs:9194
Thing nextUse
Definition: Chara.cs:100
Affinity affinity
Definition: Chara.cs:316
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2693
Religion faith
Definition: Chara.cs:441
bool IsMarried
Definition: Chara.cs:611
Chara enemy
Definition: Chara.cs:86
CharaAbility ability
Definition: Chara.cs:426
Chara FindMaster()
Definition: Chara.cs:2462
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6441
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6490
Room FindRoom()
Definition: Chara.cs:8111
Point GetDestination()
Definition: Chara.cs:7407
int turnLastSeen
Definition: Chara.cs:112
FactionBranch homeBranch
Definition: Chara.cs:1080
void Drink(Card t)
Definition: Chara.cs:5205
Hostility hostility
Definition: Chara.cs:293
bool IsHostile()
Definition: Chara.cs:6671
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7563
PCCData pccData
Definition: Chara.cs:67
Chara SetHostility(Hostility h)
Definition: Chara.cs:1468
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4381
void Sniff(Chara c)
Definition: Chara.cs:8291
override bool IsPCC
Definition: Chara.cs:696
int idleActTimer
Definition: Chara.cs:114
bool IsCat
Definition: Chara.cs:1001
SourceRace.Row race
Definition: Chara.cs:466
Definition: ConHOT.cs:4
int AllyDistance(Chara c)
bool enable
Definition: CoreDebug.cs:286
static int GetFoodScore(Thing food)
Definition: CraftUtil.cs:141
int GetRaw(int offsetHours=0)
Definition: Date.cs: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:299
SourceElement.Row source
Definition: ELEMENT.cs:278
int vTempPotential
Definition: ELEMENT.cs:263
Act act
Definition: ELEMENT.cs:399
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:46
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:165
static LayerCraft Instance
Definition: LayerCraft.cs:8
static LayerDragGrid Instance
Definition: Los.cs:5
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
Definition: Los.cs:167
Point GetRandomPoint(Point center, int radius, int tries=100, bool mustBeWalkable=true, bool requireLos=true)
Definition: Map.cs:2215
PropsInstalled Installed
Definition: Map.cs:123
PropsManager props
Definition: Map.cs:91
List< Chara > charas
Definition: Map.cs:81
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
Definition: Party.cs:7
bool HasElement(int ele, bool excludePC=false)
Definition: Party.cs:198
int EvalueTotal(int ele, Func< Chara, bool > funcIf=null)
Definition: Party.cs:185
Chara leader
Definition: Party.cs:31
List< Chara > members
Definition: Party.cs:19
int turns
Definition: Player.cs:84
int karma
Definition: Player.cs:933
Stats stats
Definition: Player.cs:1071
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:548
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1397
bool IsBlocked
Definition: Point.cs:363
List< Thing > Things
Definition: Point.cs:338
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:619
bool Equals(int _x, int _z)
Definition: Point.cs:960
bool IsValid
Definition: Point.cs:88
Point GetRandomPointInRadius(int minRadius, int maxRadius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=2000)
Definition: Point.cs:783
int Distance(Point p)
Definition: Point.cs:989
Chara FirstChara
Definition: Point.cs:288
bool IsInBounds
Definition: Point.cs:104
Cell cell
Definition: Point.cs:51
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140
bool HasChara
Definition: Point.cs:238
bool IsHotSpring
Definition: Point.cs:375
bool IsDeepWater
Definition: Point.cs:276
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
Definition: Point.cs:769
bool IsActive(int id, int days=-1)
List< PopItem > items
Definition: PopManager.cs:34
PropsInstalled installed
Definition: PropsManager.cs:8
TraitManager traits
Definition: Props.cs:18
Thing Find(int uid)
Definition: Props.cs:389
ReligionHarmony Harmony
Definition: Room.cs:4
Lot lot
Definition: Room.cs:21
virtual bool IsRegion
Definition: Spatial.cs:515
virtual void Mod(int a)
Definition: Stats.cs:135
override int GetPhase()
Definition: Stats.cs:117
virtual int value
Definition: Stats.cs:56
virtual int max
Definition: Stats.cs:68
Definition: TCText.cs:6
PopManager pop
Definition: TCText.cs:9
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Thing Find(int uid)
bool IsFull(int y=0)
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
bool IsSharedContainer
Definition: Thing.cs:113
virtual AI_Idle.Behaviour IdleBehaviour
Definition: TraitChara.cs:17
virtual string IdAmbience
Definition: TraitChara.cs:137
virtual bool CanFish
Definition: TraitChara.cs:139
virtual bool IdleAct()
Definition: TraitChara.cs:141
TraitMap restSpots
Definition: TraitManager.cs:10
virtual bool AllowTraining
Definition: TraitShackle.cs:15
virtual bool CanRead(Chara c)
Definition: Trait.cs:995
virtual bool CanEat(Chara c)
Definition: Trait.cs:1004
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1013
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
static int okaerinko
Definition: Zone.cs:31
virtual bool IsNefia
Definition: Zone.cs:287
FactionBranch branch
Definition: Zone.cs:34
virtual bool IsUserZone
Definition: Zone.cs:273
Chara Boss
Definition: Zone.cs:86
virtual bool IsTown
Definition: Zone.cs:225
Chara SpawnMob(string id, Point pos=null)
Definition: Zone.cs:2798
virtual bool PetFollow
Definition: Zone.cs:289
bool IsPCFaction
Definition: Zone.cs:475
virtual bool IsUnderwater
Definition: Zone.cs:271
Card AddCard(Card t, Point point)
Definition: Zone.cs:2017

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(), Card.DamageHP(), BaseArea.data, World.date, EClass.debug, ElementContainer.dict, Card.Dist(), Point.Distance(), AIAct.Do(), AIAct.DoGoto(), AIAct.DoGotoSpot(), Chara.DoHostileAction(), DoSomethingToCharaInRadius(), DoSomethingToNearChara(), Chara.Drink(), Chara.Duplicate(), Card.elements, CoreDebug.enable, Card.encLV, Chara.enemy, Point.Equals(), Card.Evalue(), Party.EvalueTotal(), Card.ExistsOnMap, Chara.faction, Chara.faith, Props.Find(), ThingContainer.Find(), Chara.FindBed(), Chara.FindBestFoodToEat(), Chara.FindMaster(), Chara.FindRoom(), Point.FindThing(), Point.FirstChara, Point.ForeachNeighbor(), EClass.game, AI_Clean.GetCleanPoint(), Card.GetCurrency(), Chara.GetDestination(), AI_Fish.GetFishingPoint(), CraftUtil.GetFoodScore(), Card.GetHearingRadius(), BaseCard.GetInt(), FactionBranch.GetMeal(), Chara.GetNearbyCatToSniff(), Point.GetNearestPoint(), Stats.GetPhase(), BaseArea.GetRandomPoint(), Point.GetRandomPoint(), Point.GetRandomPointInRadius(), Date.GetRaw(), CardRenderer.GetTC(), CardManager.globalCharas, ReligionManager.Harmony, CharaAbility.Has(), LangGame.Has(), Chara.HasAccess(), Point.HasChara, Chara.HasCondition(), Card.HasEditorTag(), Party.HasElement(), Card.HasElement(), Cell.HasFire, Chara.HasHobbyOrWork(), Chara.held, Chara.homeBranch, Chara.host, Chara.hostility, Card.HostRenderer, Card.hp, Chara.hunger, Card.id, Element.id, TraitChara.IdAmbience, TraitChara.IdleAct(), IdleActText(), Chara.idleActTimer, TraitChara.IdleBehaviour, if(), Map.Installed, PropsManager.installed, LayerCraft.Instance, LayerDragGrid.Instance, Chara.InstantEat(), PolicyManager.IsActive(), Chara.IsAliveInCurrentZone, Point.IsBlocked, Chara.IsCat, Card.isDestroyed, Chara.isDrunk, Card.IsEquipment, ThingContainer.IsFull(), Card.isGifted, Chara.IsGuest(), Chara.IsHostile(), Point.IsHotSpring, Chara.IsHuman, Chara.IsIdle, Point.IsInBounds, Chara.IsInCombat, Card.IsInMutterDistance(), Card.IsInstalled, Chara.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, 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, Chara.ride, EClass.rnd(), EClass.rndHalf(), Cell.room, Msg.Say(), Card.Say(), Chara.SetAI(), Chara.SetEnemy(), Chara.SetHostility(), BaseCard.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.TryMoveTowards(), TryPerformIdleUse(), Chara.TryPutSharedItems(), AI_Shopping.TryRestock(), AI_Shopping.TryShop(), Chara.TryTakeSharedItems(), Chara.TryUse(), Chara.turnLastSeen, Player.Stats.turns, Chara.UseAbility(), Stats.value, Element.ValueWithoutLink, Element.vTempPotential, and EClass.world.

◆ TryCast()

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

Definition at line 1145 of file AI_Idle.cs.

1146 {
1147 owner.Say("idle_cast", owner);
1148 ActEffect.Proc(id, power, BlessedState.Normal, owner);
1149 }
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:1035

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

1137 : Condition
1138 {
1139 if (!owner.HasCondition<T>())
1140 {
1141 TryCast(id, power);
1142 }
1143 }

◆ TryPerformIdleUse()

bool AI_Idle.TryPerformIdleUse ( )
inline

Definition at line 1202 of file AI_Idle.cs.

1203 {
1204 for (int i = 0; i < 10; i++)
1205 {
1206 Point randomPoint = owner.pos.GetRandomPoint(7, requireLos: true, allowChara: true, allowBlocked: true);
1207 if (randomPoint == null || randomPoint.detail == null)
1208 {
1209 continue;
1210 }
1211 foreach (Thing thing in randomPoint.detail.things)
1212 {
1213 if (thing.IsInstalled)
1214 {
1215 int num = owner.Dist(thing);
1216 if (EClass.rnd((owner.memberType == FactionMemberType.Guest) ? 5 : 50) == 0 && thing.HasTag(CTAG.tourism) && num <= 2)
1217 {
1218 owner.LookAt(thing);
1219 owner.Talk("nice_statue");
1220 return true;
1221 }
1222 if (EClass.rnd(thing.trait.IdleUseChance) == 0 && thing.trait.IdleUse(owner, num))
1223 {
1224 owner.LookAt(thing);
1225 return true;
1226 }
1227 }
1228 }
1229 }
1230 return false;
1231 }
CTAG
Definition: CTAG.cs:2
bool HasTag(CTAG tag)
Definition: Card.cs:2635
List< Thing > things
Definition: CellDetail.cs:11
override void LookAt(Card c)
Definition: Chara.cs:3597
CellDetail detail
Definition: Point.cs:71
virtual int IdleUseChance
Definition: Trait.cs:375
virtual bool IdleUse(Chara c, int dist)
Definition: Trait.cs:669

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: