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

Public Types

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

Public Member Functions

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

Public Attributes

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

Properties

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

Static Private Attributes

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

Additional Inherited Members

- Static Public Member Functions inherited from Act
static void SetReference (Chara _cc, Card _tc=null, Point _tp=null)
 
static void SetTool (Thing t)
 
- Static Public Member Functions inherited from Element
static string GetName (string alias)
 
static SourceElement.Row Get (int id)
 
static Dictionary< int, int > GetElementMap (int[] list)
 
static Dictionary< int, int > GetElementMap (int[] list, Dictionary< int, int > map)
 
static SourceElement.Row GetRandomElement (int lv=1, bool useWeight=true)
 
static Element Create (int id, int v=0)
 
static Element Create (string id, int v=1)
 
static int GetId (string alias)
 
static int GetResistLv (int v)
 
static int GetResistDamage (int dmg, int v, int power=0)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (int a, int start, int step, int rate=75)
 
static int 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 941 of file AI_Idle.cs.

942 {
943 List<Chara> list = owner.pos.ListCharasInRadius(owner, radius, delegate(Chara c)
944 {
945 if (c == owner || !owner.CanSee(c))
946 {
947 return false;
948 }
949 return funcPickChara == null || funcPickChara(c);
950 });
951 if (list.Count > 0)
952 {
953 Chara chara = list.RandomItem();
954 action?.Invoke(chara);
955 return chara;
956 }
957 return null;
958 }
new Chara owner
Definition: AIAct.cs:14
Point pos
Definition: Card.cs:57
Definition: Chara.cs:10
bool CanSee(Card c)
Definition: Chara.cs:1200
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1204

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

923 {
924 List<Chara> list = owner.pos.ListCharasInNeighbor(delegate(Chara c)
925 {
926 if (c == owner || !owner.CanSee(c))
927 {
928 return false;
929 }
930 return funcPickChara == null || funcPickChara(c);
931 });
932 if (list.Count > 0)
933 {
934 Chara chara = list.RandomItem();
935 action?.Invoke(chara);
936 return chara;
937 }
938 return null;
939 }
List< Chara > ListCharasInNeighbor(Func< Chara, bool > func)
Definition: Point.cs:1184

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

Referenced by Run().

◆ GetRandomAssignedRoom()

BaseArea AI_Idle.GetRandomAssignedRoom ( )
inline

Definition at line 909 of file AI_Idle.cs.

910 {
911 _listRoom.Clear();
912 foreach (BaseArea item in ((IEnumerable<BaseArea>)EClass._map.rooms.listRoom).Concat((IEnumerable<BaseArea>)EClass._map.rooms.listArea))
913 {
914 if (item.type != null && item.type.uidCharas.Contains(owner.uid))
915 {
916 _listRoom.Add(item);
917 }
918 }
919 return _listRoom.RandomItem();
920 }
static List< BaseArea > _listRoom
Definition: AI_Idle.cs:18
int uid
Definition: Card.cs:120
Definition: EClass.cs:5
static Map _map
Definition: EClass.cs:18
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 885 of file AI_Idle.cs.

886 {
887 string text = "idle_" + id;
888 owner.PlaySound(text);
889 if (Lang.Game.map.ContainsKey(text))
890 {
891 owner.Say(text, owner);
892 }
893 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5939
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6586
int id
Definition: ELEMENT.cs:250
Definition: Lang.cs:6
static LangGame Game
Definition: Lang.cs:48

References Lang.Game.

Referenced by Run().

◆ OnStart()

override void AI_Idle.OnStart ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 26 of file AI_Idle.cs.

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

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

◆ Run()

override IEnumerable< Status > AI_Idle.Run ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 32 of file AI_Idle.cs.

33 {
34 while (true)
35 {
36 if (owner.held != null)
37 {
39 }
40 if (owner.nextUse != null)
41 {
42 Thing nextUse = owner.nextUse;
43 owner.nextUse = null;
44 if (nextUse.parent == owner && !nextUse.isDestroyed)
45 {
46 owner.TryUse(nextUse);
47 }
48 yield return KeepRunning();
49 }
51 {
52 if (EClass.rnd(5) == 0)
53 {
54 owner.Talk("onFire");
55 }
57 {
58 yield return Restart();
59 }
60 }
61 if (EClass.rnd(owner.IsPCParty ? 10 : 100) == 0 && owner.hunger.GetPhase() >= 3)
62 {
63 Thing thing = (owner.IsPCFaction ? owner.FindBestFoodToEat() : owner.things.Find((Thing a) => owner.CanEat(a, owner.IsPCFaction) && !a.c_isImportant, recursive: false));
64 if (thing == null && owner.IsPCFaction && EClass._zone.IsPCFaction)
65 {
67 if (thing != null)
68 {
69 owner.Pick(thing);
70 }
71 }
72 if (thing == null && !owner.IsPCParty)
73 {
74 if (!owner.IsPCFaction && EClass.rnd(8) != 0)
75 {
76 owner.hunger.Mod(-30);
77 }
78 else if (!owner.things.IsFull())
79 {
80 thing = ThingGen.CreateFromCategory("food", EClass.rnd(EClass.rnd(60) + 1) + 10);
81 if (thing.trait.CanEat(owner))
82 {
83 thing.isNPCProperty = true;
84 thing = owner.AddThing(thing);
85 }
86 else
87 {
88 thing = null;
89 }
90 }
91 }
92 if (thing != null)
93 {
95 {
96 owner.InstantEat(thing, sound: false);
97 yield return Restart();
98 }
99 else if (thing.Num == 1 || !owner.things.IsFull())
100 {
101 yield return Do(new AI_Eat
102 {
103 target = thing
104 });
105 }
106 }
107 }
108 if (!EClass._zone.IsRegion)
109 {
110 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>())
111 {
113 yield return KeepRunning();
114 }
115 if (EClass.rnd(3) == 0 && owner.mana.value > 0)
116 {
117 Act act = null;
118 Act actRevive = null;
119 foreach (ActList.Item item in owner.ability.list.items)
120 {
121 Act act2 = item.act;
122 if (act2.id == 8430)
123 {
124 actRevive = act2;
125 }
126 string[] abilityType = act2.source.abilityType;
127 if (!abilityType.IsEmpty() && (abilityType[0] == "heal" || abilityType[0] == "hot"))
128 {
129 act = item.act;
130 }
131 }
132 if (act != null)
133 {
134 List<Chara> list = (owner.IsPCParty ? EClass.pc.party.members : new List<Chara> { owner });
135 foreach (Chara item2 in list)
136 {
137 if (!((float)item2.hp > (float)item2.MaxHP * 0.75f) && owner.CanSeeLos(item2) && (!(act.source.abilityType[0] == "hot") || !item2.HasCondition<ConHOT>()))
138 {
139 owner.UseAbility(act, item2);
140 yield return KeepRunning();
141 break;
142 }
143 }
144 }
145 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))
146 {
147 yield return KeepRunning();
148 }
149 }
150 }
152 {
154 if (owner.sharedCheckTurn < 0 && EClass.rnd(EClass.debug.enable ? 2 : 20) == 0)
155 {
158 owner.sharedCheckTurn += (EClass.debug.enable ? 20 : 200);
159 }
160 }
161 if ((EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (owner.IsPCParty ? 10 : (owner.IsPCFaction ? 2 : 0)) > EClass.rnd(100))
162 {
163 Thing thing2 = owner.things.Find("polish_powder");
164 if (thing2 != null && EClass._map.props.installed.Find<TraitGrindstone>() != null)
165 {
166 foreach (Thing thing8 in owner.things)
167 {
168 if (!thing8.IsEquipment || thing8.encLV >= 0)
169 {
170 continue;
171 }
172 for (int i = 0; i < 5; i++)
173 {
174 if (thing8.encLV >= 0)
175 {
176 break;
177 }
178 owner.Say("polish", owner, thing8);
179 thing8.ModEncLv(1);
180 thing2.ModNum(-1);
181 if (thing2.isDestroyed)
182 {
183 break;
184 }
185 }
186 if (thing2.isDestroyed)
187 {
188 break;
189 }
190 }
191 }
192 }
193 if (owner.IsPCParty)
194 {
196 {
197 TraitShackle traitShackle = owner.pos.FindThing<TraitShackle>();
198 if (traitShackle != null && traitShackle.AllowTraining)
199 {
201 {
202 shackle = traitShackle
203 });
204 }
205 yield return Restart();
206 }
207 if (EClass.rnd(20) == 0)
208 {
209 Thing thing3 = owner.things.Find((Thing a) => a.parent == owner && a.isGifted && (a.category.id == "skillbook" || a.category.id == "ancientbook"));
210 if (thing3 != null && thing3.trait.CanRead(owner) && (thing3.Num == 1 || !owner.things.IsFull()))
211 {
212 yield return Do(new AI_Read
213 {
214 target = thing3
215 });
216 }
217 }
218 if (EClass.rnd(100) == 0 && !EClass._zone.IsRegion && owner.HasElement(1227))
219 {
220 List<Chara> list2 = new List<Chara>();
221 foreach (Chara member in EClass.pc.party.members)
222 {
223 if (member.Evalue(1227) > 0)
224 {
225 list2.Add(member);
226 }
227 }
228 if (list2.Count > 2)
229 {
230 list2.Remove(owner);
231 owner.SetEnemy(list2.RandomItem());
232 yield return Success();
233 }
234 }
235 if (EClass.rnd(150) == 0 && owner.host != null && owner.host.parasite == owner && owner.GetInt(108) == 1)
236 {
237 owner.host.PlaySound("whip");
238 owner.host.Say("use_whip3", owner, owner.host);
239 owner.Talk("insult");
240 owner.host.PlayAnime(AnimeID.Shiver);
241 owner.host.DamageHP(5 + EClass.rndHalf(owner.host.MaxHP / 5), 919, 100, AttackSource.Condition);
243 yield return KeepRunning();
244 }
245 if (EClass.rnd(EClass.debug.enable ? 2 : 20) == 0 && owner.CanSee(EClass.pc) && !(EClass.pc.ai is AI_Eat))
246 {
248 }
249 if (owner.isSynced && EClass.rnd((owner.host == null) ? 200 : 150) == 0 && owner.GetInt(106) == 0)
250 {
251 if (EClass.rnd(2) == 0 && owner.GetInt(108) == 1)
252 {
253 owner.Talk("insult");
254 }
255 else
256 {
258 }
259 }
260 if (EClass.rnd(100) == 0 && EClass._zone.IsTown)
261 {
263 }
264 if ((EClass.rnd(20) == 0 || EClass.debug.enable) && owner.GetCurrency() >= 500)
265 {
266 bool flag = EClass._zone.IsTown;
268 {
269 foreach (Chara member2 in EClass._zone.branch.members)
270 {
271 if (member2.ExistsOnMap && member2.trait is TraitTrainer)
272 {
273 flag = true;
274 }
275 }
276 }
277 if (flag)
278 {
279 bool flag2 = false;
280 foreach (Element value in owner.elements.dict.Values)
281 {
282 if (!(value.source.category != "skill") && value.vTempPotential < 900)
283 {
284 flag2 = true;
285 break;
286 }
287 }
288 if (flag2)
289 {
290 int num = owner.GetCurrency();
291 if (num >= 20000)
292 {
293 num = 20000;
294 }
295 owner.PlaySound("pay");
296 int num2 = num / 200;
297 foreach (Element value2 in owner.elements.dict.Values)
298 {
299 if (!(value2.source.category != "skill"))
300 {
301 int num3 = num2 * 100 / (100 + (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) * (100 + value2.vTempPotential / 2 + value2.ValueWithoutLink) / 100);
302 num3 += 1 + EClass.rnd(3);
303 owner.elements.ModTempPotential(value2.id, Mathf.Max(1, num3), 9999);
304 }
305 }
306 Msg.Say("party_train", owner, Lang._currency(num));
307 owner.PlaySound("ding_potential");
308 owner.ModCurrency(-num);
309 }
310 }
311 }
312 }
313 if (owner.c_uidMaster != 0)
314 {
315 Chara chara = owner.master;
316 if (chara == null || !chara.IsAliveInCurrentZone)
317 {
318 chara = owner.FindMaster();
319 }
320 if (chara != null && chara.IsAliveInCurrentZone)
321 {
322 if (owner.enemy == null)
323 {
324 owner.SetEnemy(chara.enemy);
325 }
326 int num4 = owner.Dist(chara.pos);
327 if (owner.source.aiIdle != "root" && num4 > EClass.game.config.tactics.AllyDistance(owner) && EClass._zone.PetFollow && owner.c_minionType == MinionType.Default)
328 {
329 if (owner.HasAccess(chara.pos))
330 {
331 owner.TryMoveTowards(chara.pos);
332 }
333 yield return KeepRunning();
334 continue;
335 }
336 }
337 }
338 Party party = owner.party;
339 if (party == null || party.leader == owner || !party.leader.IsAliveInCurrentZone || owner.host != null || !EClass._zone.PetFollow)
340 {
341 break;
342 }
343 if (owner.source.aiIdle == "root")
344 {
345 yield return KeepRunning();
346 continue;
347 }
349 {
350 yield return KeepRunning();
351 continue;
352 }
353 if (owner.HasAccess(party.leader.pos) && owner.TryMoveTowards(party.leader.pos) == Card.MoveResult.Fail && owner.Dist(party.leader) > 4)
354 {
356 bool flag3 = (EClass._zone is Zone_Civilized || EClass._zone.IsPCFaction) && (EClass.pc.enemy == null || !EClass.pc.enemy.IsAliveInCurrentZone);
357 if (moveFailCount >= (flag3 ? 100 : 10))
358 {
359 owner.Teleport(party.leader.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), silent: false, force: true);
360 moveFailCount = 0;
361 }
362 }
363 else
364 {
365 moveFailCount = 0;
366 }
367 yield return KeepRunning();
368 }
369 if (EClass._zone.IsNefia && EClass._zone.Boss == owner && EClass.rnd(20) == 0)
370 {
372 }
373 if (EClass._zone.IsRegion && EClass.rnd(10) != 0)
374 {
375 yield return Restart();
376 }
377 if (((owner.homeBranch != null && owner.homeBranch == EClass.Branch && EClass.rnd(100) == 0) || (owner.IsGuest() && EClass.rnd(50) == 0)) && owner.FindBed() == null)
378 {
380 }
381 if (owner.id == "geist" && EClass.rnd(20) == 0)
382 {
383 Point nearestPoint = EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false);
384 if (nearestPoint != null)
385 {
386 foreach (Chara item3 in nearestPoint.ListCharasInRadius(owner, 6, (Chara _c) => _c != owner && !_c.IsPCFactionOrMinion))
387 {
388 item3.Teleport(nearestPoint.GetNearestPoint(allowBlock: false, allowChara: false) ?? nearestPoint);
389 }
390 if (owner != null)
391 {
393 {
394 EClass.pc.ai.Cancel();
395 }
396 owner.Teleport(nearestPoint);
397 }
398 yield return Success();
399 }
400 }
402 {
403 Room room = owner.pos.cell.room;
404 if (room != null)
405 {
406 Point point = null;
407 if (owner.memberType == FactionMemberType.Guest && room.data.accessType != 0)
408 {
409 point = FindMovePoint(BaseArea.AccessType.Public);
410 }
411 else if (owner.memberType == FactionMemberType.Default && room.data.accessType == BaseArea.AccessType.Private)
412 {
413 point = FindMovePoint(BaseArea.AccessType.Resident) ?? FindMovePoint(BaseArea.AccessType.Public);
414 }
415 if (point != null)
416 {
417 yield return DoGoto(point);
418 }
419 }
420 }
422 {
423 if (owner.IsPCFaction && owner.GetInt(32) + 4320 < EClass.world.date.GetRaw())
424 {
425 if (owner.GetInt(32) != 0 && Zone.okaerinko < 10)
426 {
427 owner.Talk("welcomeBack");
428 Zone.okaerinko++;
429 }
431 }
433 {
434 if (EClass.rnd(5) == 0 && owner.hostility >= Hostility.Neutral && EClass.pc.IsPCC && EClass.pc.pccData.state == PCCState.Undie && !EClass.pc.pos.cell.IsTopWaterAndNoSnow)
435 {
436 owner.Talk("pervert3");
437 }
438 else if (EClass.rnd(15) == 0 && EClass._zone.IsTown && owner.hostility >= Hostility.Neutral && !owner.IsPCFaction && !EClass.pc.HasCondition<ConIncognito>())
439 {
440 bool flag4 = EClass._zone is Zone_Derphy;
441 string text = ((EClass.player.karma > 10) ? ((EClass.player.karma < 90) ? "" : (flag4 ? "rumor_bad" : "rumor_good")) : (flag4 ? "rumor_good" : "rumor_bad"));
442 if (!text.IsEmpty())
443 {
444 owner.Talk(text);
445 }
446 if ((flag4 ? (EClass.player.karma >= 90) : (EClass.player.karma <= 10)) && EClass.rnd(10) == 0)
447 {
448 Thing t2 = ThingGen.Create("stone");
449 AI_PlayMusic.ignoreDamage = true;
451 AI_PlayMusic.ignoreDamage = false;
452 }
453 }
454 else
455 {
456 owner.TalkTopic("fov");
457 }
458 owner.turnLastSeen = EClass.player.stats.turns;
459 }
460 }
461 if (EClass.rnd(25) == 0 && owner.IsInMutterDistance())
462 {
464 {
465 owner.PlayAnime(AnimeID.Shiver);
466 }
468 if (tC == null || tC.pop.items.Count == 0)
469 {
470 if (owner.noMove)
471 {
472 foreach (Thing thing9 in owner.pos.Things)
473 {
474 if (thing9.IsInstalled && thing9.trait is TraitGeneratorWheel)
475 {
476 owner.Talk("labor");
477 owner.PlayAnime(AnimeID.Shiver);
478 yield return Restart();
479 }
480 }
481 }
482 if (owner.isDrunk && (owner.race.id == "cat" || owner.id == "sailor"))
483 {
484 owner.Talk("drunk_cat");
485 }
486 else if (owner.isRestrained)
487 {
488 owner.Talk("restrained");
489 }
490 else if (owner.GetInt(106) == 0 && !owner.IsPCParty)
491 {
492 if (owner.HasElement(1232) && EClass.rnd(4) == 0)
493 {
494 owner.Talk("baby");
495 }
496 else if (EClass.rnd((owner.host == null) ? 2 : 10) == 0 && owner.isSynced && owner.TalkTopic().IsEmpty())
497 {
498 owner.Talk(owner.pos.IsHotSpring ? "hotspring" : "idle");
499 }
500 }
501 }
502 }
503 if (EClass.rnd(8) == 0 && owner.race.id == "chicken")
504 {
505 owner.PlaySound("Animal/Chicken/chicken");
506 }
507 if (EClass.rnd(80) == 0 && owner.race.id == "cat")
508 {
509 owner.PlaySound("Animal/Cat/cat");
510 }
511 if (owner.trait.IdAmbience != null && owner.IsInMutterDistance(15))
512 {
513 float mtp = 1f;
514 Room room2 = owner.Cell.room;
515 Room room3 = EClass.pc.Cell.room;
516 if (room2 != room3 && room3 != null)
517 {
518 mtp = ((room2?.lot != room3?.lot) ? 0.4f : 0.7f);
519 }
520 EClass.Sound.PlayAmbience(owner.trait.IdAmbience, owner.pos.Position(), mtp);
521 }
522 if (EClass.rnd(2000) == 0 && owner.IsHuman && (owner.host == null || owner.host.ride != owner))
523 {
524 Thing thing4 = owner.things.Find((Thing a) => !a.IsNegativeGift && a.trait.CanDrink(owner), recursive: false);
525 if (thing4 != null && thing4.trait is TraitPotion && owner.IsPCParty)
526 {
527 thing4 = null;
528 }
529 bool flag5 = EClass.Branch != null && EClass.Branch.policies.IsActive(2503);
530 if (owner.homeBranch != null && owner.homeBranch.policies.IsActive(2503))
531 {
532 flag5 = true;
533 }
534 if (thing4 == null && !flag5)
535 {
536 thing4 = ThingGen.Create("crimAle");
537 owner.Drink(thing4);
538 }
539 if (thing4 != null && !thing4.isDestroyed)
540 {
541 owner.TryUse(thing4);
542 yield return Restart();
543 }
544 }
545 if (EClass.rnd(owner.IsPCParty ? 1000 : 200) == 0 && owner.isDrunk && (owner.isSynced || EClass.rnd(5) == 0))
546 {
547 DoSomethingToCharaInRadius(3, null, delegate(Chara c)
548 {
549 owner.Say("drunk_mess", owner, c);
550 owner.Talk("drunk_mess");
551 bool flag6 = EClass.rnd(5) == 0 && !c.IsPC;
552 if (c.IsPCParty && owner.hostility >= Hostility.Friend)
553 {
554 flag6 = false;
555 }
556 if (flag6)
557 {
558 owner.Say("drunk_counter", c, owner);
559 c.Talk("drunk_counter");
561 }
562 });
563 }
564 if (EClass.rnd(100) == 0 && owner.trait.CanFish && owner.stamina.value > 0)
565 {
566 Point fishingPoint = AI_Fish.GetFishingPoint(owner.pos);
567 if (fishingPoint.IsValid)
568 {
569 yield return Do(new AI_Fish
570 {
571 pos = fishingPoint
572 });
573 }
574 }
575 string idAct = owner.source.actIdle.RandomItem();
576 if (EClass.rnd(EClass.world.date.IsNight ? 1500 : 15000) == 0 && !owner.IsPCFaction && !owner.noMove)
577 {
578 owner.AddCondition<ConSleep>(1000 + EClass.rnd(1000), force: true);
579 }
580 if (EClass.rnd(100) == 0 && !owner.noMove && (owner.HasHobbyOrWork("Pet") || owner.HasHobbyOrWork("Fluffy")))
581 {
582 yield return Do(new AI_Mofu());
583 }
584 if (EClass.rnd((owner.host != null && owner.GetInt(106) != 0) ? 1000 : 40) == 0 && owner.IsHuman)
585 {
586 DoSomethingToNearChara((Chara c) => (!c.IsPCParty || EClass.rnd(5) == 0) && c.IsMofuable && !owner.IsHostile(c) && !c.IsInCombat, delegate(Chara c)
587 {
588 owner.Cuddle(c);
589 });
590 yield return KeepRunning();
591 }
592 if (EClass.rnd(100) == 0 && owner.trait is TraitBitch)
593 {
594 Chara chara2 = DoSomethingToNearChara((Chara c) => c.IsIdle && !c.IsPCParty && !(c.trait is TraitBitch) && c.Evalue(418) <= 0);
595 if (chara2 != null)
596 {
597 yield return Do(new AI_Fuck
598 {
599 target = chara2,
600 bitch = true
601 });
602 }
603 }
604 if (EClass.rnd(50) == 0 && owner.trait is TraitBard)
605 {
606 yield return Do(new AI_PlayMusic());
607 }
608 if (EClass.rnd(4) == 0 && TryPerformIdleUse())
609 {
610 yield return Restart();
611 }
612 if (EClass.rnd(20) == 0 && owner.trait.IdleAct())
613 {
614 yield return Restart();
615 }
616 if (idAct == "janitor" && EClass.rnd(5) == 0)
617 {
618 DoSomethingToCharaInRadius(4, null, delegate(Chara c)
619 {
620 if (c.HasElement(1211) && !(EClass._zone is Zone_Casino))
621 {
622 owner.Talk("snail");
623 Thing t4 = ThingGen.Create("1142");
624 ActThrow.Throw(owner, c.pos, t4);
625 }
626 });
627 yield return Restart();
628 }
630 {
631 TraitShackle traitShackle2 = owner.pos.FindThing<TraitShackle>();
632 if (traitShackle2 != null && traitShackle2.AllowTraining)
633 {
635 {
636 shackle = traitShackle2
637 });
638 yield return Restart();
639 }
640 }
641 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>())
642 {
644 }
645 if (EClass.rnd(200) == 0 && !owner.noMove)
646 {
647 Point cleanPoint = AI_Clean.GetCleanPoint(owner, 4);
648 if (cleanPoint != null)
649 {
650 yield return Do(new AI_Clean
651 {
652 pos = cleanPoint
653 });
654 }
655 }
656 if (EClass.rnd(35) == 0 && owner.id == "child" && owner.pos.cell.IsSnowTile)
657 {
658 foreach (Chara chara3 in EClass._map.charas)
659 {
660 if (EClass.rnd(3) != 0 && chara3 != owner && chara3.pos.cell.IsSnowTile && chara3.Dist(owner) <= 6 && Los.IsVisible(chara3, owner))
661 {
662 Thing t3 = ThingGen.Create("snow");
663 ActThrow.Throw(owner, chara3.pos, t3);
664 break;
665 }
666 }
667 }
668 if (EClass.rnd(EClass.debug.enable ? 3 : 30) == 0)
669 {
670 Thing thing5 = owner.things.Find<TraitBall>();
671 if (thing5 == null)
672 {
673 owner.pos.ForeachNeighbor(delegate(Point p)
674 {
675 Card card2 = p.FindThing<TraitBall>()?.owner;
676 if (card2 != null)
677 {
678 owner.Pick(card2.Thing);
679 }
680 });
681 }
682 else
683 {
684 foreach (Chara chara4 in EClass._map.charas)
685 {
686 if (EClass.rnd(3) != 0 && chara4 != owner && chara4.Dist(owner) <= 6 && chara4.Dist(owner) >= 3 && Los.IsVisible(chara4, owner))
687 {
688 ActThrow.Throw(owner, chara4.pos, thing5);
689 break;
690 }
691 }
692 }
693 }
694 if (EClass.rnd(20) == 0 && AI_Shopping.TryShop(owner, realtime: true))
695 {
696 yield return Restart();
697 }
698 if (EClass.rnd(20) == 0 && owner.IsPCFaction && AI_Shopping.TryRestock(owner, realtime: true))
699 {
700 yield return Restart();
701 }
703 if (owner.idleActTimer <= 0 && !owner.source.actIdle.IsEmpty())
704 {
705 owner.idleActTimer = 10 + EClass.rnd(50);
706 switch (idAct)
707 {
708 case "torture_snail":
709 DoSomethingToNearChara((Chara c) => c.race.id == "snail", delegate(Chara c)
710 {
711 owner.Say("use_whip3", owner, c);
712 owner.PlaySound("whip");
713 owner.Talk("insult");
714 c.PlayAnime(AnimeID.Shiver);
715 c.OnInsulted();
716 });
717 break;
718 case "buffMage":
719 if (EClass.rnd(2) == 0)
720 {
721 TryCast<ConHolyVeil>(EffectId.HolyVeil, 300 + EClass.rnd(300));
722 }
723 else
724 {
725 TryCast<ConLevitate>(EffectId.Levitate, 300 + EClass.rnd(300));
726 }
727 break;
728 case "buffThief":
729 TryCast<ConNightVision>(EffectId.CatsEye, 100 + EClass.rnd(100));
730 break;
731 case "buffGuildWatch":
732 TryCast<ConGravity>(EffectId.Gravity, 300 + EClass.rnd(300));
733 break;
734 case "buffHealer":
735 TryCast(EffectId.Heal);
736 break;
737 case "readBook":
738 {
739 if (EClass.rnd(2) == 0 || (owner.IsPCParty && EClass.rnd(20) != 0))
740 {
741 break;
742 }
743 List<Thing> list3 = owner.things.List((Thing a) => a.parent == owner && (a.category.id == "spellbook" || a.category.id == "ancientbook" || a.category.id == "skillbook"), onlyAccessible: true);
744 Thing thing6 = null;
745 if (list3.Count > 0)
746 {
747 thing6 = list3.RandomItem();
748 if (!thing6.trait.CanRead(owner))
749 {
750 thing6 = null;
751 }
752 }
753 if (thing6 == null)
754 {
755 if (owner.things.IsFull())
756 {
757 break;
758 }
759 thing6 = ThingGen.CreateFromCategory((EClass.rnd(5) != 0) ? "spellbook" : "ancientbook");
760 thing6.isNPCProperty = true;
761 }
762 if (!(thing6.id == "1084") || !owner.IsPCFaction)
763 {
764 if (!owner.HasElement(285))
765 {
766 owner.elements.ModBase(285, 1);
767 }
768 yield return Do(new AI_Read
769 {
770 target = thing6
771 });
772 }
773 break;
774 }
775 default:
776 if (LangGame.Has("idle_" + idAct))
777 {
778 IdleActText(idAct);
779 }
780 break;
781 }
782 yield return Restart();
783 }
784 if (owner.host != null)
785 {
786 yield return Restart();
787 }
789 {
791 {
792 yield return DoGoto(owner.orgPos);
793 }
794 yield return Restart();
795 }
797 {
798 yield return DoGoto(EClass.pc);
799 }
800 if (EClass.rnd(100) == 0 && !owner.IsPCFaction)
801 {
802 if (owner.id == "ashland" || owner.id == "fiama")
803 {
805 if (card != null)
806 {
807 yield return DoGotoSpot(card);
808 }
809 else
810 {
811 Room room4 = owner.FindRoom();
812 if (room4 != null)
813 {
814 yield return DoGoto(room4.GetRandomPoint().GetNearestPoint());
815 }
816 }
817 }
819 {
820 yield return DoGoto(owner.orgPos, 0, ignoreConnection: false, delegate
821 {
822 if (!EClass._zone.IsPCFaction)
823 {
824 owner.Teleport(owner.orgPos, silent: false, force: true);
825 }
826 return Status.Success;
827 });
828 }
829 }
830 if (EClass.rnd(100) == 0 && owner.id == "bee")
831 {
832 Thing thing7 = EClass._map.ListThing<TraitBeekeep>()?.RandomItem();
833 if (thing7 != null)
834 {
835 yield return DoGoto(thing7.pos);
836 }
837 }
838 if (EClass.rnd(10) == 0 && !EClass._zone.IsUnderwater && (owner.race.tag.Contains("water") || owner.source.tag.Contains("water")) && !owner.pos.IsDeepWater)
839 {
840 for (int j = 0; j < 100; j++)
841 {
842 Point randomPoint = EClass._map.GetRandomPoint();
843 if (randomPoint.IsDeepWater && !randomPoint.IsBlocked)
844 {
845 yield return DoGoto(randomPoint);
846 break;
847 }
848 }
849 }
850 string aiIdle = owner.source.aiIdle;
851 if (!(aiIdle == "stand") && !(aiIdle == "root"))
852 {
853 if (EClass.rnd(15) == 0)
854 {
856 }
857 if (owner == null)
858 {
859 yield return Cancel();
860 }
861 }
862 if (EClass._zone.IsPCFaction && owner.IsPCFaction && !owner.IsPCParty && (owner.GetWork("Clean") != null || owner.GetWork("Chore") != null) && !(EClass.pc.ai is AI_UseCrafter))
863 {
864 AI_Haul aI_Haul = AI_Haul.TryGetAI(owner);
865 if (aI_Haul != null)
866 {
867 yield return Do(aI_Haul);
868 }
869 }
870 yield return Restart();
871 Point FindMovePoint(BaseArea.AccessType type)
872 {
873 for (int k = 0; k < 20; k++)
874 {
875 Point randomPoint2 = owner.pos.GetRandomPoint(5 + k, requireLos: false);
876 if (randomPoint2 != null && randomPoint2.IsInBounds && (randomPoint2.cell.room == null || randomPoint2.cell.room.data.accessType == type))
877 {
878 return randomPoint2;
879 }
880 }
881 return null;
882 }
883 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
ClearInventoryType
EditorTag
Definition: EditorTag.cs:2
EffectId
Definition: EffectId.cs:2
FactionMemberType
Hostility
Definition: Hostility.cs:2
MinionType
Definition: MinionType.cs:2
ThrowMethod
Definition: ThrowMethod.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
Status Do(AIAct _seq, Func< Status > _onChildFail=null)
Definition: AIAct.cs:416
virtual Status Cancel()
Definition: AIAct.cs:291
Status
Definition: AIAct.cs:8
Status DoGotoSpot(Card card, Func< Status > _onChildFail=null)
Definition: AIAct.cs:461
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:432
Status KeepRunning()
Definition: AIAct.cs:321
Status Restart()
Definition: AIAct.cs:237
static Point GetCleanPoint(Chara c, int r=-1, int tries=10)
Definition: AI_Clean.cs:9
Definition: AI_Eat.cs:5
static Point GetFishingPoint(Point p)
Definition: AI_Fish.cs:272
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:922
int moveFailCount
Definition: AI_Idle.cs:16
Chara DoSomethingToCharaInRadius(int radius, Func< Chara, bool > funcPickChara, Action< Chara > action=null)
Definition: AI_Idle.cs:941
void IdleActText(string id)
Definition: AI_Idle.cs:885
bool TryPerformIdleUse()
Definition: AI_Idle.cs:960
void TryCast(EffectId id, int power=100)
Definition: AI_Idle.cs:903
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:93
Definition: ACT.cs:62
BaseArea.AccessType accessType
Definition: AreaData.cs:42
AccessType
Definition: BaseArea.cs:9
AreaData data
Definition: BaseArea.cs:29
virtual Point GetRandomPoint(bool walkable=true, bool allowChara=true)
Definition: BaseArea.cs:88
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
GlobalCharaList globalCharas
Definition: CardManager.cs:46
TC GetTC(string id)
Definition: Card.cs:11
bool isDestroyed
Definition: Card.cs:73
bool IsPCFactionOrMinion
Definition: Card.cs:2234
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5664
ElementContainerCard elements
Definition: Card.cs:39
string id
Definition: Card.cs:33
bool IsRestrainedResident
Definition: Card.cs:2220
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:3961
bool HasElement(int ele, int req=1)
Definition: Card.cs:5725
bool isRestrained
Definition: Card.cs:552
CardRenderer HostRenderer
Definition: Card.cs:2404
int c_uidMaster
Definition: Card.cs:1423
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3057
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6489
int hp
Definition: Card.cs:228
ICardParent parent
Definition: Card.cs:53
bool ExistsOnMap
Definition: Card.cs:2047
int GetCurrency(string id="money")
Definition: Card.cs:3873
bool IsInMutterDistance(int d=10)
Definition: Card.cs:7448
Trait trait
Definition: Card.cs:51
void ModCurrency(int a, string id="money")
Definition: Card.cs:3859
int encLV
Definition: Card.cs:312
bool IsEquipment
Definition: Card.cs:2135
void ModEncLv(int a)
Definition: Card.cs:3744
bool c_isImportant
Definition: Card.cs:998
MoveResult
Definition: Card.cs:13
bool noMove
Definition: Card.cs:756
bool HasEditorTag(EditorTag tag)
Definition: Card.cs:2562
ThingContainer things
Definition: Card.cs:36
bool IsInstalled
Definition: Card.cs:2343
virtual Thing Thing
Definition: Card.cs:2020
int Evalue(int ele)
Definition: Card.cs:2533
int Dist(Card c)
Definition: Card.cs:7404
bool isGifted
Definition: Card.cs:768
Cell Cell
Definition: Card.cs:2017
int Num
Definition: Card.cs:156
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:5958
SourceCategory.Row category
Definition: Card.cs:2011
void ModNum(int a, bool notify=true)
Definition: Card.cs:3413
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:7836
bool UseAbility(string idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5585
bool HasHobbyOrWork(string alias)
Definition: Chara.cs:8462
override bool IsAliveInCurrentZone
Definition: Chara.cs:559
Thing FindBestFoodToEat()
Definition: Chara.cs:7259
new TraitChara trait
Definition: Chara.cs:501
Card held
Definition: Chara.cs:70
AIAct ai
Definition: Chara.cs:200
bool TryUse(Thing t)
Definition: Chara.cs:7553
void Cuddle(Chara c, bool headpat=false)
Definition: Chara.cs:6007
int sharedCheckTurn
Definition: Chara.cs:118
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7280
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8871
Faction faction
Definition: Chara.cs:425
override bool IsPC
Definition: Chara.cs:610
bool isDrunk
Definition: Chara.cs:124
Chara host
Definition: Chara.cs:33
Chara GetNearbyCatToSniff()
Definition: Chara.cs:7747
bool CanSeeLos(Card c, int dist=-1)
Definition: Chara.cs:1232
bool IsMofuable
Definition: Chara.cs:1081
override bool IsPCParty
Definition: Chara.cs:613
Party party
Definition: Chara.cs:43
bool IsInCombat
Definition: Chara.cs:862
TraitBed TryAssignBed()
Definition: Chara.cs:7060
void PickHeld(bool msg=false)
Definition: Chara.cs:4420
bool HasCondition(string alias)
Definition: Chara.cs:9028
AIAct SetAI(AIAct g)
Definition: Chara.cs:8501
bool IsIdle
Definition: Chara.cs:851
TraitBed FindBed()
Definition: Chara.cs:7048
Stats hunger
Definition: Chara.cs:1124
override bool isSynced
Definition: Chara.cs:689
Point orgPos
Definition: Chara.cs:21
bool IsHuman
Definition: Chara.cs:877
bool MoveRandom()
Definition: Chara.cs:2523
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7078
override bool IsPCFaction
Definition: Chara.cs:669
bool HasAccess(Card c)
Definition: Chara.cs:1262
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7305
override int MaxHP
Definition: Chara.cs:706
void ClearInventory(ClearInventoryType type)
Definition: Chara.cs:8194
SourceChara.Row source
Definition: Chara.cs:156
Stats mana
Definition: Chara.cs:1136
FactionMemberType memberType
Definition: Chara.cs:46
string TalkTopic(string topic="calm")
Definition: Chara.cs:6699
Stats stamina
Definition: Chara.cs:1128
bool MoveNeighborDefinitely()
Definition: Chara.cs:2537
Chara parasite
Definition: Chara.cs:30
Chara master
Definition: Chara.cs:88
bool IsGuest()
Definition: Chara.cs:6355
Hobby GetWork(string id)
Definition: Chara.cs:8612
Thing nextUse
Definition: Chara.cs:100
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2563
Chara enemy
Definition: Chara.cs:86
CharaAbility ability
Definition: Chara.cs:422
Chara FindMaster()
Definition: Chara.cs:2332
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6046
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6095
Room FindRoom()
Definition: Chara.cs:7609
Point GetDestination()
Definition: Chara.cs:6967
int turnLastSeen
Definition: Chara.cs:110
FactionBranch homeBranch
Definition: Chara.cs:1052
void Drink(Card t)
Definition: Chara.cs:4932
Hostility hostility
Definition: Chara.cs:289
bool IsHostile()
Definition: Chara.cs:6272
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7116
PCCData pccData
Definition: Chara.cs:67
Thing Pick(Thing t, bool msg=true, bool tryStack=true)
Definition: Chara.cs:4204
void Sniff(Chara c)
Definition: Chara.cs:7759
override bool IsPCC
Definition: Chara.cs:680
int idleActTimer
Definition: Chara.cs:112
SourceRace.Row race
Definition: Chara.cs:462
Definition: ConHOT.cs:4
int AllyDistance(Chara c)
bool enable
Definition: CoreDebug.cs:286
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
bool IsNight
Definition: Date.cs:112
static Game game
Definition: EClass.cs:8
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static int rnd(long a)
Definition: EClass.cs:58
static FactionBranch Branch
Definition: EClass.cs:22
static int rndHalf(int a)
Definition: EClass.cs:87
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
static CoreDebug debug
Definition: EClass.cs:48
static SoundManager Sound
Definition: EClass.cs:46
Dictionary< int, Element > dict
Element ModTempPotential(int ele, int v, int threshMsg=0)
Element ModBase(int ele, int v)
int ValueWithoutLink
Definition: ELEMENT.cs:294
SourceElement.Row source
Definition: ELEMENT.cs:273
int vTempPotential
Definition: ELEMENT.cs:258
Act act
Definition: ELEMENT.cs:394
Thing GetMeal(Chara c)
List< Chara > members
PolicyManager policies
ConfigTactics tactics
Definition: Game.cs:90
CardManager cards
Definition: Game.cs:155
Config config
Definition: Game.cs:215
static bool Has(string id)
Definition: LangGame.cs:46
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:162
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:6
Chara leader
Definition: Party.cs:30
bool HasElement(int ele)
Definition: Party.cs:180
List< Chara > members
Definition: Party.cs:18
int turns
Definition: Player.cs:84
int karma
Definition: Player.cs:825
Stats stats
Definition: Player.cs:960
Definition: Point.cs:9
ref Vector3 Position(int height)
Definition: Point.cs:536
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1381
bool IsBlocked
Definition: Point.cs:351
List< Thing > Things
Definition: Point.cs:326
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:607
bool Equals(int _x, int _z)
Definition: Point.cs:944
bool IsValid
Definition: Point.cs:88
int Distance(Point p)
Definition: Point.cs:973
bool IsInBounds
Definition: Point.cs:104
Cell cell
Definition: Point.cs:51
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1124
bool HasChara
Definition: Point.cs:226
bool IsHotSpring
Definition: Point.cs:363
bool IsDeepWater
Definition: Point.cs:264
Point GetRandomPoint(int radius, bool requireLos=true, bool allowChara=true, bool allowBlocked=false, int tries=100)
Definition: Point.cs:757
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
Definition: Room.cs:4
Lot lot
Definition: Room.cs:21
virtual bool IsRegion
Definition: Spatial.cs:503
virtual void Mod(int a)
Definition: Stats.cs:135
override int GetPhase()
Definition: Stats.cs:117
virtual int value
Definition: Stats.cs:56
virtual int max
Definition: Stats.cs:68
Definition: TCText.cs:6
PopManager pop
Definition: TCText.cs:9
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)
Thing Find(int uid)
bool IsFull(int y=0)
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
bool IsSharedContainer
Definition: Thing.cs:112
virtual AI_Idle.Behaviour IdleBehaviour
Definition: TraitChara.cs:17
virtual string IdAmbience
Definition: TraitChara.cs:135
virtual bool CanFish
Definition: TraitChara.cs:137
virtual bool IdleAct()
Definition: TraitChara.cs:139
TraitMap restSpots
Definition: TraitManager.cs:10
virtual bool AllowTraining
Definition: TraitShackle.cs:13
virtual bool CanRead(Chara c)
Definition: Trait.cs:964
virtual bool CanEat(Chara c)
Definition: Trait.cs:973
virtual bool CanDrink(Chara c)
Definition: Trait.cs:982
GameDate date
Definition: World.cs:6
Definition: Zone.cs:12
static int okaerinko
Definition: Zone.cs:31
virtual bool IsNefia
Definition: Zone.cs:280
FactionBranch branch
Definition: Zone.cs:34
Chara Boss
Definition: Zone.cs:83
virtual bool IsTown
Definition: Zone.cs:220
virtual bool PetFollow
Definition: Zone.cs:282
bool IsPCFaction
Definition: Zone.cs:468
virtual bool IsUnderwater
Definition: Zone.cs:264

References Lang._currency(), EClass._map, EClass._zone, Chara.ability, AreaData.accessType, Element.act, Chara.AddCondition(), Card.AddThing(), Chara.ai, TraitShackle.AllowTraining, ConfigTactics.AllyDistance(), Zone.Boss, EClass.Branch, Zone.branch, Card.c_isImportant, Card.c_uidMaster, AIAct.Cancel(), Trait.CanDrink(), 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(), Card.elements, CoreDebug.enable, Card.encLV, Chara.enemy, Point.Equals(), Card.Evalue(), Card.ExistsOnMap, Chara.faction, Props.Find(), ThingContainer.Find(), Chara.FindBed(), Chara.FindBestFoodToEat(), Chara.FindMaster(), Chara.FindRoom(), Point.FindThing(), Point.ForeachNeighbor(), EClass.game, AI_Clean.GetCleanPoint(), Card.GetCurrency(), Chara.GetDestination(), AI_Fish.GetFishingPoint(), BaseCard.GetInt(), FactionBranch.GetMeal(), Chara.GetNearbyCatToSniff(), Point.GetNearestPoint(), Stats.GetPhase(), BaseArea.GetRandomPoint(), Date.GetRaw(), CardRenderer.GetTC(), CardManager.globalCharas, 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, Chara.InstantEat(), PolicyManager.IsActive(), Chara.IsAliveInCurrentZone, Point.IsBlocked, 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.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, Point.IsValid, Los.IsVisible(), item, ActList.items, PopManager.items, Player.karma, AIAct.KeepRunning(), Party.leader, CharaAbility.list, ThingContainer.List(), Point.ListCharasInRadius(), Room.lot, Chara.mana, Chara.master, Stats.max, Chara.MaxHP, FactionBranch.members, Party.members, Chara.memberType, Stats.Mod(), ElementContainer.ModBase(), Card.ModCurrency(), Card.ModEncLv(), Card.ModNum(), ElementContainer.ModTempPotential(), moveFailCount, Chara.MoveNeighborDefinitely(), Chara.nextUse, Card.noMove, Card.Num, Zone.okaerinko, Chara.OnInsulted(), Chara.orgPos, 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, AIAct.Restart(), TraitManager.restSpots, EClass.rnd(), EClass.rndHalf(), Cell.room, Msg.Say(), Card.Say(), Chara.SetAI(), Chara.SetEnemy(), BaseCard.SetInt(), Chara.sharedCheckTurn, Chara.Sniff(), EClass.Sound, Chara.source, Element.source, 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 903 of file AI_Idle.cs.

904 {
905 owner.Say("idle_cast", owner);
906 ActEffect.Proc(id, power, BlessedState.Normal, owner);
907 }
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:902

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

895 : Condition
896 {
897 if (!owner.HasCondition<T>())
898 {
899 TryCast(id, power);
900 }
901 }

◆ TryPerformIdleUse()

bool AI_Idle.TryPerformIdleUse ( )
inline

Definition at line 960 of file AI_Idle.cs.

961 {
962 for (int i = 0; i < 10; i++)
963 {
964 Point randomPoint = owner.pos.GetRandomPoint(7, requireLos: true, allowChara: true, allowBlocked: true);
965 if (randomPoint == null || randomPoint.detail == null)
966 {
967 continue;
968 }
969 foreach (Thing thing in randomPoint.detail.things)
970 {
971 if (thing.IsInstalled)
972 {
973 int num = owner.Dist(thing);
974 if (EClass.rnd((owner.memberType == FactionMemberType.Guest) ? 5 : 50) == 0 && thing.HasTag(CTAG.tourism) && num <= 2)
975 {
976 owner.LookAt(thing);
977 owner.Talk("nice_statue");
978 return true;
979 }
980 if (EClass.rnd(thing.trait.IdleUseChance) == 0 && thing.trait.IdleUse(owner, num))
981 {
982 owner.LookAt(thing);
983 return true;
984 }
985 }
986 }
987 }
988 return false;
989 }
CTAG
Definition: CTAG.cs:2
bool HasTag(CTAG tag)
Definition: Card.cs:2557
List< Thing > things
Definition: CellDetail.cs:11
override void LookAt(Card c)
Definition: Chara.cs:3474
CellDetail detail
Definition: Point.cs:71
virtual int IdleUseChance
Definition: Trait.cs:362
virtual bool IdleUse(Chara c, int dist)
Definition: Trait.cs:642

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

Referenced by Run().

Member Data Documentation

◆ _listRoom

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

Definition at line 18 of file AI_Idle.cs.

◆ maxRepeat

int AI_Idle.maxRepeat = 10

Definition at line 14 of file AI_Idle.cs.

◆ moveFailCount

int AI_Idle.moveFailCount

Definition at line 16 of file AI_Idle.cs.

Referenced by Run().

Property Documentation

◆ InformCancel

override bool AI_Idle.InformCancel
get

Definition at line 22 of file AI_Idle.cs.

◆ IsIdle

override bool AI_Idle.IsIdle
get

Definition at line 20 of file AI_Idle.cs.

◆ MaxRestart

override int AI_Idle.MaxRestart
get

Definition at line 24 of file AI_Idle.cs.


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