Elin Decompiled Documentation EA 23.167 Nightly
Loading...
Searching...
No Matches
Chara Class Reference
Inheritance diagram for Chara:
Card IPathfindWalker BaseCard IReservable ICardParent IRenderSource IGlobalValue IInspect EClass

Public Member Functions

override string ToString ()
 
bool IsCriticallyWounded (bool includeRide=false)
 
bool HasHigherGround (Card c)
 
bool CanSeeSimple (Point p)
 
bool CanSee (Card c)
 
bool CanSeeLos (Card c, int dist=-1)
 
bool CanSeeLos (Point p, int dist=-1)
 
bool HasAccess (Card c)
 
bool HasAccess (Point p)
 
bool CanSleep ()
 
override string GetName (NameStyle style, int num=-1)
 
override void ChangeRarity (Rarity r)
 
void SetFaction (Faction f)
 
void SetHomeZone (Zone zone)
 
void OnBanish ()
 
Chara SetGlobal (Zone _home, int x, int z)
 
Chara SetGlobal ()
 
void RemoveGlobal ()
 
override void OnBeforeCreate ()
 
override void OnCreate (int genLv)
 
void SetFaith (string id)
 
void SetFaith (Religion r)
 
void HealAll ()
 
void Refresh (bool calledRecursive=false)
 
Chara Duplicate ()
 
int GetBurden (Card t=null, int num=-1)
 
void CalcBurden ()
 
void Stumble (int mtp=100)
 
void SetDirtySpeed ()
 
void RefreshSpeed (Element.BonusInfo info=null)
 
void CalculateMaxStamina ()
 
override void ApplyEditorTags (EditorTag tag)
 
override void SetSource ()
 
void SetMainElement (string id, int v=0, bool elemental=false)
 
void SetMainElement (int id, int v=0, bool elemental=false)
 
void ApplyJob (bool remove=false)
 
void ChangeJob (string idNew)
 
void AddRandomBodyPart (bool msg=false)
 
void RemoveLastBodyPart (bool msg=false)
 
void ResetBody ()
 
void ApplyRace (bool remove=false)
 
void ChangeRace (string idNew)
 
void MakePartyMemeber ()
 
void MakeAlly (bool msg=true)
 
void _MakeAlly ()
 
bool CanBeTempAlly (Chara c)
 
void MakeMinion (Chara _master, MinionType type=MinionType.Default)
 
void ReleaseMinion ()
 
void SetSummon (int duration)
 
Chara FindMaster ()
 
bool IsEscorted ()
 
bool CanDestroyPath ()
 
bool CanMoveTo (Point p, bool allowDestroyPath=true)
 
bool IsEnemyOnPath (Point p, bool cancelAI=true)
 
bool CanInteractTo (Card c)
 
bool CanInteractTo (Point p)
 
Point GetFirstStep (Point newPoint, PathManager.MoveType moveType=PathManager.MoveType.Default)
 
bool MoveRandom ()
 
bool MoveNeighborDefinitely ()
 
void MoveByForce (Point newPoint, Card c=null, bool checkWall=false)
 
MoveResult TryMoveTowards (Point p)
 
MoveResult TryMoveFrom (Point p)
 
MoveResult TryMove (Point newPoint, bool allowDestroyPath=true)
 
override MoveResult _Move (Point newPoint, MoveType type=MoveType.Walk)
 
void DestroyPath (Point pos)
 
void TryPush (Point point)
 
bool CanReplace (Chara c)
 
void MoveZone (string alias)
 
void MoveZone (Zone z, ZoneTransition.EnterState state=ZoneTransition.EnterState.Auto)
 
void MoveZone (Zone z, ZoneTransition transition)
 
void MoveHome (string id, int x=-1, int z=-1)
 
void MoveHome (Zone zone, int x=-1, int z=-1)
 
void FallFromZone ()
 
override void SetDir (int d)
 
override void Rotate (bool reverse=false)
 
override void LookAt (Card c)
 
override void LookAt (Point p)
 
void UpdateAngle ()
 
int GetCurrentDir ()
 
void UpdateSight ()
 
bool WillConsumeTurn ()
 
void TickConditions ()
 
void SyncRide ()
 
void SyncRide (Chara c)
 
override void Tick ()
 
bool CanLift (Card c)
 
bool CanAutoPick (Card c)
 
bool CanPick (Card c)
 
void PickOrDrop (Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
 
void PickOrDrop (Point p, Thing t, bool msg=true)
 
Thing Pick (Thing t, bool msg=true, bool tryStack=true)
 
Thing TryPoisonPotion (Thing t)
 
void TryAbsorbRod (Thing t)
 
void TryReservePickupTutorial (Thing t)
 
void TryPickGroundItem ()
 
void TryPutShared (Thing t, List< Thing > containers=null, bool dropIfFail=true)
 
bool TryHoldCard (Card t, int num=-1, bool pickHeld=false)
 
void HoldCard (Card t, int num=-1)
 
void PickHeld (bool msg=false)
 
Card SplitHeld (int a)
 
void TryDropCarryOnly ()
 
Card DropHeld (Point dropPos=null)
 
void DropThing (Thing t, int num=-1)
 
AttackStyle GetFavAttackStyle ()
 
Element GetFavWeaponSkill ()
 
Element GetFavArmorSkill ()
 
void TryRestock (bool onCreate)
 
void RestockEquip (bool onCreate)
 
void RestockInventory (bool onCreate)
 
Thing EQ_ID (string s, int mat=-1, Rarity r=Rarity.Random)
 
void EQ_CAT (string s)
 
void EQ_Item (string s, int num=1)
 
void Drink (Card t)
 
bool CanRevive ()
 
void GetRevived ()
 
void Revive (Point p=null, bool msg=false)
 
void MakeGrave (string lastword)
 
void ApplyDeathPenalty ()
 
void Vomit ()
 
override void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None)
 
void TryDropBossLoot ()
 
void Kick (Point p, bool ignoreSelf=false)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true)
 
bool UseAbility (string idAct, Card tc=null, Point pos=null, bool pt=false)
 
bool UseAbility (Act a, Card tc=null, Point pos=null, bool pt=false)
 
int EvalueRiding ()
 
int CalcCastingChance (Element e, int num=1)
 
void DoAI (int wait, Action onPerform)
 
void Cuddle (Chara c, bool headpat=false)
 
Chara SetEnemy (Chara c=null)
 
void TrySetEnemy (Chara c)
 
void DoHostileAction (Card _tg, bool immediate=false)
 
void CallHelp (Chara tg, bool fanatic=false)
 
bool FindNewEnemy ()
 
bool FindNearestNewEnemy ()
 
bool IsHostile ()
 
bool IsHostile (Chara c)
 
bool IsNeutral ()
 
bool IsNeutralOrAbove ()
 
bool IsBranchMember ()
 
bool IsHomeMember ()
 
bool IsInHomeZone ()
 
bool IsInSpot< T > ()
 
bool IsGuest ()
 
bool IsFriendOrAbove ()
 
bool IsFriendOrAbove (Chara c)
 
override CardRenderer _CreateRenderer ()
 
void SetPCCState (PCCState state)
 
override Sprite GetSprite (int dir=0)
 
void SetTempHand (int right=0, int left=0)
 
override SubPassData GetSubPassData ()
 
override void SetRenderParam (RenderParam p)
 
override string GetHoverText ()
 
override string GetHoverText2 ()
 
string GetTopicText (string topic="calm")
 
string TalkTopic (string topic="calm")
 
override Sprite GetImageSprite ()
 
void ChangeMemberType (FactionMemberType type)
 
void ShowDialog ()
 
LayerDrama ShowDialog (string book, string step="main", string tag="")
 
Point GetDestination ()
 
int GetHireCost ()
 
int GetHappiness ()
 
string GetTextHappiness ()
 
string GetActionText ()
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
void ClearBed (Map map=null)
 
TraitBed FindBed ()
 
TraitBed TryAssignBed ()
 
void TryPutSharedItems (IEnumerable< Thing > containers, bool msg=true)
 
void TryPutSharedItems (bool msg=true)
 
void TryTakeSharedItems (bool msg=true)
 
void TryTakeSharedItems (IEnumerable< Thing > containers, bool msg=true, bool shouldEat=true)
 
Thing FindBestFoodToEat ()
 
void InstantEat (Thing t=null, bool sound=true)
 
bool CanEat (Thing t, bool shouldEat=false)
 
bool ShouldEquip (Thing t, bool useFav=false)
 
bool TryEquip (Thing t, bool useFav=false)
 
bool CanEquipRanged (Thing t)
 
Thing TryGetThrowable ()
 
Thing FindAmmo (Thing weapon)
 
Thing GetBestRangedWeapon ()
 
bool TryEquipRanged ()
 
override int GetArmorSkill ()
 
bool TryUse (Thing t)
 
Room FindRoom ()
 
void ModAffinity (Chara c, int a, bool show=true, bool showOnlyEmo=false)
 
bool TryIdentify (Thing t, int count=1, bool show=true)
 
Chara CreateReplacement ()
 
SourceThing.Row GetFavFood ()
 
SourceCategory.Row GetFavCat ()
 
int GetTotalFeat ()
 
bool CanInsult ()
 
string GetIdPortraitCat ()
 
string GetIdPortrait ()
 
Thing MakeGene (DNA.Type? type=null)
 
Thing MakeBraineCell ()
 
void OnInsulted ()
 
bool IsValidGiftWeight (Card t, int num=-1)
 
bool CanAcceptItem (Card t, int num=-1)
 
bool CanAcceptGift (Chara c, Card t)
 
void GiveGift (Chara c, Thing t)
 
void OnGiveErohon (Thing t)
 
void GiveLovePotion (Chara c, Thing t)
 
void RequestProtection (Chara attacker, Action< Chara > action)
 
bool ShouldThrowAway (Thing t, ClearInventoryType type)
 
void ClearInventory (ClearInventoryType type)
 
void ResetUpgrade ()
 
void TryUpgrade (bool msg=true)
 
void AddCooldown (int idEle, int turns=0)
 
bool HasCooldown (int idEle)
 
void TickCooldown ()
 
void ChooseNewGoal ()
 
Goal GetGoalFromTimeTable (int hour)
 
Goal GetGoalWork ()
 
Goal GetGoalHobby ()
 
void SetAIIdle ()
 
void SetAIAggro ()
 
AIAct SetNoGoal ()
 
AIAct SetAI (AIAct g)
 
void SetAIImmediate (AIAct g)
 
BaseArea GetRoomWork ()
 
List< HobbyListWorks (bool useMemberType=true)
 
List< HobbyListHobbies (bool useMemberType=true)
 
Hobby GetWork (string id)
 
void RefreshWorkElements (ElementContainer parent=null)
 
string GetTextHobby (bool simple=false)
 
string GetTextWork (bool simple=false)
 
void AddHobby (int id)
 
void AddWork (int id)
 
void RerollHobby (bool extraSlotChance=true)
 
WorkSummary GetWorkSummary ()
 
void TickWork (VirtualDate date)
 
bool TryWorkOutside (SourceHobby.Row sourceWork)
 
void PerformWork (WorkSession session, bool isHobby=false, bool IsRealTime=false)
 
void ValidateWorks ()
 
void InitStats (bool onDeserialize=false)
 
Condition AddCondition< T > (int p=100, bool force=false)
 
Condition AddCondition (string id, int p=100, bool force=false)
 
Condition AddCondition (Condition c, bool force=false)
 
override bool HasCondition< T > ()
 
bool HasCondition (string alias)
 
Element GetBuffStats (string alias)
 
Element GetBuffStats (int ele)
 
void CureCondition< T > (int v=99999)
 
GetCondition< T > ()
 
void RemoveCondition< T > ()
 
void CureHost (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
void Cure (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
bool TryNeckHunt (Chara TC, int power, bool harvest=false)
 
void AddResistCon (Condition con)
 
void ResistCon (Condition con)
 
void Sleep (Thing bed=null, Thing pillow=null, bool pickup=false, ItemPosition posBed=null, ItemPosition posPillow=null)
 
void OnSleep (Thing bed=null, int days=1)
 
void OnSleep (int power, int days=1)
 
void ModHeight (int a)
 
void ModWeight (int a, bool ignoreLimit=false)
 
void ModCorruption (int a)
 
List< ElementListAvailabeFeats (bool pet=false, bool showAll=false)
 
void SetFeat (int id, int value=1, bool msg=false)
 
void SetMutation (int idEle, int a=0)
 
bool MutateRandom (int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
 
void GainAbility (int ele, int mtp=100)
 
bool TryNullifyCurse ()
 
void OnAdvanceDay ()
 
void AddFoodHistory (Thing food)
 
int CountNumEaten (Thing food)
 
int GetPietyValue ()
 
void RefreshFaithElement ()
 
void ModTempElement (int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
 
void DamageTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void DamageTempElement (int ele, int p, bool onlyRenew=false)
 
void EnhanceTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void EnhanceTempElement (int ele, int p, bool onlyRenew=false)
 
void DiminishTempElements (int a=1)
 
void CureTempElements (int p, bool body, bool mind)
 
void ClearTempElements ()
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft ()
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
bool IsChildOf (Card c)
 
FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune ()
 
int MaxRune ()
 
bool CanAddRune (SourceElement.Row row)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (int a, HealSource origin=HealSource.None)
 
virtual void HealHP (int a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual int ApplyProtection (int dmg, int mod=100)
 
void DamageHP (int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
 
void DamageHP (int dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null)
 
virtual void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None)
 
void Explode (Point p, Card origin)
 
void Deconstruct ()
 
void Destroy ()
 
void SpawnLoot (Card origin)
 
Thing TryMakeRandomItem (int lv=-1)
 
Card MakeFoodFrom (string _id)
 
Card MakeFoodFrom (Card c)
 
void MakeFoodRef (Card c1, Card c2=null)
 
string TryGetFoodName (Card c)
 
string GetFoodName (string s)
 
void MakeFigureFrom (string id)
 
void MakeRefFrom (string id)
 
void MakeRefFrom (Card c1, Card c2=null)
 
Thing MakeEgg (bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
 
Thing MakeMilk (bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
 
Thing GiveBirth (Thing t, bool effect)
 
Card SetHidden (bool hide=true)
 
virtual MoveResult _Move (Point p, MoveType type=MoveType.Walk)
 
void MoveImmediate (Point p, bool focus=true, bool cancelAI=true)
 
void Teleport (Point point, bool silent=false, bool force=false)
 
virtual void OnLand ()
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, int req=1)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
void RefreshColor ()
 
ref Color GetRandomColor ()
 
virtual Sprite GetSprite (int dir=0)
 
virtual Sprite GetImageSprite ()
 
void SetImage (Image image, int dir, int idSkin=0)
 
virtual void SetImage (Image image)
 
void ShowEmo (Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
 
void PlaySoundHold (bool spatial=true)
 
void PlaySoundDrop (bool spatial=true)
 
void PlaySoundImpact (bool spatial=true)
 
void PlaySoundDead (bool spatial=true)
 
SoundSource PlaySound (string id, float v=1f, bool spatial=true)
 
void KillAnime ()
 
void PlayAnime (AnimeID id, bool force=false)
 
void PlayAnime (AnimeID id, Point dest, bool force=false)
 
void PlayAnimeLoot ()
 
Effect PlayEffect (string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
 
void PlayEffect (int ele, bool useRenderPos=true, float range=0f)
 
virtual void SetDir (int d)
 
void SetRandomDir ()
 
virtual void LookAt (Card c)
 
virtual void LookAt (Point p)
 
virtual void Rotate (bool reverse=false)
 
void ChangeAltitude (int a)
 
virtual SubPassData GetSubPassData ()
 
void SetFreePos (Point point)
 
void RenderMarker (Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
 
void RecalculateFOV ()
 
bool HasLight ()
 
float GetLightPower ()
 
int GetSightRadius ()
 
int GetLightRadius ()
 
void CalculateFOV ()
 
void SetRandomLightColors ()
 
Fov CreateFov ()
 
void ClearFOV ()
 
virtual void OnSimulateHour (VirtualDate date)
 
void DecayNatural (int hour=1)
 
void CheckJustCooked ()
 
void Decay (int a=10)
 
bool HasTalk (string idTopic)
 
void Talk (string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
 
void TalkRaw (string text, string ref1=null, string ref2=null, bool forceSync=false)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

Public Attributes

int contribution
 
Point orgPos
 
Quest quest
 
Chara ride
 
Chara parasite
 
Chara host
 
ElementContainer tempElements
 
ElementContainer faithElements
 
ElementContainer workElements
 
Party party
 
FactionMemberType memberType
 
List< int > _hobbies
 
List< int > _works
 
WorkSummary _workSummary
 
List< int > _cooldowns
 
List< int > _listAbility
 
List< List< string > > _historyFood
 
PCCData pccData
 
Card held
 
int[] rawSlots
 
GlobalData global
 
string[] _strs = new string[5]
 
int[] _cints = new int[30]
 
BitArray32 _cbits1
 
Chara enemy
 
Chara master
 
Point lastPos = new Point()
 
PathProgress path = new PathProgress()
 
CharaBody body = new CharaBody()
 
CharaAbility _ability
 
Thing ranged
 
Thing nextUse
 
ConSleep conSleep
 
ConSuspend conSuspend
 
Emo2 emoIcon
 
int happiness
 
int turnLastSeen = -100
 
int idleActTimer
 
int combatCount
 
int calmCheckTurn
 
int sharedCheckTurn
 
float idleTimer
 
bool isBerserk
 
bool isDrunk
 
bool isConfused
 
bool isFainted
 
bool isBlind
 
bool isParalyzed
 
bool _isLevitating
 
bool isCreated
 
bool canSeeInvisible
 
bool hasTelepathy
 
bool isWet
 
bool bossText
 
bool ignoreSPAbsorb
 
bool wasInWater
 
SpriteReplacer spriteReplacer
 
SourceChara.Row source
 
SourceRace.Row _race
 
SourceJob.Row _job
 
Tactics _tactics
 
bool dirtySpeed = true
 
float actTime = 0.3f
 
int stealthSeen
 
GoalList goalList = new GoalList()
 
AIAct ai = new NoGoal()
 
ElementContainer _baseWorkElements
 
List< Conditionconditions = new List<Condition>()
 
Dictionary< int, int > resistCon
 
- Public Attributes inherited from Card
int[] _ints = new int[30]
 
string id = ""
 
ThingContainer things = new ThingContainer()
 
ElementContainerCard elements = new ElementContainerCard()
 
Biography bio
 
List< int > sockets
 
AIAct reservedAct
 
Props props
 
Trait trait
 
ICardParent parent
 
Fov fov
 
Point pos = new Point()
 
CardRenderer renderer
 
CardRow hat
 
int turn
 
int _colorInt
 
float roundTimer
 
float angle = 180f
 
float animeCounter
 
bool isDestroyed
 
CardBlueprint bp
 
BitArray32 _bits1
 
BitArray32 _bits2
 
PlaceState placeState
 
bool dirtyWeight = true
 
SourceMaterial.Row _material
 
Emo lastEmo
 
int sortVal
 
- Public Attributes inherited from BaseCard
Dictionary< int, object > mapObj = new Dictionary<int, object>()
 
Dictionary< int, int > mapInt = new Dictionary<int, int>()
 
Dictionary< int, string > mapStr = new Dictionary<int, string>()
 

Static Public Attributes

static string[] IDTimeTable = new string[2] { "default", "owl" }
 
static List< SourceRace.RowListAdvRace = new List<SourceRace.Row>()
 
static List< SourceJob.RowListAdvJob = new List<SourceJob.Row>()
 
static bool consumeTurn
 
static bool preventRegen
 
static bool isOnCreate
 
static NoGoal _NoGoalPC = new NoGoal()
 
static NoGoal _NoGoalRepeat = new NoGoal()
 
- Static Public Attributes inherited from Card
const int MaxWeight = 10000000
 
- Static Public Attributes inherited from EClass
static Core core
 

Protected Member Functions

override void OnSerializing ()
 
override void OnDeserialized ()
 
virtual void OnSerializing ()
 
virtual void OnDeserialized ()
 

Properties

string Aka [get]
 
string _alias [get, set]
 
string idFaith [get, set]
 
string idFaction [get, set]
 
Zone currentZone [get, set]
 
Zone homeZone [get, set]
 
GoalListType goalListType [get, set]
 
Hostility hostility [get, set]
 
int _affinity [get, set]
 
Affinity affinity [get]
 
int interest [get, set]
 
int daysStarved [get, set]
 
int _idTimeTable [get, set]
 
int uidEditor [get, set]
 
int _maxStamina [get, set]
 
int corruption [get, set]
 
bool isDead [get, set]
 
bool isAlawysVisible [get, set]
 
bool knowFav [get, set]
 
CharaAbility ability [get]
 
Faction faction [get, set]
 
Religion faith [get, set]
 
override CardRow sourceCard [get]
 
override CardRow sourceRenderCard [get]
 
SourceRace.Row race [get]
 
SourceJob.Row job [get]
 
string idTimeTable [get]
 
Hostility OriginalHostility [get]
 
string IDPCCBodySet [get]
 
new TraitChara trait [get, set]
 
string NameBraced [get]
 
string NameTitled [get]
 
override string actorPrefab [get]
 
override int PrefIndex [get]
 
override bool flipX [get]
 
override string AliasMaterialOnCreate [get]
 
override bool IsAliveInCurrentZone [get]
 
override bool IsDeadOrSleeping [get]
 
override bool IsDisabled [get]
 
bool IsLevitating [get]
 
override bool IsMoving [get]
 
override bool IsGlobal [get]
 
override bool IsPC [get]
 
override bool IsPCParty [get]
 
override bool IsMinion [get]
 
override bool IsPCPartyMinion [get]
 
override bool IsPCFactionMinion [get]
 
override bool IsPCFaction [get]
 
override bool IsPCC [get]
 
override bool isThing [get]
 
override bool isChara [get]
 
override bool HasHost [get]
 
override bool isSynced [get]
 
override bool IsMultisize [get]
 
override int MaxHP [get]
 
override int WeightLimit [get]
 
override int SelfWeight [get]
 
int MaxSummon [get]
 
Element MainElement [get]
 
override int DV [get]
 
override int PV [get]
 
override SourcePref Pref [get]
 
bool CanOpenDoor [get]
 
Tactics tactics [get]
 
TimeTable.Span CurrentSpan [get]
 
bool IsInActiveZone [get]
 
bool IsLocalChara [get]
 
bool IsIdle [get]
 
bool IsInCombat [get]
 
int DestDist [get]
 
bool HasNoGoal [get]
 
bool CanWitness [get]
 
bool IsHuman [get]
 
bool IsHumanSpeak [get]
 
bool IsMaid [get]
 
bool IsPrisoner [get]
 
bool IsAdventurer [get]
 
bool IsEyth [get]
 
bool IsWealthy [get]
 
FactionBranch homeBranch [get]
 
int MaxGeneSlot [get]
 
int CurrentGeneSlot [get]
 
int Speed [get]
 
bool IsMofuable [get]
 
ElementContainer baseWorkElements [get]
 
Stats hunger [get]
 
Stats burden [get]
 
Stats stamina [get]
 
Stats depression [get]
 
Stats bladder [get]
 
Stats hygiene [get]
 
Stats mana [get]
 
Stats sleepiness [get]
 
Stats SAN [get]
 
bool CanGainConResist [get]
 
- Properties inherited from Card
Card parentCard [get]
 
Thing parentThing [get]
 
int colorInt [get]
 
bool IsHotItem [get]
 
int uid [get, set]
 
int idMaterial [get, set]
 
int dir [get, set]
 
int Num [get, set]
 
int _x [get, set]
 
int _z [get, set]
 
int refVal [get, set]
 
int decay [get, set]
 
int altitude [get, set]
 
int hp [get, set]
 
float fx [get, set]
 
float fy [get, set]
 
BlessedState blessedState [get, set]
 
PlaceState _placeState [get, set]
 
int rarityLv [get, set]
 
Rarity rarity [get, set]
 
int encLV [get, set]
 
int posInvX [get, set]
 
int posInvY [get, set]
 
int idSkin [get, set]
 
int feat [get, set]
 
int LV [get, set]
 
int exp [get, set]
 
int tier [get, set]
 
int version [get, set]
 
bool isCensored [get, set]
 
bool isDeconstructing [get, set]
 
bool isDyed [get, set]
 
bool isModified [get, set]
 
bool isNew [get, set]
 
bool isPlayerCreation [get, set]
 
bool ignoreAutoPick [get, set]
 
bool freePos [get, set]
 
bool isHidden [get, set]
 
bool isOn [get, set]
 
bool isNPCProperty [get, set]
 
bool isRestrained [get, set]
 
bool isRoofItem [get, set]
 
bool isMasked [get, set]
 
bool disableAutoToggle [get, set]
 
bool isImported [get, set]
 
bool autoRefuel [get, set]
 
bool ignoreStackHeight [get, set]
 
bool isFloating [get, set]
 
bool isWeightChanged [get, set]
 
bool isFireproof [get, set]
 
bool isAcidproof [get, set]
 
bool isReplica [get, set]
 
bool isSummon [get, set]
 
bool isElemental [get, set]
 
bool isBroken [get, set]
 
bool isSubsetCard [get, set]
 
bool noSnow [get, set]
 
bool noMove [get, set]
 
bool isGifted [get, set]
 
bool isCrafted [get, set]
 
bool isLostProperty [get, set]
 
bool noShadow [get, set]
 
bool noSell [get, set]
 
bool isLeashed [get, set]
 
bool isStolen [get, set]
 
bool isSale [get, set]
 
bool isCopy [get, set]
 
bool isRestocking [get, set]
 
bool hasSpawned [get, set]
 
bool isBackerContent [get]
 
SourceBacker.Row sourceBacker [get]
 
BedType c_bedType [get, set]
 
int c_equippedSlot [get, set]
 
int c_lockLv [get, set]
 
Hostility c_originalHostility [get, set]
 
MinionType c_minionType [get, set]
 
int c_vomit [get, set]
 
bool c_wasInPcParty [get, set]
 
bool c_isImportant [get, set]
 
bool c_lockedHard [get, set]
 
bool c_revealLock [get, set]
 
bool c_isTrained [get, set]
 
bool c_isPrayed [get, set]
 
bool c_isDisableStockUse [get, set]
 
int c_lightColor [get, set]
 
Color LightColor [get]
 
int c_uidZone [get, set]
 
int c_uidRefCard [get, set]
 
int c_priceFix [get, set]
 
int c_priceAdd [get, set]
 
int c_priceCopy [get, set]
 
int c_fixedValue [get, set]
 
int c_dyeMat [get, set]
 
VisitorState visitorState [get, set]
 
RescueState c_rescueState [get, set]
 
BossType c_bossType [get, set]
 
int c_dateStockExpire [get, set]
 
int c_dateDeathLock [get, set]
 
int c_IDTState [get, set]
 
int c_charges [get, set]
 
int c_bill [get, set]
 
int c_invest [get, set]
 
int c_seed [get, set]
 
int c_allowance [get, set]
 
int c_fur [get, set]
 
int c_dateCooked [get, set]
 
int c_containerSize [get, set]
 
int c_weight [get, set]
 
int c_diceDim [get, set]
 
int c_indexContainerIcon [get, set]
 
int c_idMainElement [get, set]
 
int c_summonDuration [get, set]
 
int c_idBacker [get, set]
 
int c_uidMaster [get, set]
 
int c_ammo [get, set]
 
int c_daysWithGod [get, set]
 
int c_daysWithPC [get, set]
 
string c_idPortrait [get, set]
 
string c_idRace [get, set]
 
string c_idJob [get, set]
 
string c_idTone [get, set]
 
string c_color [get, set]
 
string c_idSpriteReplacer [get, set]
 
string c_idTalk [get, set]
 
string c_idDeity [get, set]
 
string c_altName [get, set]
 
string c_altName2 [get, set]
 
string c_extraNameRef [get, set]
 
string c_refText [get, set]
 
string c_idRefName [get, set]
 
string c_idRidePCC [get, set]
 
string c_idAbility [get, set]
 
string c_context [get, set]
 
string c_idEditor [get, set]
 
string c_editorTags [get, set]
 
string c_editorTraitVal [get, set]
 
string c_idTrait [get, set]
 
string c_idRefCard [get, set]
 
string c_idRefCard2 [get, set]
 
string c_note [get, set]
 
UniqueData c_uniqueData [get, set]
 
Thing ammoData [get, set]
 
List< SocketDatasocketList [get, set]
 
Thing c_copyContainer [get, set]
 
Window.SaveData c_windowSaveData [get, set]
 
CharaUpgrade c_upgrades [get, set]
 
CharaGenes c_genes [get, set]
 
List< int > c_corruptionHistory [get, set]
 
ContainerUpgrade c_containerUpgrade [get, set]
 
DNA c_DNA [get, set]
 
CharaList c_charaList [get, set]
 
byte[] c_textureData [get, set]
 
SourceMaterial.Row DyeMat [get]
 
int invX [get, set]
 
int invY [get, set]
 
CardRow refCard [get]
 
CardRow refCard2 [get]
 
int ExpToNext [get]
 
int DefaultLV [get]
 
int ChildrenWeight [get]
 
int ChildrenAndSelfWeight [get]
 
int ChildrenAndSelfWeightSingle [get]
 
virtual int SelfWeight [get]
 
virtual int WeightLimit [get]
 
SourceCategory.Row category [get]
 
SourceMaterial.Row material [get]
 
virtual string AliasMaterialOnCreate [get]
 
Cell Cell [get]
 
virtual Thing Thing [get]
 
virtual Chara Chara [get]
 
virtual bool isThing [get]
 
virtual bool isChara [get]
 
bool ExistsOnMap [get]
 
virtual bool isSynced [get]
 
bool IsContainer [get]
 
bool IsUnique [get]
 
bool IsPowerful [get]
 
bool IsImportant [get]
 
virtual SourcePref Pref [get]
 
virtual bool IsDeadOrSleeping [get]
 
virtual bool IsDisabled [get]
 
virtual bool IsMoving [get]
 
virtual bool flipX [get]
 
virtual bool IsAliveInCurrentZone [get]
 
virtual string actorPrefab [get]
 
virtual CardRow sourceCard [get]
 
virtual CardRow sourceRenderCard [get]
 
TileType TileType [get]
 
string Name [get]
 
string NameSimple [get]
 
string NameOne [get]
 
virtual bool IsPC [get]
 
bool _IsPC [get]
 
virtual bool IsPCC [get]
 
virtual bool IsPCParty [get]
 
virtual bool IsMinion [get]
 
virtual bool IsPCPartyMinion [get]
 
virtual bool IsPCFactionMinion [get]
 
virtual bool IsMultisize [get]
 
bool IsToolbelt [get]
 
bool IsLightsource [get]
 
bool IsEquipment [get]
 
bool IsFood [get]
 
bool IsInheritFoodTraits [get]
 
bool ShowFoodEnc [get]
 
bool IsWeapon [get]
 
bool IsEquipmentOrRanged [get]
 
bool IsEquipmentOrRangedOrAmmo [get]
 
bool IsMeleeWeapon [get]
 
bool IsRangedWeapon [get]
 
bool IsThrownWeapon [get]
 
bool IsAmmo [get]
 
bool IsAgent [get]
 
bool IsFurniture [get]
 
bool IsBlessed [get]
 
bool IsCursed [get]
 
bool IsRestrainedResident [get]
 
virtual bool IsPCFaction [get]
 
bool IsPCFactionOrMinion [get]
 
virtual bool IsGlobal [get]
 
virtual int MaxDecay [get]
 
bool IsDecayed [get]
 
bool IsRotting [get]
 
bool IsFresn [get]
 
virtual int MaxHP [get]
 
virtual int Power [get]
 
int FameLv [get]
 
virtual int[] Tiles [get]
 
virtual int PrefIndex [get]
 
bool IsVariation [get]
 
virtual int DV [get]
 
virtual int PV [get]
 
int HIT [get]
 
int DMG [get]
 
int STR [get]
 
int DEX [get]
 
int END [get]
 
int PER [get]
 
int LER [get]
 
int WIL [get]
 
int MAG [get]
 
int CHA [get]
 
int INT [get]
 
int LUC [get]
 
int W [get]
 
int H [get]
 
bool IsIdentified [get]
 
string TextRarity [get]
 
bool IsInstalled [get]
 
bool IsMale [get]
 
bool IsNegativeGift [get]
 
bool HasContainerSize [get]
 
Thing Tool [get]
 
virtual SourceMaterial.Row DefaultMaterial [get]
 
virtual bool HasHost [get]
 
int Quality [get]
 
int QualityLv [get]
 
LightData LightData [get]
 
CardRenderer HostRenderer [get]
 
bool ShouldShowMsg [get]
 
bool CanInspect [get]
 
string InspectName [get]
 
Point InspectPoint [get]
 
Vector3 InspectPosition [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]
 
- Properties inherited from IInspect
bool CanInspect [get]
 
string InspectName [get]
 
Point InspectPoint [get]
 
Vector3 InspectPosition [get]
 

Private Member Functions

int ParseBodySlot (string s)
 
void SetEQQuality ()
 
void GoHostile (Card _tg)
 
LayerDrama _ShowDialog (string book, string sheet, string step="main", string tag="")
 

Private Attributes

Faction _faction
 
int _Speed
 
bool hasMovedThisTurn
 

Static Private Attributes

static Point shared = new Point()
 
static List< HobbylistHobby = new List<Hobby>()
 
static Point _sharedPos = new Point()
 
static List< Chara_pts = new List<Chara>()
 
static List< Thing_ListItems = new List<Thing>()
 
static List< SourceThing.Row_listFavFood = new List<SourceThing.Row>()
 
static List< SourceCategory.Row_listFavCat = new List<SourceCategory.Row>()
 
static GoalWork _goalWork = new GoalWork()
 
static GoalHobby _goalHobby = new GoalHobby()
 

Additional Inherited Members

- Public Types inherited from Card
enum  MoveResult { Fail , Success , Door }
 
enum  MoveType { Walk , Force }
 
- Public Types inherited from IInspect
enum  NoteMode { Default , Recipe , Product , Info }
 
- Static Public Member Functions inherited from Card
static string ApplyTone (Chara c, ref string text, string _tones, int gender, bool stripPun=false)
 
static int GetTilePrice (TileRow row, SourceMaterial.Row mat)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
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)
 

Detailed Description

Definition at line 9 of file Chara.cs.

Member Function Documentation

◆ _CreateRenderer()

override CardRenderer Chara._CreateRenderer ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6150 of file Chara.cs.

6151 {
6152 CardRenderer cardRenderer = renderer;
6153 CharaRenderer charaRenderer = new CharaRenderer();
6154 if (race.id == "spider" && source.tiles.Length > 1)
6155 {
6156 base.idSkin = (EClass.core.config.game.antiSpider ? 1 : 0);
6157 }
6158 if (host != null)
6159 {
6160 charaRenderer.pccData = PCCData.Create("ride");
6161 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6162 charaRenderer.pccData.SetPart("body", "ride", idPart);
6163 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6164 }
6165 else
6166 {
6167 foreach (Condition condition in conditions)
6168 {
6169 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6170 if (rendererReplacer != null)
6171 {
6172 charaRenderer.replacer = rendererReplacer;
6173 charaRenderer.data = rendererReplacer.data;
6174 break;
6175 }
6176 }
6177 if (charaRenderer.replacer == null)
6178 {
6179 charaRenderer.pccData = pccData;
6180 }
6181 }
6182 renderer = charaRenderer;
6183 renderer.SetOwner(this);
6184 if (cardRenderer != null)
6185 {
6186 renderer.SetFirst(first: false, cardRenderer.position);
6187 }
6188 return charaRenderer;
6189 }
virtual RendererReplacer GetRendererReplacer()
RendererReplacer replacer
Definition: CardRenderer.cs:29
Vector3 position
Definition: CardRenderer.cs:21
virtual void SetOwner(Card c)
Definition: CardRenderer.cs:38
virtual void SetFirst(bool first, Vector3 pos)
CardRenderer renderer
Definition: Card.cs:57
PCCData pccData
Chara host
Definition: Chara.cs:33
List< Condition > conditions
Definition: Chara.cs:207
SourceChara.Row source
Definition: Chara.cs:154
PCCData pccData
Definition: Chara.cs:67
SourceRace.Row race
Definition: Chara.cs:460
PCCManager pccs
Definition: Core.cs:41
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6

References EClass.core, RendererReplacer.data, BaseCondition.GetRendererReplacer(), SourceRace.Row.id, CharaRenderer.pccData, Core.pccs, CardRenderer.position, CardRenderer.replacer, CharaRenderer.SetOwner(), and RenderRow.tiles.

Referenced by ActPlan._Update(), BaseListPeople.OnClick(), LayerEditSkin.OnClickClear(), Player.OnCreateGame(), ConBoost.OnRemoved(), ConTransmute.OnRemoved(), ConBoost.OnStart(), ConTransmute.OnStart(), LayerEditSkin.RefreshList(), ActRide.Ride(), ActRide.Unride(), and CoreDebug.UpdateInput().

◆ _MakeAlly()

void Chara._MakeAlly ( )
inline

Definition at line 2093 of file Chara.cs.

2094 {
2095 if (EClass.pc.homeBranch != null)
2096 {
2098 }
2099 else
2100 {
2101 SetGlobal();
2103 }
2104 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2105 this.hostility = hostility2;
2106 orgPos = null;
2107 base.c_summonDuration = 0;
2108 base.isSummon = false;
2109 ReleaseMinion();
2110 SetInt(32);
2111 Refresh();
2112 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void SetFaction(Faction f)
Definition: Chara.cs:1271
void ReleaseMinion()
Definition: Chara.cs:2138
Point orgPos
Definition: Chara.cs:21
FactionBranch homeBranch
Definition: Chara.cs:932
Chara SetGlobal()
Definition: Chara.cs:1329
static Faction Home
Definition: EClass.cs:26
static Chara pc
Definition: EClass.cs:14
void AddMemeber(Chara c)

References FactionBranch.AddMemeber(), EClass.Home, homeBranch, orgPos, EClass.pc, Refresh(), ReleaseMinion(), SetFaction(), SetGlobal(), and BaseCard.SetInt().

Referenced by MakeAlly(), and MakePartyMemeber().

◆ _Move()

override MoveResult Chara._Move ( Point  newPoint,
MoveType  type = MoveType::Walk 
)
inlinevirtual

Reimplemented from Card.

Definition at line 2518 of file Chara.cs.

2519 {
2520 if (isDead)
2521 {
2522 return MoveResult.Fail;
2523 }
2524 if (IsPC)
2525 {
2526 float num = EClass.setting.defaultActPace;
2527 switch (burden.GetPhase())
2528 {
2529 case 3:
2530 num *= 1.5f;
2531 break;
2532 case 4:
2533 num *= 2f;
2534 break;
2535 }
2537 {
2538 int num2 = 30;
2539 if (!EClass.pc.HasElement(408))
2540 {
2542 {
2543 case Weather.Condition.Rain:
2544 num2 += 5;
2545 break;
2546 case Weather.Condition.RainHeavy:
2547 num2 += 10;
2548 num *= 1.5f;
2549 break;
2550 case Weather.Condition.Snow:
2551 num2 += 10;
2552 break;
2553 case Weather.Condition.SnowHeavy:
2554 num2 += 15;
2555 num *= 1.5f;
2556 break;
2557 }
2558 }
2559 if (newPoint.matFloor.id == 48)
2560 {
2561 num2 += 20;
2562 num *= 1.8f;
2563 }
2564 num2 = num2 * 100 / (100 + EvalueMax(240, -20) + EvalueMax(407, -5) * 5);
2565 EClass.world.date.AdvanceMin(num2 * 6);
2566 EClass.player.lastZonePos = null;
2568 int num3 = base.hp;
2569 for (int i = 0; i < num2 * 4; i++)
2570 {
2571 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2572 {
2573 if (!m.isDead)
2574 {
2575 m.TickConditions();
2576 }
2577 });
2578 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2579 {
2580 EClass.player.regionMoveWarned = true;
2581 Msg.Say("regionAbortMove");
2582 EInput.Consume(consumeAxis: true);
2583 SetAI(new NoGoal());
2584 return MoveResult.Fail;
2585 }
2586 }
2587 if (newPoint.cell.CanSuffocate())
2588 {
2589 AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2590 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2591 if (num4 >= 2)
2592 {
2593 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2594 }
2595 if (!isDead && !HasElement(429))
2596 {
2597 ModExp(200, 1 + num4 * 12);
2598 }
2599 }
2600 EClass.player.regionMoveWarned = false;
2601 if (isDead)
2602 {
2603 return MoveResult.Fail;
2604 }
2605 }
2606 if (num > EClass.setting.defaultActPace * 3f)
2607 {
2608 num = EClass.setting.defaultActPace * 3f;
2609 }
2610 actTime = num;
2611 }
2612 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2613 {
2614 ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2615 if (ride != null)
2616 {
2617 ride.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2618 }
2619 if (parasite != null)
2620 {
2621 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2622 }
2623 }
2624 Chara chara = ((ride == null) ? this : ride);
2625 if (!EClass._zone.IsRegion || chara.IsPC)
2626 {
2627 bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2628 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2629 {
2630 flag = true;
2631 }
2632 if (flag && newPoint.Distance(pos) <= 1)
2633 {
2634 Point randomNeighbor = pos.GetRandomNeighbor();
2635 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2636 {
2637 newPoint = randomNeighbor;
2638 if (isDrunk)
2639 {
2640 Talk("drunk");
2641 }
2642 }
2643 }
2644 }
2645 if (newPoint.x != pos.x || newPoint.z != pos.z)
2646 {
2647 LookAt(newPoint);
2648 }
2649 CellEffect effect = base.Cell.effect;
2650 if (effect != null && effect.id == 7)
2651 {
2652 CellEffect effect2 = base.Cell.effect;
2653 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2654 {
2655 Say("abWeb_caught", this);
2656 PlaySound("web");
2657 effect2.power = effect2.power * 3 / 4;
2658 renderer.PlayAnime(AnimeID.Shiver);
2659 return MoveResult.Fail;
2660 }
2661 Say("abWeb_pass", this);
2662 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2663 }
2664 if (IsPC)
2665 {
2666 if (EClass._zone.IsRegion)
2667 {
2669 }
2670 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2671 {
2673 }
2674 }
2675 if (newPoint.cell.hasDoor)
2676 {
2677 foreach (Thing thing in pos.Things)
2678 {
2679 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2680 {
2681 if (base.INT < 10)
2682 {
2683 return MoveResult.Fail;
2684 }
2685 traitDoor.TryOpenLock(this);
2686 return MoveResult.Door;
2687 }
2688 }
2689 }
2690 Cell cell = newPoint.cell;
2691 Cell cell2 = pos.cell;
2692 bool flag2 = cell.HasLiquid && !IsLevitating;
2693 bool hasBridge = cell.HasBridge;
2694 bool hasRamp = cell.HasRamp;
2695 bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2696 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2697 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2698 bool flag4 = cell.IsTopWater && !cell.isFloating;
2699 if (!EClass._zone.IsRegion)
2700 {
2701 if (cell.hasDoorBoat)
2702 {
2703 tileRow = FLOOR.sourceWood;
2704 row = MATERIAL.sourceOak;
2705 flag4 = false;
2706 }
2707 else if (flag3 && !tileRow.ignoreSnow)
2708 {
2709 if (tileRow.tileType.IsWater)
2710 {
2711 tileRow = FLOOR.sourceIce;
2712 row = MATERIAL.sourceIce;
2713 }
2714 else
2715 {
2716 tileRow = FLOOR.sourceSnow;
2717 row = MATERIAL.sourceSnow;
2718 }
2719 flag4 = false;
2720 }
2721 }
2722 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
2723 {
2724 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
2725 }
2726 if (isSynced)
2727 {
2728 string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
2729 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
2730 {
2731 text = cell.matObj.soundFoot;
2732 }
2733 if (IsPC)
2734 {
2735 foreach (Thing thing2 in newPoint.Things)
2736 {
2737 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
2738 {
2739 text = thing2.material.soundFoot;
2740 }
2741 }
2742 }
2743 if (!text.IsEmpty())
2744 {
2745 SoundManager.altLastData = IsPC;
2746 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
2747 }
2748 if (!flag4)
2749 {
2751 PCOrbit pcOrbit = EClass.screen.pcOrbit;
2752 bool flag5 = scene.actionMode.gameSpeed > 1f;
2753 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
2754 scene.psFoot.startColor = row.matColor;
2755 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2));
2756 if (flag5 && IsPC)
2757 {
2758 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
2759 scene.psSmoke.Emit(pcOrbit.emitSmoke);
2760 }
2761 }
2762 if (flag2 || flag4)
2763 {
2764 Effect.Get("ripple").Play(0.4f * actTime * EClass.scene.actionMode.gameSpeed, newPoint);
2765 }
2766 }
2767 lastPos.Set(pos);
2768 if (type != MoveType.Force)
2769 {
2770 if (newPoint.HasChara && ai.Current.PushChara)
2771 {
2772 TryPush(newPoint);
2773 }
2774 if (newPoint.HasChara && newPoint.Charas.Count == 1)
2775 {
2776 Chara chara2 = newPoint.Charas[0];
2777 if (CanReplace(chara2))
2778 {
2779 chara2.MoveByForce(lastPos, this);
2780 if (chara.IsPC)
2781 {
2782 Say("replace_pc", chara, chara2);
2783 }
2784 }
2785 }
2786 }
2787 if (cell.hasDoor)
2788 {
2789 foreach (Thing thing3 in newPoint.Things)
2790 {
2791 if (thing3.trait is TraitDoor traitDoor2)
2792 {
2793 traitDoor2.TryOpen(this);
2794 }
2795 }
2796 }
2797 EClass._zone.map.MoveCard(newPoint, this);
2798 SyncRide();
2800 {
2801 foreach (Chara member in EClass.pc.party.members)
2802 {
2803 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
2804 {
2805 member.TryMoveTowards(EClass.pc.pos);
2806 }
2807 }
2808 }
2810 {
2812 }
2813 if (IsPC)
2814 {
2815 PlaySound("Footstep/Extra/pcfootstep");
2816 if (pos.HasThing)
2817 {
2818 foreach (Card item in pos.ListCards())
2819 {
2820 if (!item.isThing || item.placeState != 0 || item.ignoreAutoPick)
2821 {
2822 continue;
2823 }
2825 {
2827 ContainerFlag containerFlag = item.category.GetRoot().id.ToEnum<ContainerFlag>();
2828 if (containerFlag == ContainerFlag.none)
2829 {
2830 containerFlag = ContainerFlag.other;
2831 }
2832 if ((dataPick.noRotten && item.IsDecayed) || (dataPick.onlyRottable && item.trait.Decay == 0))
2833 {
2834 continue;
2835 }
2836 if (dataPick.userFilter)
2837 {
2838 switch (dataPick.IsFilterPass(item.GetName(NameStyle.Full, 1)))
2839 {
2840 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
2841 Pick(item.Thing);
2842 continue;
2843 case Window.SaveData.FilterResult.Block:
2844 continue;
2845 }
2846 }
2847 if (dataPick.advDistribution)
2848 {
2849 foreach (int cat in dataPick.cats)
2850 {
2851 if (item.category.uid == cat)
2852 {
2853 Pick(item.Thing);
2854 }
2855 }
2856 }
2857 else if (!dataPick.flag.HasFlag(containerFlag))
2858 {
2859 Pick(item.Thing);
2860 }
2861 }
2862 else
2863 {
2864 Pick(item.Thing);
2865 }
2866 }
2867 }
2868 if (EClass._zone.IsRegion)
2869 {
2871 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
2872 {
2873 Msg.Say((!cell3.zone.source.GetText("textFlavor").IsEmpty()) ? cell3.zone.source.GetText("textFlavor") : (cell3.zone.ShowDangerLv ? "seeZoneDanger" : "seeZone"), cell3.zone.Name, cell3.zone.DangerLv.ToString() ?? "");
2874 }
2875 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
2876 {
2878 Msg.Say(Lang.GetList("walk_snow").RandomItem());
2879 }
2880 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
2881 {
2883 Msg.Say(Lang.GetList("walk_storm").RandomItem());
2884 }
2885 }
2887 }
2888 if (IsPCC)
2889 {
2890 int num5 = Mathf.Abs(cell2.topHeight - cell.topHeight);
2891 if ((num5 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
2892 {
2893 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num5 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
2894 }
2895 else
2896 {
2897 float surfaceHeight = cell2.GetSurfaceHeight();
2898 float surfaceHeight2 = cell.GetSurfaceHeight();
2899 num5 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
2900 if (num5 >= 15)
2901 {
2902 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num5 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
2903 }
2904 }
2905 }
2906 lastPos.Things.ForeachReverse(delegate(Thing t)
2907 {
2908 t.trait.OnSteppedOut(this);
2909 });
2910 if (!IsPC)
2911 {
2912 pos.Things.ForeachReverse(delegate(Thing t)
2913 {
2914 t.trait.OnStepped(this);
2915 });
2916 }
2917 if (CanDestroyPath())
2918 {
2920 }
2921 if (IsPC)
2922 {
2923 if (renderer.anime == null && renderer.replacer != null)
2924 {
2926 }
2928 {
2929 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
2930 {
2931 EClass.player.flags.isShoesOff = false;
2932 EClass.pc.Say("shoes_on", EClass.pc);
2933 EClass.pc.SetPCCState(PCCState.Normal);
2934 }
2935 }
2936 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
2937 {
2938 EClass.player.flags.isShoesOff = true;
2939 EClass.pc.Say("shoes_off", EClass.pc);
2940 EClass.pc.SetPCCState(PCCState.ShoesOff);
2941 }
2942 }
2943 hasMovedThisTurn = true;
2944 return MoveResult.Success;
2945 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
ContainerFlag
Definition: ContainerFlag.cs:5
NameStyle
Definition: NameStyle.cs:2
AIAct Current
Definition: AIAct.cs:103
virtual bool PushChara
Definition: AIAct.cs:82
static void Search(Chara c, bool manual=false)
Definition: ActWait.cs:43
virtual float gameSpeed
Definition: ActionMode.cs:119
virtual bool isPCC
Definition: CardActor.cs:39
void PlayAnime(AnimeID id, bool force)
TransAnime anime
Definition: CardRenderer.cs:23
virtual void NextFrame()
CardActor actor
Definition: CardRenderer.cs:11
Definition: Card.cs:11
int EvalueMax(int ele, int min=0)
Definition: Card.cs:2521
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:3908
bool HasElement(int ele, int req=1)
Definition: Card.cs:5566
SourceMaterial.Row material
Definition: Card.cs:1987
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5776
int c_lockLv
Definition: Card.cs:936
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6326
Point pos
Definition: Card.cs:55
Trait trait
Definition: Card.cs:49
MoveType
Definition: Card.cs:20
MoveResult
Definition: Card.cs:13
bool IsInstalled
Definition: Card.cs:2317
int Evalue(int ele)
Definition: Card.cs:2507
int Dist(Card c)
Definition: Card.cs:7235
void ModExp(string alias, int a)
Definition: Card.cs:2584
bool isLeashed
Definition: Card.cs:826
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6423
Definition: Cell.cs:7
Room room
Definition: Cell.cs:102
SourceBlock.Row sourceBlock
Definition: Cell.cs:1052
bool IsSnowTile
Definition: Cell.cs:782
bool hasDoorBoat
Definition: Cell.cs:498
bool HasBridge
Definition: Cell.cs:671
bool isClearSnow
Definition: Cell.cs:450
bool isFloating
Definition: Cell.cs:474
SourceMaterial.Row matObj
Definition: Cell.cs:1036
byte topHeight
Definition: Cell.cs:78
SourceMaterial.Row matFloor
Definition: Cell.cs:1032
byte obj
Definition: Cell.cs:38
SourceObj.Row sourceObj
Definition: Cell.cs:1072
bool HasRamp
Definition: Cell.cs:837
bool hasDoor
Definition: Cell.cs:258
SourceFloor.Row sourceSurface
Definition: Cell.cs:1059
float GetSurfaceHeight()
Definition: Cell.cs:1688
bool CanSuffocate()
Definition: Cell.cs:1111
Definition: Chara.cs:10
void TickConditions()
Definition: Chara.cs:3439
bool IsLevitating
Definition: Chara.cs:593
AIAct ai
Definition: Chara.cs:198
override bool IsPC
Definition: Chara.cs:608
bool isDrunk
Definition: Chara.cs:124
Party party
Definition: Chara.cs:43
bool CanDestroyPath()
Definition: Chara.cs:2186
bool IsInCombat
Definition: Chara.cs:860
bool HasCondition(string alias)
Definition: Chara.cs:8723
AIAct SetAI(AIAct g)
Definition: Chara.cs:8196
bool IsIdle
Definition: Chara.cs:849
override bool IsDisabled
Definition: Chara.cs:581
bool hasMovedThisTurn
Definition: Chara.cs:172
override bool isSynced
Definition: Chara.cs:687
bool CanMoveTo(Point p, bool allowDestroyPath=true)
Definition: Chara.cs:2199
void DestroyPath(Point pos)
Definition: Chara.cs:2947
override bool IsPCFaction
Definition: Chara.cs:667
float actTime
Definition: Chara.cs:174
override int MaxHP
Definition: Chara.cs:704
Zone currentZone
Definition: Chara.cs:251
bool CanReplace(Chara c)
Definition: Chara.cs:3058
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2384
Stats burden
Definition: Chara.cs:996
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2392
void SyncRide()
Definition: Chara.cs:3655
bool isDead
Definition: Chara.cs:385
override void LookAt(Card c)
Definition: Chara.cs:3303
bool isConfused
Definition: Chara.cs:126
override bool IsPCC
Definition: Chara.cs:678
void TryPush(Point point)
Definition: Chara.cs:2991
void SetPCCState(PCCState state)
Definition: Chara.cs:6191
bool allyKeepDistance
Definition: ConfigTactics.cs:6
new GameConfig game
Definition: CoreConfig.cs:600
CoreConfig config
Definition: Core.cs:70
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static int rnd(int a)
Definition: EClass.cs:58
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static Map _map
Definition: EClass.cs:18
static BaseGameScreen screen
Definition: EClass.cs:32
static int rndHalf(int a)
Definition: EClass.cs:82
static Player player
Definition: EClass.cs:12
static GameSetting setting
Definition: EClass.cs:34
Definition: EInput.cs:8
static void Consume(int _skipFrame)
Definition: EInput.cs:656
Definition: Effect.cs:7
static Effect Get(Effect original)
Definition: Effect.cs:85
void Play(float delay, Point from, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:100
Zone zone
Definition: EloMap.cs:11
Cell GetCell(Point pos)
Definition: EloMap.cs:273
Definition: FLOOR.cs:2
static SourceFloor.Row sourceSnow
Definition: FLOOR.cs:31
static SourceFloor.Row sourceIce
Definition: FLOOR.cs:35
static bool IsTatami(int id)
Definition: FLOOR.cs:39
static SourceFloor.Row sourceWood
Definition: FLOOR.cs:37
void AdvanceMin(int a)
Definition: GameDate.cs:22
float defaultActPace
Definition: GameSetting.cs:327
RenderSetting render
Definition: GameSetting.cs:301
ConfigTactics tactics
Definition: Game.cs:90
Config config
Definition: Game.cs:215
Definition: Lang.cs:6
static string[] GetList(string id)
Definition: Lang.cs:114
static SourceMaterial.Row sourceOak
Definition: MATERIAL.cs:39
static SourceMaterial.Row sourceSnow
Definition: MATERIAL.cs:33
static SourceMaterial.Row sourceIce
Definition: MATERIAL.cs:35
void MoveCard(Point p, Card t)
Definition: Map.cs:835
void SetFoormark(Point pos, int id, int angle, int offset=0)
Definition: Map.cs:2045
void SetEffect(int x, int z, CellEffect effect=null)
Definition: Map.cs:1502
Color Ono
Definition: MsgColors.cs:13
Definition: Msg.cs:5
static MsgColors colors
Definition: Msg.cs:20
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
static void SetColor()
Definition: Msg.cs:22
Definition: NoGoal.cs:4
int emitFoot
Definition: PCOrbit.cs:9
int emitSmoke
Definition: PCOrbit.cs:11
Vector3 smokePos
Definition: PCOrbit.cs:15
Vector3 footPos
Definition: PCOrbit.cs:13
List< Chara > members
Definition: Party.cs:18
bool isShoesOff
Definition: Player.cs:338
int distanceTravel
Definition: Player.cs:816
Flags flags
Definition: Player.cs:1014
Window.SaveData dataPick
Definition: Player.cs:954
bool regionMoveWarned
Definition: Player.cs:1077
Definition: Point.cs:9
SourceMaterial.Row matFloor
Definition: Point.cs:57
SourceBlock.Row sourceBlock
Definition: Point.cs:63
List< Card > ListCards(bool includeMasked=false)
Definition: Point.cs:1031
Point Set(int _x, int _z)
Definition: Point.cs:491
List< Thing > Things
Definition: Point.cs:326
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
List< Chara > Charas
Definition: Point.cs:328
bool HasThing
Definition: Point.cs:239
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
int Distance(Point p)
Definition: Point.cs:969
Cell cell
Definition: Point.cs:51
Point GetRandomNeighbor()
Definition: Point.cs:743
bool HasChara
Definition: Point.cs:226
TileType tileType
Definition: RenderRow.cs:77
Definition: Scene.cs:8
ParticleSystem psSmoke
Definition: Scene.cs:113
ActionMode actionMode
Definition: Scene.cs:79
ParticleSystem psFoot
Definition: Scene.cs:111
EloMap elomap
Definition: Scene.cs:149
bool Surface
Definition: SourcePref.cs:314
virtual bool ShowDangerLv
Definition: Spatial.cs:489
virtual bool IsRegion
Definition: Spatial.cs:501
virtual string Name
Definition: Spatial.cs:495
SourceZone.Row source
Definition: Spatial.cs:441
List< Spatial > children
Definition: Spatial.cs:37
override int GetPhase()
Definition: Stats.cs:117
Definition: Thing.cs:8
override SourcePref Pref
Definition: Thing.cs:50
bool ignoreSnow
Definition: TileRow.cs:6
string soundFoot
Definition: TileRow.cs:14
virtual bool IsWater
Definition: TileType.cs:163
virtual void OnSteppedOut(Chara c)
Definition: Trait.cs:1071
virtual bool IsChangeFloorHeight
Definition: Trait.cs:73
virtual void OnStepped(Chara c)
Definition: Trait.cs:1067
Card owner
Definition: Trait.cs:27
Definition: Util.cs:10
static float GetAngle(Vector3 self, Vector3 target)
Definition: Util.cs:121
Condition
Definition: Weather.cs:16
Condition CurrentCondition
Definition: Weather.cs:79
FilterResult IsFilterPass(string text)
Definition: Window.cs:498
ContainerFlag flag
Definition: Window.cs:267
HashSet< int > cats
Definition: Window.cs:119
bool userFilter
Definition: Window.cs:132
bool noRotten
Definition: Window.cs:439
bool advDistribution
Definition: Window.cs:427
Definition: Window.cs:13
GameDate date
Definition: World.cs:6
Weather weather
Definition: World.cs:12
virtual bool PetFollow
Definition: Zone.cs:282
override int DangerLv
Definition: Zone.cs:107
bool IsPCFaction
Definition: Zone.cs:466
virtual bool KeepAllyDistance
Definition: Zone.cs:297
virtual bool HiddenInRegionMap
Definition: Zone.cs:408
Map map
Definition: Zone.cs:60

References EClass._map, EClass._zone, Scene.actionMode, CardRenderer.actor, actTime, CoreConfig.GameConfig.advancedMenu, GameDate.AdvanceMin(), Window.SaveData.advDistribution, ai, ConfigTactics.allyKeepDistance, CardRenderer.anime, GameSetting.RenderSetting.anime, CoreConfig.Test.animeFramePCC, burden, Card.c_lockLv, CanDestroyPath(), CanMoveTo(), CanReplace(), Cell.CanSuffocate(), Window.SaveData.cats, Point.cell, Point.Charas, Spatial.children, Msg.colors, Core.config, Game.config, EInput.Consume(), EClass.core, AIAct.Current, Weather.CurrentCondition, currentZone, Card.DamageHP(), Zone.DangerLv, Player.dataPick, World.date, GameSetting.defaultActPace, DestroyPath(), GameSetting.RenderSetting.AnimeSetting.diagonalSpeed, Card.Dist(), Point.Distance(), Player.distanceTravel, Scene.elomap, PCOrbit.emitFoot, PCOrbit.emitSmoke, Card.Evalue(), Card.EvalueMax(), Window.SaveData.flag, Player.flags, PCOrbit.footPos, CoreConfig.game, EClass.game, ActionMode.gameSpeed, Effect.Get(), EloMap.GetCell(), Lang.GetList(), Stats.GetPhase(), Point.GetRandomNeighbor(), Cell.GetSurfaceHeight(), CardRenderer.hasActor, Cell.HasBridge, Point.HasChara, HasCondition(), Cell.hasDoor, Cell.hasDoorBoat, Card.HasElement(), hasMovedThisTurn, Point.HasObj, Cell.HasRamp, Point.HasThing, Zone.HiddenInRegionMap, host, CellEffect.id, TileRow.ignoreSnow, Trait.IsChangeFloorHeight, Cell.isClearSnow, isConfused, isDead, IsDisabled, isDrunk, Window.SaveData.IsFilterPass(), Cell.isFloating, IsIdle, IsInCombat, Card.IsInstalled, Card.isLeashed, IsLevitating, IsPC, CardActor.isPCC, IsPCC, IsPCFaction, Zone.IsPCFaction, Spatial.IsRegion, Player.Flags.isShoesOff, Cell.IsSnowTile, isSynced, FLOOR.IsTatami(), TileType.IsWater, item, Zone.KeepAllyDistance, lastPos, Point.ListCards(), LookAt(), Zone.map, SourceMaterial.Row.matColor, Card.material, Cell.matFloor, Point.matFloor, Cell.matObj, MaxHP, Party.members, Card.ModExp(), MoveByForce(), Map.MoveCard(), Spatial.Name, CardRenderer.NextFrame(), Window.SaveData.noRotten, Cell.obj, MsgColors.Ono, Trait.OnStepped(), Trait.OnSteppedOut(), Trait.owner, parasite, party, EClass.pc, BaseGameScreen.pcOrbit, Zone.PetFollow, Pick, Effect.Play(), CardRenderer.PlayAnime(), EClass.player, Card.PlaySound(), Card.pos, CellEffect.power, Thing.Pref, Scene.psFoot, Scene.psSmoke, AIAct.PushChara, race, Player.regionMoveWarned, GameSetting.RenderSetting.AnimeSetting.regionSpeed, GameSetting.render, Card.renderer, CardRenderer.replacer, ride, EClass.rnd(), EClass.rndHalf(), Cell.room, Msg.Say(), Card.Say(), EClass.scene, EClass.screen, ActWait.Search(), Point.Set(), SetAI(), Msg.SetColor(), Map.SetEffect(), Map.SetFoormark(), SetPCCState(), EClass.setting, Spatial.ShowDangerLv, PCOrbit.smokePos, SourceMaterial.Row.soundFoot, TileRow.soundFoot, Spatial.source, Cell.sourceBlock, Point.sourceBlock, Cell.sourceBridge, Cell.sourceFloor, Point.sourceFloor, FLOOR.sourceIce, MATERIAL.sourceIce, MATERIAL.sourceOak, Cell.sourceObj, FLOOR.sourceSnow, MATERIAL.sourceSnow, Cell.sourceSurface, FLOOR.sourceWood, SourcePref.Surface, SyncRide(), Game.Config.tactics, Card.Talk(), CoreConfig.test, Point.Things, TickConditions(), RenderRow.tileType, Cell.topHeight, Card.trait, TryMoveTowards(), TryPush(), Window.SaveData.userFilter, Util, World.weather, EClass.world, Point.x, Point.z, and EloMap.Cell.zone.

Referenced by MoveByForce(), AI_Sleep.OnProgressComplete(), and TryMove().

◆ _ShowDialog()

LayerDrama Chara._ShowDialog ( string  book,
string  sheet,
string  step = "main",
string  tag = "" 
)
inlineprivate

Definition at line 6709 of file Chara.cs.

6710 {
6711 EClass.Sound.Play("pop_drama");
6712 if (book == "_chara" && IsPC)
6713 {
6714 step = "pc";
6715 }
6716 return LayerDrama.Activate(book, sheet, step, this, null, tag);
6717 }
static SoundManager Sound
Definition: EClass.cs:46
static LayerDrama Activate(string book, string idSheet, string idStep, Chara target=null, Card ref1=null, string tag="")
Definition: LayerDrama.cs:66

References LayerDrama.Activate(), book, and EClass.Sound.

◆ AddCondition() [1/2]

Condition Chara.AddCondition ( Condition  c,
bool  force = false 
)
inline

Definition at line 8571 of file Chara.cs.

8572 {
8573 c.owner = this;
8574 if (!(c is ConBurning))
8575 {
8576 if (c is ConBleed && ResistLv(964) >= 3)
8577 {
8578 return null;
8579 }
8580 }
8581 else if (ResistLv(950) >= 3)
8582 {
8583 return null;
8584 }
8586 {
8587 if (c.GainResistFactor >= 400)
8588 {
8589 c.power /= 2;
8590 }
8591 ResistCon(c);
8592 if (c.power <= 0)
8593 {
8594 return null;
8595 }
8596 }
8597 if (!force)
8598 {
8599 if (c.source.negate.Length != 0)
8600 {
8601 string[] negate = c.source.negate;
8602 foreach (string text in negate)
8603 {
8604 if (HasElement(text))
8605 {
8606 return null;
8607 }
8608 }
8609 }
8610 Element defenseAttribute = c.GetDefenseAttribute(this);
8611 if (defenseAttribute != null)
8612 {
8613 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
8614 }
8615 if (c.source.resistance.Length != 0)
8616 {
8617 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
8618 if (num > 0)
8619 {
8620 c.power /= num * num + 1;
8621 if (c.power <= 40)
8622 {
8623 return null;
8624 }
8625 }
8626 }
8627 c.power = c.EvaluatePower(c.power);
8628 if (c.power <= 0)
8629 {
8630 return null;
8631 }
8632 }
8633 for (int j = 0; j < conditions.Count; j++)
8634 {
8635 if (conditions[j].id != c.id)
8636 {
8637 continue;
8638 }
8639 if (c.Type == ConditionType.Stance || c.IsToggle)
8640 {
8641 conditions[j].Kill();
8642 return null;
8643 }
8644 if (conditions[j].CanStack(c))
8645 {
8646 if (conditions[j].WillOverride)
8647 {
8648 conditions[j].Kill(silent: true);
8649 continue;
8650 }
8651 if (CanGainConResist)
8652 {
8653 AddResistCon(c);
8654 }
8655 conditions[j].OnStacked(c.power);
8656 conditions[j].OnStartOrStack();
8657 conditions[j].PlayEffect();
8658 }
8659 if (!conditions[j].AllowMultipleInstance)
8660 {
8661 return null;
8662 }
8663 }
8664 foreach (Condition condition in conditions)
8665 {
8666 if (condition.TryNullify(c))
8667 {
8668 return null;
8669 }
8670 }
8671 int num2 = c.EvaluateTurn(c.power);
8672 if (num2 == 0)
8673 {
8674 return null;
8675 }
8676 c.value = num2;
8677 conditions.Add(c);
8678 if (CanGainConResist)
8679 {
8680 AddResistCon(c);
8681 }
8682 c.SetOwner(this);
8683 c.Start();
8684 SetDirtySpeed();
8685 if (c.ShouldRefresh)
8686 {
8687 Refresh();
8688 }
8689 if (c.CancelAI)
8690 {
8691 ai.Cancel();
8692 }
8693 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
8694 {
8696 }
8697 if (c.SyncRide && (ride != null || parasite != null))
8698 {
8699 if (ride != null)
8700 {
8702 }
8703 if (parasite != null)
8704 {
8706 }
8707 }
8708 return c;
8709 }
ConditionType
Definition: ConditionType.cs:2
virtual Status Cancel()
Definition: AIAct.cs:291
virtual bool SyncRide
virtual bool IsToggle
virtual bool ShouldRefresh
virtual bool CancelAI
virtual int EvaluatePower(int p)
virtual int GainResistFactor
virtual bool ConsumeTurn
Element GetDefenseAttribute(Chara c=null)
virtual int EvaluateTurn(int p)
bool TryNullify(Condition c)
virtual void SetOwner(Chara _owner, bool onDeserialize=false)
virtual ConditionType Type
Definition: BaseStats.cs:19
SourceStat.Row source
Definition: BaseStats.cs:15
int id
Definition: BaseStats.cs:11
bool isRestrained
Definition: Card.cs:550
int ResistLv(int res)
Definition: Card.cs:5561
void SetDirtySpeed()
Definition: Chara.cs:1659
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8566
bool CanGainConResist
Definition: Chara.cs:1013
void AddResistCon(Condition con)
Definition: Chara.cs:8928
void ResistCon(Condition con)
Definition: Chara.cs:8948
static Condition Create(string alias, int power=100, Action< Condition > onCreate=null)
Definition: Condition.cs:46
static SourceManager sources
Definition: EClass.cs:42
int Value
Definition: ELEMENT.cs:290
void EndTurn(bool consume=true)
Definition: Player.cs:1997
SourceElement elements

References AddCondition(), AIAct.Cancel(), Condition.Create(), SourceManager.elements, Player.EndTurn(), BaseCondition.EvaluatePower(), BaseCondition.GainResistFactor, BaseCondition.GetDefenseAttribute(), BaseStats.id, Card.isRestrained, BaseCondition.IsToggle, EClass.pc, EClass.player, BaseCondition.power, Refresh(), BaseStats.source, EClass.sources, BaseCondition.TryNullify(), BaseStats.Type, and Element.Value.

◆ AddCondition() [2/2]

◆ AddCondition< T >()

Condition Chara.AddCondition< T > ( int  p = 100,
bool  force = false 
)
inline
Type Constraints
T :Condition 

Definition at line 8561 of file Chara.cs.

8561 : Condition
8562 {
8563 return AddCondition(typeof(T).Name, p, force);
8564 }
string Name
Definition: Card.cs:2073

◆ AddCooldown()

void Chara.AddCooldown ( int  idEle,
int  turns = 0 
)
inline

Definition at line 8040 of file Chara.cs.

8041 {
8042 if (_cooldowns == null)
8043 {
8044 _cooldowns = new List<int>();
8045 }
8046 if (turns != 0)
8047 {
8048 _cooldowns.Add(idEle * 1000 + turns);
8049 return;
8050 }
8051 SourceElement.Row row = EClass.sources.elements.map[idEle];
8052 if (row.cooldown > 0)
8053 {
8054 _cooldowns.Add(idEle * 1000 + row.cooldown);
8055 }
8056 }
List< int > _cooldowns
Definition: Chara.cs:58

References SourceElement.Row.cooldown, SourceManager.elements, and EClass.sources.

Referenced by ActEffect.Proc(), and RequestProtection().

◆ AddFoodHistory()

void Chara.AddFoodHistory ( Thing  food)
inline

Definition at line 9366 of file Chara.cs.

9367 {
9368 if (!IsPCFaction || !IsGlobal)
9369 {
9370 _historyFood = null;
9371 return;
9372 }
9373 if (_historyFood == null)
9374 {
9375 _historyFood = new List<List<string>>
9376 {
9377 new List<string>()
9378 };
9379 }
9380 if (_historyFood[0].Count < 5)
9381 {
9382 _historyFood[0].Add(food.id);
9383 }
9384 }
override bool IsGlobal
Definition: Chara.cs:606
List< List< string > > _historyFood
Definition: Chara.cs:64

References food.

Referenced by FoodEffect.Proc().

◆ AddHobby()

void Chara.AddHobby ( int  id)
inline

Definition at line 8396 of file Chara.cs.

8397 {
8398 foreach (int hobby in _hobbies)
8399 {
8400 if (hobby == id)
8401 {
8402 return;
8403 }
8404 }
8405 _hobbies.Add(id);
8406 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 1988 of file Chara.cs.

1989 {
1990 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
1991 body.AddBodyPart(ele);
1992 if (msg)
1993 {
1994 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
1995 PlaySound("offering");
1996 }
1997 }
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:261
CharaBody body
Definition: Chara.cs:94
static SourceElement.Row Get(int id)
Definition: ELEMENT.cs:399

References CharaBody.AddBodyPart(), body, Element.Get(), Card.PlaySound(), and Card.Say().

Referenced by Feat.Apply().

◆ AddResistCon()

void Chara.AddResistCon ( Condition  con)
inline

Definition at line 8928 of file Chara.cs.

8929 {
8930 if (con.power > 0 && con.GainResistFactor > 0)
8931 {
8932 int key = con.id;
8933 if (resistCon == null)
8934 {
8935 resistCon = new Dictionary<int, int>();
8936 }
8937 if (resistCon.ContainsKey(key))
8938 {
8939 resistCon[key] += con.power * con.GainResistFactor / 100;
8940 }
8941 else
8942 {
8943 resistCon[key] = con.power * con.GainResistFactor / 100;
8944 }
8945 }
8946 }
Dictionary< int, int > resistCon
Definition: Chara.cs:210

References BaseCondition.GainResistFactor, BaseStats.id, and BaseCondition.power.

◆ AddWork()

void Chara.AddWork ( int  id)
inline

Definition at line 8408 of file Chara.cs.

8409 {
8410 foreach (int work in _works)
8411 {
8412 if (work == id)
8413 {
8414 return;
8415 }
8416 }
8417 _works.Add(id);
8418 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 4840 of file Chara.cs.

4841 {
4842 if (!IsPC)
4843 {
4844 return;
4845 }
4846 int currency = GetCurrency();
4847 if (currency > 0)
4848 {
4849 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
4850 if (num <= 0)
4851 {
4852 num = 1;
4853 }
4854 Msg.Say("panaltyMoney", this, Lang._currency(num));
4855 ModCurrency(-num);
4857 }
4858 foreach (Element value in EClass.pc.elements.dict.Values)
4859 {
4860 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
4861 {
4862 EClass.pc.elements.ModExp(value.id, -500);
4863 }
4864 }
4865 }
@ currency
ElementContainerCard elements
Definition: Card.cs:37
int GetCurrency(string id="money")
Definition: Card.cs:3820
void ModCurrency(int a, string id="money")
Definition: Card.cs:3806
Dictionary< int, Element > dict
void ModExp(int ele, int a, bool chain=false)
int id
Definition: ELEMENT.cs:248
bool IsMainAttribute
Definition: ELEMENT.cs:381
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:162
static Thing CreateCurrency(int a, string id="money")
Definition: ThingGen.cs:37
Card AddCard(Card t, Point point)
Definition: Zone.cs:1910

References Lang._currency(), EClass._zone, Zone.AddCard(), ThingGen.CreateCurrency(), currency, ElementContainer.dict, Card.elements, Element.id, Element.IsMainAttribute, ElementContainer.ModExp(), EClass.pc, Card.pos, EClass.rnd(), and Msg.Say().

Referenced by Revive().

◆ ApplyEditorTags()

override void Chara.ApplyEditorTags ( EditorTag  tag)
inlinevirtual

Reimplemented from Card.

Definition at line 1823 of file Chara.cs.

1824 {
1825 switch (tag)
1826 {
1827 case EditorTag.HostilityNeutral:
1828 {
1829 Hostility hostility2 = (base.c_originalHostility = Hostility.Neutral);
1830 this.hostility = hostility2;
1831 break;
1832 }
1833 case EditorTag.HostilityEnemy:
1834 {
1835 Hostility hostility2 = (base.c_originalHostility = Hostility.Enemy);
1836 this.hostility = hostility2;
1837 break;
1838 }
1839 case EditorTag.HostilityFriend:
1840 {
1841 Hostility hostility2 = (base.c_originalHostility = Hostility.Friend);
1842 this.hostility = hostility2;
1843 break;
1844 }
1845 case EditorTag.Male:
1846 bio.SetGender(2);
1847 base.c_idPortrait = Portrait.GetRandomPortrait(2, GetIdPortraitCat());
1848 break;
1849 case EditorTag.Female:
1850 bio.SetGender(1);
1851 base.c_idPortrait = Portrait.GetRandomPortrait(1, GetIdPortraitCat());
1852 break;
1853 case EditorTag.baby:
1854 SetFeat(1232);
1855 break;
1856 }
1857 base.ApplyEditorTags(tag);
1858 }
EditorTag
Definition: EditorTag.cs:2
void SetGender(int g)
Definition: Biography.cs:454
Biography bio
Definition: Card.cs:40
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:9121
string GetIdPortraitCat()
Definition: Chara.cs:7522
static string GetRandomPortrait(string idDict)
Definition: Portrait.cs:105

References Card.bio, GetIdPortraitCat(), Portrait.GetRandomPortrait(), SetFeat(), and Biography.SetGender().

◆ ApplyJob()

void Chara.ApplyJob ( bool  remove = false)
inline

Definition at line 1950 of file Chara.cs.

1951 {
1952 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
1953 if (IsPCC)
1954 {
1955 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
1956 }
1957 }
SourceValueType
SourceJob.Row job
Definition: Chara.cs:462
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
PCCUniformManager uniforms
Definition: Game.cs:191

References ElementContainer.ApplyElementMap(), Card.elements, EClass.game, IsPCC, job, pccData, and Game.uniforms.

Referenced by ChangeJob(), and OnCreate().

◆ ApplyRace()

void Chara.ApplyRace ( bool  remove = false)
inline

Definition at line 2036 of file Chara.cs.

2037 {
2038 string[] array = race.figure.Split('|');
2039 foreach (string s in array)
2040 {
2041 int num = ParseBodySlot(s);
2042 if (num != -1)
2043 {
2044 if (remove)
2045 {
2046 body.RemoveBodyPart(num);
2047 }
2048 else
2049 {
2050 body.AddBodyPart(num);
2051 }
2052 }
2053 }
2055 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV, remove, applyFeat: true);
2056 }
void RefreshBodyParts()
Definition: CharaBody.cs:287
void RemoveBodyPart(int ele)
Definition: CharaBody.cs:316
int ParseBodySlot(string s)
Definition: Chara.cs:1971

References CharaBody.AddBodyPart(), ElementContainer.ApplyElementMap(), body, Card.elements, ParseBodySlot(), race, CharaBody.RefreshBodyParts(), and CharaBody.RemoveBodyPart().

Referenced by ChangeRace(), and OnCreate().

◆ CalcBurden()

void Chara.CalcBurden ( )
inline

Definition at line 1627 of file Chara.cs.

1628 {
1629 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1630 if (num < 0)
1631 {
1632 num = 1000;
1633 }
1635 {
1636 num = 0;
1637 }
1638 burden.Set(num);
1639 SetDirtySpeed();
1640 }
override int WeightLimit
Definition: Chara.cs:706
bool ignoreWeight
Definition: CoreDebug.cs:186
static CoreDebug debug
Definition: EClass.cs:48
Stats Set(int[] _raw, int _rawIndex, Chara _CC)
Definition: Stats.cs:109

References burden, EClass.debug, CoreDebug.ignoreWeight, IsPC, Stats.Set(), SetDirtySpeed(), and WeightLimit.

Referenced by Scene.OnUpdate().

◆ CalcCastingChance()

int Chara.CalcCastingChance ( Element  e,
int  num = 1 
)
inline

Definition at line 5684 of file Chara.cs.

5685 {
5686 if (!(e is Spell))
5687 {
5688 return 100;
5689 }
5690 if (!IsPC)
5691 {
5692 int num2 = 95;
5693 if (host != null)
5694 {
5695 if (host.ride == this)
5696 {
5697 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
5698 }
5699 if (host.parasite == this)
5700 {
5701 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
5702 }
5703 }
5704 return num2;
5705 }
5706 int num3 = Evalue(304);
5707 if (!IsPCFaction)
5708 {
5709 num3 = Mathf.Max(num3, base.LV + 5);
5710 }
5711 int num4 = 0;
5712 int num5 = 0;
5713 bool num6 = GetArmorSkill() == 122;
5714 AttackStyle attackStyle = body.GetAttackStyle();
5715 if (num6)
5716 {
5717 num4 = 20 - Evalue(122) / 5;
5718 num5 += 10 - Evalue(1654) * 4;
5719 }
5720 else
5721 {
5722 num4 = 10 - Evalue(120) / 5;
5723 }
5724 if (num4 < 5)
5725 {
5726 num4 = 5;
5727 }
5728 if (ride != null)
5729 {
5730 num4 += 5;
5731 }
5732 if (parasite != null)
5733 {
5734 num4 += 10;
5735 }
5736 if (attackStyle == AttackStyle.TwoWield)
5737 {
5738 num4 += 5;
5739 }
5740 if (attackStyle == AttackStyle.Shield)
5741 {
5742 num4 += 5;
5743 num5 += 10 - Evalue(1654) * 4;
5744 }
5745 if (isConfused)
5746 {
5747 num4 += 10000;
5748 }
5749 if (HasCondition<ConDim>())
5750 {
5751 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
5752 }
5753 if (num > 1)
5754 {
5755 num4 += 5 * num;
5756 }
5757 if (num5 < 0)
5758 {
5759 num5 = 0;
5760 }
5761 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / (10 + num3 * 10), 0, 100 - num5);
5762 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:433
override int GetArmorSkill()
Definition: Chara.cs:7297
int EvalueRiding()
Definition: Chara.cs:5675
SourceElement.Row source
Definition: ELEMENT.cs:271
Definition: SPELL.cs:527

References Card.Evalue(), EvalueRiding(), CharaBody.GetAttackStyle(), parasite, ride, Element.source, and Element.Value.

Referenced by Element._WriteNote().

◆ CalculateMaxStamina()

void Chara.CalculateMaxStamina ( )
inline

Definition at line 1804 of file Chara.cs.

1805 {
1806 int num = base.END;
1807 int num2 = 0;
1808 foreach (Element value in elements.dict.Values)
1809 {
1810 if (value.source.category == "skill")
1811 {
1812 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
1813 }
1814 }
1815 num2 = EClass.curve(num, 30, 10, 60);
1816 if (num2 < 10)
1817 {
1818 num2 = 10;
1819 }
1820 _maxStamina = num2 + 15;
1821 }
int _maxStamina
Definition: Chara.cs:361
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:63
int ValueWithoutLink
Definition: ELEMENT.cs:292
int vBase
Definition: ELEMENT.cs:250

References _maxStamina, EClass.curve(), ElementContainer.dict, Card.elements, IsPC, Element.source, Element.ValueWithoutLink, and Element.vBase.

Referenced by OnCreate(), ElementContainerCard.OnLevelDown(), ElementContainerCard.OnLevelUp(), Player.OnStartNewGame(), and Card.SetLv().

◆ CallHelp()

void Chara.CallHelp ( Chara  tg,
bool  fanatic = false 
)
inline

Definition at line 5946 of file Chara.cs.

5947 {
5948 foreach (Chara chara in EClass._map.charas)
5949 {
5950 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
5951 {
5952 chara.GoHostile(tg);
5953 }
5954 }
5955 }
Hostility OriginalHostility
Definition: Chara.cs:467
void GoHostile(Card _tg)
Definition: Chara.cs:5840
List< Chara > charas
Definition: Map.cs:81

References EClass._map, Map.charas, GoHostile(), IsPCFaction, OriginalHostility, and EClass.rnd().

Referenced by DoHostileAction().

◆ CanAcceptGift()

bool Chara.CanAcceptGift ( Chara  c,
Card  t 
)
inline

Definition at line 7610 of file Chara.cs.

7611 {
7612 if (things.IsFull())
7613 {
7614 return false;
7615 }
7616 if (t.c_isImportant)
7617 {
7618 return false;
7619 }
7620 if (t.id == "1084")
7621 {
7622 return true;
7623 }
7624 if (t.trait is TraitBookSecret)
7625 {
7626 return true;
7627 }
7628 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
7629 {
7630 return false;
7631 }
7632 return true;
7633 }
Rarity
Definition: Rarity.cs:2
string id
Definition: Card.cs:31
Rarity rarity
Definition: Card.cs:298
bool c_isImportant
Definition: Card.cs:996
ThingContainer things
Definition: Card.cs:34
bool IsContainer
Definition: Card.cs:2025
bool IsFull(int y=0)
virtual bool CanExtendBuild
Definition: Trait.cs:168
virtual bool CanBeDestroyed
Definition: Trait.cs:292
virtual bool CanOnlyCarry
Definition: Trait.cs:290

References Card.c_isImportant, Trait.CanBeDestroyed, Trait.CanExtendBuild, Trait.CanOnlyCarry, Card.id, Card.IsContainer, Card.rarity, and Card.trait.

Referenced by ActPlan._Update(), and HotItemHeld.TrySetAct().

◆ CanAcceptItem()

bool Chara.CanAcceptItem ( Card  t,
int  num = -1 
)
inline

Definition at line 7589 of file Chara.cs.

7590 {
7591 if (EClass.debug.enable)
7592 {
7593 return true;
7594 }
7595 if (!IsValidGiftWeight(t, num))
7596 {
7597 return false;
7598 }
7599 if (t.c_isImportant)
7600 {
7601 return false;
7602 }
7603 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
7604 {
7605 return false;
7606 }
7607 return true;
7608 }
SourceCategory.Row category
Definition: Card.cs:1985
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:7579
bool enable
Definition: CoreDebug.cs:285

References Card.c_isImportant, Card.category, EClass.debug, and CoreDebug.enable.

Referenced by InvOwner.CanShiftClick(), and InvOwner.Transaction.Process().

◆ CanAutoPick()

bool Chara.CanAutoPick ( Card  c)
inline

Definition at line 3974 of file Chara.cs.

3975 {
3976 return true;
3977 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2114 of file Chara.cs.

2115 {
2116 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2117 {
2118 return false;
2119 }
2120 if (HasElement(1222))
2121 {
2122 return false;
2123 }
2124 return true;
2125 }
override bool IsMinion
Definition: Chara.cs:623
int MaxSummon
Definition: Chara.cs:710
override bool IsMultisize
Definition: Chara.cs:702
int CountMinions(Chara c)
Definition: Zone.cs:3524

References EClass._zone, Zone.CountMinions(), Card.HasElement(), IsGlobal, IsMinion, IsMultisize, IsPCFaction, and MaxSummon.

Referenced by GoalCombat.Run().

◆ CanDestroyPath()

bool Chara.CanDestroyPath ( )
inline

Definition at line 2186 of file Chara.cs.

2187 {
2188 if (!IsMultisize)
2189 {
2190 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2191 {
2192 return !(EClass._zone is Zone_Town);
2193 }
2194 return false;
2195 }
2196 return true;
2197 }

References EClass._zone, ai, IsMultisize, and Zone.IsPCFaction.

Referenced by _Move(), CanMoveTo(), and TryMoveTowards().

◆ CanEat()

bool Chara.CanEat ( Thing  t,
bool  shouldEat = false 
)
inline

Definition at line 7058 of file Chara.cs.

7059 {
7060 if (t.IsDecayed && !HasElement(480))
7061 {
7062 return false;
7063 }
7064 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7065 {
7066 return false;
7067 }
7068 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7069 {
7070 return t.trait.CanEat(this);
7071 }
7072 return false;
7073 }
CTAG
Definition: CTAG.cs:2
bool IsNegativeGift
Definition: Card.cs:2332
bool IsDecayed
Definition: Card.cs:2223
bool HasTag(CTAG tag)
Definition: Card.cs:2531
bool isEquipped
Definition: Thing.cs:17
virtual bool CanEat(Chara c)
Definition: Trait.cs:969

References Card.c_isImportant, Trait.CanEat(), Card.HasTag(), Card.IsDecayed, Thing.isEquipped, Card.IsNegativeGift, and Card.trait.

Referenced by FactionBranch.GetMeal(), and AI_Idle.Run().

◆ CanEquipRanged()

bool Chara.CanEquipRanged ( Thing  t)
inline

Definition at line 7196 of file Chara.cs.

7197 {
7198 return !body.IsTooHeavyToEquip(t);
7199 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:156

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 7510 of file Chara.cs.

7511 {
7512 foreach (ActList.Item item in ability.list.items)
7513 {
7514 if (item.act.id == 6630)
7515 {
7516 return true;
7517 }
7518 }
7519 return false;
7520 }
List< Item > items
Definition: ActList.cs:14
ActList list
Definition: CharaAbility.cs:12
CharaAbility ability
Definition: Chara.cs:420

References item, ActList.items, and CharaAbility.list.

◆ CanInteractTo() [1/2]

bool Chara.CanInteractTo ( Card  c)
inline

Definition at line 2293 of file Chara.cs.

2294 {
2295 return CanInteractTo(c.pos);
2296 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2293

References CanInteractTo(), and Card.pos.

Referenced by ActPlan._Update(), CanInteractTo(), ActMelee.CanPerform(), AI_Goto.IsDestinationReached(), and ActPlan.Item.Perform().

◆ CanInteractTo() [2/2]

bool Chara.CanInteractTo ( Point  p)
inline

Definition at line 2298 of file Chara.cs.

2299 {
2300 if (!p.IsValid)
2301 {
2302 return false;
2303 }
2304 if (EClass._map.cells[p.x, p.z].blocked)
2305 {
2306 return true;
2307 }
2308 if (!IsMultisize)
2309 {
2310 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2311 if (EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2312 {
2313 return false;
2314 }
2315 if (p.x != pos.x && p.z != pos.z)
2316 {
2317 Cell[,] cells = EClass._map.cells;
2318 int x = p.x;
2319 int z = pos.z;
2320 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2321 if (cells[pos.x, pos.z].weights[num2] == 0)
2322 {
2323 return false;
2324 }
2325 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2326 if (cells[p.x, p.z].weights[num2] == 0)
2327 {
2328 return false;
2329 }
2330 x = pos.x;
2331 z = p.z;
2332 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2333 if (cells[pos.x, pos.z].weights[num2] == 0)
2334 {
2335 return false;
2336 }
2337 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2338 if (cells[p.x, p.z].weights[num2] == 0)
2339 {
2340 return false;
2341 }
2342 }
2343 }
2344 return true;
2345 }
Cell[,] cells
Definition: Map.cs:85
bool IsValid
Definition: Point.cs:88

References EClass._map, Algorithms.WeightCell.blocked, Map.cells, IsMultisize, Point.IsValid, Card.pos, Algorithms.WeightCell.weights, Point.x, and Point.z.

◆ CanLift()

bool Chara.CanLift ( Card  c)
inline

Definition at line 3969 of file Chara.cs.

3970 {
3971 return true;
3972 }

◆ CanMoveTo()

bool Chara.CanMoveTo ( Point  p,
bool  allowDestroyPath = true 
)
inline

Definition at line 2199 of file Chara.cs.

2200 {
2201 if (!p.IsValid)
2202 {
2203 return false;
2204 }
2205 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2206 if (allowDestroyPath && CanDestroyPath())
2207 {
2208 if (!p.IsInBounds)
2209 {
2210 return false;
2211 }
2212 }
2213 else
2214 {
2215 if (EClass._map.cells[p.x, p.z].blocked || EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2216 {
2217 return false;
2218 }
2219 if (p.x != pos.x && p.z != pos.z)
2220 {
2221 Cell[,] cells = EClass._map.cells;
2222 int x = p.x;
2223 int z = pos.z;
2224 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2225 if (cells[pos.x, pos.z].weights[num2] == 0)
2226 {
2227 return false;
2228 }
2229 if (cells[x, z].blocked)
2230 {
2231 return false;
2232 }
2233 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2234 if (cells[p.x, p.z].weights[num2] == 0)
2235 {
2236 return false;
2237 }
2238 x = pos.x;
2239 z = p.z;
2240 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2241 if (cells[pos.x, pos.z].weights[num2] == 0)
2242 {
2243 return false;
2244 }
2245 if (cells[x, z].blocked)
2246 {
2247 return false;
2248 }
2249 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2250 if (cells[p.x, p.z].weights[num2] == 0)
2251 {
2252 return false;
2253 }
2254 }
2255 }
2256 if (IsPC)
2257 {
2258 if (IsEnemyOnPath(p))
2259 {
2260 return false;
2261 }
2262 }
2263 else if (p.HasChara && !IsMultisize && !CanReplace(p.FirstChara))
2264 {
2265 return false;
2266 }
2267 return true;
2268 }
bool IsEnemyOnPath(Point p, bool cancelAI=true)
Definition: Chara.cs:2270
Chara FirstChara
Definition: Point.cs:276
bool IsInBounds
Definition: Point.cs:104

References EClass._map, Algorithms.WeightCell.blocked, CanDestroyPath(), CanReplace(), Map.cells, Point.FirstChara, Point.HasChara, IsEnemyOnPath(), Point.IsInBounds, IsMultisize, IsPC, Point.IsValid, Card.pos, Algorithms.WeightCell.weights, Point.x, and Point.z.

Referenced by _Move(), MoveByForce(), TryMove(), and TryMoveTowards().

◆ CanPick()

bool Chara.CanPick ( Card  c)
inline

Definition at line 3979 of file Chara.cs.

3980 {
3981 if (c.isDestroyed)
3982 {
3983 return false;
3984 }
3985 Card rootCard = c.GetRootCard();
3986 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
3987 {
3988 return false;
3989 }
3990 if (rootCard != this && things.IsFull(c.Thing))
3991 {
3992 return false;
3993 }
3994 return true;
3995 }
bool isDestroyed
Definition: Card.cs:71
bool ExistsOnMap
Definition: Card.cs:2021
virtual Thing Thing
Definition: Card.cs:1994
Card GetRootCard()
Definition: Card.cs:3287

References Point.Distance(), Card.ExistsOnMap, Card.GetRootCard(), Card.isDestroyed, Card.pos, and Card.Thing.

Referenced by ActPlan._Update().

◆ CanReplace()

bool Chara.CanReplace ( Chara  c)
inline

Definition at line 3058 of file Chara.cs.

3059 {
3061 {
3062 return false;
3063 }
3064 if (IsPC)
3065 {
3066 return true;
3067 }
3068 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3069 {
3070 return false;
3071 }
3072 if (!IsHostile(c))
3073 {
3074 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3075 {
3076 return true;
3077 }
3078 if (DestDist < c.DestDist)
3079 {
3080 return true;
3081 }
3082 if (IsPCParty && !c.IsPCParty)
3083 {
3084 return true;
3085 }
3086 if (IsPCFaction && !c.IsPCParty)
3087 {
3088 return true;
3089 }
3090 }
3091 return false;
3092 }
bool IsPCFactionOrMinion
Definition: Card.cs:2208
bool isSummon
Definition: Card.cs:694
int c_uidMaster
Definition: Card.cs:1409
bool noMove
Definition: Card.cs:754
new TraitChara trait
Definition: Chara.cs:499
override bool IsPCParty
Definition: Chara.cs:611
int DestDist
Definition: Chara.cs:862
bool IsHostile()
Definition: Chara.cs:6041
bool IsEscorted()
Definition: Chara.cs:2170
bool Equals(int _x, int _z)
Definition: Point.cs:940
virtual bool CanBePushed
Definition: TraitChara.cs:115

References EClass._zone, Card.c_uidMaster, TraitChara.CanBePushed, DestDist, Point.Equals(), host, IsMultisize, IsPC, Card.IsPCFactionOrMinion, IsPCParty, Spatial.IsRegion, Card.isRestrained, Card.isSummon, Card.noMove, EClass.pc, Card.pos, and trait.

Referenced by _Move(), and CanMoveTo().

◆ CanRevive()

bool Chara.CanRevive ( )
inline

Definition at line 4726 of file Chara.cs.

4727 {
4728 return EClass.world.date.IsExpired(base.c_dateDeathLock);
4729 }
bool IsExpired(int time)
Definition: Date.cs:332

References World.date, Date.IsExpired(), and EClass.world.

Referenced by FactionBranch.DailyOutcome(), and Zone.Revive().

◆ CanSee()

bool Chara.CanSee ( Card  c)
inline

Definition at line 1070 of file Chara.cs.

1071 {
1072 if (c == this)
1073 {
1074 return true;
1075 }
1076 if (!c.pos.IsValid)
1077 {
1078 return false;
1079 }
1080 if (c.isChara)
1081 {
1082 if (hasTelepathy && c.Chara.race.visibleWithTelepathy)
1083 {
1084 return true;
1085 }
1086 if (c.isHidden && c != this && !canSeeInvisible)
1087 {
1088 return false;
1089 }
1090 }
1091 if (IsPC)
1092 {
1093 if (fov != null)
1094 {
1095 return fov.lastPoints.ContainsKey(c.pos.index);
1096 }
1097 return false;
1098 }
1099 return true;
1100 }
virtual Chara Chara
Definition: Card.cs:2006
Fov fov
Definition: Card.cs:53
virtual bool isChara
Definition: Card.cs:2019
bool isHidden
Definition: Card.cs:514
bool canSeeInvisible
Definition: Chara.cs:138
bool hasTelepathy
Definition: Chara.cs:140
Dictionary< int, byte > lastPoints
Definition: Fov.cs:36
int index
Definition: Point.cs:49

References canSeeInvisible, Card.Chara, Card.fov, hasTelepathy, Point.index, Card.isChara, Card.isHidden, IsPC, Point.IsValid, Fov.lastPoints, Card.pos, and race.

Referenced by ActPlan._Update(), Act.CanPerform(), DoHostileAction(), AI_Idle.DoSomethingToCharaInRadius(), AI_Idle.DoSomethingToNearChara(), Point.FirstVisibleChara(), Msg.GetName(), Player.HasValidRangedTarget(), ActMelee.HideHint(), Point.ListVisibleCards(), Point.ListVisibleCharas(), TCExtra.OnDraw(), AM_Adv.OnRenderTile(), TCOrbitChara.Refresh(), TCOrbitThing.Refresh(), AI_Idle.Run(), AI_Steal.Run(), GoalCombat.Run(), ThirstPersonInfo.Set(), Player.TargetRanged(), HotItemAct.TrySetAct(), TraitCatalyst.TrySetHeldAct(), TraitLeash.TrySetHeldAct(), TraitStethoscope.TrySetHeldAct(), TraitWhipEgg.TrySetHeldAct(), and TraitWhipLove.TrySetHeldAct().

◆ CanSeeLos() [1/2]

bool Chara.CanSeeLos ( Card  c,
int  dist = -1 
)
inline

◆ CanSeeLos() [2/2]

bool Chara.CanSeeLos ( Point  p,
int  dist = -1 
)
inline

Definition at line 1111 of file Chara.cs.

1112 {
1113 if (dist == -1)
1114 {
1115 dist = pos.Distance(p);
1116 }
1117 if (dist > GetSightRadius())
1118 {
1119 return false;
1120 }
1121 if (IsPC)
1122 {
1123 if (fov != null)
1124 {
1125 return fov.lastPoints.ContainsKey(p.index);
1126 }
1127 return false;
1128 }
1129 return Los.IsVisible(pos, p);
1130 }
int GetSightRadius()
Definition: Card.cs:6021
Definition: Los.cs:5
static bool IsVisible(Point p1, Point p2, Action< Point, bool > _onVisit=null)
Definition: Los.cs:167

References Point.Distance(), Card.fov, Card.GetSightRadius(), Point.index, IsPC, Los.IsVisible(), Fov.lastPoints, and Card.pos.

◆ CanSeeSimple()

bool Chara.CanSeeSimple ( Point  p)
inline

Definition at line 1053 of file Chara.cs.

1054 {
1055 if (!p.IsValid || p.IsHidden)
1056 {
1057 return false;
1058 }
1059 if (IsPC)
1060 {
1061 if (fov != null)
1062 {
1063 return fov.lastPoints.ContainsKey(p.index);
1064 }
1065 return false;
1066 }
1067 return true;
1068 }
bool IsHidden
Definition: Point.cs:335

References Card.fov, Point.index, Point.IsHidden, IsPC, Point.IsValid, and Fov.lastPoints.

Referenced by ActWait.Search(), ActWait.SearchMedal(), and HotItemHeld.TrySetToolAct().

◆ CanSleep()

bool Chara.CanSleep ( )
inline

Definition at line 1151 of file Chara.cs.

1152 {
1153 if (EClass._zone.events.GetEvent<ZoneEventQuest>() != null)
1154 {
1155 return false;
1156 }
1157 if (!EClass.debug.godMode && sleepiness.GetPhase() == 0)
1158 {
1159 return stamina.GetPhase() <= 1;
1160 }
1161 return true;
1162 }
Stats sleepiness
Definition: Chara.cs:1008
Stats stamina
Definition: Chara.cs:998
bool godMode
Definition: CoreDebug.cs:172
ZoneEventManager events
Definition: Zone.cs:40

References EClass._zone, EClass.debug, Zone.events, Stats.GetPhase(), CoreDebug.godMode, sleepiness, and stamina.

Referenced by AI_Sleep.OnProgressComplete(), HotItemActionSleep.Perform(), and AI_PassTime.Run().

◆ ChangeJob()

void Chara.ChangeJob ( string  idNew)
inline

Definition at line 1959 of file Chara.cs.

1960 {
1961 ApplyJob(remove: true);
1962 base.c_idJob = idNew;
1963 _job = null;
1964 ApplyJob();
1965 if (IsPCC)
1966 {
1967 PCC.Get(pccData).Build();
1968 }
1969 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:1950
SourceJob.Row _job
Definition: Chara.cs:158

References _job, ApplyJob(), IsPCC, and pccData.

Referenced by CoreDebug.ChangeJob(), CoreDebug.Fix_EtherDisease(), UICharaMaker.ListJob(), CoreDebug.QuickStart(), and UICharaMaker.RerollJob().

◆ ChangeMemberType()

void Chara.ChangeMemberType ( FactionMemberType  type)
inline

Definition at line 6534 of file Chara.cs.

6535 {
6536 memberType = type;
6537 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2058 of file Chara.cs.

2059 {
2060 ApplyRace(remove: true);
2061 base.c_idRace = idNew;
2062 _race = null;
2063 ApplyRace();
2064 ChangeMaterial(race.material);
2065 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2036
SourceRace.Row _race
Definition: Chara.cs:156

References _race, ApplyRace(), ChangeMaterial, and race.

Referenced by CoreDebug.ChangeRace(), CoreDebug.Fix_EtherDisease(), UICharaMaker.ListRace(), CoreDebug.QuickStart(), and UICharaMaker.RerollRace().

◆ ChangeRarity()

override void Chara.ChangeRarity ( Rarity  r)
inlinevirtual

Reimplemented from Card.

Definition at line 1258 of file Chara.cs.

1259 {
1260 if (r != base.rarity)
1261 {
1262 base.rarity = r;
1263 if (renderer != null && renderer.isSynced)
1264 {
1266 }
1267 base.hp = MaxHP;
1268 }
1269 }
void RefreshExtra()

References RenderObject.isSynced, MaxHP, CardRenderer.RefreshExtra(), and Card.renderer.

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8092 of file Chara.cs.

8093 {
8094 if (IsPC && EClass.AdvMode)
8095 {
8096 SetNoGoal();
8097 return;
8098 }
8099 if (IsPCParty || base.noMove)
8100 {
8101 SetAI(new GoalIdle());
8102 return;
8103 }
8104 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8105 {
8106 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8107 if (goalFromTimeTable != null)
8108 {
8109 SetAI(goalFromTimeTable);
8110 if (goalFromTimeTable is GoalWork)
8111 {
8112 goalFromTimeTable.Tick();
8113 }
8114 return;
8115 }
8116 }
8117 if (goalList.index == -2)
8118 {
8120 }
8121 SetAI(goalList.Next());
8122 }
Status Tick()
Definition: AIAct.cs:352
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8124
GoalListType goalListType
Definition: Chara.cs:275
AIAct SetNoGoal()
Definition: Chara.cs:8191
bool IsHomeMember()
Definition: Chara.cs:6099
bool IsGuest()
Definition: Chara.cs:6124
GoalList goalList
Definition: Chara.cs:196
bool IsInHomeZone()
Definition: Chara.cs:6104
int hour
Definition: Date.cs:74
static bool AdvMode
Definition: EClass.cs:10
int index
Definition: GoalList.cs:5
void Refresh(Chara owner, GoalListType type)
Definition: GoalList.cs:9
Goal Next()
Definition: GoalList.cs:39
Definition: Goal.cs:4

References EClass.AdvMode, World.date, Date.hour, GoalList.index, GoalList.Next(), GoalList.Refresh(), AIAct.Tick(), and EClass.world.

Referenced by Zone.Simulate().

◆ ClearBed()

void Chara.ClearBed ( Map  map = null)
inline

Definition at line 6785 of file Chara.cs.

6786 {
6787 if (map == null)
6788 {
6789 map = EClass._map;
6790 }
6791 foreach (Card item in map.props.installed.all)
6792 {
6793 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
6794 {
6795 traitBed.RemoveHolder(this);
6796 }
6797 }
6798 }
PropsManager props
Definition: Map.cs:91
PropsInstalled installed
Definition: PropsManager.cs:8
PropSet all
Definition: Props.cs:8
bool IsHolder(Chara c)
Definition: TraitBed.cs:129

References EClass._map, TraitBed.IsHolder(), and item.

Referenced by FactionBranch.ChangeMemberType(), and FactionBranch.RemoveMemeber().

◆ ClearInventory()

void Chara.ClearInventory ( ClearInventoryType  type)
inline

Definition at line 7919 of file Chara.cs.

7920 {
7921 int num = 0;
7922 for (int num2 = things.Count - 1; num2 >= 0; num2--)
7923 {
7924 Thing thing = things[num2];
7925 if (ShouldThrowAway(thing, type))
7926 {
7927 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
7928 thing.Destroy();
7929 }
7930 }
7931 if (num > 0)
7932 {
7933 ModCurrency(num);
7934 if (type == ClearInventoryType.SellAtTown)
7935 {
7936 Msg.Say("party_sell", this, num.ToString() ?? "");
7937 PlaySound("pay");
7938 }
7939 }
7940 }
ClearInventoryType
CurrencyType
Definition: CurrencyType.cs:2
PriceType
Definition: PriceType.cs:2
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
Definition: Card.cs:6875
void Destroy()
Definition: Card.cs:4783
int Num
Definition: Card.cs:154
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:7848

References Card.Destroy(), Card.GetPrice(), Card.Num, and Msg.Say().

Referenced by AI_Fish.Run(), and AI_Idle.Run().

◆ ClearTempElements()

void Chara.ClearTempElements ( )
inline

Definition at line 9580 of file Chara.cs.

9581 {
9582 if (tempElements != null)
9583 {
9585 tempElements = null;
9586 }
9587 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 9386 of file Chara.cs.

9387 {
9388 if (_historyFood == null)
9389 {
9390 return -1;
9391 }
9392 int num = 0;
9393 foreach (List<string> item in _historyFood)
9394 {
9395 foreach (string item2 in item)
9396 {
9397 if (item2 == food.id)
9398 {
9399 num++;
9400 }
9401 }
9402 }
9403 return num;
9404 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 7435 of file Chara.cs.

7436 {
7437 Chara chara = CharaGen.Create(id);
7438 chara.c_originalHostility = base.c_originalHostility;
7439 if (chara.c_originalHostility != 0)
7440 {
7441 chara.hostility = chara.c_originalHostility;
7442 }
7443 if (orgPos != null)
7444 {
7445 chara.orgPos = orgPos.Copy();
7446 }
7447 chara.pos = pos.Copy();
7448 chara.isImported = true;
7449 chara.c_editorTags = base.c_editorTags;
7450 chara.c_editorTraitVal = base.c_editorTraitVal;
7451 chara.c_idTrait = base.c_idTrait;
7452 chara.homeZone = homeZone;
7453 return chara;
7454 }
Hostility c_originalHostility
Definition: Card.cs:948
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Zone homeZone
Definition: Chara.cs:263
Point Copy()
Definition: Point.cs:479

References Card.c_originalHostility, Point.Copy(), and CharaGen.Create().

Referenced by MakeAlly(), and ActThrow.Throw().

◆ Cuddle()

void Chara.Cuddle ( Chara  c,
bool  headpat = false 
)
inline

Definition at line 5776 of file Chara.cs.

5777 {
5778 Talk("goodBoy");
5779 Say(headpat ? "headpat" : "cuddle", this, c);
5780 c.ShowEmo(Emo.love);
5781 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
5782 {
5783 c.MakeEgg();
5784 }
5785 if (headpat && this != c)
5786 {
5787 if (c.interest > 0)
5788 {
5789 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
5790 c.interest -= 20 + EClass.rnd(10);
5791 }
5793 {
5794 foreach (Chara member in party.members)
5795 {
5796 if (!member.IsPC && CanSeeLos(member))
5797 {
5798 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
5799 }
5800 }
5801 }
5802 }
5803 if (c.Evalue(1221) > 0)
5804 {
5805 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
5806 if (c.id == "hedgehog_ether")
5807 {
5808 ele = 922;
5809 }
5810 Say("reflect_thorne", c, this);
5811 DamageHP(10, ele, Power, AttackSource.Condition);
5812 }
5813 }
Emo
Definition: Emo.cs:2
virtual int Power
Definition: Card.cs:2231
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:5744
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5403
Element MainElement
Definition: Chara.cs:713
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:7367
int interest
Definition: Chara.cs:313
Religion faith
Definition: Chara.cs:435
static Element Void
Definition: ELEMENT.cs:236
ReligionManager religions
Definition: Game.cs:158
ReligionMoonShadow MoonShadow

References AddCondition(), Card.Evalue(), faith, EClass.game, Card.id, Element.id, interest, IsPC, IsPCParty, MainElement, Card.MakeEgg(), Party.members, ModAffinity(), ReligionManager.MoonShadow, EClass.pc, Game.religions, EClass.rnd(), Card.ShowEmo(), and Element.Void.

Referenced by ActPlan._Update(), and AI_Idle.Run().

◆ Cure()

void Chara.Cure ( CureType  type,
int  p = 100,
BlessedState  state = BlessedState::Normal 
)
inline

Definition at line 8802 of file Chara.cs.

8803 {
8804 bool flag = state == BlessedState.Blessed;
8805 switch (type)
8806 {
8807 case CureType.Heal:
8808 case CureType.Prayer:
8809 CureCondition<ConFear>();
8810 CureCondition<ConBlind>(2 * p / 100 + 5);
8811 CureCondition<ConPoison>(5 * p / 100 + 5);
8812 CureCondition<ConConfuse>(10 * p / 100 + 10);
8813 CureCondition<ConDim>(p / 100 + 5);
8814 CureCondition<ConBleed>(2 * p / 100 + 10);
8815 if (flag)
8816 {
8817 SAN.Mod(-15);
8818 }
8819 break;
8820 case CureType.CureBody:
8821 CureCondition<ConBlind>(5 * p / 100 + 15);
8822 CureCondition<ConPoison>(10 * p / 100 + 15);
8823 CureCondition<ConBleed>(5 * p / 100 + 20);
8824 CureTempElements(p, body: true, mind: false);
8825 break;
8826 case CureType.CureMind:
8827 CureCondition<ConFear>();
8828 CureCondition<ConDim>(3 * p / 100 + 10);
8829 CureTempElements(p, body: false, mind: true);
8830 break;
8831 case CureType.Sleep:
8832 {
8833 for (int num2 = conditions.Count - 1; num2 >= 0; num2--)
8834 {
8835 Condition condition2 = conditions[num2];
8836 if (!(condition2 is ConSleep) && !(condition2 is ConFaint))
8837 {
8838 if (condition2.isPerfume)
8839 {
8840 condition2.Mod(-1, force: true);
8841 }
8842 else if (condition2.Type == ConditionType.Bad || condition2.Type == ConditionType.Debuff)
8843 {
8844 condition2.Kill();
8845 }
8846 }
8847 }
8848 CureCondition<ConWait>();
8849 CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
8850 bool flag2 = HasCondition<ConAnorexia>();
8851 base.c_vomit -= (flag2 ? 3 : 2) * p / 100;
8852 if (base.c_vomit < 0)
8853 {
8854 base.c_vomit = 0;
8855 if (flag2)
8856 {
8857 RemoveCondition<ConAnorexia>();
8858 }
8859 }
8860 break;
8861 }
8862 case CureType.HealComplete:
8863 case CureType.Death:
8864 case CureType.Jure:
8865 case CureType.Boss:
8866 {
8867 CureTempElements(p * 100, body: true, mind: true);
8868 for (int num = conditions.Count - 1; num >= 0; num--)
8869 {
8870 Condition condition = conditions[num];
8871 if (!(condition is ConAnorexia) || type == CureType.Death)
8872 {
8873 if (condition.Type == ConditionType.Bad || condition.Type == ConditionType.Debuff || condition.Type == ConditionType.Disease)
8874 {
8875 condition.Kill();
8876 }
8877 else if (type == CureType.Death && condition.isPerfume)
8878 {
8879 condition.Kill();
8880 }
8881 }
8882 }
8883 CureCondition<ConWait>();
8884 CureCondition<ConSleep>();
8885 if (type == CureType.Death || type == CureType.Boss)
8886 {
8887 SAN.Mod(-20);
8888 RemoveCondition<ConBrightnessOfLife>();
8889 }
8890 if (type == CureType.Jure)
8891 {
8892 SAN.Mod(-999);
8893 if (HasElement(1206))
8894 {
8895 SetFeat(1206, 0, msg: true);
8896 }
8897 }
8898 break;
8899 }
8900 }
8901 }
BlessedState
Definition: BlessedState.cs:2
CureType
Definition: CureType.cs:2
void Mod(int a, bool force=false)
void CureTempElements(int p, bool body, bool mind)
Definition: Chara.cs:9550
Stats SAN
Definition: Chara.cs:1010
void Kill(bool silent=false)
Definition: Condition.cs:91
virtual void Mod(int a)
Definition: Stats.cs:135

References BaseCondition.isPerfume, Condition.Kill(), Stats.Mod(), BaseCondition.Mod(), EClass.rnd(), and BaseStats.Type.

Referenced by CureHost(), HealAll(), ActPray.Pray(), and Zone.Simulate().

◆ CureCondition< T >()

void Chara.CureCondition< T > ( int  v = 99999)
inline
Type Constraints
T :Condition 

Definition at line 8752 of file Chara.cs.

8752 : Condition
8753 {
8754 T condition = GetCondition<T>();
8755 if (condition != null)
8756 {
8757 condition.value -= v;
8758 if (condition.value <= 0)
8759 {
8760 condition.Kill();
8761 }
8762 }
8763 }
T GetCondition< T >()
Definition: Chara.cs:8765

◆ CureHost()

void Chara.CureHost ( CureType  type,
int  p = 100,
BlessedState  state = BlessedState::Normal 
)
inline

Definition at line 8789 of file Chara.cs.

8790 {
8791 if (parasite != null)
8792 {
8793 parasite.Cure(type, p, state);
8794 }
8795 if (ride != null)
8796 {
8797 ride.Cure(type, p, state);
8798 }
8799 Cure(type, p, state);
8800 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:8802

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

void Chara.CureTempElements ( int  p,
bool  body,
bool  mind 
)
inline

Definition at line 9550 of file Chara.cs.

9551 {
9552 if (tempElements != null)
9553 {
9554 if (body)
9555 {
9557 }
9558 if (mind)
9559 {
9561 }
9562 }
9563 void Cure(int[] eles)
9564 {
9565 foreach (int ele in eles)
9566 {
9567 if (tempElements == null)
9568 {
9569 break;
9570 }
9571 Element element = tempElements.GetElement(ele);
9572 if (element != null && element.vBase < 0)
9573 {
9574 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
9575 }
9576 }
9577 }
9578 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:9458
Element GetElement(string alias)
static int[] List_Body
Definition: ELEMENT.cs:242
static int[] List_Mind
Definition: ELEMENT.cs:244

References ElementContainer.GetElement(), Element.List_Body, Element.List_Mind, EClass.rnd(), and Element.vBase.

◆ DamageTempElement()

void Chara.DamageTempElement ( int  ele,
int  p,
bool  onlyRenew = false 
)
inline

Definition at line 9516 of file Chara.cs.

9517 {
9518 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
9519 }

References EClass.rnd().

◆ DamageTempElements()

void Chara.DamageTempElements ( int  p,
bool  body,
bool  mind,
bool  onlyRenew = false 
)
inline

Definition at line 9504 of file Chara.cs.

9505 {
9506 if (body)
9507 {
9508 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
9509 }
9510 if (mind)
9511 {
9512 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
9513 }
9514 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:9516

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 2947 of file Chara.cs.

2948 {
2949 bool broke = false;
2950 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
2951 {
2952 if (_p.IsValid)
2953 {
2954 if (_p.HasBlock)
2955 {
2956 EClass._map.MineBlock(_p, recoverBlock: false, this);
2957 if (_p.HasObj)
2958 {
2959 EClass._map.MineObj(_p, null, this);
2960 }
2961 broke = true;
2962 }
2963 if (_p.HasObj && _p.IsBlocked)
2964 {
2965 EClass._map.MineObj(_p, null, this);
2966 broke = true;
2967 }
2968 _p.Things.ForeachReverse(delegate(Thing t)
2969 {
2970 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
2971 {
2972 if (t.isNPCProperty && t.trait.CanBeDestroyed)
2973 {
2974 t.Destroy();
2975 }
2976 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
2977 {
2978 t.SetPlaceState(PlaceState.roaming);
2979 }
2980 }
2981 });
2982 }
2983 });
2984 if (broke)
2985 {
2986 Msg.Say("stomp");
2987 Shaker.ShakeCam("stomp");
2988 }
2989 }
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool IsUnique
Definition: Card.cs:2027
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
Definition: Point.cs:1365
bool IsBlocked
Definition: Point.cs:351
Definition: Shaker.cs:5
static void ShakeCam(string id="default", float magnitude=1f)
Definition: Shaker.cs:25
virtual bool IsBlockPath
Definition: Trait.cs:53
virtual bool IsDoor
Definition: Trait.cs:57

References Trait.CanBeDestroyed, Point.ForeachMultiSize(), Point.HasObj, if(), Point.IsBlocked, Trait.IsBlockPath, Trait.IsDoor, Card.IsInstalled, Card.IsUnique, Point.IsValid, Card.pos, Point.Things, and Card.trait.

Referenced by _Move().

◆ Die()

override void Chara.Die ( Element  e = null,
Card  origin = null,
AttackSource  attackSource = AttackSource::None 
)
inlinevirtual

Reimplemented from Card.

Definition at line 4903 of file Chara.cs.

4904 {
4905 combatCount = 0;
4906 if (isDead || host != null)
4907 {
4908 return;
4909 }
4910 bool isInActiveZone = IsInActiveZone;
4911 if (isInActiveZone)
4912 {
4913 if (IsPC)
4914 {
4916 }
4917 if (base.isSummon)
4918 {
4919 if (id == "tsunami")
4920 {
4921 pos.PlaySound("water");
4922 }
4923 else
4924 {
4925 Say("summon_vanish", this);
4926 pos.PlayEffect("vanish");
4927 pos.PlaySound("vanish");
4928 }
4929 Destroy();
4930 return;
4931 }
4932 if (attackSource == AttackSource.DeathSentense)
4933 {
4934 if (trait is TraitLittleOne)
4935 {
4936 MakeEgg();
4937 if (IsPCFaction)
4938 {
4940 }
4941 }
4942 PlayEffect("revive");
4943 PlaySound("chime_angel");
4944 }
4945 else
4946 {
4947 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
4948 .Emit(50);
4949 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
4950 PlaySound(base.material.GetSoundDead(source));
4951 }
4954 ClearFOV();
4955 }
4956 string text = "";
4957 "dead_in".langGame(EClass._zone.Name);
4958 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
4959 if (LangGame.Has("dead_" + attackSource))
4960 {
4961 text = "dead_" + attackSource;
4962 }
4963 else
4964 {
4965 if (e != Element.Void && e != null)
4966 {
4967 text = "dead_" + e.source.alias;
4968 }
4969 if (text == "" || !LangGame.Has(text))
4970 {
4971 text = "dead";
4972 }
4973 }
4974 if (IsPC)
4975 {
4976 EClass._zone.isDeathLocation = true;
4977 string s = ((origin == null) ? text : "dead_by");
4979 if (attackSource == AttackSource.Wrath)
4980 {
4982 }
4983 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
4985 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
4986 {
4987 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
4988 }
4989 AI_PlayMusic.keepPlaying = false;
4990 }
4991 if (isInActiveZone)
4992 {
4993 if (attackSource == AttackSource.DeathSentense)
4994 {
4995 Msg.Say("goto_heaven", this);
4996 }
4997 else
4998 {
4999 if (origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5000 {
5001 Msg.Say(text, this, "", text2);
5002 }
5003 string text3 = TalkTopic("dead");
5004 if (!text3.IsEmpty())
5005 {
5006 text3 = text3.StripBrackets();
5007 }
5008 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5009 if (!IsPC && flag)
5010 {
5011 MakeGrave(text3);
5012 }
5013 Msg.SetColor();
5014 SpawnLoot(origin);
5015 }
5016 if (IsPC)
5017 {
5019 }
5020 }
5021 if (IsPCFaction)
5022 {
5023 if (homeBranch != null)
5024 {
5025 homeBranch.Log(text, this, "");
5026 }
5027 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5028 if (!IsPC)
5029 {
5030 if (EClass.player.stats.allyDeath == 0)
5031 {
5032 Tutorial.Reserve("death_pet");
5033 }
5035 }
5036 }
5037 if (id == "mandrake")
5038 {
5039 Say("a_scream", this);
5040 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5041 }
5042 daysStarved = 0;
5043 isDead = true;
5045 enemy = null;
5046 _cooldowns = null;
5047 base.isSale = false;
5048 EClass._map.props.sales.Remove(this);
5049 Cure(CureType.Death);
5050 SetAI(new NoGoal());
5052 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5053 {
5054 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5055 }
5056 if (IsPC)
5057 {
5058 EClass.player.returnInfo = null;
5059 EClass.player.uidLastTravelZone = 0;
5060 foreach (Chara chara2 in EClass._map.charas)
5061 {
5062 if (chara2.IsHostile())
5063 {
5064 chara2.hostility = chara2.OriginalHostility;
5065 }
5066 if (chara2.enemy == EClass.pc)
5067 {
5068 chara2.enemy = null;
5069 }
5070 }
5071 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5072 {
5073 EClass.player.preventDeathPenalty = true;
5074 }
5075 }
5076 else
5077 {
5078 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5079 if (currentZone is Zone_LittleGarden && id == "littleOne")
5080 {
5081 flag2 = false;
5082 }
5083 if (flag2)
5084 {
5085 EClass._map.deadCharas.Add(this);
5086 }
5087 currentZone.RemoveCard(this);
5088 }
5089 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5090 {
5091 int a = -10;
5092 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5093 {
5094 a = -5;
5095 }
5096 ModAffinity(EClass.pc, a, show: false);
5097 string text4 = id;
5098 if (!(text4 == "quru"))
5099 {
5100 if (text4 == "corgon")
5101 {
5102 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5103 }
5104 }
5105 else
5106 {
5107 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5108 }
5109 }
5110 if (origin != null)
5111 {
5112 if (origin.IsPCParty || origin.IsPCPartyMinion)
5113 {
5114 int num = 0;
5115 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5116 {
5117 num = -5;
5118 }
5119 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5120 {
5121 EClass.pc.Say("killcat");
5122 num = -1;
5123 }
5124 if (EClass.pc.party.HasElement(1563) && num < 0)
5125 {
5126 num = num * 30 / 100;
5127 }
5128 if (num != 0)
5129 {
5130 EClass.player.ModKarma(num);
5131 }
5132 }
5133 if (origin == EClass.pc)
5134 {
5135 EClass.pc.faith.Revelation("kill", 10);
5136 }
5137 else if (origin.IsPCFaction)
5138 {
5139 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5140 origin.Chara.ShowEmo(Emo.love);
5141 }
5142 }
5143 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5144 {
5145 EClass.player.doneBackers.Add(base.sourceBacker.id);
5146 }
5147 if (base.IsPCFactionOrMinion)
5148 {
5150 {
5151 Msg.Say("abort_allyDead");
5152 }
5153 }
5155 {
5156 Msg.Say("abort_enemyDead");
5157 }
5158 if (IsPCParty && !IsPC)
5159 {
5161 base.c_wasInPcParty = true;
5162 EClass.pc.Say("allyDead");
5163 }
5164 switch (id)
5165 {
5166 case "littleOne":
5167 if (attackSource != AttackSource.DeathSentense && !IsPCFaction)
5168 {
5169 EClass.player.flags.little_killed = true;
5171 }
5172 break;
5173 case "big_daddy":
5174 if (!IsPCFaction)
5175 {
5176 Chara t2 = CharaGen.Create("littleOne");
5177 EClass._zone.AddCard(t2, pos.Copy());
5178 Msg.Say("little_pop");
5179 }
5180 break;
5181 case "shark_sister":
5182 if (!IsPCFaction)
5183 {
5184 Chara t = CharaGen.Create("sister_shark");
5185 EClass._zone.AddCard(t, pos.Copy());
5186 Msg.Say("shark_pop");
5187 }
5188 break;
5189 }
5190 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5191 {
5192 Chara chara = CharaGen.CreateFromFilter("c_plant", base.LV);
5193 EClass._zone.AddCard(chara, pos.Copy());
5194 if (chara.LV < base.LV)
5195 {
5196 chara.SetLv(base.LV);
5197 }
5198 chara.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5199 Msg.Say("plant_pop", this, chara);
5200 }
5201 foreach (ZoneEvent item in EClass._zone.events.list)
5202 {
5203 item.OnCharaDie(this);
5204 }
5205 }
EffectId
Definition: EffectId.cs:2
FontColor
Definition: FontColor.cs:2
MinionType
Definition: MinionType.cs:2
WitnessType
Definition: WitnessType.cs:2
static bool slaughtering
Definition: AI_Slaughter.cs:6
static void ProcAt(EffectId id, int power, BlessedState state, Card cc, Card tc, Point tp, bool isNeg, ActRef actRef=default(ActRef))
Definition: ActEffect.cs:407
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
void RefreshSprite()
virtual void RefreshStateIcon()
virtual string GetName(NameStyle style, int num=-1)
Definition: Card.cs:2551
void AddBlood(int a=1, int id=-1)
Definition: Card.cs:5601
virtual bool IsPCParty
Definition: Card.cs:2085
Card SetLv(int a)
Definition: Card.cs:2821
ICardParent parent
Definition: Card.cs:51
virtual bool IsPCPartyMinion
Definition: Card.cs:2089
void ClearFOV()
Definition: Card.cs:6189
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:5810
virtual bool IsPCFaction
Definition: Card.cs:2205
void SpawnLoot(Card origin)
Definition: Card.cs:4823
int LV
Definition: Card.cs:370
virtual bool isSynced
Definition: Card.cs:2023
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
Definition: CharaGen.cs:22
int combatCount
Definition: Chara.cs:114
bool IsHuman
Definition: Chara.cs:878
int daysStarved
Definition: Chara.cs:325
void MakeMinion(Chara _master, MinionType type=MinionType.Default)
Definition: Chara.cs:2127
string NameBraced
Definition: Chara.cs:510
void ClearTempElements()
Definition: Chara.cs:9580
string TalkTopic(string topic="calm")
Definition: Chara.cs:6468
void TryDropBossLoot()
Definition: Chara.cs:5207
bool IsLocalChara
Definition: Chara.cs:837
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:834
void TryDropCarryOnly()
Definition: Chara.cs:4298
void MakeGrave(string lastword)
Definition: Chara.cs:4820
UD_String_MatData matColors
static ColorProfile Colors
Definition: EClass.cs:38
static FactionBranch Branch
Definition: EClass.cs:22
void RemoveMemeber(Chara c)
string Log(string idLang, string ref1=null, string ref2=null, string ref3=null, string ref4=null)
static string Parse(string text, bool thirdPerson, string val1, string val2=null, string val3=null, string val4=null)
Definition: GameLang.cs:125
ConfigAutoCombat autoCombat
Definition: Game.cs:93
CardManager cards
Definition: Game.cs:155
static bool Has(string id)
Definition: LangGame.cs:46
List< Chara > deadCharas
Definition: Map.cs:46
static ThirstPersonInfo thirdPerson1
Definition: Msg.cs:6
void RemoveMember(Chara c)
Definition: Party.cs:89
bool HasElement(int ele)
Definition: Party.cs:168
int allyDeath
Definition: Player.cs:108
void ModKarma(int a)
Definition: Player.cs:2421
Stats stats
Definition: Player.cs:936
int little_dead
Definition: Player.cs:849
HashSet< int > doneBackers
Definition: Player.cs:993
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2315
string deathMsg
Definition: Player.cs:1105
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1233
void TalkWitnesses(Chara criminal, string idTalk, int radius=4, WitnessType type=WitnessType.everyone, Func< Chara, bool > talkIf=null, int chance=3)
Definition: Point.cs:799
Effect PlayEffect(string id)
Definition: Point.cs:1228
List< Card > sales
Definition: PropsManager.cs:14
static Religion recentWrath
Definition: Religion.cs:22
void Revelation(string idTalk, int chance=100)
Definition: Religion.cs:145
string NameShort
Definition: Religion.cs:34
Thing Find(int uid)
void Set(string n)
static void Reserve(string idStep, Action onBeforePlay=null)
Definition: Tutorial.cs:55
static void Say(string text, FontColor fontColor=FontColor.Default, Sprite sprite=null)
List< ZoneEvent > list
virtual bool HasLaw
Definition: Zone.cs:226
void RemoveCard(Card t)
Definition: Zone.cs:1950
void ResetHostility()
Definition: Zone.cs:2611
ZoneInstance instance
Definition: Zone.cs:52

References EClass._map, EClass._zone, ConfigAutoCombat.abortOnAllyDead, ConfigAutoCombat.abortOnEnemyDead, Zone.AddCard(), Player.Stats.allyDeath, Game.Config.autoCombat, EClass.Branch, Game.cards, Card.Chara, Map.charas, EClass.Colors, Game.config, CharaGen.Create(), CharaGen.CreateFromFilter(), Map.deadCharas, Player.deathMsg, Debug, Player.doneBackers, enemy, Zone.events, faith, ThingContainer.Find(), CardManager.GlobalCharaList.Find(), EClass.game, Effect.Get(), CardManager.globalCharas, LangGame.Has(), Party.HasElement(), Zone.HasLaw, SourceRace.Row.id, Zone.instance, IsHostile(), IsPCParty, Card.IsUnique, item, ZoneEventManager.list, Player.little_dead, FactionBranch.Log(), Card.LV, MakeMinion(), ColorProfile.matColors, ModAffinity(), Player.ModKarma(), Spatial.Name, NameBraced, Religion.NameShort, OriginalHostility, GameLang.Parse(), party, EClass.pc, Effect.Play(), EClass.player, ActEffect.ProcAt(), Map.props, Religion.recentWrath, Party.RemoveMember(), FactionBranch.RemoveMemeber(), Tutorial.Reserve(), Zone.ResetHostility(), Religion.Revelation(), EClass.rnd(), PropsManager.sales, Msg.Say(), Card.Say(), WidgetPopText.Say(), ThirstPersonInfo.Set(), Msg.SetColor(), Card.SetLv(), AI_Slaughter.slaughtering, Player.stats, Card.things, Msg.thirdPerson1, Player.TryAbortAutoCombat(), and Element.Void.

Referenced by ActMelee.Attack(), ActEffect.ProcAt(), TaskCullLife.Run(), and ConDeathSentense.Tick().

◆ DiminishTempElements()

void Chara.DiminishTempElements ( int  a = 1)
inline

Definition at line 9535 of file Chara.cs.

9536 {
9537 if (tempElements == null)
9538 {
9539 return;
9540 }
9541 foreach (Element item in tempElements.dict.Values.ToList())
9542 {
9543 if (item.vBase > 0)
9544 {
9545 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
9546 }
9547 }
9548 }

References ElementContainer.dict, and item.

◆ DoAI()

void Chara.DoAI ( int  wait,
Action  onPerform 
)
inline

Definition at line 5764 of file Chara.cs.

5765 {
5766 SetAI(new DynamicAIAct("", delegate
5767 {
5768 onPerform();
5769 return true;
5770 })
5771 {
5772 wait = wait
5773 });
5774 }

◆ DoHostileAction()

void Chara.DoHostileAction ( Card  _tg,
bool  immediate = false 
)
inline

Definition at line 5864 of file Chara.cs.

5865 {
5866 if (_tg == null || !_tg.isChara)
5867 {
5868 return;
5869 }
5870 Chara chara = _tg.Chara;
5871 if (chara.IsPC)
5872 {
5873 EClass.pc.combatCount = 10;
5874 }
5875 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
5876 {
5877 return;
5878 }
5879 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
5880 {
5881 chara.Say("frown", this, chara);
5882 }
5883 else
5884 {
5885 if (EClass._zone.IsRegion)
5886 {
5887 return;
5888 }
5889 if (IsPC)
5890 {
5891 if (chara.IsFriendOrAbove() && !immediate)
5892 {
5893 chara.Say("frown", this, chara);
5894 chara.ShowEmo(Emo.sad);
5895 chara.hostility = Hostility.Neutral;
5896 return;
5897 }
5898 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
5899 {
5900 bool flag = chara.id == "fanatic";
5901 if (EClass.rnd(4) == 0 || flag)
5902 {
5903 chara.Say("callHelp", chara);
5904 chara.CallHelp(this, flag);
5905 }
5906 }
5907 if (chara.hostility <= Hostility.Enemy)
5908 {
5909 foreach (Chara member in EClass.pc.party.members)
5910 {
5911 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
5912 {
5913 member.SetEnemy(chara);
5914 }
5915 }
5916 }
5917 }
5918 else if (chara.IsPC && hostility <= Hostility.Enemy)
5919 {
5920 foreach (Chara member2 in EClass.pc.party.members)
5921 {
5922 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
5923 {
5924 member2.SetEnemy(this);
5925 }
5926 }
5927 }
5928 if (chara.calmCheckTurn <= 0 || IsPC)
5929 {
5930 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
5931 }
5932 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
5933 {
5934 GoHostile(chara);
5935 chara.GoHostile(this);
5936 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
5937 {
5938 Thing t = ThingGen.Create("49");
5939 ActThrow.Throw(chara, pos, t);
5940 Act.TC = chara;
5941 }
5942 }
5943 }
5944 }
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
Definition: ActThrow.cs:93
override bool IsAliveInCurrentZone
Definition: Chara.cs:557
override bool IsPCPartyMinion
Definition: Chara.cs:635
int calmCheckTurn
Definition: Chara.cs:116
bool CanSee(Card c)
Definition: Chara.cs:1070
override bool IsPCFactionMinion
Definition: Chara.cs:651
bool IsFriendOrAbove()
Definition: Chara.cs:6129
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:5815
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:5946
Hostility hostility
Definition: Chara.cs:287
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53

References EClass._zone, CallHelp(), calmCheckTurn, CanSee(), Card.Chara, ThingGen.Create(), enemy, GoHostile(), hostility, IsAliveInCurrentZone, Card.isChara, IsDisabled, IsFriendOrAbove(), IsPC, IsPCFaction, Zone.IsPCFaction, IsPCFactionMinion, IsPCParty, IsPCPartyMinion, Spatial.IsRegion, Party.members, party, EClass.pc, EClass.rnd(), Card.Say(), SetEnemy(), Card.ShowEmo(), and ActThrow.Throw().

Referenced by ActMelee.Attack(), Point.CallGuard(), ActEffect.DamageEle(), DramaOutcome.fiama_starter_gift(), AI_Fuck.Finish(), ActRanged.Perform(), ActSummonGuard.Perform(), ActWater.Perform(), AI_AttackHome.Run(), AI_Idle.Run(), GoalSiege.Run(), and ActThrow.Throw().

◆ Drink()

void Chara.Drink ( Card  t)
inline

Definition at line 4715 of file Chara.cs.

4716 {
4717 Say("drink", this, t.Duplicate(1));
4718 Say("quaff");
4719 PlaySound("drink");
4720 hunger.Mod(-2);
4721 t.ModNum(-1);
4722 t.trait.OnDrink(this);
4723 _ = IsPC;
4724 }
Thing Duplicate(int num)
Definition: Card.cs:3305
void ModNum(int a, bool notify=true)
Definition: Card.cs:3376
Stats hunger
Definition: Chara.cs:994
virtual void OnDrink(Chara c)
Definition: Trait.cs:983

References Card.Duplicate(), Stats.Mod(), Card.ModNum(), Trait.OnDrink(), and Card.trait.

Referenced by TraitDrink.GetHealAction(), AM_Adv.OnBecomeNoGoal(), AI_Drink.OnSetOwner(), AI_Drink.Run(), and AI_Idle.Run().

◆ DropHeld()

Card Chara.DropHeld ( Point  dropPos = null)
inline

Definition at line 4310 of file Chara.cs.

4311 {
4312 if (held == null)
4313 {
4314 return null;
4315 }
4316 if (IsPC)
4317 {
4318 WidgetHotbar.dirtyCurrentItem = true;
4320 }
4321 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4322 card.OnLand();
4323 if (card.trait.CanOnlyCarry)
4324 {
4325 card.SetPlaceState(PlaceState.installed);
4326 }
4327 return card;
4328 }
PlaceState
Definition: PlaceState.cs:2
Card held
Definition: Chara.cs:70
static void SetDirty(Thing t)

References EClass._zone, Zone.AddCard(), card, LayerInventory.SetDirty(), and Card.Thing.

Referenced by Card.Destroy(), TaskMoveInstalled.OnProgressComplete(), AI_Cook.Run(), AI_Offer.Run(), AI_ReleaseHeld.Run(), and AIAct.Start().

◆ DropThing()

void Chara.DropThing ( Thing  t,
int  num = -1 
)
inline

Definition at line 4330 of file Chara.cs.

4331 {
4332 if (t.c_isImportant)
4333 {
4334 Msg.Say("markedImportant");
4335 return;
4336 }
4337 if (!t.trait.CanBeDropped)
4338 {
4339 Msg.Say("cantDrop", t);
4340 return;
4341 }
4342 if (t.trait is TraitAbility)
4343 {
4344 SE.Trash();
4345 t.Destroy();
4346 return;
4347 }
4348 Msg.Say("dropItem", t.Name);
4349 t.ignoreAutoPick = true;
4350 PlaySound("drop");
4351 EClass._zone.AddCard(t, pos);
4352 if (t.trait.CanOnlyCarry)
4353 {
4354 t.Install();
4355 }
4356 }
Card Install()
Definition: Card.cs:3590
virtual bool CanBeDropped
Definition: Trait.cs:298

References EClass._zone, Zone.AddCard(), Card.c_isImportant, Trait.CanBeDropped, Trait.CanOnlyCarry, Card.Destroy(), Card.Install(), Card.Name, Msg.Say(), and Card.trait.

Referenced by ActPlan._Update(), InvOwner.OnAltClick(), and InvOwner.OnDrag().

◆ Duplicate()

Chara Chara.Duplicate ( )
inline

Definition at line 1584 of file Chara.cs.

1585 {
1586 Chara chara = CharaGen.Create(id);
1587 chara.mana.value = mana.value;
1588 chara.stamina.value = stamina.value;
1589 foreach (KeyValuePair<int, Element> item in elements.dict)
1590 {
1591 Element orCreateElement = chara.elements.GetOrCreateElement(item.Key);
1592 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.vSource;
1593 }
1594 chara.SetFaith(faith);
1595 chara.bio = IO.DeepCopy(bio);
1596 chara.LV = base.LV;
1597 chara.c_daysWithGod = base.c_daysWithGod;
1598 chara.RefreshFaithElement();
1599 chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
1600 chara.isCopy = true;
1601 if (HaveFur())
1602 {
1603 chara.c_fur = -1;
1604 }
1605 return chara;
1606 }
bool HaveFur()
Definition: Card.cs:7440
Stats mana
Definition: Chara.cs:1006
void RefreshFaithElement()
Definition: Chara.cs:9415
void SetFaith(string id)
Definition: Chara.cs:1538
Element GetOrCreateElement(Element ele)
int vSource
Definition: ELEMENT.cs:260
Definition: IO.cs:11
virtual int value
Definition: Stats.cs:56

References Card.bio, CharaGen.Create(), ElementContainer.dict, Card.elements, faith, Card.HaveFur(), item, mana, MaxHP, stamina, Stats.value, and Element.vSource.

Referenced by ActEffect.Proc().

◆ EnhanceTempElement()

void Chara.EnhanceTempElement ( int  ele,
int  p,
bool  onlyRenew = false 
)
inline

Definition at line 9530 of file Chara.cs.

9531 {
9532 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
9533 }

References EClass.rnd().

◆ EnhanceTempElements()

void Chara.EnhanceTempElements ( int  p,
bool  body,
bool  mind,
bool  onlyRenew = false 
)
inline

Definition at line 9521 of file Chara.cs.

9522 {
9523 int[] array = (body ? Element.List_Body : Element.List_Mind);
9524 foreach (int ele in array)
9525 {
9526 EnhanceTempElement(ele, p, onlyRenew);
9527 }
9528 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:9530

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 4692 of file Chara.cs.

4693 {
4694 int slot = EClass.sources.categories.map[s].slot;
4695 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
4696 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
4697 {
4698 SetEQQuality();
4699 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
4700 AddThing(thing);
4701 if (bodySlot != null && !body.Equip(thing, bodySlot))
4702 {
4703 thing.Destroy();
4704 }
4705 }
4706 }
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3020
bool Equip(Thing thing, BodySlot slot=null, bool msg=true)
Definition: CharaBody.cs:182
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Definition: CharaBody.cs:347
void SetEQQuality()
Definition: Chara.cs:4639
SourceCategory categories
static Thing CreateFromCategory(string idCat, int lv=-1)
Definition: ThingGen.cs:75

References SourceManager.categories, ThingGen.CreateFromCategory(), Card.Destroy(), CharaBody.Equip(), CharaBody.GetSlot(), and EClass.sources.

Referenced by ZonePreEnterBoutWin.Execute(), and CoreDebug.QuickStart().

◆ EQ_ID()

Thing Chara.EQ_ID ( string  s,
int  mat = -1,
Rarity  r = Rarity::Random 
)
inline

Definition at line 4672 of file Chara.cs.

4673 {
4674 SetEQQuality();
4675 if (r != Rarity.Random)
4676 {
4677 CardBlueprint.current.rarity = r;
4678 }
4679 Thing thing = ThingGen.Create(s, mat, base.LV);
4680 if (body.GetSlot(thing, onlyEmpty: true) == null)
4681 {
4682 return thing;
4683 }
4684 AddThing(thing);
4685 if (!body.Equip(thing))
4686 {
4687 thing.Destroy();
4688 }
4689 return thing;
4690 }

References ThingGen.Create(), Card.Destroy(), CharaBody.Equip(), and CharaBody.GetSlot().

Referenced by Card.ApplyBacker(), and Player.CreateEquip().

◆ EQ_Item()

void Chara.EQ_Item ( string  s,
int  num = 1 
)
inline

Definition at line 4708 of file Chara.cs.

4709 {
4710 SetEQQuality();
4711 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
4712 AddThing(t);
4713 }
Thing SetNum(int a)
Definition: Card.cs:3356

References ThingGen.Create(), and Card.SetNum().

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 5675 of file Chara.cs.

5676 {
5677 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
5678 {
5679 return 25 + Evalue(226) * 125 / 100;
5680 }
5681 return Evalue(226);
5682 }

References HasCondition().

Referenced by CalcCastingChance(), AttackProcess.Prepare(), and RefreshSpeed().

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3269 of file Chara.cs.

3270 {
3271 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3272 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3273 zone = zone ?? EClass.world.region;
3275 {
3276 state = ZoneTransition.EnterState.Fall,
3277 x = pos.x,
3278 z = pos.z
3279 });
3280 }
void MoveZone(string alias)
Definition: Chara.cs:3094
int lv
Definition: Spatial.cs:142
Zone FindZone(int lv)
Definition: Spatial.cs:714
Region region
Definition: World.cs:23
Definition: Zone.cs:12
Zone GetTopZone()
Definition: Zone.cs:1871

References EClass._zone, Spatial.FindZone(), Zone.GetTopZone(), Spatial.lv, Spatial.Name, EClass.pc, World.region, Msg.Say(), and EClass.world.

Referenced by ActPlan._Update(), and TaskDig.OnProgressComplete().

◆ FindAmmo()

Thing Chara.FindAmmo ( Thing  weapon)
inline

Definition at line 7247 of file Chara.cs.

7248 {
7249 TraitToolRange ranged = weapon.trait as TraitToolRange;
7250 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7251 if (thing != null)
7252 {
7253 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7254 if (thing2 != null)
7255 {
7256 return thing2;
7257 }
7258 }
7259 return things.Find((Thing t) => ranged.IsAmmo(t));
7260 }
bool IsAmmo
Definition: Card.cs:2183
Thing ranged
Definition: Chara.cs:98

References ThingContainer.Find(), TraitToolRange.IsAmmo(), EClass.pc, and Card.things.

Referenced by ActRanged.TryReload(), and GoalAutoCombat.TryUseRanged().

◆ FindBed()

TraitBed Chara.FindBed ( )
inline

Definition at line 6800 of file Chara.cs.

6801 {
6802 foreach (Card item in EClass._map.props.installed.all)
6803 {
6804 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
6805 {
6806 return traitBed;
6807 }
6808 }
6809 return null;
6810 }

References EClass._map, Props.all, PropsManager.installed, TraitBed.IsHolder(), item, and Map.props.

Referenced by Hobby.GetEfficiency(), ListPeopleBed.OnClick(), BaseListPeople.OnInstantiate(), ListPeopleBed.OnInstantiate(), GoalSleep.OnSimulatePosition(), AI_Idle.Run(), GoalSleep.Run(), and GoalVisitorGuest.Run().

◆ FindBestFoodToEat()

Thing Chara.FindBestFoodToEat ( )
inline

Definition at line 7011 of file Chara.cs.

7012 {
7013 Thing result = null;
7014 int num = -1;
7015 if (IsPC)
7016 {
7017 return null;
7018 }
7019 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7020 {
7021 int num2 = CountNumEaten(item);
7022 int num3 = 100 - num2;
7023 if (num3 > num)
7024 {
7025 result = item;
7026 num = num3;
7027 }
7028 }
7029 return result;
7030 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7058
int CountNumEaten(Thing food)
Definition: Chara.cs:9386
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)

References Card.c_isImportant, and item.

Referenced by AI_Idle.Run().

◆ FindMaster()

Chara Chara.FindMaster ( )
inline

Definition at line 2161 of file Chara.cs.

2162 {
2163 if (IsMinion)
2164 {
2165 master = EClass._map.FindChara(base.c_uidMaster);
2166 }
2167 return master;
2168 }
Chara master
Definition: Chara.cs:88
Chara FindChara(string id)
Definition: Map.cs:2553

References EClass._map, Map.FindChara(), IsMinion, and master.

Referenced by MoveZone(), and AI_Idle.Run().

◆ FindNearestNewEnemy()

bool Chara.FindNearestNewEnemy ( )
inline

Definition at line 6026 of file Chara.cs.

6027 {
6028 for (int i = 0; i < EClass._map.charas.Count; i++)
6029 {
6030 Chara chara = EClass._map.charas[i];
6031 if (chara != this && chara != enemy && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6032 {
6033 DoHostileAction(chara);
6034 enemy = chara;
6035 return true;
6036 }
6037 }
6038 return false;
6039 }
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:5864

References EClass._map, Map.charas, and Card.pos.

Referenced by AM_Adv._OnUpdateInput(), AI_Trolley.Run(), and GoalCombat.Run().

◆ FindNewEnemy()

bool Chara.FindNewEnemy ( )
inline

Definition at line 5957 of file Chara.cs.

5958 {
5959 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
5960 {
5961 return false;
5962 }
5963 if (enemy != null && !enemy.IsAliveInCurrentZone)
5964 {
5965 enemy = null;
5966 }
5967 if (enemy != null)
5968 {
5969 return false;
5970 }
5971 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
5972 {
5973 return false;
5974 }
5975 bool flag = enemy != null || ai is GoalCombat;
5976 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
5977 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
5978 bool flag3 = !IsPCParty;
5979 Chara chara = null;
5980 int num2 = 9999;
5981 for (int i = 0; i < EClass._map.charas.Count; i++)
5982 {
5983 Chara chara2 = EClass._map.charas[i];
5984 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2))
5985 {
5986 continue;
5987 }
5988 int num3 = Dist(chara2);
5989 int num4 = GetSightRadius() + (flag ? 1 : 0);
5990 if (num3 > num4)
5991 {
5992 continue;
5993 }
5994 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
5995 {
5996 if (this == pos.FirstChara)
5997 {
5998 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
5999 }
6000 stealthSeen++;
6001 }
6002 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!IsPCFaction || EClass.pc.ai.ShouldAllyAttack(chara2)))
6003 {
6004 if (!IsPCParty)
6005 {
6006 DoHostileAction(chara2);
6007 enemy = chara2;
6008 return true;
6009 }
6010 if (num3 < num2)
6011 {
6012 num2 = num3;
6013 chara = chara2;
6014 }
6015 }
6016 }
6017 if (chara != null)
6018 {
6019 DoHostileAction(chara);
6020 enemy = chara;
6021 return true;
6022 }
6023 return false;
6024 }
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
int stealthSeen
Definition: Chara.cs:184
bool isPeace
Definition: Spatial.cs:406

References EClass._map, EClass._zone, ai, CanSeeLos(), Map.charas, Game.config, ConfigTactics.dontWander, Card.Evalue(), EClass.game, IsAliveInCurrentZone, Card.isHidden, Spatial.isPeace, Card.ModExp(), EClass.pc, EClass.rnd(), AIAct.ShouldAllyAttack(), and Game.Config.tactics.

Referenced by GoalCombat.Run().

◆ FindRoom()

Room Chara.FindRoom ( )
inline

Definition at line 7362 of file Chara.cs.

7363 {
7364 return FindBed()?.owner.pos.cell.room;
7365 }
TraitBed FindBed()
Definition: Chara.cs:6800

Referenced by GoalWork.FindWork(), BaseListPeople.OnInstantiate(), GoalWork.OnSimulatePosition(), AI_Idle.Run(), and GoalWork.ValidateHobby().

◆ GainAbility()

void Chara.GainAbility ( int  ele,
int  mtp = 100 
)
inline

Definition at line 9305 of file Chara.cs.

9306 {
9307 Element orCreateElement = elements.GetOrCreateElement(ele);
9308 if (orCreateElement.ValueWithoutLink == 0)
9309 {
9310 elements.ModBase(orCreateElement.id, 1);
9311 }
9312 if (orCreateElement is Spell)
9313 {
9314 int num = mtp * orCreateElement.source.charge * (100 + Evalue(307) + (HasElement(307) ? 20 : 0)) / 100 / 100;
9315 if (orCreateElement.source.charge == 1)
9316 {
9317 num = 1;
9318 }
9319 orCreateElement.vPotential += Mathf.Max(1, num / 2 + EClass.rnd(num / 2 + 1));
9320 }
9321 Say("spell_gain", this, orCreateElement.Name);
9322 LayerAbility.SetDirty(orCreateElement);
9323 }
Element ModBase(int ele, int v)
virtual string Name
Definition: ELEMENT.cs:302
static void SetDirty(Element a)

References Element.id, Element.Name, EClass.rnd(), LayerAbility.SetDirty(), Element.source, and Element.ValueWithoutLink.

Referenced by Player.DreamSpell(), and TraitBaseSpellbook.OnRead().

◆ GetActionText()

string Chara.GetActionText ( )
inline

Definition at line 6744 of file Chara.cs.

6745 {
6746 string result = "?????";
6747 if (ai != null)
6748 {
6749 result = ai.GetCurrentActionText();
6750 }
6751 return result;
6752 }
string GetCurrentActionText()
Definition: AIAct.cs:157

References AIAct.GetCurrentActionText().

Referenced by ListPeopleEmbark.OnInstantiate().

◆ GetArmorSkill()

override int Chara.GetArmorSkill ( )
inlinevirtual

Reimplemented from Card.

Definition at line 7297 of file Chara.cs.

7298 {
7299 if (body.GetWeight(armorOnly: true) <= 30000)
7300 {
7301 return 120;
7302 }
7303 return 122;
7304 }
int GetWeight(bool armorOnly=false)
Definition: CharaBody.cs:390

References CharaBody.GetWeight().

Referenced by WindowCharaMini.Refresh(), and WindowChara.RefreshProfile().

◆ GetBestRangedWeapon()

Thing Chara.GetBestRangedWeapon ( )
inline

Definition at line 7262 of file Chara.cs.

7263 {
7264 Thing result = null;
7265 int num = 0;
7266 foreach (Thing thing in things)
7267 {
7268 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
7269 {
7270 num = thing.GetEquipValue();
7271 result = thing;
7272 }
7273 }
7274 return result;
7275 }
int GetEquipValue()
Definition: Card.cs:6776
bool IsRangedWeapon
Definition: Card.cs:2179
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7196

References Card.GetEquipValue(), and Card.IsRangedWeapon.

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 8740 of file Chara.cs.

8741 {
8742 for (int i = 0; i < conditions.Count; i++)
8743 {
8744 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
8745 {
8746 return conBuffStats.elements.GetElement(ele);
8747 }
8748 }
8749 return null;
8750 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 8735 of file Chara.cs.

8736 {
8737 return GetBuffStats(EClass.sources.elements.alias[alias].id);
8738 }
Element GetBuffStats(string alias)
Definition: Chara.cs:8735

References SourceManager.elements, and EClass.sources.

Referenced by GoalCombat.TryUseAbility().

◆ GetBurden()

int Chara.GetBurden ( Card  t = null,
int  num = -1 
)
inline

Definition at line 1608 of file Chara.cs.

1609 {
1610 int num2 = (base.ChildrenWeight + ((t != null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 / WeightLimit;
1611 if (num2 < 0)
1612 {
1613 num2 = 1000;
1614 }
1616 {
1617 num2 = 0;
1618 }
1619 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
1620 if (num3 > 9)
1621 {
1622 num3 = 9;
1623 }
1624 return num3;
1625 }

References EClass.debug, CoreDebug.ignoreWeight, IsPC, and WeightLimit.

◆ GetCondition< T >()

T Chara.GetCondition< T > ( )
inline
Type Constraints
T :Condition 

Definition at line 8765 of file Chara.cs.

8765 : Condition
8766 {
8767 for (int i = 0; i < conditions.Count; i++)
8768 {
8769 if (conditions[i] is T)
8770 {
8771 return conditions[i] as T;
8772 }
8773 }
8774 return null;
8775 }

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3389 of file Chara.cs.

3390 {
3391 Debug.Log(angle);
3392 if (!renderer.hasActor)
3393 {
3394 if (angle == 0f || angle == 45f || angle == 90f)
3395 {
3396 return 2;
3397 }
3398 if (angle == -135f || angle == 180f || angle == -90f)
3399 {
3400 return 1;
3401 }
3402 if (angle == 135f)
3403 {
3404 return 0;
3405 }
3406 return 3;
3407 }
3408 return renderer.actor.currentDir;
3409 }
virtual int currentDir
Definition: CardActor.cs:41
float angle
Definition: Card.cs:67

References Debug.

Referenced by Player.EnterLocalZone(), and LayerTravel.Refresh().

◆ GetDestination()

Point Chara.GetDestination ( )
inline

Definition at line 6719 of file Chara.cs.

6720 {
6721 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
6722 }
virtual bool IsRunning
Definition: AIAct.cs:31
virtual Point GetDestination()
Definition: AIAct.cs:139

References Point.Copy(), AIAct.GetDestination(), and AIAct.IsRunning.

Referenced by AI_Idle.Run().

◆ GetFavArmorSkill()

Element Chara.GetFavArmorSkill ( )
inline

Definition at line 4383 of file Chara.cs.

4384 {
4385 if (elements.Value(122) > elements.Value(120))
4386 {
4387 return elements.GetElement(122);
4388 }
4389 return elements.GetElement(120);
4390 }
int Value(int ele)

Referenced by WindowChara.RefreshEquipment(), and WindowChara.RefreshNote().

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4358 of file Chara.cs.

4359 {
4360 int num = Evalue(131);
4361 int num2 = Evalue(130);
4362 int num3 = Evalue(123);
4363 if (num > num2 && num > num3)
4364 {
4365 return AttackStyle.TwoWield;
4366 }
4367 if (num2 > num && num2 > num3)
4368 {
4369 return AttackStyle.TwoHand;
4370 }
4371 if (num3 > num && num3 > num2)
4372 {
4373 return AttackStyle.Shield;
4374 }
4375 return AttackStyle.Default;
4376 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 7476 of file Chara.cs.

7477 {
7478 SourceCategory.Row r = null;
7479 if (_listFavCat.Count == 0)
7480 {
7481 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
7482 {
7483 if (row.gift > 0)
7484 {
7485 _listFavCat.Add(row);
7486 }
7487 }
7488 }
7489 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7490 {
7491 r = _listFavCat.RandomItem();
7492 });
7493 return r;
7494 }
static List< SourceCategory.Row > _listFavCat
Definition: Chara.cs:190
int seed
Definition: Game.cs:197
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:22

References SourceManager.categories, EClass.game, Game.seed, EClass.sources, and Rand.UseSeed().

Referenced by DramaCustomSequence.Build(), Affinity.OnGift(), WindowChara.RefreshNote(), DramaActor.Talk(), and ConSleep.Tick().

◆ GetFavFood()

SourceThing.Row Chara.GetFavFood ( )
inline

Definition at line 7456 of file Chara.cs.

7457 {
7458 if (_listFavFood.Count == 0)
7459 {
7460 foreach (SourceThing.Row row in EClass.sources.things.rows)
7461 {
7462 if (row._origin == "dish" && row.value != 0)
7463 {
7464 _listFavFood.Add(row);
7465 }
7466 }
7467 }
7468 SourceThing.Row r = null;
7469 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7470 {
7471 r = _listFavFood.RandomItem();
7472 });
7473 return r;
7474 }
static List< SourceThing.Row > _listFavFood
Definition: Chara.cs:188
SourceThing things

References EClass.game, Game.seed, EClass.sources, SourceManager.things, and Rand.UseSeed().

Referenced by DramaCustomSequence.Build(), Affinity.OnGift(), FoodEffect.Proc(), WindowChara.RefreshNote(), DramaActor.Talk(), and ConSleep.Tick().

◆ GetFavWeaponSkill()

Element Chara.GetFavWeaponSkill ( )
inline

Definition at line 4378 of file Chara.cs.

4379 {
4380 return elements.ListElements((Element e) => e.source.categorySub == "weapon" && !e.HasTag("ranged")).FindMax((Element a) => a.Value);
4381 }
List< Element > ListElements(Func< Element, bool > shoudList=null, Comparison< Element > comparison=null)
bool HasTag(string tag)
Definition: ELEMENT.cs:471

References Element.HasTag(), Element.ListElements, Element.source, and Element.Value.

Referenced by WindowChara.RefreshEquipment(), and WindowChara.RefreshNote().

◆ GetFirstStep()

Point Chara.GetFirstStep ( Point  newPoint,
PathManager::MoveType  moveType = PathManager::MoveType::Default 
)
inline

Definition at line 2347 of file Chara.cs.

2348 {
2349 return PathManager.Instance.GetFirstStep(pos, newPoint, this, IsPC ? 40 : 10, (!IsMultisize) ? moveType : PathManager.MoveType.Default);
2350 }
Point GetFirstStep(Point origin, Point _dest, IPathfindWalker walker, int maxDist=20, MoveType moveType=MoveType.Default)
Definition: PathManager.cs:67
static PathManager Instance
Definition: PathManager.cs:16

References PathManager.GetFirstStep(), PathManager.Instance, IsMultisize, IsPC, and Card.pos.

Referenced by GoalManualMove.CanMove(), GoalCombat.Run(), GoalManualMove.Run(), and GoalManualMove.TryMove().

◆ GetGoalFromTimeTable()

Goal Chara.GetGoalFromTimeTable ( int  hour)
inline

Definition at line 8124 of file Chara.cs.

8125 {
8126 if (IsPC)
8127 {
8128 return null;
8129 }
8130 switch (TimeTable.GetSpan(idTimeTable, hour))
8131 {
8132 case TimeTable.Span.Sleep:
8134 {
8135 return new GoalSleep();
8136 }
8137 break;
8138 case TimeTable.Span.Eat:
8139 return new GoalIdle();
8140 case TimeTable.Span.Work:
8141 if (IsGuest())
8142 {
8143 return new GoalIdle();
8144 }
8145 return GetGoalWork();
8146 case TimeTable.Span.Free:
8147 if (IsGuest())
8148 {
8149 return new GoalIdle();
8150 }
8151 return GetGoalHobby();
8152 }
8153 return null;
8154 }
Goal GetGoalWork()
Definition: Chara.cs:8156
Goal GetGoalHobby()
Definition: Chara.cs:8169
string idTimeTable
Definition: Chara.cs:464
static Span GetSpan(string id, int hour)
Definition: TimeTable.cs:45
bool isSimulating
Definition: Zone.cs:72

References EClass._zone, TimeTable.GetSpan(), Zone.isSimulating, and Stats.value.

◆ GetGoalHobby()

Goal Chara.GetGoalHobby ( )
inline

Definition at line 8169 of file Chara.cs.

8170 {
8171 if (IsPrisoner)
8172 {
8173 return new GoalIdle();
8174 }
8175 if (memberType == FactionMemberType.Livestock)
8176 {
8177 return new GoalGraze();
8178 }
8179 return new GoalHobby();
8180 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:904

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 8156 of file Chara.cs.

8157 {
8158 if (IsPrisoner)
8159 {
8160 return new GoalIdle();
8161 }
8162 if (memberType == FactionMemberType.Livestock)
8163 {
8164 return new GoalGraze();
8165 }
8166 return new GoalWork();
8167 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 6729 of file Chara.cs.

6730 {
6731 int num = 50;
6732 if (FindBed() != null)
6733 {
6734 num += 50;
6735 }
6736 return num;
6737 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 6724 of file Chara.cs.

6725 {
6726 return base.LV / 2 + 4;
6727 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6275 of file Chara.cs.

6276 {
6277 string text = base.Name;
6278 if (IsFriendOrAbove())
6279 {
6280 text = text.TagColor(EClass.Colors.colorFriend);
6281 }
6282 else if (IsHostile())
6283 {
6284 text = text.TagColor(EClass.Colors.colorHostile);
6285 }
6286 int num = 2;
6287 int lV = EClass.pc.LV;
6288 if (base.LV >= lV * 5)
6289 {
6290 num = 0;
6291 }
6292 else if (base.LV >= lV * 2)
6293 {
6294 num = 1;
6295 }
6296 else if (base.LV <= lV / 4)
6297 {
6298 num = 4;
6299 }
6300 else if (base.LV <= lV / 2)
6301 {
6302 num = 3;
6303 }
6304 string text2 = Lang.GetList("lvComparison")[num];
6305 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6306 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6307 s = (" (" + s.lang() + ") ").TagSize(14);
6308 s = "";
6309 if (memberType == FactionMemberType.Guest)
6310 {
6311 s += (" (" + "guest".lang() + ") ").TagSize(14);
6312 }
6313 else if (memberType == FactionMemberType.Livestock)
6314 {
6315 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6316 }
6317 if (!EClass.pc.IsMoving)
6318 {
6319 if (EClass.pc.HasHigherGround(this))
6320 {
6321 text2 += "lowerGround".lang();
6322 }
6323 else if (HasHigherGround(EClass.pc))
6324 {
6325 text2 += "higherGround".lang();
6326 }
6327 }
6328 if (Evalue(1232) > 0)
6329 {
6330 text2 = "milkBaby".lang().TagSize(14) + text2;
6331 }
6332 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6333 {
6334 text2 = "hasBounty".lang().TagSize(14) + text2;
6335 }
6336 if (EClass.pc.HasElement(481))
6337 {
6338 text2 += ("(" + faith.Name + ")").TagSize(14);
6339 }
6340 return text + text2 + s;
6341 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1042
override bool IsMoving
Definition: Chara.cs:604
bool IsNeutral()
Definition: Chara.cs:6080
Color colorHostile
Color colorFriend
Gradient gradientLVComparison
bool ShowBounty(Chara c)
Definition: GuildFighter.cs:39
bool HasBounty(Chara c)
Definition: GuildFighter.cs:44
Definition: Guild.cs:2
static GuildFighter Fighter
Definition: Guild.cs:23

References ColorProfile.colorFriend, ColorProfile.colorHostile, EClass.Colors, Guild.Fighter, Lang.GetList(), ColorProfile.gradientLVComparison, GuildFighter.HasBounty(), Card.HasElement(), HasHigherGround(), IsMoving, Card.LV, EClass.pc, and GuildFighter.ShowBounty().

Referenced by WidgetMouseover.Refresh().

◆ GetHoverText2()

override string Chara.GetHoverText2 ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6343 of file Chara.cs.

6344 {
6345 string text = "";
6346 if (knowFav)
6347 {
6348 text += Environment.NewLine;
6349 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
6350 }
6351 string text2 = "";
6353 {
6354 text2 += Environment.NewLine;
6355 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
6356 text2 += Environment.NewLine;
6357 text2 = text2 + "Global:" + IsGlobal + " AI:" + ai?.ToString() + " " + source.tactics.IsEmpty(EClass.sources.tactics.map.TryGetValue(id)?.id ?? EClass.sources.tactics.map.TryGetValue(job.id)?.id ?? "predator");
6358 text2 += Environment.NewLine;
6359 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
6360 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin;
6361 }
6363 {
6364 text2 += Environment.NewLine;
6365 text2 += "<size=14>";
6366 foreach (Hobby item in ListWorks())
6367 {
6368 text2 = text2 + item.Name + ", ";
6369 }
6370 foreach (Hobby item2 in ListHobbies())
6371 {
6372 text2 = text2 + item2.Name + ", ";
6373 }
6374 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
6375 }
6376 string text3 = "";
6377 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
6378 if (enumerable.Count() > 0)
6379 {
6380 text3 += Environment.NewLine;
6381 text3 += "<size=14>";
6382 int num = 0;
6383 foreach (BaseStats item3 in enumerable)
6384 {
6385 string text4 = item3.GetPhaseStr();
6386 if (text4.IsEmpty() || text4 == "#")
6387 {
6388 continue;
6389 }
6390 Color c = Color.white;
6391 switch (item3.source.group)
6392 {
6393 case "Bad":
6394 case "Debuff":
6395 case "Disease":
6397 break;
6398 case "Buff":
6400 break;
6401 }
6403 {
6404 text4 = text4 + "(" + item3.GetValue() + ")";
6405 if (resistCon != null && resistCon.ContainsKey(item3.id))
6406 {
6407 text4 = text4 + "{" + resistCon[item3.id] + "}";
6408 }
6409 }
6410 num++;
6411 text3 = text3 + text4.TagColor(c) + ", ";
6412 }
6413 if (num == 0)
6414 {
6415 text3 = "";
6416 }
6417 else
6418 {
6419 text = "";
6420 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
6421 }
6422 }
6424 {
6425 text3 += Environment.NewLine;
6426 foreach (ActList.Item item4 in ability.list.items)
6427 {
6428 text3 = text3 + item4.act.Name + ", ";
6429 }
6430 text3 = text3.TrimEnd(", ".ToCharArray());
6431 }
6432 return text + text2 + text3;
6433 }
override string ToString()
Definition: AIAct.cs:124
virtual string GetPhaseStr()
Definition: BaseStats.cs:47
virtual int GetValue()
Definition: BaseStats.cs:52
int idSkin
Definition: Card.cs:346
SourceCategory.Row GetFavCat()
Definition: Chara.cs:7476
bool knowFav
Definition: Chara.cs:409
override string GetName(NameStyle style, int num=-1)
Definition: Chara.cs:1209
override int DV
Definition: Chara.cs:725
List< Hobby > ListHobbies(bool useMemberType=true)
Definition: Chara.cs:8287
override int PV
Definition: Chara.cs:754
SourceThing.Row GetFavFood()
Definition: Chara.cs:7456
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:8260
Color colorDebuff
bool showExtra
Definition: CoreDebug.cs:167
Definition: Hobby.cs:4
SourceTactics tactics

References Color, ColorProfile.colorBuff, ColorProfile.colorDebuff, EClass.Colors, EClass.debug, BaseStats.GetPhaseStr(), BaseStats.GetValue(), held, BaseStats.id, SourceJob.Row.id, Card.idSkin, item, ActList.items, CharaAbility.list, EClass.pc, CoreDebug.showExtra, BaseStats.source, EClass.sources, SourceChara.Row.tactics, SourceManager.tactics, AIAct.ToString(), Card.trait, and Stats.value.

Referenced by WidgetMouseover.Refresh().

◆ GetIdPortrait()

string Chara.GetIdPortrait ( )
inline

Definition at line 7536 of file Chara.cs.

7537 {
7538 if (id == "olderyoungersister")
7539 {
7540 if (base.idSkin != 2)
7541 {
7542 return "UN_olderyoungersister";
7543 }
7544 return "UN_olderyoungersister_alt";
7545 }
7546 if (Portrait.allIds.Contains("UN_" + id + ".png"))
7547 {
7548 return "UN_" + id;
7549 }
7550 return base.c_idPortrait;
7551 }
static HashSet< string > allIds
Definition: Portrait.cs:20

References Portrait.allIds.

Referenced by ButtonRoster.SetChara(), Person.SetChara(), and Portrait.SetChara().

◆ GetIdPortraitCat()

string Chara.GetIdPortraitCat ( )
inline

Definition at line 7522 of file Chara.cs.

7523 {
7524 string text = race.id;
7525 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
7526 {
7527 return "foxfolk";
7528 }
7529 if (trait is TraitGuard)
7530 {
7531 return "guard";
7532 }
7533 return "";
7534 }

References SourceRace.Row.id, and EClass.rnd().

Referenced by ApplyEditorTags(), UICharaMaker.ListGender(), and Biography.SetPortrait().

◆ GetImageSprite()

override Sprite Chara.GetImageSprite ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6529 of file Chara.cs.

6530 {
6531 return GetSprite();
6532 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6199

◆ GetName()

override string Chara.GetName ( NameStyle  style,
int  num = -1 
)
inlinevirtual

Reimplemented from Card.

Definition at line 1209 of file Chara.cs.

1210 {
1211 if (base.isBackerContent && EClass.core.config.backer.Show(base.c_idBacker))
1212 {
1213 if (id == "follower" && !IsGlobal)
1214 {
1215 return "_follower".lang(EClass.sources.backers.map[base.c_idBacker].Name, faith.Name);
1216 }
1217 return EClass.sources.backers.map[base.c_idBacker].Name;
1218 }
1219 string text = base.c_altName ?? source.GetName(this);
1220 text = text.Replace("#ele5", MainElement.source.GetAltname(3)).Replace("#ele4", MainElement.source.GetAltname(2)).Replace("#ele3", MainElement.source.GetAltname(1))
1221 .Replace("#ele2", MainElement.source.GetAltname(0))
1222 .Replace("#ele", MainElement.source.GetName().ToLower());
1223 if (base.c_bossType == BossType.Evolved)
1224 {
1225 text = "_evolved".lang(text.ToTitleCase(wholeText: true));
1226 }
1227 trait.SetName(ref text);
1228 if (text.Length > 0 && char.IsLower(text[0]))
1229 {
1230 if (base.rarity >= Rarity.Legendary)
1231 {
1232 text = text.ToTitleCase();
1233 }
1234 else if (num != 0)
1235 {
1236 text = text.AddArticle();
1237 }
1238 }
1239 if (style == NameStyle.Simple)
1240 {
1241 return text;
1242 }
1243 int num2 = ((base.rarity == Rarity.Mythical) ? 3 : ((base.rarity >= Rarity.Legendary) ? 2 : ((!_alias.IsEmpty()) ? 1 : (-1))));
1244 if (trait is TraitAdventurer)
1245 {
1246 num2 = 1;
1247 }
1248 text = (Aka.IsEmpty() ? text.Bracket(num2) : (num2 switch
1249 {
1250 -1 => "_aka",
1251 1 => "_aka3",
1252 _ => "_aka2",
1253 }).lang((num2 == -1) ? Aka : Aka.ToTitleCase(wholeText: true), text.Bracket(num2)));
1254 string text2 = (base.isSale ? "forSale".lang(Lang._currency(GetPrice(CurrencyType.Money, sell: true, PriceType.PlayerShop), "money")) : "");
1255 return text + text2;
1256 }
BossType
Definition: BossType.cs:2
string Aka
Definition: Chara.cs:212
string _alias
Definition: Chara.cs:215
BackerContentConfig backer
Definition: CoreConfig.cs:604
string Name
Definition: Religion.cs:30
SourceBacker backers
virtual void SetName(ref string s)
Definition: Trait.cs:692

References _alias, Lang._currency(), Aka, CoreConfig.backer, SourceManager.backers, Core.config, EClass.core, faith, Card.GetPrice(), IsGlobal, MainElement, Religion.Name, Trait.SetName(), CoreConfig.BackerContentConfig.Show(), source, Element.source, EClass.sources, and trait.

Referenced by TraitStoryBookHome.OnRead().

◆ GetPietyValue()

int Chara.GetPietyValue ( )
inline

Definition at line 9406 of file Chara.cs.

9407 {
9408 if (base._IsPC)
9409 {
9410 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
9411 }
9412 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
9413 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 4731 of file Chara.cs.

4732 {
4733 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
4734 if (!IsPCFaction)
4735 {
4736 return;
4737 }
4739 {
4740 if (homeZone != null && EClass._zone != homeZone)
4741 {
4742 Msg.Say("returnHome", this, homeZone.Name);
4744 }
4745 }
4746 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
4747 {
4748 EClass.pc.party.AddMemeber(this, showMsg: true);
4749 }
4750 }
void AddMemeber(Chara c, bool showMsg=false)
Definition: Party.cs:56
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false)
Definition: Point.cs:607
virtual bool CanJoinParty
Definition: TraitChara.cs:47
virtual bool CanJoinPartyResident
Definition: TraitChara.cs:50

References EClass._zone, Party.AddMemeber(), EClass.Branch, Point.GetNearestPoint(), Zone.IsPCFaction, party, EClass.pc, Card.pos, Revive, and Msg.Say().

Referenced by ListPeopleRevive.OnClick(), and DramaOutcome.revive_pet().

◆ GetRoomWork()

BaseArea Chara.GetRoomWork ( )
inline

Definition at line 8238 of file Chara.cs.

8239 {
8240 BaseArea result = null;
8241 foreach (Hobby item in ListWorks())
8242 {
8243 AIWork aI = item.GetAI(this);
8244 if (aI.SetDestination())
8245 {
8246 if (aI.destArea != null)
8247 {
8248 result = aI.destArea;
8249 }
8250 else if (aI.destThing != null)
8251 {
8252 result = aI.destThing.pos.cell.room;
8253 }
8254 break;
8255 }
8256 }
8257 return result;
8258 }
Definition: AIWork.cs:5
Thing destThing
Definition: AIWork.cs:16
bool SetDestination()
Definition: AIWork.cs:55
BaseArea destArea
Definition: AIWork.cs:12

References Point.cell, AIWork.destArea, AIWork.destThing, item, Card.pos, Cell.room, and AIWork.SetDestination().

Referenced by BaseListPeople.AddSubButtonWork(), and ListPeopleBed.OnInstantiate().

◆ GetSprite()

override Sprite Chara.GetSprite ( int  dir = 0)
inlinevirtual

Reimplemented from Card.

Definition at line 6199 of file Chara.cs.

6200 {
6201 if (IsPCC)
6202 {
6203 PCC pCC = PCC.Get(pccData);
6204 pCC.Build();
6205 return pCC.variation.idle[0, 0];
6206 }
6207 if (spriteReplacer != null)
6208 {
6209 return spriteReplacer.data.GetSprite();
6210 }
6211 return sourceCard.GetSprite(0, (sourceCard._tiles.Length > 1) ? ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0))) : 0);
6212 }
SpriteReplacer spriteReplacer
Definition: Chara.cs:150
override CardRow sourceCard
Definition: Chara.cs:446
int[] _tiles
Definition: RenderRow.cs:12
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
Definition: RenderRow.cs:261
Sprite GetSprite(bool snow=false)
Definition: SpriteData.cs:56
SpriteData data

References RenderRow._tiles, SpriteReplacer.data, SpriteData.GetSprite(), RenderRow.GetSprite(), and SourceChara.Row.staticSkin.

Referenced by HotItemChara.GetSprite(), HotItemFocusChara.GetSprite(), CharaActor.OnSetOwner(), LayerEditSkin.RefreshImage(), Portrait.SetChara(), Person.SetImage(), and ItemPopulation.SetTopic().

◆ GetSubPassData()

override SubPassData Chara.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6223 of file Chara.cs.

6224 {
6225 if (IsPCC)
6226 {
6228 {
6230 }
6231 }
6232 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && GetBool(123))
6233 {
6234 return EClass.setting.pass.subDead;
6235 }
6236 return SubPassData.Default;
6237 }
bool GetBool(int id)
Definition: BaseCard.cs:15
ConSleep conSleep
Definition: Chara.cs:102
override bool IsDeadOrSleeping
Definition: Chara.cs:569
PassSetting pass
Definition: GameSetting.cs:303
bool altHeldPos
Definition: Player.cs:1073
static SubPassData Default
Definition: SubPassData.cs:7

References Player.altHeldPos, SubPassData.Default, GameSetting.pass, EClass.pc, EClass.player, Card.pos, EClass.setting, GameSetting.PassSetting.subDead, and GameSetting.PassSetting.subDeadPCC.

◆ GetTextHappiness()

string Chara.GetTextHappiness ( )
inline

Definition at line 6739 of file Chara.cs.

6740 {
6741 return GetHappiness().ToString() ?? "";
6742 }
int GetHappiness()
Definition: Chara.cs:6729

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 8376 of file Chara.cs.

8377 {
8378 string text = (simple ? "" : ("hobby".lang() + ":"));
8379 foreach (Hobby item in ListHobbies())
8380 {
8381 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8382 }
8383 return text.TrimEnd(',');
8384 }

References item.

Referenced by LayerQuestBoard.RefreshHire(), WindowChara.RefreshNote(), and BaseListPeople.SetSubText().

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 8386 of file Chara.cs.

8387 {
8388 string text = (simple ? "" : ("work".lang() + ":"));
8389 foreach (Hobby item in ListWorks())
8390 {
8391 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8392 }
8393 return text.TrimEnd(',');
8394 }

References item.

Referenced by LayerQuestBoard.RefreshHire(), WindowChara.RefreshNote(), and BaseListPeople.SetSubText().

◆ GetTopicText()

string Chara.GetTopicText ( string  topic = "calm")
inline

Definition at line 6435 of file Chara.cs.

6436 {
6437 string key = source.idText.IsEmpty(id);
6438 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
6439 {
6440 key = "littleOne2";
6441 }
6442 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
6443 if (row == null)
6444 {
6445 return null;
6446 }
6447 string text = row.GetText(topic, returnNull: true);
6448 if (text.IsEmpty())
6449 {
6450 return null;
6451 }
6452 if (text.StartsWith("@"))
6453 {
6454 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
6455 if (row == null)
6456 {
6457 return null;
6458 }
6459 text = row.GetText(topic, returnNull: true);
6460 if (text.IsEmpty())
6461 {
6462 return null;
6463 }
6464 }
6465 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
6466 }
SourceCharaText charaText

References EClass._zone, SourceManager.charaText, SourceChara.Row.idText, and EClass.sources.

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 7496 of file Chara.cs.

7497 {
7498 int num = 0;
7499 if (base.c_upgrades != null)
7500 {
7501 num += base.c_upgrades.spent;
7502 }
7503 if (base.c_genes != null)
7504 {
7505 num += base.c_genes.GetTotalCost();
7506 }
7507 return num + base.feat;
7508 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 8307 of file Chara.cs.

8308 {
8309 foreach (Hobby item in ListWorks())
8310 {
8311 if (item.source.alias == id)
8312 {
8313 return item;
8314 }
8315 }
8316 foreach (Hobby item2 in ListHobbies())
8317 {
8318 if (item2.source.alias == id)
8319 {
8320 return item2;
8321 }
8322 }
8323 return null;
8324 }
SourceHobby.Row source
Definition: Hobby.cs:7

References item, and Hobby.source.

Referenced by FactionBranch.AutoClean(), FactionBranch.GenerateGarbage(), and FactionBranch.OnAdvanceDay().

◆ GetWorkSummary()

WorkSummary Chara.GetWorkSummary ( )
inline

Definition at line 8459 of file Chara.cs.

8460 {
8461 if (_workSummary == null)
8462 {
8463 _workSummary = new WorkSummary();
8464 }
8465 return _workSummary;
8466 }
WorkSummary _workSummary
Definition: Chara.cs:55

Referenced by AIWork.AddDeliverable(), Expedition.End(), GoalWork.FindWork(), UIHomeInfo.RefreshReport(), GoalWork.TryWork(), and GoalWork.ValidateHobby().

◆ GiveGift()

void Chara.GiveGift ( Chara  c,
Thing  t 
)
inline

Definition at line 7635 of file Chara.cs.

7636 {
7637 if (c.IsHostile() || c.IsDeadOrSleeping)
7638 {
7639 Msg.Say("affinityNone", c, this);
7640 return;
7641 }
7642 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
7643 {
7644 bool num = t.blessedState == BlessedState.Doomed;
7645 int num2 = 200 + t.LV * 3;
7646 if (t.rarity == Rarity.Legendary)
7647 {
7648 num2 *= 3;
7649 }
7650 if (t.rarity >= Rarity.Mythical)
7651 {
7652 num2 *= 5;
7653 }
7654 if (num)
7655 {
7656 num2 *= 2;
7657 }
7658 EClass.pc.PlayEffect("identify");
7659 EClass.pc.PlaySound("identify");
7660 c.PlayEffect("mutation");
7661 c.Say("draw_curse", c, t);
7662 t.Destroy();
7663 List<Element> list = new List<Element>();
7664 foreach (Element value in EClass.pc.elements.dict.Values)
7665 {
7666 if (value is Spell)
7667 {
7668 list.Add(value);
7669 }
7670 }
7671 if (list.Count == 0)
7672 {
7674 return;
7675 }
7676 Element element = list.RandomItem();
7677 EClass.pc.ModExp(element.id, num2);
7678 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
7679 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
7680 return;
7681 }
7682 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
7683 {
7684 GiveLovePotion(c, t);
7685 return;
7686 }
7687 if (t.trait is TraitErohon && c.id == t.c_idRefName)
7688 {
7689 c.OnGiveErohon(t);
7690 return;
7691 }
7692 if (t.trait is TraitTicketMassage)
7693 {
7694 t.ModNum(-1);
7695 c.Talk("ticket");
7696 switch (t.id)
7697 {
7698 case "ticket_massage":
7699 c.ModAffinity(EClass.pc, 10);
7701 {
7702 target = c
7703 });
7704 break;
7705 case "ticket_armpillow":
7706 c.ModAffinity(EClass.pc, 20);
7707 EClass.pc.AddCondition<ConSleep>(300, force: true);
7708 c.SetAI(new AI_ArmPillow
7709 {
7710 target = EClass.pc
7711 });
7712 break;
7713 case "ticket_champagne":
7714 c.ModAffinity(EClass.pc, 10);
7716 break;
7717 }
7718 return;
7719 }
7720 if (t.id == "flyer")
7721 {
7722 stamina.Mod(-1);
7723 if (c.things.Find((Thing a) => a.id == "flyer") != null)
7724 {
7725 c.Talk("flyer_miss");
7726 DoHostileAction(c);
7727 return;
7728 }
7729 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
7730 {
7731 Msg.Say("affinityNone", c, this);
7732 t.Destroy();
7733 elements.ModExp(291, 10);
7734 return;
7735 }
7736 elements.ModExp(291, 50);
7737 }
7738 if (t.id == "statue_weird")
7739 {
7740 EClass.pc.Say("statue_sell");
7741 }
7742 t.isGifted = true;
7743 c.nextUse = c.affinity.OnGift(t);
7744 if (!t.isDestroyed)
7745 {
7746 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
7747 {
7748 q.OnGiveItem(c, t);
7749 });
7750 if (c.TryEquip(t))
7751 {
7752 c.nextUse = null;
7753 }
7754 }
7755 }
Thing OnGift(Thing t)
Definition: Affinity.cs:103
int ExpToNext
Definition: Card.cs:1944
bool isCopy
Definition: Card.cs:862
bool IsCursed
Definition: Card.cs:2191
int CHA
Definition: Card.cs:2283
bool IsEquipmentOrRanged
Definition: Card.cs:2154
void SayNothingHappans()
Definition: Card.cs:6418
string c_idRefName
Definition: Card.cs:1601
void AddExp(int a)
Definition: Card.cs:2866
void GiveLovePotion(Chara c, Thing t)
Definition: Chara.cs:7768
Affinity affinity
Definition: Chara.cs:310
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7157
void OnGiveErohon(Thing t)
Definition: Chara.cs:7757
QuestManager quests
Definition: Game.cs:179
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
virtual void OnGiveItem(Chara c, Thing t)
Definition: Quest.cs:531

References AddCondition(), Card.AddExp(), affinity, Card.c_idRefName, Card.CHA, Card.Destroy(), ElementContainer.dict, Card.elements, Card.ExpToNext, ThingContainer.Find(), EClass.game, Card.HasElement(), Card.id, Element.id, Card.IsAmmo, Card.isCopy, Card.IsCursed, IsDeadOrSleeping, Card.isDestroyed, Card.IsEquipmentOrRanged, IsHostile(), QuestManager.list, Stats.Mod(), ModAffinity(), Card.ModExp(), Card.ModNum(), Element.Name, Affinity.OnGift(), OnGiveErohon(), Quest.OnGiveItem(), EClass.pc, Card.PlayEffect(), Card.PlaySound(), Game.quests, Card.rarity, EClass.rnd(), Msg.Say(), Card.Say(), Card.SayNothingHappans(), SetAI(), Card.Talk(), Card.things, Card.trait, and TryEquip().

Referenced by ActPlan._Update(), ActThrow.Throw(), and HotItemHeld.TrySetAct().

◆ GiveLovePotion()

void Chara.GiveLovePotion ( Chara  c,
Thing  t 
)
inline

Definition at line 7768 of file Chara.cs.

7769 {
7770 c.Say("give_love", c, t);
7771 c.PlaySound(t.material.GetSoundDead());
7772 c.ShowEmo(Emo.angry);
7773 c.ModAffinity(EClass.pc, -20, show: false);
7774 c.Talk("pervert");
7775 t.Destroy();
7776 }

References Card.Destroy(), Card.material, ModAffinity(), EClass.pc, Card.PlaySound(), Card.Say(), Card.ShowEmo(), and Card.Talk().

Referenced by InvOwner.Transaction.Process().

◆ GoHostile()

void Chara.GoHostile ( Card  _tg)
inlineprivate

Definition at line 5840 of file Chara.cs.

5841 {
5842 if (enemy == null && !IsPC)
5843 {
5844 if (GetInt(106) == 0)
5845 {
5846 TalkTopic("aggro");
5847 }
5848 if (OriginalHostility != Hostility.Enemy)
5849 {
5850 ShowEmo(Emo.angry);
5851 }
5852 SetEnemy(_tg.Chara);
5853 }
5855 {
5856 if (hostility >= Hostility.Neutral)
5857 {
5858 Say("angry", this);
5859 }
5860 hostility = Hostility.Enemy;
5861 }
5862 }
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual bool IsPCFactionMinion
Definition: Card.cs:2091

References Card.Chara, Card.IsPCFaction, and Card.IsPCFactionMinion.

Referenced by CallHelp(), DoHostileAction(), and RequestProtection().

◆ HasAccess() [1/2]

bool Chara.HasAccess ( Card  c)
inline

Definition at line 1132 of file Chara.cs.

1133 {
1134 return HasAccess(c.pos);
1135 }
bool HasAccess(Card c)
Definition: Chara.cs:1132

References HasAccess(), and Card.pos.

Referenced by AI_Pray.GetAltar(), TraitSet.GetRandom(), HasAccess(), MoveRandom(), and AI_Idle.Run().

◆ HasAccess() [2/2]

bool Chara.HasAccess ( Point  p)
inline

Definition at line 1137 of file Chara.cs.

1138 {
1139 if (!EClass._zone.IsPCFaction || p.cell.room == null || IsPC)
1140 {
1141 return true;
1142 }
1143 return p.cell.room.data.accessType switch
1144 {
1145 BaseArea.AccessType.Resident => memberType == FactionMemberType.Default,
1146 BaseArea.AccessType.Private => false,
1147 _ => true,
1148 };
1149 }

References EClass._zone, Point.cell, IsPC, Zone.IsPCFaction, memberType, and Cell.room.

◆ HasCondition()

◆ HasCondition< T >()

override bool Chara.HasCondition< T > ( )
inlinevirtual

Reimplemented from Card.

Definition at line 8711 of file Chara.cs.

8712 {
8713 for (int i = 0; i < conditions.Count; i++)
8714 {
8715 if (conditions[i] is T)
8716 {
8717 return true;
8718 }
8719 }
8720 return false;
8721 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8058 of file Chara.cs.

8059 {
8060 if (_cooldowns != null)
8061 {
8062 for (int i = 0; i < _cooldowns.Count; i++)
8063 {
8064 if (_cooldowns[i] / 1000 == idEle)
8065 {
8066 return true;
8067 }
8068 }
8069 }
8070 return false;
8071 }

Referenced by RequestProtection().

◆ HasHigherGround()

bool Chara.HasHigherGround ( Card  c)
inline

Definition at line 1042 of file Chara.cs.

1043 {
1044 if (c == null)
1045 {
1046 return false;
1047 }
1048 float num = renderer.position.y - pos.Position(0).y + (_isLevitating ? 0.4f : 0f);
1049 float num2 = c.renderer.position.y - c.pos.Position(0).y + ((c.isChara && c.Chara._isLevitating) ? 0.4f : 0f);
1050 return num > num2 + 0.1f;
1051 }
bool _isLevitating
Definition: Chara.cs:134
ref Vector3 Position(int height)
Definition: Point.cs:536

References _isLevitating, Card.Chara, Card.pos, and Point.Position().

Referenced by GetHoverText(), and AttackProcess.Prepare().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1549 of file Chara.cs.

1550 {
1551 Cure(CureType.Death);
1552 base.hp = MaxHP;
1553 mana.value = mana.max;
1554 stamina.value = stamina.max;
1555 Refresh();
1556 }
virtual int max
Definition: Stats.cs:68

References Cure(), mana, Stats.max, MaxHP, Refresh(), and stamina.

Referenced by ZoneInstanceBout.OnLeaveZone().

◆ HoldCard()

void Chara.HoldCard ( Card  t,
int  num = -1 
)
inline

Definition at line 4181 of file Chara.cs.

4182 {
4183 if (held == t || t.isDestroyed || t.Num <= 0)
4184 {
4185 return;
4186 }
4187 if (IsPC && t.isNPCProperty)
4188 {
4189 t.isNPCProperty = false;
4191 pos.TryWitnessCrime(this);
4192 }
4193 PickHeld();
4194 if (t.isChara)
4195 {
4197 {
4198 t.ShowEmo(Emo.love);
4199 }
4200 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4201 }
4202 else
4203 {
4204 if (num == -1 || num > t.Num)
4205 {
4206 num = t.Num;
4207 }
4208 if (num < t.Num)
4209 {
4210 t = t.Split(num);
4211 }
4212 }
4213 if (t.GetRootCard() != this)
4214 {
4215 t = Pick(t.Thing, msg: false, tryStack: false);
4216 if (t.GetRootCard() != this)
4217 {
4218 return;
4219 }
4220 }
4221 held = t;
4222 if (held.GetLightRadius() > 0)
4223 {
4225 }
4226 if (IsPC)
4227 {
4229 WidgetHotbar.dirtyCurrentItem = true;
4230 }
4231 }
Thing Split(int a)
Definition: Card.cs:3345
bool isNPCProperty
Definition: Card.cs:538
void RecalculateFOV()
Definition: Card.cs:5988
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2063
int GetLightRadius()
Definition: Card.cs:6030
void PickHeld(bool msg=false)
Definition: Chara.cs:4233
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:857

References Card.GetLightRadius(), Card.GetRootCard(), Card.IsAliveInCurrentZone, Card.isChara, Card.isDestroyed, Card.isNPCProperty, Player.ModKarma(), Card.Num, Pick, EClass.player, EClass.rnd(), LayerInventory.SetDirty(), Card.ShowEmo(), Card.Split(), and Card.Thing.

Referenced by HotItemNoItem._TrySetAct(), Recipe.Craft(), RecipeCard.Craft(), HotItemHeld.OnSetCurrentItem(), UIInventory.RefreshList(), AI_Drink.Run(), AI_Eat.Run(), AI_Read.Run(), Player.SetCurrentHotItem(), and InvOwner.TryHold().

◆ InitStats()

void Chara.InitStats ( bool  onDeserialize = false)
inline

Definition at line 8543 of file Chara.cs.

8544 {
8545 if (!onDeserialize)
8546 {
8547 _cints[10] = 20;
8548 _cints[11] = 70;
8549 _cints[13] = 70;
8550 _cints[14] = 70;
8551 _cints[15] = 70;
8552 _cints[17] = 0;
8553 _cints[18] = 0;
8554 }
8555 foreach (Condition condition in conditions)
8556 {
8557 condition.SetOwner(this, onDeserialize);
8558 }
8559 }
int[] _cints
Definition: Chara.cs:82

References BaseCondition.SetOwner().

Referenced by OnCreate(), and OnDeserialized().

◆ InstantEat()

void Chara.InstantEat ( Thing  t = null,
bool  sound = true 
)
inline

Definition at line 7032 of file Chara.cs.

7033 {
7034 if (t == null)
7035 {
7036 t = FindBestFoodToEat();
7037 }
7038 if (t == null)
7039 {
7040 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7041 }
7042 if (t == null)
7043 {
7044 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7045 }
7046 if (t != null)
7047 {
7048 Say("eat_start", this, t.Duplicate(1));
7049 if (sound)
7050 {
7051 PlaySound("eat");
7052 }
7053 FoodEffect.Proc(this, t);
7054 t.ModNum(-1);
7055 }
7056 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7011
static void Proc(Chara c, Thing food)
Definition: FoodEffect.cs:6

References Card.c_isImportant, and FoodEffect.Proc().

Referenced by InvOwner.OnClick(), ActEffect.Proc(), AI_Idle.Run(), Tick(), and CoreDebug.UpdateInput().

◆ IsBranchMember()

bool Chara.IsBranchMember ( )
inline

Definition at line 6090 of file Chara.cs.

6091 {
6092 if (faction == EClass.Home)
6093 {
6094 return homeZone == EClass.game.activeZone;
6095 }
6096 return false;
6097 }
Faction faction
Definition: Chara.cs:423
Zone activeZone
Definition: Game.cs:245

References Game.activeZone, EClass.game, and EClass.Home.

◆ IsCriticallyWounded()

bool Chara.IsCriticallyWounded ( bool  includeRide = false)
inline

Definition at line 1029 of file Chara.cs.

1030 {
1031 if (host == null || includeRide)
1032 {
1033 if (Evalue(1421) <= 0)
1034 {
1035 return base.hp < MaxHP / 5;
1036 }
1037 return base.hp + mana.value < (MaxHP + mana.max) / 5;
1038 }
1039 return false;
1040 }

References Card.Evalue(), host, mana, Stats.max, and MaxHP.

Referenced by AM_Adv._OnUpdateInput(), GoalAutoCombat.GetActPlanColor(), GoalAutoCombat.GoalAutoCombat(), and Party.IsCriticallyWounded().

◆ IsEnemyOnPath()

bool Chara.IsEnemyOnPath ( Point  p,
bool  cancelAI = true 
)
inline

Definition at line 2270 of file Chara.cs.

2271 {
2272 if (!currentZone.IsRegion && p.IsValid)
2273 {
2274 CellDetail detail = p.detail;
2275 if (detail != null && detail.charas.Count > 0)
2276 {
2277 foreach (Chara chara in p.detail.charas)
2278 {
2279 if (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed)
2280 {
2281 if (cancelAI && EClass.pc.ai is GoalManualMove)
2282 {
2283 EClass.pc.ai.Cancel();
2284 }
2285 return true;
2286 }
2287 }
2288 }
2289 }
2290 return false;
2291 }
List< Chara > charas
Definition: CellDetail.cs:13
CellDetail detail
Definition: Point.cs:71

References ai, TraitChara.CanBePushed, AIAct.Cancel(), CellDetail.charas, currentZone, Point.detail, IsHostile(), Spatial.IsRegion, Point.IsValid, EClass.pc, and trait.

Referenced by GoalManualMove.CanMove(), CanMoveTo(), and AM_Adv.PressedActionMove().

◆ IsEscorted()

bool Chara.IsEscorted ( )
inline

Definition at line 2170 of file Chara.cs.

2171 {
2172 if (!IsPCPartyMinion)
2173 {
2174 return false;
2175 }
2176 foreach (Quest item in EClass.game.quests.list)
2177 {
2178 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2179 {
2180 return true;
2181 }
2182 }
2183 return false;
2184 }
int uidChara
Definition: QuestEscort.cs:6

References EClass.game, IsPCPartyMinion, item, QuestManager.list, Game.quests, and QuestEscort.uidChara.

Referenced by ActPlan._Update(), and QuestManager.HasFarAwayEscort().

◆ IsFriendOrAbove() [1/2]

bool Chara.IsFriendOrAbove ( )
inline

◆ IsFriendOrAbove() [2/2]

bool Chara.IsFriendOrAbove ( Chara  c)
inline

Definition at line 6134 of file Chara.cs.

6135 {
6136 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6137 {
6139 {
6140 return true;
6141 }
6142 }
6143 else if (IsHostile() && c.IsHostile())
6144 {
6145 return true;
6146 }
6147 return false;
6148 }

References IsFriendOrAbove(), IsHostile(), and Card.IsPCFactionOrMinion.

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6046 of file Chara.cs.

6047 {
6048 if (c == null)
6049 {
6050 return false;
6051 }
6052 if (base.IsPCFactionOrMinion)
6053 {
6054 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6055 {
6056 return true;
6057 }
6058 }
6059 else
6060 {
6062 {
6063 return true;
6064 }
6065 if (OriginalHostility >= Hostility.Friend)
6066 {
6067 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6068 {
6069 return true;
6070 }
6071 }
6072 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6073 {
6074 return true;
6075 }
6076 }
6077 return false;
6078 }
bool IsCriminal
Definition: Player.cs:1257

References EClass._zone, enemy, hostility, Zone.instance, Player.IsCriminal, Card.IsPCFactionOrMinion, IsPCParty, OriginalHostility, EClass.pc, and EClass.player.

◆ IsInHomeZone()

bool Chara.IsInHomeZone ( )
inline

Definition at line 6104 of file Chara.cs.

6105 {
6106 return EClass.game.activeZone == currentZone;
6107 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

bool Chara.IsInSpot< T > ( )
inline
Type Constraints
T :TraitSpot 

Definition at line 6109 of file Chara.cs.

6109 : TraitSpot
6110 {
6111 foreach (T item in EClass._map.props.installed.traits.List<T>())
6112 {
6113 foreach (Point item2 in item.ListPoints())
6114 {
6115 if (pos.Equals(item2))
6116 {
6117 return true;
6118 }
6119 }
6120 }
6121 return false;
6122 }
TraitManager traits
Definition: Props.cs:18

References EClass._map, PropsManager.installed, item, Map.props, and Props.traits.

◆ IsNeutral()

bool Chara.IsNeutral ( )
inline

Definition at line 6080 of file Chara.cs.

6081 {
6082 return hostility == Hostility.Neutral;
6083 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

bool Chara.IsValidGiftWeight ( Card  t,
int  num = -1 
)
inline

Definition at line 7579 of file Chara.cs.

7580 {
7581 int num2 = ((!HasElement(1411)) ? 1 : 3);
7582 if (GetBurden(t, num) >= num2)
7583 {
7584 return false;
7585 }
7586 return true;
7587 }
int GetBurden(Card t=null, int num=-1)
Definition: Chara.cs:1608

Referenced by ActPlan._Update(), and HotItemHeld.TrySetAct().

◆ Kick() [1/2]

void Chara.Kick ( Chara  t,
bool  ignoreSelf = false,
bool  karmaLoss = true,
bool  show = true 
)
inline

Definition at line 5308 of file Chara.cs.

5309 {
5311 {
5312 return;
5313 }
5314 if (t.IsPC)
5315 {
5317 }
5318 if (t.host != null)
5319 {
5320 return;
5321 }
5322 if (t == this)
5323 {
5324 if (!ignoreSelf)
5325 {
5326 Debug.Log(t.pos.GetNearestPoint());
5327 if (TryMove(t.pos.GetNearestPoint()) != MoveResult.Success)
5328 {
5330 }
5331 }
5332 return;
5333 }
5334 if (show)
5335 {
5336 Say("kick", this, t);
5337 }
5338 PlaySound("kick");
5339 if ((t.conSuspend == null || t.conSuspend.uidMachine != 0) && t.trait.CanBePushed && (!t.IsHostile() || EClass.rnd(2) == 0) && !t.noMove && !t.isRestrained)
5340 {
5341 t.MoveByForce(t.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), this, !t.pos.IsBlocked);
5342 }
5343 if (t.conSleep != null)
5344 {
5345 t.conSleep.Kill();
5346 }
5347 if (IsPC && t.IsFriendOrAbove() && !t.IsPCFactionOrMinion && karmaLoss)
5348 {
5350 }
5351 t.PlayEffect("kick");
5352 }
void ClearPlans()
Definition: AM_Adv.cs:426
static AM_Adv Adv
Definition: ActionMode.cs:15
void MoveImmediate(Point p, bool focus=true, bool cancelAI=true)
Definition: Card.cs:5479
ConSuspend conSuspend
Definition: Chara.cs:104
MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2494
int uidMachine
Definition: ConSuspend.cs:6

References ActionMode.Adv, TraitChara.CanBePushed, AM_Adv.ClearPlans(), conSleep, conSuspend, Debug, Point.GetNearestPoint(), host, Point.IsBlocked, IsFriendOrAbove(), IsHostile(), IsPC, Card.IsPCFactionOrMinion, Card.isRestrained, Condition.Kill(), Player.ModKarma(), MoveByForce(), Card.MoveImmediate(), Card.noMove, Card.PlayEffect(), EClass.player, Card.pos, EClass.rnd(), trait, and ConSuspend.uidMachine.

◆ Kick() [2/2]

void Chara.Kick ( Point  p,
bool  ignoreSelf = false 
)
inline

Definition at line 5300 of file Chara.cs.

5301 {
5302 foreach (Chara item in p.ListCharas())
5303 {
5304 Kick(item, ignoreSelf);
5305 }
5306 }
List< Chara > ListCharas()
Definition: Point.cs:1151

References item, and Kick.

Referenced by Recipe.Build(), RecipeCard.Build(), Map.MineFloor(), TaskBuild.OnProgressComplete(), TraitGeneMachine.OnUse(), ActKick.Perform(), AI_Bladder.Run(), and AI_Trolley.Run().

◆ ListAvailabeFeats()

List< Element > Chara.ListAvailabeFeats ( bool  pet = false,
bool  showAll = false 
)
inline

Definition at line 9106 of file Chara.cs.

9107 {
9108 List<Element> list = new List<Element>();
9109 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
9110 {
9112 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
9113 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
9114 {
9115 list.Add(Element.Create(feat.id, num) as Feat);
9116 }
9117 }
9118 return list;
9119 }
int feat
Definition: Card.cs:358
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1097
Definition: FEAT.cs:255

References Element.Create(), SourceManager.elements, Element.HasTag(), Element.id, Feat.IsPurchaseFeatReqMet(), item, Element.source, EClass.sources, and Element.ValueWithoutLink.

◆ ListHobbies()

List< Hobby > Chara.ListHobbies ( bool  useMemberType = true)
inline

Definition at line 8287 of file Chara.cs.

8288 {
8289 listHobby.Clear();
8290 if (!useMemberType || memberType != FactionMemberType.Livestock)
8291 {
8292 if (_hobbies == null)
8293 {
8294 RerollHobby();
8295 }
8296 foreach (int hobby in _hobbies)
8297 {
8298 listHobby.Add(new Hobby
8299 {
8300 id = hobby
8301 });
8302 }
8303 }
8304 return listHobby;
8305 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:8420

Referenced by DramaCustomSequence.Build(), FactionBranch.GetResidentTax(), GoalHobby.GetWorks(), FactionBranch.RefreshEfficiency(), TraitWhipLove.TrySetHeldAct(), and GoalWork.ValidateHobby().

◆ ListWorks()

List< Hobby > Chara.ListWorks ( bool  useMemberType = true)
inline

Definition at line 8260 of file Chara.cs.

8261 {
8262 listHobby.Clear();
8263 if (useMemberType && memberType == FactionMemberType.Livestock)
8264 {
8265 listHobby.Add(new Hobby
8266 {
8267 id = 45
8268 });
8269 }
8270 else
8271 {
8272 if (_works == null)
8273 {
8274 RerollHobby();
8275 }
8276 foreach (int work in _works)
8277 {
8278 listHobby.Add(new Hobby
8279 {
8280 id = work
8281 });
8282 }
8283 }
8284 return listHobby;
8285 }

Referenced by FactionBranch.DailyOutcome(), FactionBranch.GetResidentTax(), GoalWork.GetWorks(), FactionBranch.RefreshEfficiency(), UIHomeInfo.RefreshReport(), and TraitWhipLove.TrySetHeldAct().

◆ LookAt() [1/2]

◆ LookAt() [2/2]

override void Chara.LookAt ( Point  p)
inlinevirtual

Reimplemented from Card.

Definition at line 3308 of file Chara.cs.

3309 {
3310 angle = Util.GetAngle(p.x - pos.x, p.z - pos.z);
3311 if (EClass._zone.IsRegion)
3312 {
3313 if (angle > 100f && angle < 170f)
3314 {
3315 base.dir = 2;
3316 }
3317 else if (angle > 170f && angle < 190f)
3318 {
3319 base.dir = 0;
3320 }
3321 else if (angle > 190f || (angle < -10f && angle > -100f))
3322 {
3323 base.dir = 3;
3324 }
3325 else
3326 {
3327 base.dir = 1;
3328 }
3329 angle -= 45f;
3330 }
3331 else if (angle > 170f && angle < 235f)
3332 {
3333 base.dir = 0;
3334 }
3335 else if (angle > 80f && angle < 145f)
3336 {
3337 base.dir = 1;
3338 }
3339 else if (angle > -100f && angle < -35f)
3340 {
3341 base.dir = 3;
3342 }
3343 else if (angle > -10f && angle < 55f)
3344 {
3345 base.dir = 2;
3346 }
3348 }

References EClass._zone, Spatial.IsRegion, Util, Point.x, and Point.z.

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2073 of file Chara.cs.

2074 {
2075 if (IsLocalChara && !base.IsUnique)
2076 {
2077 Debug.Log("Creating Replacement NPC for:" + this);
2079 }
2080 _MakeAlly();
2081 if (msg)
2082 {
2083 EClass.pc.Say("hire", this);
2084 EClass.Sound.Play("good");
2085 }
2086 EClass.pc.party.AddMemeber(this);
2087 if (EClass._zone.IsTown)
2088 {
2090 }
2091 }
Chara CreateReplacement()
Definition: Chara.cs:7435
void _MakeAlly()
Definition: Chara.cs:2093
virtual bool IsTown
Definition: Zone.cs:220
void RefreshListCitizen()
Definition: Zone.cs:3389

References _MakeAlly(), EClass._map, EClass._zone, Party.AddMemeber(), CreateReplacement(), Map.deadCharas, Debug, IsLocalChara, Zone.IsTown, party, EClass.pc, Zone.RefreshListCitizen(), Card.Say(), and EClass.Sound.

Referenced by DramaOutcome.fiama_pet(), AI_Fuck.Finish(), DramaOutcome.melilith_friend(), TraitDiary.OnRead(), TraitGiftNewYear.OnUse(), DramaOutcome.poppy_found(), ActRide.Ride(), DramaOutcome.sister_friend(), ActThrow.Throw(), and Religion.TryGetGift().

◆ MakeBraineCell()

Thing Chara.MakeBraineCell ( )
inline

Definition at line 7558 of file Chara.cs.

7559 {
7560 return DNA.GenerateGene(this, DNA.Type.Brain);
7561 }
Definition: DNA.cs:8
Type
Definition: DNA.cs:10
static Thing GenerateGene(Chara c, Type? type=null)
Definition: DNA.cs:104

References DNA.GenerateGene().

Referenced by CoreDebug.UpdateInput().

◆ MakeGene()

Thing Chara.MakeGene ( DNA::Type type = null)
inline

Definition at line 7553 of file Chara.cs.

7554 {
7555 return DNA.GenerateGene(this, type);
7556 }

References DNA.GenerateGene().

Referenced by ActEffect.GeneMiracle(), Card.SpawnLoot(), Zone.TryGenerateEvolved(), and CoreDebug.UpdateInput().

◆ MakeGrave()

void Chara.MakeGrave ( string  lastword)
inline

Definition at line 4820 of file Chara.cs.

4821 {
4822 if (!EClass._zone.IsRegion)
4823 {
4824 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
4825 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
4826 {
4827 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
4828 }
4829 Thing thing = ThingGen.Create(list.RandomItem());
4830 thing.MakeRefFrom(this);
4831 if (!lastword.IsEmpty())
4832 {
4833 thing.c_note = lastword;
4834 }
4835 thing.isModified = true;
4836 EClass._zone.AddCard(thing, pos).Install();
4837 }
4838 }
void MakeRefFrom(string id)
Definition: Card.cs:5386

References EClass._zone, Zone.AddCard(), ThingGen.Create(), ThingContainer.Find(), Card.Install(), Spatial.IsRegion, Card.MakeRefFrom(), EClass.pc, EClass.rnd(), and Card.things.

◆ MakeMinion()

void Chara.MakeMinion ( Chara  _master,
MinionType  type = MinionType::Default 
)
inline

Definition at line 2127 of file Chara.cs.

2128 {
2129 ReleaseMinion();
2130 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2131 this.hostility = hostility2;
2132 base.c_uidMaster = _master.uid;
2133 base.c_minionType = type;
2134 master = _master;
2135 Refresh();
2136 }
int uid
Definition: Card.cs:118

References hostility, master, Refresh(), ReleaseMinion(), and Card.uid.

Referenced by Die(), QuestEscort.OnStart(), ActEffect.ProcAt(), and GoalCombat.Run().

◆ MakePartyMemeber()

void Chara.MakePartyMemeber ( )
inline

Definition at line 2067 of file Chara.cs.

2068 {
2069 _MakeAlly();
2070 EClass.pc.party.AddMemeber(this);
2071 }

References _MakeAlly(), Party.AddMemeber(), party, and EClass.pc.

◆ ModAffinity()

void Chara.ModAffinity ( Chara  c,
int  a,
bool  show = true,
bool  showOnlyEmo = false 
)
inline

Definition at line 7367 of file Chara.cs.

7368 {
7369 if (c == this)
7370 {
7371 return;
7372 }
7373 if (IsPC)
7374 {
7375 c.ModAffinity(EClass.pc, a, show);
7376 return;
7377 }
7378 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
7379 if (IsPCFaction && homeBranch != null)
7380 {
7381 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
7382 }
7383 bool flag = a > 0;
7384 if (flag)
7385 {
7386 a = a * num / 100;
7387 }
7388 if (show)
7389 {
7390 if (a == 0)
7391 {
7392 if (!showOnlyEmo)
7393 {
7394 Say("affinityNone", this, c);
7395 }
7396 }
7397 else
7398 {
7399 ShowEmo((!flag) ? Emo.angry : Emo.love);
7400 c.ShowEmo(flag ? Emo.love : Emo.sad);
7401 if (!showOnlyEmo)
7402 {
7403 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
7404 }
7405 }
7406 }
7407 if (c.IsPC)
7408 {
7409 a = affinity.Mod(a);
7410 }
7411 }
int Mod(int a)
Definition: Affinity.cs:162
Stats hygiene
Definition: Chara.cs:1004
int Evalue(int ele)
static int GetAffinityMod(int phase)
Definition: StatsHygiene.cs:19

References FactionBranch.Evalue(), StatsHygiene.GetAffinityMod(), Stats.GetPhase(), HasCondition(), hygiene, IsPC, Affinity.Mod(), ModAffinity(), EClass.pc, and Card.ShowEmo().

Referenced by Quest.Complete(), Cuddle(), Die(), AI_Fuck.Finish(), GiveGift(), GiveLovePotion(), ActEffect.LoveMiracle(), ModAffinity(), InvOwner.OnClick(), Affinity.OnGift(), Affinity.OnTalkRumor(), DramaOutcome.revive_pet(), AI_Fuck.Run(), AI_Shear.Run(), and AI_Slaughter.Run().

◆ ModCorruption()

void Chara.ModCorruption ( int  a)
inline

Definition at line 9063 of file Chara.cs.

9064 {
9065 if (a > 0)
9066 {
9067 if (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0)
9068 {
9069 return;
9070 }
9071 int num = Evalue(412);
9072 if (num != 0)
9073 {
9074 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
9075 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
9076 }
9077 }
9078 if (a == 0)
9079 {
9080 return;
9081 }
9082 int num3 = (corruption + a) / 100 - corruption / 100;
9083 for (int i = 0; i < Mathf.Abs(num3); i++)
9084 {
9085 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
9086 {
9087 break;
9088 }
9089 }
9090 corruption += a;
9091 int num4 = 0;
9092 foreach (Element value in elements.dict.Values)
9093 {
9094 if (value.source.category == "ether")
9095 {
9096 num4 += value.Value;
9097 }
9098 }
9099 if (num4 > 0 && IsPC)
9100 {
9101 Tutorial.Reserve("ether");
9102 }
9103 corruption = num4 * 100 + corruption % 100;
9104 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9209
int corruption
Definition: Chara.cs:373
static float rndf(float a)
Definition: EClass.cs:87

References Tutorial.Reserve(), EClass.rnd(), EClass.rndf(), Element.source, and Element.Value.

Referenced by CoreDebug.Fix_EtherDisease().

◆ ModHeight()

void Chara.ModHeight ( int  a)
inline

Definition at line 9023 of file Chara.cs.

9024 {
9025 int height = bio.height;
9026 height = height * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9027 if (height < 1)
9028 {
9029 height = 1;
9030 }
9031 if (height != bio.height)
9032 {
9033 bio.height = height;
9034 Say((a > 0) ? "height_gain" : "height_lose", this);
9035 }
9036 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

void Chara.ModTempElement ( int  ele,
int  a,
bool  naturalDecay = false,
bool  onlyRenew = false 
)
inline

Definition at line 9458 of file Chara.cs.

9459 {
9460 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
9461 {
9462 return;
9463 }
9464 bool flag = HasElement(1215);
9465 if (tempElements == null)
9466 {
9468 tempElements.SetParent(this);
9469 }
9470 if (a > 0 && flag)
9471 {
9472 a = a * 150 / 100;
9473 }
9474 int num = elements.ValueWithoutLink(ele);
9475 int num2 = Mathf.Abs(num) + 100;
9476 int num3 = num2 / (flag ? 2 : 4);
9477 int num4 = -num - 100;
9478 int num5 = tempElements.Base(ele);
9479 int num6 = num5 + a;
9480 if (onlyRenew)
9481 {
9482 num3 = Mathf.Min(a, num3);
9483 num4 = Mathf.Max(a, -num2 / 3);
9484 }
9485 if (a > 0 && num6 > num3)
9486 {
9487 a = ((num3 > num5) ? (num3 - num5) : 0);
9488 }
9489 if (a < 0 && num6 < num4)
9490 {
9491 a = ((num4 < num5) ? (num4 - num5) : 0);
9492 }
9493 Element element = tempElements.ModBase(ele, a);
9494 if (element.vBase == 0)
9495 {
9496 tempElements.Remove(element.id);
9497 if (tempElements.dict.Count == 0)
9498 {
9499 tempElements = null;
9500 }
9501 }
9502 }
int ValueWithoutLink(int ele)
void Remove(int id)

References ElementContainer.Base(), ElementContainer.dict, SourceManager.elements, Element.id, ElementContainer.ModBase(), ElementContainer.Remove(), ElementContainer.SetParent(), EClass.sources, and Element.vBase.

◆ ModWeight()

void Chara.ModWeight ( int  a,
bool  ignoreLimit = false 
)
inline

Definition at line 9038 of file Chara.cs.

9039 {
9040 if (a == 0)
9041 {
9042 return;
9043 }
9044 int weight = bio.weight;
9045 int height = bio.height;
9046 int num = height * height * 18 / 25000;
9047 int num2 = height * height * 24 / 10000;
9048 if (ignoreLimit || (weight > num && weight < num2))
9049 {
9050 weight = weight * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9051 if (weight < 1)
9052 {
9053 weight = 1;
9054 }
9055 if (weight != bio.weight)
9056 {
9057 bio.weight = weight;
9058 Say((a > 0) ? "weight_gain" : "weight_lose", this);
9059 }
9060 }
9061 }
int weight
Definition: Biography.cs:41

Referenced by FoodEffect.Proc().

◆ MoveByForce()

void Chara.MoveByForce ( Point  newPoint,
Card  c = null,
bool  checkWall = false 
)
inline

Definition at line 2384 of file Chara.cs.

2385 {
2386 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2387 {
2388 ai.Current.TryCancel(c);
2389 }
2390 }
bool TryCancel(Card c)
Definition: AIAct.cs:266
virtual bool CancelWhenMoved
Definition: AIAct.cs:96
override MoveResult _Move(Point newPoint, MoveType type=MoveType.Walk)
Definition: Chara.cs:2518

References _Move(), ai, AIAct.CancelWhenMoved, CanMoveTo(), AIAct.Current, Card.Dist(), Point.sourceBlock, and AIAct.TryCancel().

Referenced by _Move(), Kick(), and TryPush().

◆ MoveHome() [1/2]

void Chara.MoveHome ( string  id,
int  x = -1,
int  z = -1 
)
inline

Definition at line 3219 of file Chara.cs.

3220 {
3221 MoveHome(EClass.game.world.FindZone(id), x, z);
3222 }
void MoveHome(string id, int x=-1, int z=-1)
Definition: Chara.cs:3219
new World world
Definition: Game.cs:173

References Spatial.FindZone(), EClass.game, and Game.world.

Referenced by OnBanish(), Zone_Nymelle.OnBeforeSimulate(), QuestVernis.OnChangePhase(), QuestDialog.OnDropReward(), and DramaOutcome.QuestExploration_AfterComplete().

◆ MoveHome() [2/2]

void Chara.MoveHome ( Zone  zone,
int  x = -1,
int  z = -1 
)
inline

Definition at line 3224 of file Chara.cs.

3225 {
3226 if (isDead)
3227 {
3228 Revive();
3229 }
3230 else
3231 {
3232 Cure(CureType.Death);
3233 }
3234 CureCondition<ConSuspend>();
3235 if (IsPCParty)
3236 {
3238 }
3239 FactionBranch factionBranch = homeBranch;
3240 if (x == -1)
3241 {
3242 x = 50;
3243 }
3244 if (z == -1)
3245 {
3246 z = 50;
3247 }
3248 Point point = new Point(x, z);
3249 if (zone.IsActiveZone)
3250 {
3251 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3252 }
3253 zone.AddCard(this, point);
3254 SetHomeZone(zone);
3255 global.transition = new ZoneTransition
3256 {
3257 state = ZoneTransition.EnterState.Dead,
3258 x = point.x,
3259 z = point.z
3260 };
3261 orgPos = new Point(x, z);
3262 if (factionBranch != null)
3263 {
3265 factionBranch.policies.Validate();
3266 }
3267 }
void SetHomeZone(Zone zone)
Definition: Chara.cs:1278
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8326
PolicyManager policies
bool IsActiveZone
Definition: Zone.cs:488

References Zone.AddCard(), Point.GetNearestPoint(), Zone.IsActiveZone, party, EClass.pc, FactionBranch.policies, Party.RemoveMember(), Revive, PolicyManager.Validate(), and Point.x.

◆ MoveNeighborDefinitely()

bool Chara.MoveNeighborDefinitely ( )
inline

Definition at line 2366 of file Chara.cs.

2367 {
2368 List<Point> list = new List<Point>();
2369 pos.ForeachNeighbor(delegate(Point p)
2370 {
2371 list.Add(p.Copy());
2372 });
2373 list.Shuffle();
2374 foreach (Point item in list)
2375 {
2376 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2377 {
2378 return true;
2379 }
2380 }
2381 return false;
2382 }
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1377

References Point.Copy(), Point.ForeachNeighbor(), item, Card.pos, and TryMove().

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2352 of file Chara.cs.

2353 {
2354 Point randomNeighbor = pos.GetRandomNeighbor();
2355 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2356 {
2357 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2358 {
2359 return false;
2360 }
2361 return TryMove(randomNeighbor) == MoveResult.Success;
2362 }
2363 return false;
2364 }
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool IsDeepWater
Definition: Point.cs:264

References Point.cell, Point.Equals(), Point.GetRandomNeighbor(), HasAccess(), Point.HasChara, Point.IsDeepWater, Cell.IsTopWaterAndNoSnow, Card.pos, race, source, and TryMove().

Referenced by GoalSleep.Run(), NoGoal.Run(), and GoalCombat.TryMove().

◆ MoveZone() [1/3]

◆ MoveZone() [2/3]

void Chara.MoveZone ( Zone  z,
ZoneTransition  transition 
)
inline

Definition at line 3107 of file Chara.cs.

3108 {
3109 if (z == currentZone)
3110 {
3111 return;
3112 }
3113 if (HasCondition<ConInvulnerable>())
3114 {
3115 RemoveCondition<ConInvulnerable>();
3116 }
3117 if (IsPC)
3118 {
3119 EClass.player.nextZone = z;
3121 {
3124 {
3125 if (EClass.player.returnInfo != null)
3126 {
3127 EClass.player.returnInfo.turns += 5;
3128 }
3130 {
3131 EClass.game.Save(isAutoSave: true);
3132 }
3133 }
3134 EClass.player.deathZoneMove = false;
3135 }
3137 if (currentZone.instance != null)
3138 {
3140 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3141 transition = new ZoneTransition
3142 {
3143 state = instance.ReturnState,
3144 x = instance.x,
3145 z = instance.z
3146 };
3147 instance.OnLeaveZone();
3148 Debug.Log(z);
3149 }
3150 EInput.Consume(consumeAxis: true);
3151 EClass.player.uidLastZone = currentZone.uid;
3153 {
3155 {
3156 Msg.Say("enterZone", z.Name);
3157 }
3158 else
3159 {
3160 if (z.IsRegion)
3161 {
3162 Msg.Say("leaveZone", currentZone.Name);
3163 }
3164 else if (z.id != currentZone.id)
3165 {
3166 Msg.Say("enterZone", z.Name);
3167 }
3168 EClass.player.lastZonePos = pos.Copy();
3169 }
3170 EClass.player.lastTransition = transition;
3171 }
3172 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3173 {
3175 }
3176 EClass.player.listSummon = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3177 foreach (Chara item2 in EClass.player.listSummon)
3178 {
3179 EClass._zone.RemoveCard(item2);
3180 }
3181 }
3182 if (party != null && party.leader == this)
3183 {
3184 foreach (Chara member in party.members)
3185 {
3186 if (member != this && !member.isDead && member.parent is Zone)
3187 {
3188 member.MoveZone(z);
3189 }
3190 }
3191 }
3192 if (global == null)
3193 {
3194 Debug.Log(base.Name);
3195 return;
3196 }
3197 transition.uidLastZone = currentZone?.uid ?? 0;
3198 global.transition = transition;
3199 if (z.IsActiveZone)
3200 {
3201 Point spawnPos = z.GetSpawnPos(this);
3202 global.transition = null;
3203 if (IsPC)
3204 {
3205 EClass.player.lastTransition = null;
3206 }
3207 z.AddCard(this, spawnPos);
3208 if (IsBranchMember())
3209 {
3211 }
3212 }
3213 else
3214 {
3215 z.AddCard(this);
3216 }
3217 }
MinionType c_minionType
Definition: Card.cs:960
bool IsBranchMember()
Definition: Chara.cs:6090
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2161
bool ignoreAutoSave
Definition: CoreDebug.cs:125
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:973
RoomManager rooms
Definition: Map.cs:31
Chara leader
Definition: Party.cs:30
bool deathZoneMove
Definition: Player.cs:1089
List< Chara > listSummon
Definition: Player.cs:1141
ReturnInfo returnInfo
Definition: Player.cs:789
bool simulatingZone
Definition: Player.cs:1099
void AssignCharas()
Definition: RoomManager.cs:39
int uid
Definition: Spatial.cs:70
string id
Definition: Spatial.cs:13
virtual ZoneTransition.EnterState ReturnState
Definition: ZoneInstance.cs:26
virtual void OnLeaveZone()
Definition: ZoneInstance.cs:36
virtual bool WillAutoSave
Definition: Zone.cs:258
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
Definition: Zone.cs:1299

References EClass._map, EClass._zone, Zone.AddCard(), RoomManager.AssignCharas(), Card.c_minionType, Card.c_uidMaster, Map.charas, EInput.Consume(), Player.deathZoneMove, EClass.debug, Debug, SpatialManager.Find(), FindMaster(), EClass.game, Zone.GetSpawnPos(), Zone.GetTopZone(), homeZone, Spatial.id, CoreDebug.ignoreAutoSave, Zone.instance, Zone.IsActiveZone, isDead, Zone.IsPCFaction, IsPCPartyMinion, Spatial.IsRegion, item, Party.leader, Player.listSummon, master, Party.members, MoveZone(), Spatial.Name, ZoneInstance.OnLeaveZone(), Card.parent, EClass.pc, EClass.player, Zone.RemoveCard(), Player.returnInfo, ZoneInstance.ReturnState, Map.rooms, Game.Save(), Msg.Say(), Player.simulatingZone, Game.spatials, ZoneInstance.uidZone, Zone.WillAutoSave, and ZoneInstance.x.

◆ MoveZone() [3/3]

void Chara.MoveZone ( Zone  z,
ZoneTransition::EnterState  state = ZoneTransition::EnterState::Auto 
)
inline

Definition at line 3099 of file Chara.cs.

3100 {
3102 {
3103 state = state
3104 });
3105 }

◆ MutateRandom()

bool Chara.MutateRandom ( int  vec = 0,
int  tries = 100,
bool  ether = false,
BlessedState  state = BlessedState::Normal 
)
inline

Definition at line 9209 of file Chara.cs.

9210 {
9211 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
9212 {
9213 Say("resistMutation", this);
9214 return false;
9215 }
9216 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
9217 for (int i = 0; i < tries; i++)
9218 {
9219 SourceElement.Row row = ie.RandomItem();
9220 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
9221 {
9222 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
9223 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
9224 if (base.c_corruptionHistory.Count == 0)
9225 {
9226 base.c_corruptionHistory = null;
9227 }
9228 }
9229 Element element = elements.GetElement(row.id);
9230 int num = 1;
9231 if ((vec > 0 && ((row.id == 1563 && corruption < 300) || (row.id == 1562 && corruption < 1000 && base.IsPowerful))) || (vec < 0 && (element == null || element.Value <= 0)) || (vec > 0 && element != null && element.Value >= row.max))
9232 {
9233 continue;
9234 }
9235 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
9236 {
9237 row = EClass.sources.elements.alias[row.aliasParent];
9238 element = elements.GetElement(row.id);
9239 }
9240 bool flag = row.tag.Contains("neg");
9241 if (vec > 0)
9242 {
9243 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
9244 {
9245 continue;
9246 }
9247 }
9248 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
9249 {
9250 continue;
9251 }
9252 bool flag2 = true;
9253 if (element != null)
9254 {
9255 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
9256 if (num > element.source.max)
9257 {
9258 num = element.source.max - 1;
9259 }
9260 flag = (flag && num > element.Value) || (!flag && num < element.Value);
9261 flag2 = num > element.Value;
9262 if (vec > 0 && !flag2)
9263 {
9264 continue;
9265 }
9266 }
9267 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
9268 SetFeat(row.id, num);
9269 if (flag2 && ether)
9270 {
9271 if (base.c_corruptionHistory == null)
9272 {
9273 base.c_corruptionHistory = new List<int>();
9274 }
9275 base.c_corruptionHistory.Add(row.id);
9276 if (IsPCFaction)
9277 {
9278 Element element2 = elements.GetElement(row.id);
9279 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
9280 }
9282 {
9283 EClass.player.flags.gotEtherDisease = true;
9284 Thing thing = ThingGen.Create("parchment");
9285 thing.SetStr(53, "letter_ether");
9286 Thing thing2 = ThingGen.Create("1165");
9287 thing2.SetBlessedState(BlessedState.Normal);
9288 Thing p = ThingGen.CreateParcel(null, thing2, thing);
9290 }
9291 }
9292 if (EClass.core.IsGameStarted && pos != null)
9293 {
9294 PlaySound(ether ? "mutation_ether" : "mutation");
9295 PlayEffect("mutation");
9297 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9298 }
9299 return true;
9300 }
9301 Say("nothingHappens");
9302 return false;
9303 }
void SetStr(int id, string value=null)
Definition: BaseCard.cs:63
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3740
bool IsGameStarted
Definition: Core.cs:84
bool Has(int ele)
Color MutateBad
Definition: MsgColors.cs:21
Color MutateGood
Definition: MsgColors.cs:19
bool gotEtherDisease
Definition: Player.cs:458
static Thing CreateParcel(string idLang=null, params Thing[] things)
Definition: ThingGen.cs:42
void SendPackage(Thing p)
Definition: World.cs:68

References SourceElement.Row.alias, SourceElement.Row.aliasParent, Msg.colors, EClass.core, ThingGen.Create(), ThingGen.CreateParcel(), SourceManager.elements, Player.flags, Player.Flags.gotEtherDisease, SourceElement.Row.id, Core.IsGameStarted, SourceElement.Row.max, MsgColors.MutateBad, MsgColors.MutateGood, Element.Name, EClass.player, EClass.rnd(), WidgetPopText.Say(), World.SendPackage(), Card.SetBlessedState(), Msg.SetColor(), BaseCard.SetStr(), Element.source, EClass.sources, SourceElement.Row.tag, Element.Value, and EClass.world.

◆ OnAdvanceDay()

void Chara.OnAdvanceDay ( )
inline

Definition at line 9351 of file Chara.cs.

9352 {
9353 if (_historyFood != null)
9354 {
9355 while (_historyFood.Count > 5)
9356 {
9357 _historyFood.RemoveAt(_historyFood.Count - 1);
9358 }
9359 if (_historyFood[0].Count > 0)
9360 {
9361 _historyFood.Insert(0, new List<string>());
9362 }
9363 }
9364 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1284 of file Chara.cs.

1285 {
1286 if (!IsGlobal)
1287 {
1288 return;
1289 }
1290 memberType = FactionMemberType.Default;
1291 foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)).ToList())
1292 {
1294 }
1295 UniqueData uniqueData = base.c_uniqueData;
1296 if (uniqueData != null)
1297 {
1298 Debug.Log(uniqueData.uidZone + "/" + EClass.game.spatials.map.ContainsKey(uniqueData.uidZone) + "/" + uniqueData.x + "/" + uniqueData.y);
1299 }
1300 if (uniqueData != null && EClass.game.spatials.map.ContainsKey(uniqueData.uidZone))
1301 {
1302 MoveHome(EClass.game.spatials.map[uniqueData.uidZone] as Zone, uniqueData.x, uniqueData.y);
1303 return;
1304 }
1305 Zone z = EClass.game.spatials.Find("somewhere");
1306 if (trait is TraitAdventurer)
1307 {
1308 z = EClass.world.region.ListTowns().RandomItem();
1309 SetHomeZone(z);
1310 }
1311 MoveZone(z, ZoneTransition.EnterState.RandomVisit);
1312 }
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
Definition: Chara.cs:3997
List< Zone > ListTowns()
Definition: Region.cs:252
GlobalSpatialList map
int uidZone
Definition: UniqueData.cs:12

References Debug, SpatialManager.Find(), EClass.game, Card.HasTag(), IsGlobal, item, ThingContainer.List(), Region.ListTowns(), SpatialManager.map, memberType, MoveHome(), MoveZone(), EClass.pc, PickOrDrop(), Card.pos, World.region, SetHomeZone(), Game.spatials, Card.things, trait, UniqueData.uidZone, EClass.world, UniqueData.x, and UniqueData.y.

Referenced by FactionBranch.BanishMember().

◆ OnBeforeCreate()

override void Chara.OnBeforeCreate ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1351 of file Chara.cs.

1352 {
1353 if (source.job == "*r")
1354 {
1355 base.c_idJob = EClass.sources.jobs.rows.Where((SourceJob.Row j) => j.playable < 4).RandomItem().id;
1356 }
1357 if (bp.idJob != null)
1358 {
1359 base.c_idJob = bp.idJob;
1360 }
1361 if (bp.idRace != null)
1362 {
1363 base.c_idRace = bp.idRace;
1364 }
1365 }
CardBlueprint bp
Definition: Card.cs:73
SourceJob jobs

References Card.bp, CardBlueprint.idJob, CardBlueprint.idRace, SourceManager.jobs, source, and EClass.sources.

◆ OnCreate()

override void Chara.OnCreate ( int  genLv)
inlinevirtual

Reimplemented from Card.

Definition at line 1367 of file Chara.cs.

1368 {
1369 if (source.tag.Contains("boss"))
1370 {
1371 bossText = true;
1372 }
1373 int num = ((bp.lv != -999) ? bp.lv : base.LV);
1374 if (trait.AdvType == TraitChara.Adv_Type.Adv || trait.AdvType == TraitChara.Adv_Type.Adv_Fairy)
1375 {
1376 if (ListAdvRace.Count == 0)
1377 {
1378 ListAdvRace = EClass.sources.races.rows.Where((SourceRace.Row a) => a.playable <= 1 && a.id != "fairy").ToList();
1379 ListAdvJob = EClass.sources.jobs.rows.Where((SourceJob.Row a) => a.playable <= 4).ToList();
1380 }
1381 if (trait.AdvType == TraitChara.Adv_Type.Adv)
1382 {
1383 base.c_idRace = ListAdvRace.RandomItem().id;
1384 }
1385 base.c_idJob = ListAdvJob.RandomItem().id;
1386 _race = null;
1387 _job = null;
1388 num = 10 + EClass.rnd(40);
1389 ChangeMaterial(race.material, ignoreFixedMaterial: true);
1390 }
1391 bio = new Biography();
1392 bio.Generate(this);
1393 if (source.idActor.Length != 0 && source.idActor[0] == "pcc" && pccData == null)
1394 {
1395 pccData = PCCData.Create(IDPCCBodySet);
1396 if (source.idActor.Length > 2)
1397 {
1398 pccData.SetPart("body", IDPCCBodySet, source.idActor[2]);
1399 }
1400 else
1401 {
1402 pccData.Randomize(IDPCCBodySet);
1403 }
1404 }
1405 if (source.mainElement.Length != 0)
1406 {
1407 int _genLv = Mathf.Min(genLv, 100);
1408 List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>();
1409 string[] mainElement = source.mainElement;
1410 for (int i = 0; i < mainElement.Length; i++)
1411 {
1412 string[] array = mainElement[i].Split('/');
1413 SourceElement.Row row = EClass.sources.elements.alias["ele" + array[0]];
1414 int num2 = source.LV * row.eleP / 100;
1415 if (list.Count == 0 || num2 < _genLv || array[0] == bp.idEle)
1416 {
1417 list.Add(new Tuple<string, int, int>(array[0], (array.Length > 1) ? int.Parse(array[1]) : 0, num2));
1418 }
1419 }
1420 Tuple<string, int, int> tuple = list.RandomItemWeighted((Tuple<string, int, int> a) => 10000 / (100 + (_genLv - a.Item3) * 25));
1421 if (!bp.idEle.IsEmpty())
1422 {
1423 tuple = list.Where((Tuple<string, int, int> a) => a.Item1 == bp.idEle).FirstOrDefault() ?? tuple;
1424 }
1425 SetMainElement(tuple.Item1, (tuple.Item2 == 0) ? 10 : tuple.Item2, elemental: true);
1426 if (list.Count >= 2)
1427 {
1428 num = tuple.Item3 + base.LV - source.LV;
1429 }
1430 }
1431 if (source.name == "*r")
1432 {
1433 base.c_altName = NameGen.getRandomName();
1434 }
1435 if (source.GetText("aka") == "*r" || trait.UseRandomAlias)
1436 {
1437 _alias = AliasGen.GetRandomAlias();
1438 }
1439 happiness = EClass.rnd(100);
1440 contribution = EClass.rnd(100);
1441 RerollHobby();
1442 _idTimeTable = ((EClass.rnd(5) == 0) ? 1 : 0);
1443 ApplyRace();
1444 ApplyJob();
1445 if (num != source.LV)
1446 {
1447 SetLv(num);
1448 }
1449 if (base.LV > 5 && race.id == "mutant")
1450 {
1451 for (int j = 0; j < Mathf.Min(1 + base.LV / 5, 22); j++)
1452 {
1453 SetFeat(1644, j + 1);
1454 }
1455 }
1456 InitStats();
1457 body.SetOwner(this);
1459 if (race.EQ.Length != 0 || !source.equip.IsEmpty())
1460 {
1461 TryRestock(onCreate: true);
1462 }
1463 switch (id)
1464 {
1465 case "golem_wood":
1466 ChangeMaterial("pine");
1467 break;
1468 case "golem_steel":
1469 ChangeMaterial("steel");
1470 break;
1471 case "golem_gold":
1472 ChangeMaterial("gold");
1473 break;
1474 case "dodo":
1475 base.idSkin = EClass.rnd(4);
1476 break;
1477 case "putty_snow":
1478 if (EClass.rnd(100) == 0 || EClass.debug.enable)
1479 {
1480 base.idSkin = EClass.rnd(4);
1481 }
1482 break;
1483 case "snail":
1484 base.idSkin = 5;
1485 break;
1486 case "olderyoungersister":
1487 base.idSkin = 1;
1488 break;
1489 case "sister_undead":
1490 case "dog":
1491 case "cat":
1492 base.idSkin = EClass.rnd(sourceCard.tiles.Length);
1493 if (id == "sister_undead" && EClass.rnd(10) == 0)
1494 {
1496 if (row2 != null && (!EClass.player.doneBackers.Contains(row2.id) || EClass.core.config.test.ignoreBackerDestoryFlag))
1497 {
1498 ApplyBacker(row2.id);
1499 }
1500 }
1501 break;
1502 case "baby":
1503 case "ika":
1504 SetFeat(1232, 3);
1505 break;
1506 }
1507 if (HasTag(CTAG.random_color))
1508 {
1509 DyeRandom();
1510 }
1511 SetAI(new NoGoal());
1512 if (!source.faith.IsEmpty())
1513 {
1514 SetFaith(source.faith);
1515 }
1516 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown")
1517 {
1519 }
1520 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown_nefu")
1521 {
1523 }
1524 else
1525 {
1526 SetFaith(EClass.game.religions.GetRandomReligion(onlyJoinable: true, EClass.rnd(10) == 0));
1527 }
1528 _affinity = 0;
1529 interest = 100;
1532 Refresh();
1533 stamina.value = stamina.max;
1534 mana.value = mana.max;
1535 isCreated = true;
1536 }
static int indexSister
void Generate(Chara c)
Definition: Biography.cs:308
void ClampInitialSkill()
Definition: Card.cs:2858
void DyeRandom()
Definition: Card.cs:5627
void ApplyBacker(int bid)
Definition: Card.cs:6599
void SetOwner(Chara chara, bool deserialized=false)
Definition: CharaBody.cs:18
string IDPCCBodySet
Definition: Chara.cs:487
int _affinity
Definition: Chara.cs:299
void SetMainElement(string id, int v=0, bool elemental=false)
Definition: Chara.cs:1872
int happiness
Definition: Chara.cs:108
int contribution
Definition: Chara.cs:18
void CalculateMaxStamina()
Definition: Chara.cs:1804
bool isCreated
Definition: Chara.cs:136
int _idTimeTable
Definition: Chara.cs:337
void TryRestock(bool onCreate)
Definition: Chara.cs:4392
static List< SourceRace.Row > ListAdvRace
Definition: Chara.cs:162
void InitStats(bool onDeserialize=false)
Definition: Chara.cs:8543
bool bossText
Definition: Chara.cs:144
static List< SourceJob.Row > ListAdvJob
Definition: Chara.cs:164
bool ignoreBackerDestoryFlag
Definition: CoreConfig.cs:553
ReligionTrickery Trickery
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
int[] tiles
Definition: RenderRow.cs:10
List< Row > listSister
Definition: SourceBacker.cs:79
SourceRace races
virtual Adv_Type AdvType
Definition: TraitChara.cs:99
virtual bool UseRandomAlias
Definition: TraitChara.cs:129

References _affinity, _alias, _idTimeTable, _job, _race, Game.activeZone, TraitChara.AdvType, Card.ApplyBacker(), ApplyJob(), ApplyRace(), SourceManager.backers, Card.bio, body, bossText, Card.bp, CalculateMaxStamina(), ChangeMaterial, Card.ClampInitialSkill(), Core.config, contribution, EClass.core, EClass.debug, Player.doneBackers, Card.DyeRandom(), SourceManager.elements, CoreDebug.enable, EClass.game, Biography.Generate(), ReligionManager.GetRandomReligion(), happiness, Card.HasTag(), hostility, SourceBacker.Row.id, Spatial.id, CardBlueprint.idEle, IDPCCBodySet, CoreConfig.Test.ignoreBackerDestoryFlag, BackerContent.indexSister, InitStats(), interest, isCreated, SourceManager.jobs, ListAdvJob, ListAdvRace, SourceBacker.listSister, CardBlueprint.lv, mana, Stats.max, ReligionManager.MoonShadow, OriginalHostility, pccData, EClass.player, race, SourceManager.races, Refresh(), Game.religions, RerollHobby(), EClass.rnd(), SetAI(), SetFaith(), SetFeat(), Card.SetLv(), SetMainElement(), CharaBody.SetOwner(), source, sourceCard, EClass.sources, stamina, CoreConfig.test, RenderRow.tiles, trait, ReligionManager.Trickery, TryRestock(), and TraitChara.UseRandomAlias.

◆ OnDeserialized()

override void Chara.OnDeserialized ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1179 of file Chara.cs.

1180 {
1181 isCreated = true;
1182 _cbits1.Bits = (uint)_cints[0];
1183 InitStats(onDeserialize: true);
1184 body.SetOwner(this, deserialized: true);
1185 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV);
1186 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV);
1187 if (global != null && global.goal != null)
1188 {
1189 global.goal.SetOwner(this);
1190 }
1191 if (IsPCC)
1192 {
1193 pccData.state = (base.isCensored ? PCCState.Naked : PCCState.Normal);
1194 }
1195 if (tempElements != null)
1196 {
1197 tempElements.SetParent(this);
1198 }
1199 UpdateAngle();
1201 Refresh();
1202 if (source.tag.Contains("boss"))
1203 {
1204 bossText = true;
1205 }
1206 sharedCheckTurn = EClass.rnd(200);
1207 }
int sharedCheckTurn
Definition: Chara.cs:118
void UpdateAngle()
Definition: Chara.cs:3350
GlobalGoal goal
Definition: GlobalData.cs:9
void SetOwner(Chara c)
Definition: GlobalGoal.cs:10

References _cints, ElementContainer.ApplyElementMap(), body, bossText, Card.elements, global, GlobalData.goal, InitStats(), isCreated, IsPCC, job, race, Refresh(), RefreshFaithElement(), EClass.rnd(), GlobalGoal.SetOwner(), CharaBody.SetOwner(), ElementContainer.SetParent(), sharedCheckTurn, source, tempElements, and UpdateAngle().

◆ OnGiveErohon()

void Chara.OnGiveErohon ( Thing  t)
inline

Definition at line 7757 of file Chara.cs.

7758 {
7759 Say("give_erohon", this);
7760 AddCondition<ConParalyze>(50, force: true);
7761 AddCondition<ConConfuse>(50, force: true);
7762 AddCondition<ConFear>(1000, force: true);
7763 ModAffinity(EClass.pc, 100);
7764 t.Destroy();
7765 Talk("pervert");
7766 }

References Card.Destroy(), and EClass.pc.

Referenced by GiveGift(), and ActThrow.Throw().

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 7563 of file Chara.cs.

7564 {
7565 if (!isDead)
7566 {
7567 if (HasElement(1231))
7568 {
7569 Talk("insulted");
7570 AddCondition<ConEuphoric>(100 * Evalue(1231));
7571 }
7572 else if (EClass.rnd(20) == 0)
7573 {
7574 SetFeat(1231, 1, msg: true);
7575 }
7576 }
7577 }

References EClass.rnd().

Referenced by DramaManager.ParseLine(), and AI_Idle.Run().

◆ OnSerializing()

override void Chara.OnSerializing ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1164 of file Chara.cs.

1165 {
1166 if (enemy != null)
1167 {
1168 SetInt(55, enemy.uid);
1169 }
1170 _cints[0] = (int)_cbits1.Bits;
1171 List<BodySlot> slots = body.slots;
1172 rawSlots = new int[slots.Count];
1173 for (int i = 0; i < slots.Count; i++)
1174 {
1175 rawSlots[i] = slots[i].elementId;
1176 }
1177 }
List< BodySlot > slots
Definition: CharaBody.cs:8
int[] rawSlots
Definition: Chara.cs:73
BitArray32 _cbits1
Definition: Chara.cs:84
uint Bits
Definition: BitArray32.cs:6

References _cbits1, _cints, BitArray32.Bits, body, enemy, rawSlots, BaseCard.SetInt(), CharaBody.slots, and Card.uid.

◆ OnSleep() [1/2]

void Chara.OnSleep ( int  power,
int  days = 1 
)
inline

Definition at line 8997 of file Chara.cs.

8998 {
8999 if (days < 1)
9000 {
9001 days = 1;
9002 }
9003 int num = power * days;
9004 if (stamina.value < 0)
9005 {
9006 stamina.Set(1);
9007 }
9008 HealHP(num);
9009 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9010 mana.Mod(num);
9011 if (IsPCFaction)
9012 {
9013 hunger.Mod(20);
9014 }
9015 sleepiness.Set(0);
9016 if (!IsMinion)
9017 {
9018 interest = 100;
9019 }
9020 Cure(CureType.Sleep, power);
9021 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3848
int GetFeatRef(int ele, int idx=0)

References Stats.Mod(), Stats.Set(), and Stats.value.

◆ OnSleep() [2/2]

void Chara.OnSleep ( Thing  bed = null,
int  days = 1 
)
inline

Definition at line 8982 of file Chara.cs.

8983 {
8984 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
8985 int num = bed?.Power ?? 20;
8986 if (traitPillow != null)
8987 {
8988 num += traitPillow.owner.Power / 2;
8989 }
8990 if (bed != null)
8991 {
8992 num += bed.Evalue(750) * 5;
8993 }
8994 OnSleep(num, days);
8995 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:8982
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1120

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 1971 of file Chara.cs.

1972 {
1973 return s switch
1974 {
1975 "é ­" => 30,
1976 "首" => 31,
1977 "体" => 32,
1978 "背" => 33,
1979 "手" => 35,
1980 "指" => 36,
1981 "è…•" => 34,
1982 "è…°" => 37,
1983 "è¶³" => 39,
1984 _ => -1,
1985 };
1986 }

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

void Chara.PerformWork ( WorkSession  session,
bool  isHobby = false,
bool  IsRealTime = false 
)
inline

Definition at line 8501 of file Chara.cs.

8502 {
8503 Hobby hobby = new Hobby();
8504 hobby.id = session.id;
8505 WorkSummary workSummary = _workSummary;
8506 hobby.GetAI(this).OnPerformWork(IsRealTime);
8507 if (!isHobby)
8508 {
8509 workSummary.progress += EClass.rnd(5) + 5;
8510 }
8511 int num = PerformWork(hobby, 0, isHobby);
8512 int num2 = PerformWork(hobby, 1, isHobby);
8513 int num3 = PerformWork(hobby, 2, isHobby);
8514 int num4 = PerformWork(hobby, 3, isHobby);
8515 workSummary.money += num;
8516 workSummary.food += num2;
8517 workSummary.knowledge += num3;
8518 workSummary.material += num4;
8519 int PerformWork(Hobby work, int idx, bool isHobby)
8520 {
8521 if (idx >= work.source.resources.Length)
8522 {
8523 return 0;
8524 }
8525 int num5 = work.source.resources[idx];
8526 int num6 = num5;
8527 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
8528 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
8529 if (num6 > 0 && num5 <= 0)
8530 {
8531 num5 = 1;
8532 }
8533 return num5;
8534 }
8535 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:145
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:8501
AIWork GetAI(Chara c)
Definition: Hobby.cs:11
static int Range(int min, int max)
Definition: Rand.cs:42
int efficiency
Definition: WorkSession.cs:28

References WorkSession.efficiency, Hobby.GetAI(), WorkSession.id, if(), AIWork.OnPerformWork(), Rand.Range(), EClass.rnd(), and Hobby.source.

◆ Pick()

Thing Chara.Pick ( Thing  t,
bool  msg = true,
bool  tryStack = true 
)
inline

Definition at line 4017 of file Chara.cs.

4018 {
4019 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4020 {
4022 return t;
4023 }
4024 if (t.parent == this)
4025 {
4026 return t;
4027 }
4028 t = TryPoisonPotion(t);
4029 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4030 if (!dest.IsValid)
4031 {
4032 if (t.parent != EClass._zone)
4033 {
4034 if (IsPC)
4035 {
4036 Say("backpack_full_drop", t);
4037 SE.Drop();
4038 }
4039 return EClass._zone.AddCard(t, pos).Thing;
4040 }
4041 if (IsPC)
4042 {
4043 Say("backpack_full", t);
4044 }
4045 return t;
4046 }
4047 if (dest.stack != null)
4048 {
4049 if (msg)
4050 {
4051 PlaySound("pick_thing");
4052 Say("pick_thing", this, t);
4053 }
4054 t.TryStackTo(dest.stack);
4055 return dest.stack;
4056 }
4057 TryAbsorbRod(t);
4058 if (msg)
4059 {
4060 PlaySound("pick_thing");
4061 Say("pick_thing", this, t);
4062 }
4064 return dest.container.AddThing(t, tryStack);
4065 }
bool isNew
Definition: Card.cs:466
bool TryStackTo(Thing to)
Definition: Card.cs:3258
string c_idRefCard
Definition: Card.cs:1697
void TryReservePickupTutorial(Thing t)
Definition: Chara.cs:4111
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4067
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4081
static void Collect(Thing t)
bool autoCollectCard
Definition: Game.cs:51
DestData GetDest(Thing t, bool tryStack=true)

References EClass._zone, Zone.AddCard(), Card.AddThing(), Game.Config.autoCollectCard, Card.c_idRefCard, ContentCodex.Collect(), Game.config, ThingContainer.DestData.container, EClass.game, Card.isNew, ThingContainer.DestData.IsValid, Card.parent, ThingContainer.DestData.stack, Card.Thing, Card.trait, and Card.TryStackTo().

Referenced by InvOwnerRecycle._OnProcess(), TraitGodStatue._OnUse(), ActPlan._Update(), TraitDrink.BlendLove(), TraitDrink.BlendPoison(), TraitCrafter.Craft(), QuestDeliver.Deliver(), FactionBranch.GetDailyIncome(), FortuneRollData.GetPrize(), TraitDrink.OnBlend(), InvOwner.OnClick(), ContentCodex.OnClickGetCard(), AI_UseCrafter.OnEnd(), AI_Fish.ProgressFish.OnProgressComplete(), ConSleep.OnRemoved(), AM_Blueprint.OnSave(), InvOwner.OnShiftClick(), QuestDebt.OnStart(), QuestDeliver.OnStart(), TraitGiftJure.OnUse(), TraitGiftNewYear.OnUse(), TraitGiftPack.OnUse(), TraitParcel.OnUse(), TraitPlamoBox.OnUse(), TraitPotionEmpty.OnUse(), InvOwnerDeliver.PayBill(), ActDreamBug.Perform(), ActPick.Perform(), GrowSystem.PopHarvest(), ActEffect.Proc(), InvOwner.Transaction.Process(), Map.PutAway(), InvOwner.PutBack(), CoreDebug.Reset_LoytelDebt(), AI_Equip.Run(), AI_Idle.Run(), AI_OpenGambleChest.Run(), AI_Shear.Run(), AI_Steal.Run(), AI_UseCrafter.Run(), TaskCullLife.Run(), GameDate.ShipGoods(), ActThrow.Throw(), Recipe.TryGetFirstTimeBonus(), ActRanged.TryReload(), Map.TryShatter(), UIDragGridIngredients.Update(), and CoreDebug.UpdateInput().

◆ PickHeld()

void Chara.PickHeld ( bool  msg = false)
inline

Definition at line 4233 of file Chara.cs.

4234 {
4235 if (held == null)
4236 {
4237 return;
4238 }
4239 Card card = held;
4240 if (IsPC && held.invY == 1)
4241 {
4242 WidgetHotbar.dirtyCurrentItem = true;
4244 held = null;
4245 return;
4246 }
4247 if (held.isChara)
4248 {
4249 DropHeld();
4250 return;
4251 }
4253 {
4254 Say("canOnlyCarry", held);
4255 DropHeld();
4256 return;
4257 }
4258 bool flag = held != things.TryStack(held.Thing);
4259 if (!flag && things.IsOverflowing())
4260 {
4261 if (IsPC)
4262 {
4263 Say("backpack_full_drop", held);
4264 SE.Drop();
4265 }
4266 DropHeld();
4267 return;
4268 }
4269 if (msg)
4270 {
4271 PlaySound("pick_thing");
4272 Say("pick_held", this, card);
4273 if (IsPC && card.id == "statue_weird")
4274 {
4275 Say("statue_pick");
4276 }
4277 }
4278 if (IsPC)
4279 {
4280 WidgetHotbar.dirtyCurrentItem = true;
4281 if (!flag)
4282 {
4284 if (held.GetRootCard() != EClass.pc)
4285 {
4286 Pick(held.Thing, msg: false);
4287 }
4288 }
4289 }
4290 held = null;
4291 }
int invY
Definition: Card.cs:1891
bool IsHotItem
Definition: Card.cs:115
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4310
Thing TryStack(Thing target, int destInvX=-1, int destInvY=-1)

References Trait.CanOnlyCarry, card, Card.GetRootCard(), Card.invY, Card.isChara, Card.IsHotItem, EClass.pc, Pick, LayerInventory.SetDirty(), Card.Thing, Card.trait, and Card.TryStack().

Referenced by ActPlan._Update(), AIAct.Cancel(), HotItemHeld.OnUnselect(), Player.ResetCurrentHotItem(), AI_Idle.Run(), Player.SetCurrentHotItem(), AIAct.Start(), and InvOwner.TryHold().

◆ PickOrDrop() [1/2]

void Chara.PickOrDrop ( Point  p,
string  idThing,
int  idMat = -1,
int  num = 1,
bool  msg = true 
)
inline

Definition at line 3997 of file Chara.cs.

3998 {
3999 if (num != 0)
4000 {
4001 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4002 }
4003 }

References ThingGen.Create(), and Card.SetNum().

Referenced by Map.MineObj(), OnBanish(), ConSuspend.OnRemoved(), TraitMannequin.OnUse(), FoodEffect.Proc(), TraitCanvas.TrySetAct(), and Map.TrySmoothPick().

◆ PickOrDrop() [2/2]

void Chara.PickOrDrop ( Point  p,
Thing  t,
bool  msg = true 
)
inline

Definition at line 4005 of file Chara.cs.

4006 {
4007 if (things.GetDest(t).IsValid)
4008 {
4009 Pick(t, msg);
4010 }
4011 else
4012 {
4013 EClass._zone.AddCard(t, p);
4014 }
4015 }

References EClass._zone, Zone.AddCard(), and Pick.

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1558 of file Chara.cs.

1559 {
1560 if (ride != null)
1561 {
1562 ride.Refresh(calledRecursive: true);
1563 }
1564 hasTelepathy = false;
1565 isWet = false;
1566 _isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
1568 base.isHidden = HasElement(415);
1569 foreach (Condition condition in conditions)
1570 {
1571 condition.OnRefresh();
1572 }
1573 if (isWet)
1574 {
1575 base.isHidden = false;
1576 }
1577 SetDirtySpeed();
1578 if (host != null && !calledRecursive)
1579 {
1580 host.Refresh(calledRecursive: true);
1581 }
1582 }
virtual void OnRefresh()
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1558
bool isWet
Definition: Chara.cs:142

References _isLevitating, canSeeInvisible, conditions, Card.HasElement(), hasTelepathy, host, isWet, BaseCondition.OnRefresh(), Refresh(), ride, and SetDirtySpeed().

Referenced by ElementContainerFaction.CheckDirty(), CharaBody.Equip(), Condition.Kill(), Game.OnLoad(), Player.OnLoad(), Player.OnStartNewGame(), Refresh(), CharaGenes.Remove(), ActRide.Ride(), CharaBody.Unequip(), and ActRide.Unride().

◆ RefreshFaithElement()

void Chara.RefreshFaithElement ( )
inline

Definition at line 9415 of file Chara.cs.

9416 {
9417 if (faithElements != null)
9418 {
9420 }
9422 if (idFaith == "eyth" && !HasElement(1228))
9423 {
9424 return;
9425 }
9426 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
9427 if (row == null)
9428 {
9429 return;
9430 }
9432 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
9433 if (row2 != null)
9434 {
9435 faithElements.SetBase(row2.id, 1);
9436 }
9437 if (!HasCondition<ConExcommunication>())
9438 {
9439 int[] array = row.elements;
9440 int num = GetPietyValue() * (120 + Evalue(1407) * 15) / 100;
9441 for (int i = 0; i < array.Length; i += 2)
9442 {
9443 int num2 = array[i + 1] * num / 50;
9444 if (array[i] == 79)
9445 {
9446 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
9447 }
9448 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
9449 {
9450 num2 = 20;
9451 }
9452 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
9453 }
9454 }
9456 }
string idFaith
Definition: Chara.cs:227
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:9406
Element SetBase(string alias, int v, int potential=0)
SourceReligion religions

References EClass.curve(), SourceManager.elements, SourceReligion.Row.elements, SourceElement.Row.id, SourceReligion.Row.id, SourceManager.religions, ElementContainer.SetBase(), ElementContainer.SetParent(), and EClass.sources.

Referenced by TraitAltar._OnOffer(), Religion.JoinFaith(), Religion.LeaveFaith(), Player.OnAdvanceDay(), Skill.OnChangeValue(), Player.OnCreateGame(), OnDeserialized(), ConExcommunication.OnRefresh(), ConExcommunication.OnRemoved(), and SetFaith().

◆ RefreshSpeed()

void Chara.RefreshSpeed ( Element::BonusInfo  info = null)
inline

Definition at line 1668 of file Chara.cs.

1669 {
1670 if (ride != null && !ride.IsDeadOrSleeping)
1671 {
1673 _Speed = ride._Speed;
1674 }
1675 else if (host != null)
1676 {
1677 if (host.ride == this)
1678 {
1679 _Speed = Evalue(79);
1680 _Speed = _Speed * 100 / Mathf.Clamp(100 + _Speed * ((!race.tag.Contains("noRide")) ? 1 : 5) - base.STR - host.EvalueRiding() * 2 - (race.tag.Contains("ride") ? 50 : 0), 100, 1000);
1681 }
1682 else
1683 {
1684 _Speed = (Evalue(79) + host.Evalue(79)) / 2;
1685 }
1686 }
1687 else
1688 {
1689 _Speed = Evalue(79) + Evalue(407) / 2;
1690 }
1691 if (body.GetSlot(37, onlyEmpty: false)?.thing != null && HasElement(1209) && !HasElement(419))
1692 {
1693 _Speed -= 25;
1694 info?.AddText(-25, EClass.sources.elements.map[1209].GetName());
1695 }
1696 if (parasite != null)
1697 {
1698 _Speed = _Speed * 100 / Mathf.Clamp(120 + parasite.LV * 2 - base.STR - Evalue(227) * 2, 100, 1000);
1699 }
1700 if (_Speed < elements.ValueWithoutLink(79) / 3)
1701 {
1703 info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
1704 }
1705 int num = 100;
1706 if (EClass._zone.map != null && EClass._zone.IsUnderwater)
1707 {
1708 int num2 = Evalue(200);
1709 num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, 0, 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25);
1710 if (info != null && num != 100)
1711 {
1712 info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
1713 }
1714 }
1715 if (IsPCFaction)
1716 {
1717 switch (burden.GetPhase())
1718 {
1719 case 1:
1720 num -= 10;
1721 info?.AddFix(-10, burden.GetPhaseStr());
1722 break;
1723 case 2:
1724 num -= 20;
1725 info?.AddFix(-20, burden.GetPhaseStr());
1726 break;
1727 case 3:
1728 num -= 30;
1729 info?.AddFix(-30, burden.GetPhaseStr());
1730 break;
1731 case 4:
1732 num -= (IsPC ? 50 : 100);
1733 info?.AddFix(IsPC ? (-50) : (-100), burden.GetPhaseStr());
1734 break;
1735 }
1736 if (IsPC)
1737 {
1738 switch (stamina.GetPhase())
1739 {
1740 case 1:
1741 num -= 10;
1742 info?.AddFix(-10, stamina.GetPhaseStr());
1743 break;
1744 case 0:
1745 num -= 20;
1746 info?.AddFix(-20, stamina.GetPhaseStr());
1747 break;
1748 }
1749 switch (sleepiness.GetPhase())
1750 {
1751 case 2:
1752 num -= 10;
1753 info?.AddFix(-10, sleepiness.GetPhaseStr());
1754 break;
1755 case 3:
1756 num -= 20;
1757 info?.AddFix(-20, sleepiness.GetPhaseStr());
1758 break;
1759 }
1760 switch (hunger.GetPhase())
1761 {
1762 case 3:
1763 case 4:
1764 num -= 10;
1765 info?.AddFix(-10, hunger.GetPhaseStr());
1766 break;
1767 case 5:
1768 num -= 30;
1769 info?.AddFix(-30, hunger.GetPhaseStr());
1770 break;
1771 }
1772 num += EClass.player.lastEmptyAlly * Evalue(1646);
1773 info?.AddFix(EClass.player.lastEmptyAlly * Evalue(1646), EClass.sources.elements.map[1646].GetName());
1774 }
1776 {
1777 num += EClass.player.lastEmptyAlly * 10 - 10;
1778 info?.AddFix(EClass.player.lastEmptyAlly * 10 - 10, "exceedParty".lang());
1779 }
1780 }
1781 else if (base.LV >= 1000 && !EClass.game.principal.disableVoidBlessing && !base.IsPCFactionOrMinion)
1782 {
1783 num += EClass.curve((base.LV - 900) / 100 * 10, 500, 100);
1784 info?.AddFix(EClass.curve((base.LV - 900) / 100 * 10, 500, 100), "enemySpeedBuff".lang());
1785 }
1786 if (HasCondition<ConGravity>())
1787 {
1788 num -= 30;
1789 info?.AddFix(-30, GetCondition<ConGravity>().Name);
1790 }
1791 if (_Speed < 10)
1792 {
1793 _Speed = 10;
1794 }
1795 _Speed = _Speed * num / 100;
1796 if (_Speed < 10)
1797 {
1798 _Speed = 10;
1799 info?.AddText("minSpeed".lang(10.ToString() ?? ""));
1800 }
1801 dirtySpeed = false;
1802 }
Thing thing
Definition: BodySlot.cs:8
int _Speed
Definition: Chara.cs:168
override string ToString()
Definition: Chara.cs:1024
void RefreshSpeed(Element.BonusInfo info=null)
Definition: Chara.cs:1668
bool dirtySpeed
Definition: Chara.cs:166
void AddText(string text, FontColor col=FontColor.Warning)
Definition: ELEMENT.cs:109
void AddFix(int v, string text)
Definition: ELEMENT.cs:130
bool disableVoidBlessing
GamePrincipal principal
Definition: Game.cs:221
int lastEmptyAlly
Definition: Player.cs:1113
virtual bool IsUnderwater
Definition: Zone.cs:264

References _Speed, EClass._zone, body, burden, EClass.curve(), Zone.DangerLv, dirtySpeed, GamePrincipal.disableVoidBlessing, Card.elements, SourceManager.elements, Card.Evalue(), EvalueRiding(), EClass.game, Stats.GetPhase(), BaseStats.GetPhaseStr(), CharaBody.GetSlot(), Card.HasElement(), host, hunger, IsDeadOrSleeping, IsPC, IsPCFaction, IsPCParty, Zone.IsUnderwater, Player.lastEmptyAlly, Card.LV, Zone.map, Card.Name, parasite, EClass.player, Game.principal, race, RefreshSpeed(), ride, sleepiness, EClass.sources, stamina, BodySlot.thing, ToString(), and ElementContainer.ValueWithoutLink().

Referenced by ConGravity.OnRefresh(), Player.RefreshEmptyAlly(), RefreshSpeed(), and Element.BonusInfo.WriteNote().

◆ RefreshWorkElements()

void Chara.RefreshWorkElements ( ElementContainer  parent = null)
inline

Definition at line 8326 of file Chara.cs.

8327 {
8328 if (workElements != null)
8329 {
8331 }
8332 workElements = null;
8333 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
8334 {
8335 return;
8336 }
8337 foreach (Hobby item in ListHobbies())
8338 {
8339 TryAdd(item);
8340 }
8341 foreach (Hobby item2 in ListWorks())
8342 {
8343 TryAdd(item2);
8344 }
8345 if (workElements != null)
8346 {
8348 }
8349 void TryAdd(Hobby h)
8350 {
8351 if (!h.source.elements.IsEmpty())
8352 {
8353 if (workElements == null)
8354 {
8356 }
8357 for (int i = 0; i < h.source.elements.Length; i += 2)
8358 {
8359 int num = h.source.elements[i];
8360 int num2 = h.source.elements[i + 1];
8361 int num3 = 100;
8362 if (num != 2115 && num != 2207)
8363 {
8364 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
8365 if (num3 <= 0)
8366 {
8367 continue;
8368 }
8369 }
8370 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
8371 }
8372 }
8373 }
8374 }
ElementContainer workElements
Definition: Chara.cs:40
int GetEfficiency(Chara c)
Definition: Hobby.cs:30

References Hobby.GetEfficiency(), item, ElementContainer.ModBase(), FactionBranch.owner, ElementContainer.SetParent(), and Hobby.source.

Referenced by FactionBranch.AddMemeber(), Party.AddMemeber(), FactionBranch.ChangeMemberType(), FactionBranch.DailyOutcome(), FactionBranch.OnActivateZone(), Game.OnLoad(), FactionBranch.Recruit(), TraitGeneratorWheel.Refresh(), Party.RemoveMember(), and FactionBranch.RemoveMemeber().

◆ ReleaseMinion()

void Chara.ReleaseMinion ( )
inline

Definition at line 2138 of file Chara.cs.

2139 {
2140 base.c_uidMaster = 0;
2141 master = null;
2142 enemy = null;
2143 foreach (Chara chara in EClass._map.charas)
2144 {
2145 if (chara.enemy == this)
2146 {
2147 chara.SetEnemy();
2148 chara.ai.Cancel();
2149 }
2150 }
2151 ai.Cancel();
2152 Refresh();
2153 }

References EClass._map, ai, AIAct.Cancel(), Map.charas, enemy, master, Refresh(), and SetEnemy().

Referenced by _MakeAlly(), MakeMinion(), and QuestEscort.ReleaseEscort().

◆ RemoveCondition< T >()

void Chara.RemoveCondition< T > ( )
inline
Type Constraints
T :Condition 

Definition at line 8777 of file Chara.cs.

8777 : Condition
8778 {
8779 for (int num = conditions.Count - 1; num >= 0; num--)
8780 {
8781 if (conditions[num] is T)
8782 {
8783 conditions[num].Kill();
8784 break;
8785 }
8786 }
8787 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

Definition at line 1342 of file Chara.cs.

1343 {
1344 if (IsGlobal && !(trait is TraitUniqueChara) && !base.IsUnique && !EClass.game.cards.listAdv.Contains(this))
1345 {
1346 global = null;
1348 }
1349 }
List< Chara > listAdv
Definition: CardManager.cs:64

References Game.cards, EClass.game, global, CardManager.globalCharas, IsGlobal, CardManager.listAdv, CardManager.GlobalCharaList.Remove(), and trait.

Referenced by FactionBranch.RemoveMemeber().

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 1999 of file Chara.cs.

2000 {
2001 if (body.slots.Count != 0)
2002 {
2003 BodySlot bodySlot = body.slots.LastItem();
2004 body.RemoveBodyPartAt(body.slots.Count - 1);
2005 if (msg)
2006 {
2007 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2008 PlaySound("offering");
2009 }
2010 }
2011 }
int elementId
Definition: BodySlot.cs:6
void RemoveBodyPartAt(int idx)
Definition: CharaBody.cs:322

References body, BodySlot.elementId, Element.Get(), Card.PlaySound(), CharaBody.RemoveBodyPartAt(), Card.Say(), and CharaBody.slots.

Referenced by TraitFoodEggFertilized.Incubate().

◆ RequestProtection()

void Chara.RequestProtection ( Chara  attacker,
Action< Chara action 
)
inline

Definition at line 7778 of file Chara.cs.

7779 {
7780 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this || (host != null && host.isRestrained) || (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion))
7781 {
7782 return;
7783 }
7784 bool flag = false;
7785 foreach (Chara chara in EClass._map.charas)
7786 {
7787 if (chara == attacker || chara.enemy == this || chara == this || chara.host != null || chara.IsDisabled || !chara.IsFriendOrAbove(this) || chara.conSuspend != null || (chara.IsPCParty && !IsPCParty) || (IsPCFaction && !chara.IsPCFaction) || (attacker.IsPCFactionOrMinion && chara.IsPCFactionOrMinion))
7788 {
7789 continue;
7790 }
7791 bool flag2 = chara.HasElement(1225);
7792 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
7793 {
7794 continue;
7795 }
7796 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
7797 int num2 = Dist(chara);
7798 if (num2 > 25)
7799 {
7800 continue;
7801 }
7802 if (num2 > num || !chara.CanSeeLos(pos, num2))
7803 {
7804 if (!flag2)
7805 {
7806 continue;
7807 }
7808 if (Dist(chara) < 5)
7809 {
7810 chara.GoHostile(attacker);
7811 chara.SetEnemy(attacker);
7812 attacker.SetEnemy(chara);
7813 continue;
7814 }
7815 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
7816 if (!nearestPoint.IsValid)
7817 {
7818 continue;
7819 }
7820 chara.Teleport(nearestPoint);
7821 chara.AddCooldown(1225, 10);
7822 num2 = Dist(chara);
7823 Say("intercept_loyal", chara, this);
7824 chara.SetEnemy(attacker);
7825 attacker.SetEnemy(chara);
7826 if (num2 > num || !chara.CanSeeLos(pos, num2))
7827 {
7828 continue;
7829 }
7830 }
7831 if (!flag && !HasElement(1225))
7832 {
7833 Say("intercept", chara, this);
7834 if (EClass.rnd(10) == 0)
7835 {
7836 chara.Talk("intercept", base.NameSimple);
7837 }
7838 if (attacker.enemy == this)
7839 {
7840 attacker.SetEnemy(chara);
7841 }
7842 action(chara);
7843 flag = true;
7844 }
7845 }
7846 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5505
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8040
bool HasCooldown(int idEle)
Definition: Chara.cs:8058

References EClass._map, AddCooldown(), CanSeeLos(), Map.charas, conSuspend, enemy, Card.Evalue(), Point.GetNearestPoint(), GoHostile(), HasCondition(), HasCooldown(), Card.HasElement(), host, IsDisabled, IsFriendOrAbove(), IsPC, IsPCFaction, Card.IsPCFactionOrMinion, IsPCParty, Card.isRestrained, Point.IsValid, EClass.rnd(), SetEnemy(), Card.Talk(), and Card.Teleport().

Referenced by ActMelee.Attack(), ActEffect.DamageEle(), and ActRanged.Perform().

◆ RerollHobby()

void Chara.RerollHobby ( bool  extraSlotChance = true)
inline

Definition at line 8420 of file Chara.cs.

8421 {
8422 if (_hobbies != null && _works != null)
8423 {
8424 _hobbies.Clear();
8425 _works.Clear();
8426 }
8427 else
8428 {
8429 _hobbies = new List<int>();
8430 _works = new List<int>();
8431 }
8432 if (source.hobbies.IsEmpty())
8433 {
8434 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
8435 }
8436 else
8437 {
8438 string[] hobbies = source.hobbies;
8439 foreach (string key in hobbies)
8440 {
8441 AddHobby(EClass.sources.hobbies.alias[key].id);
8442 }
8443 }
8444 if (source.works.IsEmpty())
8445 {
8446 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
8447 }
8448 else
8449 {
8450 string[] hobbies = source.works;
8451 foreach (string key2 in hobbies)
8452 {
8453 AddWork(EClass.sources.hobbies.alias[key2].id);
8454 }
8455 }
8457 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:8459
void AddWork(int id)
Definition: Chara.cs:8408
void AddHobby(int id)
Definition: Chara.cs:8396
List< Row > listWorks
Definition: SourceHobby.cs:64
List< Row > listHobbies
Definition: SourceHobby.cs:61
SourceHobby hobbies
void Reset()
Definition: WorkSummary.cs:78

References SourceChara.Row.hobbies, SourceManager.hobbies, SourceHobby.listHobbies, SourceHobby.listWorks, EClass.sources, and SourceChara.Row.works.

Referenced by OnCreate().

◆ ResetBody()

void Chara.ResetBody ( )
inline

Definition at line 2013 of file Chara.cs.

2014 {
2015 for (int num = body.slots.Count - 1; num >= 0; num--)
2016 {
2017 BodySlot bodySlot = body.slots[num];
2018 if (bodySlot.elementId == 45 || bodySlot.elementId == 40)
2019 {
2020 return;
2021 }
2022 body.RemoveBodyPart(num);
2023 }
2024 string[] array = race.figure.Split('|');
2025 foreach (string s in array)
2026 {
2027 int num2 = ParseBodySlot(s);
2028 if (num2 != -1)
2029 {
2030 body.AddBodyPart(num2);
2031 }
2032 }
2034 }

References CharaBody.AddBodyPart(), body, BodySlot.elementId, ParseBodySlot(), race, CharaBody.RefreshBodyParts(), CharaBody.RemoveBodyPart(), and CharaBody.slots.

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 7942 of file Chara.cs.

7943 {
7944 _ = base.c_upgrades;
7945 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 8948 of file Chara.cs.

8949 {
8950 if (con.power > 0 && resistCon != null)
8951 {
8952 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
8953 if (1000 < EClass.rnd(a))
8954 {
8955 con.power = 0;
8956 }
8957 else if (500 < EClass.rnd(a))
8958 {
8959 con.power /= 5;
8960 }
8961 else if (200 < EClass.rnd(a))
8962 {
8963 con.power /= 2;
8964 }
8965 }
8966 }

References BaseStats.id, BaseCondition.power, and EClass.rnd().

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4402 of file Chara.cs.

4403 {
4404 string equip = source.equip;
4405 if (equip.IsEmpty())
4406 {
4407 equip = job.equip;
4408 }
4409 if (equip == "none")
4410 {
4411 return;
4412 }
4413 switch (id)
4414 {
4415 case "kettle":
4416 case "quru":
4417 case "loytel":
4418 case "shojo":
4419 EQ_ID("staff_long", 1);
4420 EQ_CAT("head");
4421 EQ_CAT("torso");
4422 EQ_CAT("arm");
4423 return;
4424 case "adv_yukiimo":
4425 if (onCreate)
4426 {
4427 EQ_ID("tail_snowleopard");
4428 }
4429 break;
4430 case "adv_kiria":
4431 if (onCreate)
4432 {
4433 EQ_ID("sword_zephir");
4434 }
4435 break;
4436 case "adv_mesherada":
4437 if (onCreate)
4438 {
4439 EQ_ID("dagger_hathaway");
4440 }
4441 break;
4442 case "adv_verna":
4443 if (onCreate)
4444 {
4445 EQ_ID("staff_long", -1, Rarity.Legendary);
4446 }
4447 if (onCreate)
4448 {
4449 EQ_ID("cloak_wing", -1, Rarity.Mythical);
4450 }
4451 break;
4452 case "big_sister":
4453 if (onCreate)
4454 {
4455 EQ_ID("sword_muramasa");
4456 }
4457 break;
4458 case "adv_gaki":
4459 if (onCreate)
4460 {
4461 EQ_ID("dagger_gaki");
4462 }
4463 if (onCreate)
4464 {
4465 EQ_ID("dagger_ninto");
4466 }
4467 break;
4468 case "adv_ivory":
4469 EQ_ID("dagger", -1, Rarity.Legendary);
4470 AddThing("60");
4471 break;
4472 case "adv_wini":
4473 if (onCreate)
4474 {
4475 EQ_ID("staff_Cat", -1, Rarity.Mythical);
4476 }
4478 if (onCreate)
4479 {
4480 AddThing("1071");
4481 }
4482 break;
4483 case "seeker":
4484 if (onCreate)
4485 {
4486 EQ_ID("helm_seeker");
4487 }
4488 EQ_ID("robe_pope");
4489 EQ_ID("sword_katana");
4490 EQ_ID("staff");
4491 EQ_ID("sword_katana");
4492 if (onCreate)
4493 {
4494 EQ_ID("boots_seven");
4495 }
4496 if (onCreate)
4497 {
4498 for (int i = 0; i < 20; i++)
4499 {
4501 }
4502 EQ_Item("panty");
4503 AddThing("plat").SetNum(6);
4504 }
4505 break;
4506 case "ephrond":
4507 if (onCreate)
4508 {
4509 AddThing("guitar_efrond");
4510 }
4511 break;
4512 case "ashland":
4513 if (onCreate)
4514 {
4515 AddThing("guitar_ash");
4516 }
4517 break;
4518 case "swordkeeper":
4519 if (onCreate)
4520 {
4521 EQ_ID("EtherDagger");
4522 }
4523 break;
4524 }
4525 switch (equip)
4526 {
4527 case "archer":
4528 if (onCreate || !TryEquipRanged())
4529 {
4530 EQ_CAT((EClass.rnd(4) == 0) ? "crossbow" : "bow");
4531 }
4532 break;
4533 case "inquisitor":
4534 case "gunner":
4535 if (onCreate || !TryEquipRanged())
4536 {
4537 EQ_CAT("gun");
4538 }
4539 break;
4540 }
4541 int num = ((base.rarity >= Rarity.Mythical) ? (base.LV * 3) : ((base.rarity >= Rarity.Legendary) ? (base.LV * 2) : base.LV));
4542 if (trait is TraitAdventurer)
4543 {
4544 num *= 3;
4545 }
4546 if (race.id == "asura")
4547 {
4548 for (int j = 0; j < 4; j++)
4549 {
4550 EQ_CAT(job.weapon.RandomItem());
4551 }
4552 }
4553 for (int k = 0; k < ((!(race.id == "mutant")) ? 1 : (2 + base.LV / 30)); k++)
4554 {
4555 if (source.ContainsTag("boxer"))
4556 {
4557 EQ_CAT("martial");
4558 }
4559 else if (!job.weapon.IsEmpty())
4560 {
4561 if (race.id == "mutant" || (body.slotMainHand != null && body.slotMainHand.thing == null))
4562 {
4563 EQ_CAT(job.weapon.RandomItem());
4564 }
4565 if (race.id == "mutant" || (Evalue(131) > 0 && EClass.rnd(2) == 0))
4566 {
4567 EQ_CAT(job.weapon.RandomItem());
4568 }
4569 }
4570 EQ_CAT("torso");
4571 if (EClass.rnd(num) > 5)
4572 {
4573 EQ_CAT("arm");
4574 }
4575 if (EClass.rnd(num) > 10)
4576 {
4577 EQ_CAT("head");
4578 }
4579 if (EClass.rnd(num) > 15)
4580 {
4581 EQ_CAT("back");
4582 }
4583 if (EClass.rnd(num) > 20)
4584 {
4585 EQ_CAT("ring");
4586 }
4587 if (EClass.rnd(num) > 25)
4588 {
4589 EQ_CAT("amulet");
4590 }
4591 if (EClass.rnd(num) > 30)
4592 {
4593 EQ_CAT("foot");
4594 }
4595 if (EClass.rnd(num) > 35)
4596 {
4597 EQ_CAT("waist");
4598 }
4599 if (EClass.rnd(num) > 40)
4600 {
4601 EQ_CAT("ring");
4602 }
4603 }
4604 if (trait is TraitBard)
4605 {
4606 AddThing(ThingGen.Create("lute"));
4607 }
4608 }
Card AddCard(Card c)
Definition: Card.cs:3006
BodySlot slotMainHand
Definition: CharaBody.cs:10
void EQ_Item(string s, int num=1)
Definition: Chara.cs:4708
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
Definition: Chara.cs:4672
bool TryEquipRanged()
Definition: Chara.cs:7277
void EQ_CAT(string s)
Definition: Chara.cs:4692
static Thing CreateSpellbook(string alias, int num=1)
Definition: ThingGen.cs:151

References RenderRow.ContainsTag(), ThingGen.Create(), ThingGen.CreateFromCategory(), ThingGen.CreateSpellbook(), SourceChara.Row.equip, SourceJob.Row.equip, SourceRace.Row.id, EClass.rnd(), CharaBody.slotMainHand, BodySlot.thing, and SourceJob.Row.weapon.

Referenced by CoreDebug.QuickStart().

◆ RestockInventory()

void Chara.RestockInventory ( bool  onCreate)
inline

Definition at line 4610 of file Chara.cs.

4611 {
4612 switch (id)
4613 {
4614 case "fiama":
4615 Restock("book_story", 1);
4616 break;
4617 case "rock_thrower":
4618 Restock("stone", 10 + EClass.rnd(10));
4619 break;
4620 case "giant":
4621 Restock("rock", 2 + EClass.rnd(10));
4622 break;
4623 case "farris":
4624 Restock("lute", 1);
4625 Restock("book_story_home", 1);
4626 break;
4627 case "begger":
4628 break;
4629 }
4630 void Restock(string id, int num)
4631 {
4632 if (things.Find(id) == null)
4633 {
4634 AddCard(ThingGen.Create(id).SetNum(num));
4635 }
4636 }
4637 }

References ThingGen.Create(), EClass.rnd(), and Card.SetNum().

◆ Revive()

void Chara.Revive ( Point  p = null,
bool  msg = false 
)
inline

Definition at line 4752 of file Chara.cs.

4753 {
4754 if (!isDead)
4755 {
4756 return;
4757 }
4758 isDead = false;
4759 base.hp = MaxHP / 3;
4760 mana.value = 0;
4761 stamina.value = 0;
4762 if (hunger.value > 30)
4763 {
4764 hunger.value = 30;
4765 }
4766 sleepiness.value = 0;
4768 RemoveCondition<StanceTaunt>();
4769 if (IsPC)
4770 {
4772 {
4773 Msg.Say("noDeathPenalty2", this);
4774 }
4776 {
4777 Msg.Say("noDeathPenalty", this);
4778 }
4779 else
4780 {
4782 }
4783 List<Thing> dropList = new List<Thing>();
4784 EClass.pc.things.Foreach(delegate(Thing t)
4785 {
4787 {
4788 t.ignoreAutoPick = true;
4789 dropList.Add(t);
4790 }
4791 }, onlyAccessible: false);
4792 foreach (Thing item in dropList)
4793 {
4795 Msg.Say("backpack_full_drop", item);
4796 }
4797 EClass.player.preventDeathPenalty = false;
4798 }
4799 if (IsPCFaction && homeBranch != null)
4800 {
4801 homeBranch.Log("bRevive", this);
4802 }
4803 if (p != null)
4804 {
4805 if (!p.IsInBounds)
4806 {
4808 }
4809 EClass._zone.AddCard(this, p);
4810 if (msg)
4811 {
4812 SE.Play("revive");
4813 Msg.Say("revive", this);
4814 PlayEffect("revive");
4815 }
4816 SetCensored(enable: false);
4817 }
4818 }
void SetCensored(bool enable)
Definition: Card.cs:7284
Card parentCard
Definition: Card.cs:99
void ApplyDeathPenalty()
Definition: Chara.cs:4840
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1087
void Foreach(Action< Thing > action, bool onlyAccessible=true)
override int SelfWeight
Definition: Thing.cs:62

References EClass._map, EClass._zone, Zone.AddCard(), ApplyDeathPenalty(), Card.c_lockLv, Trait.CanBeDropped, Player.Stats.days, GamePrincipal.disableDeathPenaltyProtection, ThingContainer.Foreach(), EClass.game, MapBounds.GetCenterPos(), Point.GetNearestPoint(), Card.IsContainer, item, FactionBranch.Log(), Card.parentCard, EClass.pc, EClass.player, Card.pos, Player.preventDeathPenalty, Game.principal, Msg.Say(), Thing.SelfWeight, Player.stats, Card.things, Card.trait, Stats.value, and WeightLimit.

Referenced by FactionBranch.DailyOutcome(), ZonePreEnterOnCompleteQuestInstance.Execute(), CoreDebug.GodMode(), ZoneInstanceBout.OnLeaveZone(), and Zone.Revive().

◆ Rotate()

override void Chara.Rotate ( bool  reverse = false)
inlinevirtual

Reimplemented from Card.

Definition at line 3289 of file Chara.cs.

3290 {
3291 if (renderer.hasActor)
3292 {
3293 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3294 }
3295 else
3296 {
3297 base.dir = ((base.dir == 0) ? 1 : 0);
3298 }
3299 UpdateAngle();
3301 }

Referenced by AI_Dance.Run().

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 8196 of file Chara.cs.

8197 {
8198 if (IsPC)
8199 {
8201 }
8202 if (ai.IsRunning)
8203 {
8204 if (ai == g && ai.IsNoGoal)
8205 {
8206 return g;
8207 }
8208 ai.Cancel();
8209 if (ai == g)
8210 {
8211 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
8212 return g;
8213 }
8214 }
8215 if (HasCondition<ConWait>())
8216 {
8217 RemoveCondition<ConWait>();
8218 }
8219 ai = g;
8220 ai.SetOwner(this);
8221 if (IsPC)
8222 {
8224 }
8225 return g;
8226 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:179
QueueManager queues
Definition: Player.cs:1129
void OnSetGoal(AIAct newGoal)
Definition: QueueManager.cs:23

References AIAct.Cancel(), Debug, AIAct.IsNoGoal, AIAct.IsRunning, QueueManager.OnSetGoal(), EClass.player, Player.queues, and AIAct.SetOwner().

Referenced by _Move(), Zone.AddCard(), Thing.DoAct(), UIInventory.DoAct(), Player.EndTurn(), GiveGift(), TraitTrolley.OnActivateTrap(), BaseListPeople.OnClick(), LayerCraft.OnClickCraft(), OnCreate(), ZoneInstanceBout.OnLeaveZone(), ZoneEventSiege.OnTickRound(), AM_Paint.OnUpdateInput(), ActNTR.Perform(), ActRanged.Perform(), ActRestrain.Perform(), ActPlan.Item.Perform(), LayerCraftFloat.RefreshCraft(), AI_Idle.Run(), GoalSpot.Run(), Zone.Simulate(), ConSleep.SuccubusVisit(), ActThrow.Throw(), TaskManager.Designations.TryRemoveDesignation(), InvOwnerCraft.TryStartCraft(), and GoalWork.TryWork().

◆ SetAIAggro()

void Chara.SetAIAggro ( )
inline

Definition at line 8186 of file Chara.cs.

8187 {
8188 SetAI(new GoalCombat());
8189 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 8182 of file Chara.cs.

8183 {
8184 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3282 of file Chara.cs.

3283 {
3284 base.dir = d;
3285 UpdateAngle();
3287 }

Referenced by AI_Trolley.Run(), and ConSleep.Tick().

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1659 of file Chara.cs.

1660 {
1661 dirtySpeed = true;
1662 if (host != null)
1663 {
1665 }
1666 }

References dirtySpeed, host, and SetDirtySpeed().

Referenced by CalcBurden(), Condition.Kill(), AttbMain.OnChangeValue(), Refresh(), Party.RemoveMember(), ActRide.Ride(), SetDirtySpeed(), and ActRide.Unride().

◆ SetEnemy()

Chara Chara.SetEnemy ( Chara  c = null)
inline

Definition at line 5815 of file Chara.cs.

5816 {
5817 enemy = c;
5818 if (c == null)
5819 {
5820 if (ai is GoalCombat)
5821 {
5822 ai.Cancel();
5823 }
5824 }
5825 else
5826 {
5827 calmCheckTurn = 10 + EClass.rnd(30);
5828 }
5829 return c;
5830 }

References AIAct.Cancel(), and EClass.rnd().

Referenced by ZoneEventQuest.AggroEnemy(), DoHostileAction(), AI_Torture.OnCancelOrSuccess(), ZoneInstanceBout.OnLeaveZone(), ConInvisibility.OnStart(), Zone.RefreshCriminal(), ReleaseMinion(), RequestProtection(), Zone.ResetHostility(), AI_Idle.Run(), GoalCombat.Run(), and Card.Teleport().

◆ SetEQQuality()

void Chara.SetEQQuality ( )
inlineprivate

Definition at line 4639 of file Chara.cs.

4640 {
4642 Rarity rarity = Rarity.Normal;
4643 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
4644 Rarity rarity2 = base.rarity;
4645 if (id == "big_sister")
4646 {
4647 num = (isOnCreate ? 8 : 4);
4648 }
4649 if (!isOnCreate && EClass.rnd(10) != 0)
4650 {
4651 num /= 2;
4652 }
4653 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
4654 {
4655 rarity = Rarity.Superior;
4656 }
4657 else if (rarity2 == Rarity.Legendary)
4658 {
4659 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
4660 }
4661 else if (rarity2 >= Rarity.Mythical)
4662 {
4663 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
4664 }
4665 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
4666 {
4667 rarity = Rarity.Legendary;
4668 }
4669 CardBlueprint.current.rarity = rarity;
4670 }
static void Set(CardBlueprint _bp)
static CardBlueprint CharaGenEQ
static bool isOnCreate
Definition: Chara.cs:180

References CardBlueprint.CharaGenEQ, EClass.rnd(), and CardBlueprint.Set().

◆ SetFaction()

void Chara.SetFaction ( Faction  f)
inline

Definition at line 1271 of file Chara.cs.

1272 {
1273 _faction = null;
1274 faction = f;
1276 }
Faction _faction
Definition: Chara.cs:152
Hostility GetHostility()
Definition: FACTION.cs:255

References _faction, faction, Faction.GetHostility(), and hostility.

Referenced by _MakeAlly(), FactionBranch.AddMemeber(), Player.OnCreateGame(), CoreDebug.QuickStart(), and FactionBranch.RemoveMemeber().

◆ SetFaith() [1/2]

void Chara.SetFaith ( Religion  r)
inline

Definition at line 1543 of file Chara.cs.

1544 {
1545 faith = r;
1547 }

References faith, and RefreshFaithElement().

◆ SetFaith() [2/2]

void Chara.SetFaith ( string  id)
inline

Definition at line 1538 of file Chara.cs.

1539 {
1541 }
Dictionary< string, Religion > dictAll

References ReligionManager.dictAll, EClass.game, Game.religions, and SetFaith().

Referenced by OnCreate(), Zone_SubTown.OnGenerateRooms(), Player.OnStartNewGame(), SetFaith(), and Zone.TrySpawnFollower().

◆ SetFeat()

void Chara.SetFeat ( int  id,
int  value = 1,
bool  msg = false 
)
inline

Definition at line 9121 of file Chara.cs.

9122 {
9123 Feat feat = elements.GetElement(id) as Feat;
9124 int num = 0;
9125 if (feat != null && feat.Value > 0)
9126 {
9127 if (value == feat.Value)
9128 {
9129 return;
9130 }
9131 num = feat.Value;
9132 feat.Apply(-feat.Value, elements);
9133 }
9134 if (value > 0)
9135 {
9136 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
9137 feat.Apply(feat.Value, elements);
9138 }
9139 else
9140 {
9141 elements.Remove(id);
9142 }
9144 {
9145 Refresh();
9147 }
9148 if (!msg)
9149 {
9150 return;
9151 }
9152 if (feat.source.textInc.IsEmpty())
9153 {
9154 PlaySound("ding_skill");
9156 Say("gainFeat", this, feat.FullName);
9157 }
9158 else
9159 {
9160 bool flag = value < num;
9161 if (feat.source.tag.Contains("neg"))
9162 {
9163 flag = !flag;
9164 }
9165 PlaySound("mutation");
9167 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
9168 }
9170 }
Color Negative
Definition: MsgColors.cs:15
Color Ding
Definition: MsgColors.cs:11

References Feat.Apply(), Msg.colors, EClass.core, MsgColors.Ding, Feat.FullName, Core.IsGameStarted, MsgColors.Negative, Refresh(), Msg.SetColor(), Element.source, and Element.Value.

Referenced by LayerWorldSetting.Apply(), DNA.Apply(), ApplyEditorTags(), Card.LevelUp(), TraitFoodEggFertilized.MakeBaby(), Zone_Casino.OnActivate(), OnCreate(), TraitDrinkMilkMother.OnDrink(), FoodEffect.Proc(), and CoreDebug.SetElement().

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1329 of file Chara.cs.

1330 {
1331 if (!IsGlobal)
1332 {
1334 global = new GlobalData();
1335 base.isSubsetCard = false;
1336 enemy = null;
1337 base.c_uidMaster = 0;
1338 }
1339 return this;
1340 }

References CardManager.GlobalCharaList.Add(), Game.cards, enemy, EClass.game, global, CardManager.globalCharas, and IsGlobal.

Referenced by _MakeAlly(), SetGlobal(), and SetHomeZone().

◆ SetGlobal() [2/2]

Chara Chara.SetGlobal ( Zone  _home,
int  x,
int  z 
)
inline

Definition at line 1314 of file Chara.cs.

1315 {
1316 SetGlobal();
1317 homeZone = _home;
1318 _home.AddCard(this, x, z);
1319 global.transition = new ZoneTransition
1320 {
1321 state = ZoneTransition.EnterState.Exact,
1322 x = x,
1323 z = z
1324 };
1325 orgPos = new Point(x, z);
1326 return this;
1327 }

References Zone.AddCard(), homeZone, orgPos, and SetGlobal().

Referenced by FactionBranch.AddMemeber(), Zone_Nymelle.OnBeforeSimulate(), Meeting.SetChara(), Game.StartNewGame(), and CoreDebug.UpdateInput().

◆ SetHomeZone()

void Chara.SetHomeZone ( Zone  zone)
inline

Definition at line 1278 of file Chara.cs.

1279 {
1280 homeZone = zone;
1281 SetGlobal();
1282 }

References homeZone, and SetGlobal().

Referenced by Game.AddAdventurer(), Game.AddAdventurers(), FactionBranch.AddMemeber(), OnBanish(), and CoreDebug.QuickStart().

◆ SetMainElement() [1/2]

void Chara.SetMainElement ( int  id,
int  v = 0,
bool  elemental = false 
)
inline

Definition at line 1881 of file Chara.cs.

1882 {
1883 if (base.c_idMainElement != 0)
1884 {
1885 SetElements(base.c_idMainElement, remove: true);
1886 base.c_idMainElement = 0;
1887 }
1888 if (id != 0)
1889 {
1890 _ = EClass.sources.elements.map[id];
1891 SetElements(id, remove: false);
1892 base.c_idMainElement = id;
1893 if (elemental)
1894 {
1895 base.isElemental = true;
1896 _colorInt = 0;
1897 Color colorSprite = EClass.setting.elements[MainElement.source.alias].colorSprite;
1898 base.c_lightColor = (byte)Mathf.Clamp(colorSprite.r * 3f, 1f, 31f) * 1024 + (byte)Mathf.Clamp(colorSprite.g * 3f, 1f, 31f) * 32 + (byte)Mathf.Clamp(colorSprite.b * 3f, 1f, 31f);
1899 }
1900 _ability = null;
1901 }
1902 void SetElements(int idEle, bool remove)
1903 {
1904 elements.SetBase(idEle, (!remove) ? ((v == 0) ? 10 : v) : 0);
1905 elements.ModBase(EClass.sources.elements.alias[EClass.sources.elements.map[idEle].aliasRef].id, remove ? (-20) : 20);
1906 switch (idEle)
1907 {
1908 case 910:
1909 elements.ModBase(951, remove ? 10 : (-10));
1910 break;
1911 case 911:
1912 elements.ModBase(950, remove ? 10 : (-10));
1913 break;
1914 case 912:
1915 elements.ModBase(953, remove ? 10 : (-10));
1916 break;
1917 case 913:
1918 elements.ModBase(952, remove ? 10 : (-10));
1919 break;
1920 case 916:
1921 elements.ModBase(960, remove ? 10 : (-10));
1922 break;
1923 case 919:
1924 elements.ModBase(956, remove ? 10 : (-10));
1925 break;
1926 case 925:
1927 elements.ModBase(962, remove ? 10 : (-10));
1928 break;
1929 case 922:
1930 elements.ModBase(965, remove ? 10 : (-10));
1931 break;
1932 case 921:
1933 elements.ModBase(971, remove ? 10 : (-10));
1934 break;
1935 case 926:
1936 elements.ModBase(961, remove ? 10 : (-10));
1937 break;
1938 case 914:
1939 case 915:
1940 case 917:
1941 case 918:
1942 case 920:
1943 case 923:
1944 case 924:
1945 break;
1946 }
1947 }
1948 }
int _colorInt
Definition: Card.cs:63
CharaAbility _ability
Definition: Chara.cs:96
UD_String_ElementRef elements
Definition: GameSetting.cs:315

References _ability, Card._colorInt, Color, Card.elements, GameSetting.elements, SourceManager.elements, Card.id, MainElement, ElementContainer.ModBase(), ElementContainer.SetBase(), EClass.setting, Element.source, and EClass.sources.

◆ SetMainElement() [2/2]

void Chara.SetMainElement ( string  id,
int  v = 0,
bool  elemental = false 
)
inline

Definition at line 1872 of file Chara.cs.

1873 {
1874 if (!id.StartsWith("ele"))
1875 {
1876 id = "ele" + id;
1877 }
1878 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
1879 }

References SourceManager.elements, Card.id, SetMainElement(), and EClass.sources.

Referenced by TraitFoodEggFertilized.Incubate(), OnCreate(), ActEffect.ProcAt(), SerializedCards.Restore(), and SetMainElement().

◆ SetMutation()

void Chara.SetMutation ( int  idEle,
int  a = 0 
)
inline

Definition at line 9172 of file Chara.cs.

9173 {
9174 SourceElement.Row row = EClass.sources.elements.map[idEle];
9176 Element element = elements.GetElement(idEle);
9177 Element element2 = elements.GetElement(row2.id);
9178 int num = element?.Value ?? 0;
9179 if (a < 0)
9180 {
9181 a = 0;
9182 }
9183 if (a > row.max)
9184 {
9185 a = row.max;
9186 }
9187 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
9188 if (a == 0 && (element == null || element.Value == 0))
9189 {
9191 return;
9192 }
9193 if (element != null && element.Value == a)
9194 {
9196 return;
9197 }
9198 if (element2 != null && element2.Value > 0)
9199 {
9200 SetFeat(element2.id, 0);
9201 }
9202 SetFeat(idEle, a);
9203 PlaySound("mutation");
9204 PlayEffect("mutation");
9206 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9207 }

References SourceElement.Row.alias, SourceElement.Row.aliasParent, Msg.colors, SourceManager.elements, Element.id, SourceElement.Row.id, SourceElement.Row.max, MsgColors.MutateBad, MsgColors.MutateGood, Msg.SetColor(), EClass.sources, SourceElement.Row.tag, and Element.Value.

◆ SetNoGoal()

AIAct Chara.SetNoGoal ( )
inline

Definition at line 8191 of file Chara.cs.

8192 {
8193 return SetAI(_NoGoalPC);
8194 }
static NoGoal _NoGoalPC
Definition: Chara.cs:192

Referenced by LayerMiniGame.OnAfterInit(), and Player.TryAbortAutoCombat().

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6191 of file Chara.cs.

6192 {
6193 if (IsPCC)
6194 {
6195 PCC.Get(pccData).Build(state);
6196 }
6197 }

Referenced by _Move(), TraitChangingRoom.OnActivateTrap(), AI_Bladder.OnReset(), TraitMiniPool.OnStepped(), and AI_Bladder.Run().

◆ SetRenderParam()

override void Chara.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 6239 of file Chara.cs.

6240 {
6241 p.mat = base.material;
6242 p.matColor = base.colorInt;
6243 if (!renderer.usePass)
6244 {
6245 return;
6246 }
6247 if (renderer.replacer != null)
6248 {
6249 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6250 }
6251 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6252 {
6253 if (source._tiles_snow.Length > 1)
6254 {
6255 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6256 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6257 }
6258 else
6259 {
6260 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6261 }
6262 }
6263 else if (sourceCard._tiles.Length > 1)
6264 {
6265 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6266 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6267 }
6268 else
6269 {
6270 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6271 }
6272 p.dir = base.dir;
6273 }
override bool flipX
Definition: Chara.cs:543
virtual bool IsSnowCovered
Definition: Spatial.cs:531

References RenderRow._tiles, SourceChara.Row._tiles_snow, EClass._zone, Spatial.IsSnowCovered, and SourceChara.Row.staticSkin.

Referenced by BaseTileMap.DrawTile(), and TileMapElona.DrawTile().

◆ SetSortVal()

override void Chara.SetSortVal ( UIList::SortMode  m,
CurrencyType  currency = CurrencyType::Money 
)
inlinevirtual

Reimplemented from Card.

Definition at line 6764 of file Chara.cs.

6765 {
6766 switch (m)
6767 {
6768 case UIList.SortMode.ByJob:
6769 sortVal = job._index * 10000 + sourceCard._index;
6770 break;
6771 case UIList.SortMode.ByRace:
6772 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
6773 break;
6774 case UIList.SortMode.ByFeat:
6775 sortVal = -GetTotalFeat();
6776 break;
6777 default:
6778 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
6779 break;
6780 case UIList.SortMode.ByWorkk:
6781 break;
6782 }
6783 }
int sortVal
Definition: Card.cs:97
int GetTotalFeat()
Definition: Chara.cs:7496
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27

References SourceData< T, T2 >.BaseRow._index.

Referenced by BaseListPeople.List(), and LayerDragGrid.SetInv().

◆ SetSource()

override void Chara.SetSource ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1860 of file Chara.cs.

1861 {
1862 source = EClass.sources.charas.map.TryGetValue(id);
1863 if (source == null)
1864 {
1865 Debug.LogWarning("Chara " + id + " not found");
1866 id = "chicken";
1867 source = EClass.sources.charas.map[id];
1868 }
1869 path.walker = this;
1870 }
SourceChara charas

References SourceManager.charas, Debug, Card.id, source, and EClass.sources.

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2155 of file Chara.cs.

2156 {
2157 base.c_summonDuration = duration;
2158 base.isSummon = true;
2159 }

Referenced by ActEffect.ProcAt(), and QuestEscort.ReleaseEscort().

◆ SetTempHand()

void Chara.SetTempHand ( int  right = 0,
int  left = 0 
)
inline

◆ ShouldEquip()

bool Chara.ShouldEquip ( Thing  t,
bool  useFav = false 
)
inline

Definition at line 7075 of file Chara.cs.

7076 {
7077 if (t.IsRangedWeapon && t.category.slot == 0)
7078 {
7079 if (!CanEquipRanged(t))
7080 {
7081 return false;
7082 }
7083 int num = 0;
7084 foreach (Thing thing in things)
7085 {
7086 if (thing.IsRangedWeapon)
7087 {
7088 if (thing.category.slot != 0 && thing.isEquipped)
7089 {
7090 return false;
7091 }
7092 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7093 {
7094 num = thing.GetEquipValue();
7095 }
7096 }
7097 }
7098 if (t.GetEquipValue() > num)
7099 {
7100 return true;
7101 }
7102 return false;
7103 }
7104 BodySlot bodySlot = body.GetSlot(t);
7105 if (bodySlot == null)
7106 {
7107 return false;
7108 }
7109 if (useFav)
7110 {
7111 switch (GetFavAttackStyle())
7112 {
7113 case AttackStyle.Default:
7114 case AttackStyle.TwoHand:
7115 if (t.IsMeleeWeapon)
7116 {
7117 bodySlot = body.slotMainHand;
7118 }
7119 else if (bodySlot.elementId == 35)
7120 {
7121 return false;
7122 }
7123 break;
7124 case AttackStyle.Shield:
7125 if (t.IsMeleeWeapon)
7126 {
7127 bodySlot = body.slotMainHand;
7128 }
7129 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7130 {
7131 return false;
7132 }
7133 break;
7134 case AttackStyle.TwoWield:
7135 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7136 {
7137 return false;
7138 }
7139 break;
7140 }
7141 }
7142 if (!body.IsEquippable(t, bodySlot, text: false))
7143 {
7144 return false;
7145 }
7146 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7147 {
7148 return false;
7149 }
7150 if (t.HasTag(CTAG.gift))
7151 {
7152 return false;
7153 }
7154 return true;
7155 }
bool IsMeleeWeapon
Definition: Card.cs:2177
BlessedState blessedState
Definition: Card.cs:262
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:106
AttackStyle GetFavAttackStyle()
Definition: Chara.cs:4358

References Card.blessedState, Card.category, BodySlot.elementId, Card.GetEquipValue(), CharaBody.GetSlot(), Card.HasTag(), CharaBody.IsEquippable(), Thing.isEquipped, Card.IsMeleeWeapon, Card.IsRangedWeapon, CharaBody.slotMainHand, and BodySlot.thing.

◆ ShouldThrowAway()

bool Chara.ShouldThrowAway ( Thing  t,
ClearInventoryType  type 
)
inline

Definition at line 7848 of file Chara.cs.

7849 {
7850 if (IsPCFaction)
7851 {
7852 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
7853 {
7854 return false;
7855 }
7856 if (t.trait.GetHealAction(this) != null)
7857 {
7858 return false;
7859 }
7860 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
7861 {
7862 return false;
7863 }
7864 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
7865 {
7866 return false;
7867 }
7868 }
7869 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed)
7870 {
7871 return false;
7872 }
7873 if (t.trait is TraitCurrency || t.trait is TraitTool)
7874 {
7875 return false;
7876 }
7877 switch (type)
7878 {
7879 case ClearInventoryType.SellAtTown:
7880 if (!t.isGifted && !t.isNPCProperty)
7881 {
7882 return false;
7883 }
7884 break;
7885 case ClearInventoryType.Purge:
7886 switch (t.category.id)
7887 {
7888 case "fish":
7889 if (EClass.rnd(3) == 0)
7890 {
7891 return true;
7892 }
7893 break;
7894 case "junk":
7895 case "garbage":
7896 if (EClass.rnd(3) != 0)
7897 {
7898 return true;
7899 }
7900 break;
7901 }
7902 if (t.id == "flyer")
7903 {
7904 return true;
7905 }
7906 if (!t.IsDecayed && EClass.rnd(3) == 0)
7907 {
7908 return false;
7909 }
7910 if (!things.IsFull() && t.IsRangedWeapon)
7911 {
7912 return false;
7913 }
7914 break;
7915 }
7916 return true;
7917 }
bool IsThrownWeapon
Definition: Card.cs:2181
bool IsFood
Definition: Card.cs:2111
bool isGifted
Definition: Card.cs:766
virtual Action GetHealAction(Chara c)
Definition: Trait.cs:594

References Trait.CanBeDestroyed, Card.category, Trait.GetHealAction(), Card.id, Card.IsAmmo, Card.IsDecayed, Thing.isEquipped, Card.IsFood, Card.isGifted, Card.isNPCProperty, Card.IsRangedWeapon, Card.IsThrownWeapon, Card.rarity, EClass.rnd(), and Card.trait.

◆ ShowDialog() [1/2]

void Chara.ShowDialog ( )
inline

Definition at line 6539 of file Chara.cs.

6540 {
6541 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
6542 if (conSuspend != null && IsPCParty)
6543 {
6544 RemoveCondition<ConSuspend>();
6545 }
6546 if (IsDeadOrSleeping)
6547 {
6548 ShowDialog("_chara", "sleep");
6549 }
6550 else if (base.isRestrained)
6551 {
6552 ShowDialog("_chara", "strain");
6553 }
6554 else if (EClass.pc.isHidden && !CanSee(EClass.pc))
6555 {
6556 ShowDialog("_chara", "invisible");
6557 }
6558 else if (IsEscorted())
6559 {
6560 ShowDialog("_chara", "escort");
6561 }
6562 else if (EClass._zone is Zone_Music)
6563 {
6564 ShowDialog("_chara", "party");
6565 }
6566 else
6567 {
6568 if (LayerDrama.forceJump == null && EClass.game.quests.OnShowDialog(this))
6569 {
6570 return;
6571 }
6572 switch (id)
6573 {
6574 case "loytel":
6575 {
6577 {
6578 EClass.game.quests.Get("pre_debt_runaway").Complete();
6579 EClass.player.flags.loytelEscaped = false;
6580 EClass.game.quests.Add("debt", "loytel");
6581 ShowDialog("loytel", "loytelEscaped");
6582 return;
6583 }
6584 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
6585 if (questDebt != null && questDebt.paid)
6586 {
6587 questDebt.stage++;
6588 if (questDebt.stage > 7)
6589 {
6590 questDebt.stage = 7;
6591 }
6592 ShowDialog("loytel", "debt" + questDebt.stage);
6593 return;
6594 }
6595 break;
6596 }
6597 case "farris":
6598 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3")
6599 {
6600 ShowDialog("_chara");
6601 return;
6602 }
6603 switch (EClass.game.quests.GetPhase<QuestExploration>())
6604 {
6605 case -1:
6606 ShowDialog("farris", "nymelle_noQuest");
6607 break;
6608 case 0:
6609 ShowDialog("farris", "nymelle_first");
6610 break;
6611 case 1:
6612 ShowDialog("farris", "home_first");
6613 break;
6614 default:
6615 ShowDialog("_chara");
6616 break;
6617 }
6618 return;
6619 case "ashland":
6620 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv)
6621 {
6622 SoundManager.ForceBGM();
6623 LayerDrama.ActivateMain("mono", "nymelle_crystal");
6624 }
6625 else
6626 {
6627 ShowDialog("ashland");
6628 }
6629 return;
6630 case "fiama":
6631 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv)
6632 {
6633 SoundManager.ForceBGM();
6634 LayerDrama.ActivateMain("mono", "nymelle_crystal");
6635 }
6637 {
6639 {
6640 EClass.player.flags.fiamaFirstDream = true;
6641 ShowDialog("fiama", "firstDream");
6642 }
6644 {
6645 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
6646 {
6647 EClass.player.flags.fiamaStoryBookGiven = true;
6648 EClass.player.DropReward(ThingGen.Create("book_story"));
6649 });
6650 }
6651 else
6652 {
6653 ShowDialog("fiama");
6654 }
6655 }
6656 else
6657 {
6658 ShowDialog("fiama");
6659 }
6660 return;
6661 case "big_sister":
6663 {
6664 ShowDialog("big_sister", "little_saved");
6665 EClass.player.flags.little_saved = false;
6666 return;
6667 }
6669 {
6670 ShowDialog("big_sister", "little_dead");
6671 EClass.player.flags.little_killed = false;
6672 return;
6673 }
6674 break;
6675 }
6676 if (trait is TraitGuildDoorman)
6677 {
6678 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
6679 ShowDialog("guild_doorman", "main", tag);
6680 return;
6681 }
6682 if (trait is TraitGuildClerk)
6683 {
6684 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
6685 ShowDialog("guild_clerk", "main", tag2);
6686 return;
6687 }
6688 bool flag = true;
6689 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
6690 {
6691 flag = false;
6692 }
6693 if (flag && File.Exists(CorePath.DramaData + id + ".xlsx"))
6694 {
6695 ShowDialog(id);
6696 }
6697 else
6698 {
6699 ShowDialog("_chara");
6700 }
6701 }
6702 }
void ShowDialog()
Definition: Chara.cs:6539
static string DramaData
Definition: CorePath.cs:178
static string forceJump
Definition: LayerDrama.cs:18
static LayerDrama ActivateMain(string idSheet, string idStep=null, Chara target=null, Card ref1=null, string tag="")
Definition: LayerDrama.cs:61
bool loytelEscaped
Definition: Player.cs:470
int storyFiama
Definition: Player.cs:590
bool little_saved
Definition: Player.cs:434
bool fiamaStoryBookGiven
Definition: Player.cs:290
bool fiamaFirstDream
Definition: Player.cs:302
bool little_killed
Definition: Player.cs:446
bool EnableDreamStory
Definition: Player.cs:1188
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2452
bool paid
Definition: QuestDebt.cs:10
int stage
Definition: QuestDebt.cs:13
bool OnShowDialog(Chara c)
Quest Add(string id, string idGlobalChara=null)
Definition: QuestManager.cs:29
Quest Get(string id)
void Complete()
Definition: Quest.cs:468
ReligionHealing Healing
bool IsCrystalLv
Definition: Zone_Nymelle.cs:25
virtual bool IsFestival
Definition: Zone.cs:206

References EClass._zone, LayerDrama.ActivateMain(), QuestManager.Add(), Quest.Complete(), ThingGen.Create(), CorePath.DramaData, Player.DropReward(), Player.EnableDreamStory, faith, Player.Flags.fiamaFirstDream, Player.Flags.fiamaStoryBookGiven, Player.flags, LayerDrama.forceJump, EClass.game, QuestManager.Get(), ReligionManager.Healing, Spatial.id, Zone_Nymelle.IsCrystalLv, Zone.IsFestival, Card.isHidden, Player.Flags.little_killed, Player.Flags.little_saved, Player.Flags.loytelEscaped, QuestManager.OnShowDialog(), QuestDebt.paid, EClass.pc, EClass.player, Game.quests, Game.religions, QuestDebt.stage, and Player.Flags.storyFiama.

Referenced by ZonePreEnterEncounter.Execute(), ZonePreEnterOnCompleteQuestInstance.Execute(), LayerInteraction.GetPage(), Quest.OnClickQuest(), InspectGroupChara.OnSetActions(), ActChat.Perform(), MeetingMerchant.PlayDrama(), LayerHire.Refresh(), and LayerQuestBoard.RefreshHire().

◆ ShowDialog() [2/2]

LayerDrama Chara.ShowDialog ( string  book,
string  step = "main",
string  tag = "" 
)
inline

Definition at line 6704 of file Chara.cs.

6705 {
6706 return _ShowDialog(book, null, step, tag);
6707 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:6709

References book.

◆ Sleep()

void Chara.Sleep ( Thing  bed = null,
Thing  pillow = null,
bool  pickup = false,
ItemPosition  posBed = null,
ItemPosition  posPillow = null 
)
inline

Definition at line 8968 of file Chara.cs.

8969 {
8970 RemoveCondition<ConAwakening>();
8971 AddCondition(Condition.Create(100, delegate(ConSleep con)
8972 {
8973 con.pcSleep = 15;
8974 con.pcBed = bed;
8975 con.pcPillow = pillow;
8976 con.pickup = pickup;
8977 con.posBed = posBed;
8978 con.posPillow = posPillow;
8979 }), force: true);
8980 }

References bed, and Condition.Create().

Referenced by AI_Sleep.OnProgressComplete(), HotItemActionSleep.Perform(), and AI_PassTime.Run().

◆ SplitHeld()

Card Chara.SplitHeld ( int  a)
inline

Definition at line 4293 of file Chara.cs.

4294 {
4295 return held.Split(a);
4296 }

References Card.Split().

Referenced by ActPlan._Update(), AI_HaulResource.Run(), and HotItemHeld.TrySetAct().

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1642 of file Chara.cs.

1643 {
1644 bool flag = EClass._map.FindThing((Thing t) => t.IsInstalled && t.pos.Equals(EClass.pc.pos) && t.trait is TraitStairsUp) != null;
1645 Say(flag ? "dmgBurdenStairs" : "dmgBurdenFallDown", this);
1646 int num = MaxHP;
1647 if (Evalue(1421) > 0)
1648 {
1649 num = mana.max;
1650 }
1651 int num2 = (num * (base.ChildrenWeight * 100 / WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
1652 if (base.hp <= 0)
1653 {
1654 num2 *= 2;
1655 }
1656 DamageHP(num2, flag ? AttackSource.BurdenStairs : AttackSource.BurdenFallDown);
1657 }
Thing FindThing(Func< Thing, bool > func)
Definition: Map.cs:2577

References EClass._map, Card.DamageHP(), Point.Equals(), Card.Evalue(), Map.FindThing(), Card.IsInstalled, mana, Stats.max, MaxHP, EClass.pc, Card.pos, Card.Say(), Card.trait, and WeightLimit.

Referenced by TraitTrap.OnActivateTrap(), and Scene.OnUpdate().

◆ SyncRide() [1/2]

void Chara.SyncRide ( )
inline

Definition at line 3655 of file Chara.cs.

3656 {
3657 if (host != null)
3658 {
3659 host.SyncRide();
3660 }
3661 if (ride != null)
3662 {
3663 SyncRide(ride);
3664 }
3665 if (parasite != null)
3666 {
3668 }
3669 }

References SyncRide().

Referenced by _Move(), Card._Move(), Card.MoveImmediate(), ActRide.Ride(), and SyncRide().

◆ SyncRide() [2/2]

void Chara.SyncRide ( Chara  c)
inline

Definition at line 3671 of file Chara.cs.

3672 {
3673 if (!c.pos.Equals(pos))
3674 {
3675 if (!pos.IsValid)
3676 {
3677 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
3678 pos = new Point();
3679 }
3680 EClass._map.MoveCard(pos, c);
3681 }
3682 }

References EClass._map, Debug, Point.Equals(), Map.MoveCard(), and Card.pos.

◆ TalkTopic()

string Chara.TalkTopic ( string  topic = "calm")
inline

Definition at line 6468 of file Chara.cs.

6469 {
6470 if (host == null && !IsInActiveZone)
6471 {
6472 return null;
6473 }
6474 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
6475 {
6476 return null;
6477 }
6478 if (IsPCParty)
6479 {
6480 int num = EClass.pc.party.members.Count - 1;
6481 switch (topic)
6482 {
6483 case "calm":
6484 if (EClass.rnd(num * 5) != 0)
6485 {
6486 return null;
6487 }
6488 break;
6489 case "aggro":
6490 if (EClass.rnd(num * 10) != 0)
6491 {
6492 return null;
6493 }
6494 break;
6495 case "kill":
6496 if (EClass.rnd(num * 3) != 0)
6497 {
6498 return null;
6499 }
6500 break;
6501 case "fov":
6502 return null;
6503 }
6504 }
6505 string topicText = GetTopicText(topic);
6506 if (topicText.IsEmpty())
6507 {
6508 return null;
6509 }
6510 string text = "_bracketTalk".lang();
6511 bool flag = topicText.StartsWith("*");
6512 bool flag2 = topicText.StartsWith("(");
6513 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
6514 topicText = ApplyTone(topicText);
6515 topicText = topicText.Replace("~", "*");
6516 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
6517 Msg.Say(topicText.Replace("&", ""));
6518 if (topic == "dead")
6519 {
6520 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
6521 }
6522 else if (flag || flag3 || flag2)
6523 {
6524 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
6525 }
6526 return topicText;
6527 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:6390
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:6469
string GetTopicText(string topic="calm")
Definition: Chara.cs:6435
static UI ui
Definition: EClass.cs:16
Color Thinking
Definition: MsgColors.cs:17
Color Talk
Definition: MsgColors.cs:7

References Color, Msg.colors, isSynced, MsgColors.Ono, GameSetting.render, EClass.rnd(), Msg.Say(), Msg.SetColor(), EClass.setting, MsgColors.Talk, GameSetting.RenderSetting.tc, GameSetting.RenderSetting.TCSetting.textPosDead, MsgColors.Thinking, and EClass.ui.

Referenced by AI_Idle.Run().

◆ Tick()

override void Chara.Tick ( )
inlinevirtual

Reimplemented from Card.

Definition at line 3684 of file Chara.cs.

3685 {
3686 SyncRide();
3687 combatCount--;
3688 ignoreSPAbsorb = false;
3689 if (IsPC)
3690 {
3691 if (hasMovedThisTurn)
3692 {
3693 pos.Things.ForeachReverse(delegate(Thing t)
3694 {
3695 t.trait.OnStepped(this);
3696 });
3697 if (isDead)
3698 {
3699 return;
3700 }
3701 hasMovedThisTurn = false;
3703 {
3704 EClass.player.haltMove = false;
3705 ActionMode.Adv.TryCancelInteraction(sound: false);
3706 EInput.Consume(1);
3707 return;
3708 }
3709 if (EClass._zone.IsRegion)
3710 {
3712 {
3713 foreach (Chara member in EClass.pc.party.members)
3714 {
3715 if (member.hunger.value > 65)
3716 {
3717 member.InstantEat(null, sound: false);
3718 }
3719 }
3720 }
3721 Chara chara = null;
3723 if (cell2 != null && (cell2.zone == null || (cell2.zone is Zone_Field && !cell2.zone.IsPCFaction)))
3724 {
3725 foreach (Chara chara2 in EClass._map.charas)
3726 {
3727 if (!chara2.IsPCFactionOrMinion && !chara2.IsGlobal && chara2.pos.Equals(EClass.pc.pos))
3728 {
3729 chara = chara2;
3730 break;
3731 }
3732 }
3733 }
3734 if (chara != null)
3735 {
3737 {
3738 EClass.player.safeTravel = 5 + EClass.rnd(5);
3739 }
3740 EClass._zone.RemoveCard(chara);
3741 Msg.Say("encounter");
3742 EClass.player.EnterLocalZone(encounter: true, chara);
3743 }
3744 else if (EClass.player.safeTravel <= 0)
3745 {
3746 if (cell2 != null && cell2.zone == null && !EClass.debug.ignoreEncounter)
3747 {
3749 if (!tileInfo.shore)
3750 {
3751 bool num = EClass.pc.HasCondition<ConWardMonster>();
3752 bool flag = EClass.pc.HasCondition<ConDrawMonster>();
3753 bool flag2 = EClass.game.quests.Get<QuestEscort>() != null;
3754 int num2 = (tileInfo.isRoad ? 22 : 12);
3755 if (flag2)
3756 {
3757 num2 = (tileInfo.isRoad ? 16 : 10);
3758 }
3759 if (num)
3760 {
3761 num2 *= (flag2 ? 2 : 20);
3762 }
3763 if (flag)
3764 {
3765 num2 /= 2;
3766 }
3767 if (EClass.rnd(num2) == 0)
3768 {
3769 Msg.Say("encounter");
3770 if (!flag)
3771 {
3772 EClass.player.safeTravel = 5 + EClass.rnd(5);
3773 }
3774 EClass.player.EnterLocalZone(encounter: true);
3775 }
3776 }
3777 }
3778 }
3779 else
3780 {
3782 }
3783 }
3784 }
3785 EClass.player.pickupDelay = 0f;
3786 if (EClass.player.returnInfo != null)
3787 {
3789 if (EClass.player.returnInfo.turns <= 0)
3790 {
3792 {
3793 int uidDest = EClass.player.returnInfo.uidDest;
3794 Zone zone = null;
3795 if (uidDest != 0)
3796 {
3797 zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
3798 }
3799 if (zone == null || zone.destryoed)
3800 {
3801 zone = EClass.world.region;
3802 }
3804 {
3805 Msg.Say("returnFail");
3806 }
3807 else
3808 {
3809 Msg.Say("returnComplete");
3810 EClass.player.uidLastTravelZone = 0;
3812 EClass.player.lastZonePos = null;
3813 }
3814 EClass.player.returnInfo = null;
3815 return;
3816 }
3817 EClass.player.returnInfo = null;
3818 Msg.Say("returnOverweight");
3819 }
3820 }
3821 if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
3822 {
3824 return;
3825 }
3828 {
3829 RecipeUpdater.dirty = true;
3830 }
3832 }
3833 else
3834 {
3835 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (float)EClass.pc.Speed / (float)Speed);
3836 hasMovedThisTurn = false;
3837 }
3840 {
3841 return;
3842 }
3844 if (host != null && !consumeTurn)
3845 {
3846 if (host.ride == this && ((host.hasMovedThisTurn && IsInCombat) || (enemy != null && turn % 3 != 0)))
3847 {
3848 consumeTurn = true;
3849 }
3850 if (host.parasite == this && enemy != null && EClass.rnd(10) > EClass.rnd(host.Evalue(227) + 10))
3851 {
3852 if (Dist(enemy) < 3 && EClass.rnd(2) == 0)
3853 {
3854 Say("parasite_fail", this, host);
3855 if (EClass.rnd(2) == 0 && GetInt(106) == 0)
3856 {
3857 Talk("parasite_fail");
3858 }
3859 }
3860 consumeTurn = true;
3861 }
3862 }
3863 if (consumeTurn)
3864 {
3865 if (IsPC)
3866 {
3868 }
3869 }
3870 else
3871 {
3872 if (base.isRestrained)
3873 {
3874 TryUnrestrain();
3875 }
3876 if (enemy != null)
3877 {
3879 {
3880 enemy = null;
3881 }
3882 else if (!IsPC && (ai.CancelOnAggro || !ai.IsRunning))
3883 {
3884 SetAIAggro();
3885 }
3886 }
3887 if (HasNoGoal || !ai.IsRunning)
3888 {
3889 ChooseNewGoal();
3890 }
3891 ai.Tick();
3892 }
3893 Cell cell = base.Cell;
3895 {
3896 AddCondition<ConWet>(50);
3897 if (pos.IsHotSpring)
3898 {
3899 hygiene.Mod(2);
3900 }
3901 }
3902 if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode)
3903 {
3904 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
3905 }
3906 CellEffect e;
3907 if (cell.effect != null)
3908 {
3909 e = cell.effect;
3910 switch (e.id)
3911 {
3912 case 1:
3913 case 2:
3914 case 4:
3915 if (IsLevitating)
3916 {
3917 Say("levitating");
3918 break;
3919 }
3920 AddCondition<ConWet>(50);
3921 ProcEffect();
3922 break;
3923 case 3:
3924 PlaySound("fire_step");
3925 AddCondition<ConBurning>(30);
3926 break;
3927 case 5:
3928 if (!isWet)
3929 {
3930 PlaySound("bubble");
3931 AddCondition<ConWet>(30);
3932 ProcEffect();
3933 }
3934 break;
3935 case 6:
3936 if (hasMovedThisTurn)
3937 {
3938 Say("abMistOfDarkness_step", this);
3939 }
3940 break;
3941 }
3942 }
3943 if (IsPC)
3944 {
3945 if (EClass.player.currentHotItem.Thing != null)
3946 {
3948 }
3950 }
3951 void ClearEffect()
3952 {
3953 EClass._map.SetLiquid(cell.x, cell.z, 0, 0);
3954 }
3955 void ProcEffect()
3956 {
3957 if (e.idEffect != 0)
3958 {
3959 ActEffect.ProcAt(e.idEffect, e.power, e.isBlessed ? BlessedState.Blessed : (e.isCursed ? BlessedState.Cursed : BlessedState.Normal), this, this, new Point(pos), e.isHostileAct, new ActRef
3960 {
3961 aliasEle = EClass.sources.elements.map[e.idEle].alias,
3962 n1 = e.n1
3963 });
3964 ClearEffect();
3965 }
3966 }
3967 }
virtual bool CancelOnAggro
Definition: AIAct.cs:80
bool TryCancelInteraction(bool sound=true)
Definition: AM_Adv.cs:1069
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
virtual void OnEndPlayerTurn()
int turn
Definition: Card.cs:61
void TryUnrestrain(bool force=false, Chara c=null)
Definition: Card.cs:6703
bool isHostileAct
Definition: CellEffect.cs:74
EffectId idEffect
Definition: CellEffect.cs:38
bool isCursed
Definition: CellEffect.cs:98
bool isBlessed
Definition: CellEffect.cs:86
CellEffect effect
Definition: Cell.cs:94
byte z
Definition: Cell.cs:58
byte x
Definition: Cell.cs:56
void InstantEat(Thing t=null, bool sound=true)
Definition: Chara.cs:7032
int Speed
Definition: Chara.cs:949
static bool consumeTurn
Definition: Chara.cs:176
void SetAIAggro()
Definition: Chara.cs:8186
bool ignoreSPAbsorb
Definition: Chara.cs:146
void ChooseNewGoal()
Definition: Chara.cs:8092
bool WillConsumeTurn()
Definition: Chara.cs:3427
bool ignoreEncounter
Definition: CoreDebug.cs:200
bool shore
Definition: EloMap.cs:50
TileInfo GetTileInfo(int gx, int gy)
Definition: EloMap.cs:287
ConfigPreference preference
Definition: Game.cs:96
virtual Thing Thing
Definition: HotItem.cs:38
void SetLiquid(int x, int z, CellEffect effect=null)
Definition: Map.cs:1471
int turns
Definition: Player.cs:84
bool haltMove
Definition: Player.cs:1091
float baseActTime
Definition: Player.cs:1119
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1862
HotItem currentHotItem
Definition: Player.cs:1020
int safeTravel
Definition: Player.cs:843
int eloY
Definition: Point.cs:81
int eloX
Definition: Point.cs:79
bool IsHotSpring
Definition: Point.cs:363
bool destryoed
Definition: Spatial.cs:45
virtual void OnTickHeld()
Definition: Trait.cs:1041
Definition: ActRef.cs:2

References EClass._map, EClass._zone, Game.activeZone, ActionMode.Adv, CoreConfig.GameConfig.alwaysUpdateRecipe, ConfigPreference.autoEat, Player.baseActTime, burden, AIAct.CancelOnAggro, Cell.CanSuffocate(), Map.charas, Core.config, Game.config, EInput.Consume(), EClass.core, Player.currentHotItem, EClass.debug, Spatial.destryoed, Cell.effect, Scene.elomap, Point.eloX, Point.eloY, Player.EnterLocalZone(), Point.Equals(), Card.Evalue(), CoreConfig.game, EClass.game, QuestManager.Get(), EloMap.GetCell(), Stats.GetPhase(), EloMap.GetTileInfo(), CoreDebug.godMode, Player.haltMove, HasCondition(), hasMovedThisTurn, hunger, CellEffect.id, CellEffect.idEffect, CoreDebug.ignoreEncounter, CoreDebug.ignoreWeight, InstantEat(), IsAliveInCurrentZone, CellEffect.isBlessed, CellEffect.isCursed, Cell.isFloating, IsGlobal, CellEffect.isHostileAct, Zone.IsPCFaction, Card.IsPCFactionOrMinion, Spatial.IsRegion, AIAct.IsRunning, Cell.IsTopWaterAndNoSnow, Zone.IsUnderwater, SpatialManager.map, Party.members, Stats.Mod(), MoveZone(), BaseGameScreen.OnEndPlayerTurn(), Trait.OnStepped(), Trait.OnTickHeld(), parasite, party, EClass.pc, EClass.player, Card.pos, CellEffect.power, Game.Config.preference, ActEffect.ProcAt(), Game.quests, World.region, Zone.RemoveCard(), Player.returnInfo, ride, EClass.rnd(), Player.safeTravel, Msg.Say(), EClass.scene, EClass.screen, Map.SetLiquid(), AM_Adv.SetTurbo(), EloMap.TileInfo.shore, Game.spatials, Speed, Player.stats, HotItem.Thing, AIAct.Tick(), Card.trait, AM_Adv.TryCancelInteraction(), Player.ReturnInfo.turns, Player.Stats.turns, Player.ReturnInfo.uidDest, Stats.value, EClass.world, Cell.x, Cell.z, and EloMap.Cell.zone.

◆ TickConditions()

void Chara.TickConditions ( )
inline

Definition at line 3439 of file Chara.cs.

3440 {
3441 if (_cooldowns != null)
3442 {
3443 TickCooldown();
3444 }
3445 turn++;
3446 consumeTurn = false;
3447 preventRegen = false;
3448 emoIcon = Emo2.none;
3449 if (base.isSummon)
3450 {
3451 base.c_summonDuration--;
3452 if (base.c_summonDuration <= 0)
3453 {
3454 Die();
3455 return;
3456 }
3457 }
3459 {
3460 AddCondition<ConWet>(20);
3461 }
3462 switch (turn % 50)
3463 {
3464 case 0:
3465 happiness = (hunger.value + stamina.value + depression.value + bladder.value + hygiene.value) / 5;
3466 break;
3467 case 1:
3468 if (!IsPC || !EClass.debug.godMode)
3469 {
3470 if (EClass.rnd(2) == 0 && !HasCondition<ConAwakening>())
3471 {
3472 sleepiness.Mod(1);
3473 }
3474 if (EClass.rnd(3) == 0)
3475 {
3476 hunger.Mod(1);
3477 }
3478 if (IsPC && (sleepiness.GetPhase() != 0 || stamina.GetPhase() <= 1))
3479 {
3480 Tutorial.Play("sleep");
3481 }
3482 }
3483 break;
3484 case 2:
3485 if (parasite != null)
3486 {
3487 ModExp(227, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(227) - parasite.LV) * 25));
3488 }
3489 if (ride != null)
3490 {
3491 ModExp(226, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(226) - ride.LV) * 25));
3492 }
3493 break;
3494 case 3:
3495 {
3496 int phase = hygiene.GetPhase();
3497 int num = 0;
3498 num = ((!IsPC) ? ((phase > 3) ? 50 : 0) : ((phase > 3) ? 50 : 0));
3499 if (num > EClass.rnd(100))
3500 {
3501 hygiene.Mod(-1);
3502 }
3503 break;
3504 }
3505 }
3506 if (turn % 200 == 0)
3507 {
3509 }
3510 if (IsPCParty)
3511 {
3512 if (dirtyWeight)
3513 {
3514 CalcBurden();
3515 }
3516 int phase2 = burden.GetPhase();
3517 int phase3 = hunger.GetPhase();
3518 if (phase3 >= 4)
3519 {
3520 preventRegen = true;
3521 }
3522 if (EClass.rnd(EClass._zone.IsRegion ? 100 : 30) == 0 && phase2 >= 3)
3523 {
3524 Say("dmgBurden", this);
3525 DamageHP(MaxHP * (base.ChildrenWeight * 100 / WeightLimit) / 1000 + 1, AttackSource.Burden);
3526 if (isDead)
3527 {
3528 return;
3529 }
3530 }
3531 if (EClass.rnd(12) == 0)
3532 {
3533 if (IsPC)
3534 {
3535 if (phase2 > 0)
3536 {
3537 ModExp(207, 1 + phase2 * phase2);
3538 }
3539 }
3540 else
3541 {
3542 ModExp(207, 4);
3543 }
3544 }
3545 if (IsPC)
3546 {
3547 if (phase3 >= 5)
3548 {
3549 if (!(ai is AI_Eat) && EClass.rnd(5) == 0)
3550 {
3551 DamageHP(1 + EClass.rnd(2) + MaxHP / 50, AttackSource.Hunger);
3552 }
3553 if (!isDead && EClass.rnd(3) == 0)
3554 {
3555 stamina.Mod(-1);
3556 }
3557 }
3558 if (isDead)
3559 {
3560 return;
3561 }
3562 phase3 = stamina.GetPhase();
3563 if (phase3 <= 0)
3564 {
3565 preventRegen = true;
3566 }
3568 {
3569 if (EClass.rnd(100) == 0 && !isConfused)
3570 {
3571 Msg.Say("rain_confuse");
3572 AddCondition<ConConfuse>(500);
3573 }
3574 if (EClass.rnd(300) == 0 && !isBlind)
3575 {
3576 Msg.Say("rain_confuse");
3577 AddCondition<ConBlind>(200);
3578 }
3579 }
3580 if (turn % (200000 / Mathf.Max(100 + Evalue(409) * 10, 50)) == 0)
3581 {
3582 ModCorruption(1);
3583 }
3584 }
3585 }
3586 if (!IsPC)
3587 {
3588 int num2 = Evalue(409);
3589 if (num2 > 0 && turn % (200000 / Mathf.Max(100 + num2 * 10, 50)) == 0)
3590 {
3591 ModCorruption(1);
3592 }
3593 }
3594 for (int num3 = conditions.Count - 1; num3 >= 0; num3--)
3595 {
3596 if (num3 < conditions.Count)
3597 {
3598 Condition condition = conditions[num3];
3599 if (!condition.TimeBased)
3600 {
3601 condition.Tick();
3602 }
3603 if (!condition.IsKilled)
3604 {
3605 if (condition.ConsumeTurn)
3606 {
3607 consumeTurn = true;
3608 }
3609 if (condition.PreventRegen)
3610 {
3611 preventRegen = true;
3612 }
3613 if (condition.EmoIcon != 0 && condition.EmoIcon > emoIcon)
3614 {
3615 emoIcon = condition.EmoIcon;
3616 }
3617 }
3618 if (isDead)
3619 {
3620 return;
3621 }
3622 }
3623 }
3624 if (id == "tsunami")
3625 {
3626 if (elements.Base(79) < 30)
3627 {
3628 Die();
3629 return;
3630 }
3631 if (IsInCombat)
3632 {
3633 elements.SetTo(79, elements.Base(79) * 3 / 4);
3634 }
3635 }
3636 if (!preventRegen)
3637 {
3638 if (EClass.rnd(25) == 0 && base.hp < MaxHP)
3639 {
3640 HealHP(EClass.rnd(Evalue(300) / 3 + 1) + 1);
3641 elements.ModExp(300, 8);
3642 }
3643 if (EClass.rnd(8) == 0 && mana.value < mana.max)
3644 {
3645 mana.Mod(EClass.rnd(Evalue(301) / 2 + 1) + 1);
3646 elements.ModExp(301, 8);
3647 }
3648 if (EClass.rnd(20) == 0 && !IsPC && stamina.value < stamina.max)
3649 {
3650 stamina.Mod(EClass.rnd(5) + 1);
3651 }
3652 }
3653 }
Emo2
Definition: Emo2.cs:2
Definition: AI_Eat.cs:5
virtual bool PreventRegen
virtual bool TimeBased
virtual Emo2 EmoIcon
Definition: BaseStats.cs:17
bool dirtyWeight
Definition: Card.cs:81
bool HasRoof
Definition: Cell.cs:648
void TickCooldown()
Definition: Chara.cs:8073
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None)
Definition: Chara.cs:4903
void DiminishTempElements(int a=1)
Definition: Chara.cs:9535
Emo2 emoIcon
Definition: Chara.cs:106
void ModCorruption(int a)
Definition: Chara.cs:9063
bool isBlind
Definition: Chara.cs:130
static bool preventRegen
Definition: Chara.cs:178
void CalcBurden()
Definition: Chara.cs:1627
virtual bool IsKilled
Definition: Condition.cs:7
override void Tick()
Definition: Condition.cs:70
void SetTo(int id, int v)
bool IsIndoor
Definition: Map.cs:131
static void Play(string idStep)
Definition: Tutorial.cs:7
bool IsRaining
Definition: Weather.cs:117

References EClass._map, EClass._zone, BaseCondition.ConsumeTurn, Weather.CurrentCondition, EClass.debug, BaseStats.EmoIcon, Stats.GetPhase(), CoreDebug.godMode, Card.HasElement(), Map.IsIndoor, Condition.IsKilled, Weather.IsRaining, Spatial.IsRegion, Card.LV, Stats.max, Stats.Mod(), EClass.pc, Tutorial.Play(), BaseCondition.PreventRegen, EClass.rnd(), Msg.Say(), Condition.Tick(), BaseCondition.TimeBased, Stats.value, World.weather, and EClass.world.

Referenced by _Move().

◆ TickCooldown()

void Chara.TickCooldown ( )
inline

Definition at line 8073 of file Chara.cs.

8074 {
8075 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8076 {
8077 if (_cooldowns[num] % 1000 == 1)
8078 {
8079 _cooldowns.RemoveAt(num);
8080 }
8081 else
8082 {
8083 _cooldowns[num]--;
8084 }
8085 }
8086 if (_cooldowns.Count == 0)
8087 {
8088 _cooldowns = null;
8089 }
8090 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 8468 of file Chara.cs.

8469 {
8471 if (span != TimeTable.Span.Work && span != 0)
8472 {
8473 return;
8474 }
8475 WorkSummary workSummary = GetWorkSummary();
8476 if (span == TimeTable.Span.Work)
8477 {
8478 if (workSummary.work != null)
8479 {
8480 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
8481 }
8482 }
8483 else if (workSummary.hobbies.Count > 0)
8484 {
8485 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
8486 }
8487 }
bool IsRealTime
Definition: VirtualDate.cs:7
WorkSession work
Definition: WorkSummary.cs:10
List< WorkSession > hobbies
Definition: WorkSummary.cs:13

References TimeTable.GetSpan(), WorkSummary.hobbies, Date.hour, VirtualDate.IsRealTime, and WorkSummary.work.

◆ ToString()

override string Chara.ToString ( )
inline

Definition at line 1024 of file Chara.cs.

1025 {
1026 return base.Name + "(" + ai?.ToString() + ")" + pos?.ToString() + "/" + base.ExistsOnMap + "/" + isDead;
1027 }
override string ToString()
Definition: Point.cs:512

References ai, isDead, Card.pos, AIAct.ToString(), and Point.ToString().

Referenced by RefreshSpeed(), ContentQuest.SelectQuest(), and GoalCombat.TryUseAbility().

◆ TryAbsorbRod()

void Chara.TryAbsorbRod ( Thing  t)
inline

Definition at line 4081 of file Chara.cs.

4082 {
4083 if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
4084 {
4085 return;
4086 }
4087 Say("absorbRod", this, t);
4088 TraitRod rod = t.trait as TraitRod;
4089 bool flag = false;
4090 if (rod.source != null)
4091 {
4092 using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
4093 if (enumerator.MoveNext())
4094 {
4095 SourceElement.Row current = enumerator.Current;
4096 if (IsPC)
4097 {
4098 GainAbility(current.id, t.c_charges * 100);
4099 flag = true;
4100 }
4101 }
4102 }
4103 if (!flag)
4104 {
4105 mana.Mod(-50 * t.c_charges);
4106 }
4107 t.c_charges = 0;
4109 }
int c_charges
Definition: Card.cs:1241
void GainAbility(int ele, int mtp=100)
Definition: Chara.cs:9305

References Card.c_charges, SourceManager.elements, SourceElement.Row.id, Stats.Mod(), rod, LayerInventory.SetDirty(), EClass.sources, and Card.trait.

Referenced by ActZap.Perform().

◆ TryAssignBed()

TraitBed Chara.TryAssignBed ( )
inline

Definition at line 6812 of file Chara.cs.

6813 {
6814 if (!IsPCFaction && !IsGuest())
6815 {
6816 return null;
6817 }
6818 foreach (Card item in EClass._map.props.installed.all)
6819 {
6820 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
6821 {
6822 traitBed.AddHolder(this);
6823 Msg.Say("claimBed", this);
6824 return traitBed;
6825 }
6826 }
6827 return null;
6828 }
bool CanAssign(Chara c)
Definition: TraitBed.cs:154

References EClass._map, TraitBed.AddHolder(), Props.all, TraitBed.CanAssign(), PropsManager.installed, item, Map.props, and Msg.Say().

Referenced by GoalSleep.OnSimulatePosition(), AI_Idle.Run(), GoalSleep.Run(), and GoalVisitorGuest.Run().

◆ TryDropBossLoot()

void Chara.TryDropBossLoot ( )
inline

Definition at line 5207 of file Chara.cs.

5208 {
5210 {
5211 return;
5212 }
5213 int num = 0;
5214 bool flag = false;
5215 bool flag2 = false;
5216 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5217 TreasureType type = TreasureType.BossQuest;
5218 if (EClass._zone.Boss == this)
5219 {
5220 type = TreasureType.BossNefia;
5221 num = 2 + EClass.rnd(2);
5222 flag = (flag2 = true);
5223 EClass._zone.Boss = null;
5224 Msg.Say("boss_win", EClass._zone.Name);
5226 {
5227 Msg.Say("boss_win_void", EClass._zone.Name);
5228 EClass.player.flags.KilledBossInVoid = true;
5229 }
5230 if (EClass._zone.IsNefia)
5231 {
5234 EClass.Sound.StopBGM(2f);
5235 SE.Play("Jingle/fanfare2");
5236 EClass._zone.SetBGM(114);
5237 }
5240 }
5241 switch (id)
5242 {
5243 case "vernis_boss":
5244 num = 5;
5245 flag = (flag2 = true);
5246 EClass.Sound.StopBGM(3f);
5247 EClass._zone.SetBGM(1, refresh: false);
5248 if (EClass.game.quests.GetPhase<QuestVernis>() == 8)
5249 {
5250 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5251 }
5252 break;
5253 case "melilith_boss":
5254 num = 5;
5255 flag = (flag2 = true);
5256 EClass.Sound.StopBGM(3f);
5257 EClass._zone.SetBGM(1, refresh: false);
5258 break;
5259 case "isygarad":
5260 {
5261 num = 5;
5262 flag = (flag2 = true);
5263 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5264 if (questExploration != null)
5265 {
5266 SE.Play("kill_boss");
5267 questExploration.ChangePhase(3);
5268 EClass.Sound.StopBGM(3f);
5269 EClass._zone.SetBGM(1, refresh: false);
5270 }
5271 break;
5272 }
5273 case "swordkeeper":
5274 num = 10;
5275 flag = true;
5276 SE.Play("kill_boss");
5277 SoundManager.ForceBGM();
5278 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5279 break;
5280 }
5281 if (flag)
5282 {
5283 SE.Play("kill_boss");
5284 }
5285 if (num != 0)
5286 {
5287 EClass.player.willAutoSave = true;
5288 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5289 point.SetBlock();
5290 point.SetObj();
5291 EClass._zone.AddCard(thing, point).Install();
5292 ThingGen.TryLickChest(thing);
5293 }
5294 if (flag2)
5295 {
5297 }
5298 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:410
long nefiaBeaten
Definition: Player.cs:127
void ModFame(int a)
Definition: Player.cs:2010
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:908
void SetBlock(int idMat=0, int idBlock=0)
Definition: Point.cs:898
void ChangePhase(int a)
Definition: Quest.cs:572
bool isConquered
Definition: Spatial.cs:382
static void TryLickChest(Thing chest)
Definition: ThingGen.cs:369
static Thing CreateTreasure(string id, int lv, TreasureType type=TreasureType.Map)
Definition: ThingGen.cs:224
static Thing CreateScroll(int ele, int num=1)
Definition: ThingGen.cs:177
void SetBGM(List< int > ids, bool refresh=true)
Definition: Zone.cs:2810
virtual bool IsNefia
Definition: Zone.cs:280
Chara Boss
Definition: Zone.cs:83

References EClass._zone, LayerDrama.Activate(), Zone.AddCard(), Zone.Boss, Quest.ChangePhase(), ThingGen.CreateScroll(), ThingGen.CreateTreasure(), Zone.DangerLv, EClass.debug, CoreDebug.enable, Player.flags, EClass.game, QuestManager.Get(), Point.GetNearestPoint(), Zone.GetTopZone(), Card.Install(), Spatial.isConquered, Zone.IsNefia, Player.Flags.KilledBossInVoid, Player.ModFame(), Player.ModKarma(), Spatial.Name, Player.Stats.nefiaBeaten, EClass.player, Game.quests, EClass.rnd(), EClass.rndHalf(), Msg.Say(), Zone.SetBGM(), Point.SetBlock(), Point.SetObj(), EClass.Sound, Player.stats, and ThingGen.TryLickChest().

Referenced by ActEffect.Proc().

◆ TryDropCarryOnly()

void Chara.TryDropCarryOnly ( )
inline

Definition at line 4298 of file Chara.cs.

4299 {
4300 if (held != null && held.trait.CanOnlyCarry)
4301 {
4302 DropHeld();
4303 }
4304 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4305 {
4306 DropThing(item);
4307 }
4308 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4330

References Trait.CanOnlyCarry, item, and Card.trait.

◆ TryEquip()

bool Chara.TryEquip ( Thing  t,
bool  useFav = false 
)
inline

Definition at line 7157 of file Chara.cs.

7158 {
7159 if (!ShouldEquip(t, useFav))
7160 {
7161 return false;
7162 }
7163 if (t.category.slot == 0)
7164 {
7165 return false;
7166 }
7167 if (useFav)
7168 {
7169 BodySlot slot = body.GetSlot(t);
7170 switch (GetFavAttackStyle())
7171 {
7172 case AttackStyle.Default:
7173 case AttackStyle.TwoHand:
7174 if (t.IsMeleeWeapon)
7175 {
7176 slot = body.slotMainHand;
7177 }
7178 break;
7179 case AttackStyle.Shield:
7180 if (t.IsMeleeWeapon)
7181 {
7182 slot = body.slotMainHand;
7183 }
7184 break;
7185 }
7186 body.Equip(t, slot);
7187 }
7188 else
7189 {
7190 body.Equip(t);
7191 }
7192 Say("equip", this, t);
7193 return true;
7194 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7075

References Card.category, CharaBody.Equip(), CharaBody.GetSlot(), Card.IsMeleeWeapon, and CharaBody.slotMainHand.

Referenced by GiveGift(), ActEffect.Proc(), InvOwner.Transaction.Process(), and CharaBody.UnqeuipIfTooHeavy().

◆ TryEquipRanged()

bool Chara.TryEquipRanged ( )
inline

Definition at line 7277 of file Chara.cs.

7278 {
7279 if (IsPC)
7280 {
7282 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
7283 {
7284 ranged = thing;
7285 return true;
7286 }
7287 return false;
7288 }
7289 if (ranged != null && ranged.parent == this)
7290 {
7291 return true;
7292 }
7294 return ranged != null;
7295 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:7262

References Player.currentHotItem, Card.parent, EClass.player, and HotItem.Thing.

Referenced by TraitTrainingDummy.IdleUse(), ActRanged.Perform(), GoalCombat.TryMove(), and GoalCombat.TryUseRanged().

◆ TryGetThrowable()

Thing Chara.TryGetThrowable ( )
inline

Definition at line 7201 of file Chara.cs.

7202 {
7203 Thing dest = null;
7204 if (IsPC)
7205 {
7207 {
7208 return FindThrowable(hotbar: true);
7209 }
7210 return null;
7211 }
7212 things.Foreach(delegate(Thing t)
7213 {
7214 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7215 {
7216 dest = t;
7217 }
7218 });
7219 return dest;
7220 Thing FindThrowable(bool hotbar)
7221 {
7222 things.Foreach(delegate(Thing t)
7223 {
7224 if (dest == null)
7225 {
7226 if (t.IsHotItem)
7227 {
7228 if (!hotbar)
7229 {
7230 return;
7231 }
7232 }
7233 else if (hotbar)
7234 {
7235 return;
7236 }
7237 if (t.HasTag(CTAG.throwWeapon))
7238 {
7239 dest = t;
7240 }
7241 }
7242 });
7243 return dest;
7244 }
7245 }

References Game.Config.autoCombat, ConfigAutoCombat.bUseHotBar, Game.config, EClass.game, Card.HasTag(), and Card.IsHotItem.

Referenced by AI_PlayMusic.ThrowReward(), and GoalCombat.TryThrow().

◆ TryHoldCard()

bool Chara.TryHoldCard ( Card  t,
int  num = -1,
bool  pickHeld = false 
)
inline

Definition at line 4159 of file Chara.cs.

4160 {
4161 if (held == t)
4162 {
4163 return true;
4164 }
4165 if (t.isDestroyed || t.Num <= 0)
4166 {
4167 return false;
4168 }
4169 if (!CanPick(t))
4170 {
4171 if (t.parent == null)
4172 {
4173 EClass._zone.AddCard(t, pos);
4174 }
4175 return false;
4176 }
4177 HoldCard(t, num);
4178 return true;
4179 }
bool CanPick(Card c)
Definition: Chara.cs:3979
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4181

References EClass._zone, Zone.AddCard(), Card.isDestroyed, Card.Num, and Card.parent.

Referenced by Trait.OnUse(), AI_Grab< T >.Run(), and AI_Paint.Run().

◆ TryIdentify()

bool Chara.TryIdentify ( Thing  t,
int  count = 1,
bool  show = true 
)
inline

Definition at line 7413 of file Chara.cs.

7414 {
7415 int num = Evalue(289);
7416 if (num == 0)
7417 {
7418 return false;
7419 }
7420 int lV = t.LV;
7421 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
7422 {
7423 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
7424 int num2 = 50;
7425 if (lV > num)
7426 {
7427 num2 += (lV - num) * 10;
7428 }
7429 elements.ModExp(289, Mathf.Min(num2, 1000));
7430 return true;
7431 }
7432 return false;
7433 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:1987

References Thing.Identify(), Card.LV, Card.ModExp(), and EClass.rnd().

Referenced by Player.OnAdvanceHour().

◆ TryMove()

MoveResult Chara.TryMove ( Point  newPoint,
bool  allowDestroyPath = true 
)
inline

Definition at line 2494 of file Chara.cs.

2495 {
2496 foreach (Condition condition in conditions)
2497 {
2498 if (!condition.TryMove(newPoint))
2499 {
2500 return MoveResult.Fail;
2501 }
2502 }
2503 if (base.isRestrained)
2504 {
2505 if (!IsPC)
2506 {
2507 return MoveResult.Fail;
2508 }
2509 base.isRestrained = false;
2510 }
2511 if (!CanMoveTo(newPoint, allowDestroyPath))
2512 {
2513 return MoveResult.Fail;
2514 }
2515 return _Move(newPoint);
2516 }
virtual bool TryMove(Point p)

References _Move(), CanMoveTo(), conditions, IsPC, and BaseCondition.TryMove().

Referenced by MoveNeighborDefinitely(), MoveRandom(), GoalManualMove.Run(), AI_Goto.TryGoTo(), TryMoveFrom(), and TryMoveTowards().

◆ TryMoveFrom()

MoveResult Chara.TryMoveFrom ( Point  p)
inline

Definition at line 2454 of file Chara.cs.

2455 {
2457 {
2458 return MoveResult.Fail;
2459 }
2460 Point point = p.Copy();
2461 int num = p.x - pos.x;
2462 int num2 = p.z - pos.z;
2463 if (num > 1)
2464 {
2465 num = 1;
2466 }
2467 else if (num < -1)
2468 {
2469 num = -1;
2470 }
2471 if (num2 > 1)
2472 {
2473 num2 = 1;
2474 }
2475 else if (num2 < -1)
2476 {
2477 num2 = -1;
2478 }
2479 if (num == 0 && num2 == 0)
2480 {
2481 num = EClass.rnd(3) - 1;
2482 num2 = EClass.rnd(3) - 1;
2483 }
2484 point.Set(pos);
2485 point.x -= num;
2486 point.z -= num2;
2487 if (point.IsValid && !point.HasChara)
2488 {
2489 return TryMove(point, allowDestroyPath: false);
2490 }
2491 return MoveResult.Fail;
2492 }
bool TooHeavyToMove()
Definition: Player.cs:2463

References Point.Copy(), Point.HasChara, IsPC, Point.IsValid, EClass.player, Card.pos, EClass.rnd(), Point.Set(), Player.TooHeavyToMove(), TryMove(), Point.x, and Point.z.

Referenced by ActMelee.Attack(), GoalCombat.Run(), ConFear.Tick(), and GoalCombat.TryMove().

◆ TryMoveTowards()

MoveResult Chara.TryMoveTowards ( Point  p)
inline

Definition at line 2392 of file Chara.cs.

2393 {
2394 if (p.Equals(pos))
2395 {
2396 return MoveResult.Success;
2397 }
2399 {
2400 return MoveResult.Fail;
2401 }
2402 bool flag = true;
2403 Point point = null;
2404 _sharedPos.Set(p);
2405 if (CanDestroyPath())
2406 {
2408 {
2409 return MoveResult.Success;
2410 }
2411 Debug.Log(CanMoveTo(pos));
2413 }
2414 int num = pos.Distance(p);
2415 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2416 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2417 {
2418 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2419 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2420 {
2421 return MoveResult.Success;
2422 }
2423 }
2424 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2425 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2426 {
2427 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2428 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2429 {
2430 return MoveResult.Success;
2431 }
2432 }
2433 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2434 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2435 {
2436 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2437 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2438 {
2439 return MoveResult.Success;
2440 }
2441 }
2442 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2443 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2444 {
2445 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2446 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2447 {
2448 return MoveResult.Success;
2449 }
2450 }
2451 return MoveResult.Fail;
2452 }
static Point _sharedPos
Definition: Chara.cs:170
void RequestPathImmediate(PathProgress progress)
Definition: PathManager.cs:41
List< PathFinderNode > nodes
Definition: PathProgress.cs:16
Point GetPointTowards(Point dest)
Definition: Point.cs:785

References _sharedPos, CanDestroyPath(), CanMoveTo(), Debug, Point.Distance(), Point.Equals(), Point.GetPointTowards(), PathProgress.HasPath, PathManager.Instance, IsPC, PathProgress.nodes, EClass.player, Card.pos, PathManager.RequestPathImmediate(), Point.Set(), Player.TooHeavyToMove(), TryMove(), Algorithms.PathFinderNode.X, and Algorithms.PathFinderNode.Z.

Referenced by _Move(), AI_Idle.Run(), AI_Shear.Run(), AI_Slaughter.Run(), AI_Steal.Run(), and GoalCombat.TryMove().

◆ TryNeckHunt()

bool Chara.TryNeckHunt ( Chara  TC,
int  power,
bool  harvest = false 
)
inline

Definition at line 8903 of file Chara.cs.

8904 {
8905 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
8906 {
8907 return false;
8908 }
8909 if (TC.hp > TC.MaxHP * Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) / 100)
8910 {
8911 return false;
8912 }
8913 if (TC.HasElement(427))
8914 {
8915 return false;
8916 }
8917 if (TC.IsPC && EClass.player.invlunerable)
8918 {
8919 return false;
8920 }
8921 PlaySound("hit_finish");
8922 Say("finish");
8923 Say("finish2", this, TC);
8924 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
8925 return false;
8926 }
@ harvest
bool invlunerable
Definition: Player.cs:1093
Definition: TC.cs:4

References harvest, Player.invlunerable, and EClass.player.

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 9325 of file Chara.cs.

9326 {
9327 if (IsPCParty)
9328 {
9329 foreach (Chara member in EClass.pc.party.members)
9330 {
9331 if (member.HasElement(1641) && EClass.rnd(3) != 0)
9332 {
9333 Msg.Say("curse_nullify", member);
9334 return true;
9335 }
9336 }
9337 }
9338 else if (HasElement(1641) && EClass.rnd(3) != 0)
9339 {
9340 Say("curse_nullify", this);
9341 return true;
9342 }
9343 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
9344 {
9345 Say("curse_nullify", this);
9346 return true;
9347 }
9348 return false;
9349 }

References Card.HasElement(), Party.members, party, EClass.pc, EClass.rnd(), and Msg.Say().

◆ TryPickGroundItem()

void Chara.TryPickGroundItem ( )
inline

Definition at line 4135 of file Chara.cs.

4136 {
4137 foreach (Card item in pos.ListCards())
4138 {
4139 if ((IsPC || !(EClass.pc.ai is AI_UseCrafter aI_UseCrafter) || !aI_UseCrafter.ings.Contains(item)) && item.isThing && item.placeState == PlaceState.roaming && CanPick(item))
4140 {
4141 Thing thing = Pick(item.Thing);
4142 if (thing != null && !IsPC)
4143 {
4144 thing.isNPCProperty = true;
4145 }
4146 break;
4147 }
4148 }
4149 }

References ai, item, EClass.pc, and Pick.

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4067 of file Chara.cs.

4068 {
4069 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4070 {
4071 string text = EClass.sources.things.rows.Where((SourceThing.Row a) => a._origin == "potion" && a.tag.Contains("neg") && a.chance > 100).ToList().RandomItemWeighted((SourceThing.Row a) => a.chance)
4072 .id;
4073 Say("poisonDrip", this);
4074 int num = t.Num;
4075 t.Destroy();
4076 t = ThingGen.Create(text).SetNum(num);
4077 }
4078 return t;
4079 }
SourceThing.Row source
Definition: Thing.cs:11

References ThingGen.Create(), Card.Destroy(), Card.id, Card.Num, EClass.rnd(), Card.SetNum(), Thing.source, EClass.sources, SourceManager.things, and Card.trait.

◆ TryPush()

void Chara.TryPush ( Point  point)
inline

Definition at line 2991 of file Chara.cs.

2992 {
2993 List<Chara> list = point.ListCharas();
2994 if (list.Count == 0)
2995 {
2996 return;
2997 }
2998 list.Copy().ForeachReverse(delegate(Chara c)
2999 {
3000 if (!c.ai.IsMoveAI && !c.IsPC && c.trait.CanBePushed && c != this && !c.noMove && (!EClass._zone.IsRegion || c.IsPCFactionOrMinion))
3001 {
3002 List<Point> list2 = new List<Point>();
3003 for (int i = point.x - 1; i <= point.x + 1; i++)
3004 {
3005 for (int j = point.z - 1; j <= point.z + 1; j++)
3006 {
3007 if (i != point.x || j != point.z)
3008 {
3009 Point point2 = new Point(i, j);
3010 if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
3011 {
3012 list2.Add(point2);
3013 }
3014 }
3015 }
3016 }
3017 if (list2.Count > 0)
3018 {
3019 if (list2.Count > 1)
3020 {
3021 list2.ForeachReverse(delegate(Point p)
3022 {
3023 if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
3024 {
3025 list2.Remove(p);
3026 }
3027 });
3028 }
3029 Point newPoint = list2.RandomItem();
3030 if (IsPC)
3031 {
3032 Say("displace", this, c);
3033 PlaySound("push");
3034 }
3035 else if (c.isSynced)
3036 {
3037 c.PlayEffect("push");
3038 }
3039 c.MoveByForce(newPoint, this, checkWall: true);
3040 if (!c.IsPC && c.trait is TraitRogue && EClass.rnd(3) == 0 && GetCurrency() > 20 && !HasElement(426))
3041 {
3042 int num = EClass.rndHalf(10 + Mathf.Min(GetCurrency() / 100, 1000));
3043 c.Talk("pushed");
3044 Say("pushed_money", this, c);
3045 ModCurrency(-num);
3046 c.ModCurrency(num);
3047 c.PlaySound("steal_money");
3048 }
3049 else if (IsPC && !c.IsPCParty && !c.IsUnique && c.IsHumanSpeak && EClass.rnd(5) == 0)
3050 {
3051 c.Talk("pushed");
3052 }
3053 }
3054 }
3055 });
3056 }
bool IsMoveAI
Definition: AIAct.cs:55
bool IsHumanSpeak
Definition: Chara.cs:881

References EClass._zone, ai, TraitChara.CanBePushed, if(), IsHumanSpeak, AIAct.IsMoveAI, IsPC, Card.IsPCFactionOrMinion, IsPCParty, Spatial.IsRegion, isSynced, Card.IsUnique, Point.ListCharas(), Card.ModCurrency(), MoveByForce(), Card.noMove, Card.PlayEffect(), Card.PlaySound(), EClass.rnd(), EClass.rndHalf(), Card.Talk(), and trait.

Referenced by _Move().

◆ TryPutShared()

void Chara.TryPutShared ( Thing  t,
List< Thing containers = null,
bool  dropIfFail = true 
)
inline

Definition at line 4151 of file Chara.cs.

4152 {
4153 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4154 {
4155 EClass._zone.AddCard(t, pos);
4156 }
4157 }
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2053

References EClass._zone, Zone.AddCard(), and Zone.TryAddThingInSharedContainer().

Referenced by FactionBranch.DailyOutcome().

◆ TryPutSharedItems() [1/2]

void Chara.TryPutSharedItems ( bool  msg = true)
inline

Definition at line 6863 of file Chara.cs.

6864 {
6866 }
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:6830
List< Thing > containers
Definition: Props.cs:22

References EClass._map, Props.containers, PropsManager.installed, and Map.props.

◆ TryPutSharedItems() [2/2]

void Chara.TryPutSharedItems ( IEnumerable< Thing containers,
bool  msg = true 
)
inline

Definition at line 6830 of file Chara.cs.

6831 {
6832 if (GetInt(113) != 0)
6833 {
6834 return;
6835 }
6836 _ListItems.Clear();
6837 Thing bestRangedWeapon = GetBestRangedWeapon();
6838 foreach (Thing thing in things)
6839 {
6840 if (!thing.IsAmmo)
6841 {
6842 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
6843 {
6844 _ListItems.Add(thing);
6845 }
6846 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
6847 {
6848 _ListItems.Add(thing);
6849 }
6850 }
6851 }
6852 if (_ListItems.Count == 0)
6853 {
6854 return;
6855 }
6856 List<Thing> containers2 = containers.ToList();
6857 foreach (Thing listItem in _ListItems)
6858 {
6859 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
6860 }
6861 }
void Add(Act a, string s="")
Definition: ActPlan.cs:11
static List< Thing > _ListItems
Definition: Chara.cs:186

References EClass._zone, Card.category, Card.HasTag(), Card.IsAmmo, Thing.isEquipped, Card.IsRangedWeapon, and Zone.TryAddThingInSharedContainer().

Referenced by AI_Idle.Run().

◆ TryReservePickupTutorial()

void Chara.TryReservePickupTutorial ( Thing  t)
inline

Definition at line 4111 of file Chara.cs.

4112 {
4113 if (t.id == "axe")
4114 {
4115 Tutorial.Reserve("tool");
4116 }
4117 if (t.category.id == "mushroom")
4118 {
4119 Tutorial.Reserve("food");
4120 }
4121 if (t.category.id == "herb")
4122 {
4123 Tutorial.Reserve("herb");
4124 }
4125 if (t.id == "pasture")
4126 {
4127 Tutorial.Reserve("pasture");
4128 }
4129 if (t.id == "log")
4130 {
4131 Tutorial.Reserve("process");
4132 }
4133 }

References Card.category, Card.id, and Tutorial.Reserve().

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4392 of file Chara.cs.

4393 {
4394 isOnCreate = onCreate;
4395 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4396 {
4397 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4398 }
4399 RestockInventory(onCreate);
4400 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:4610
void RestockEquip(bool onCreate)
Definition: Chara.cs:4402

References EClass._zone, EClass.core, and Core.IsGameStarted.

Referenced by OnCreate(), and Zone.OnVisit().

◆ TrySetEnemy()

void Chara.TrySetEnemy ( Chara  c)
inline

Definition at line 5832 of file Chara.cs.

5833 {
5834 if ((!IsPC || !EClass.game.config.autoCombat.bDontChangeTarget) && (enemy == null || (EClass.rnd(5) == 0 && Dist(c) <= 1)) && ((!IsPCFaction && !IsPCFactionMinion) || (!c.IsPCFaction && !c.IsPCFactionMinion)) && (hostility != Hostility.Enemy || c.hostility != Hostility.Enemy) && (!c.IsPC || hostility < Hostility.Neutral))
5835 {
5836 SetEnemy(c);
5837 }
5838 }

References Game.Config.autoCombat, ConfigAutoCombat.bDontChangeTarget, Game.config, EClass.game, hostility, IsPC, IsPCFaction, IsPCFactionMinion, and EClass.rnd().

Referenced by GoalCombat.Run().

◆ TryTakeSharedItems() [1/2]

void Chara.TryTakeSharedItems ( bool  msg = true)
inline

Definition at line 6868 of file Chara.cs.

6869 {
6871 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:6868

References EClass._map, Props.containers, PropsManager.installed, and Map.props.

Referenced by AI_Idle.Run().

◆ TryTakeSharedItems() [2/2]

void Chara.TryTakeSharedItems ( IEnumerable< Thing containers,
bool  msg = true,
bool  shouldEat = true 
)
inline

Definition at line 6873 of file Chara.cs.

6874 {
6875 if (base.isSummon || (memberType == FactionMemberType.Livestock && homeBranch != null && !homeBranch.policies.IsActive(2715)))
6876 {
6877 return;
6878 }
6879 int num = 2;
6880 int num2 = 2;
6881 bool flag = GetInt(113) == 0;
6882 int num3 = 2;
6883 int num4 = 2;
6884 int num5 = 2;
6886 {
6887 num4 = 0;
6888 num5 = 0;
6889 }
6890 foreach (Thing thing3 in things)
6891 {
6892 if (CanEat(thing3, shouldEat))
6893 {
6894 num -= thing3.Num;
6895 }
6896 if (thing3.trait.GetHealAction(this) != null)
6897 {
6898 num2 -= thing3.Num;
6899 }
6900 if (thing3.id == "polish_powder")
6901 {
6902 num3 -= thing3.Num;
6903 }
6904 if (thing3.trait is TraitBlanketColdproof)
6905 {
6906 num4 -= thing3.Num;
6907 }
6908 if (thing3.trait is TraitBlanketFireproof)
6909 {
6910 num5 -= thing3.Num;
6911 }
6912 }
6913 _ListItems.Clear();
6914 foreach (Thing container in containers)
6915 {
6916 if (!container.IsSharedContainer)
6917 {
6918 continue;
6919 }
6920 foreach (Thing thing4 in container.things)
6921 {
6922 if (!thing4.c_isImportant && thing4.IsIdentified)
6923 {
6924 if (num3 > 0 && thing4.id == "polish_powder")
6925 {
6926 _ListItems.Add(thing4);
6927 num3 -= thing4.Num;
6928 }
6929 else if (num4 > 0 && !HasElement(1236) && thing4.trait is TraitBlanketColdproof)
6930 {
6931 _ListItems.Add(thing4);
6932 num4 -= thing4.Num;
6933 }
6934 else if (num5 > 0 && thing4.trait is TraitBlanketFireproof)
6935 {
6936 _ListItems.Add(thing4);
6937 num5 -= thing4.Num;
6938 }
6939 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant)
6940 {
6941 _ListItems.Add(thing4);
6942 num -= thing4.Num;
6943 }
6944 else if (num2 > 0 && thing4.trait.GetHealAction(this) != null)
6945 {
6946 _ListItems.Add(thing4);
6947 num2 -= thing4.Num;
6948 }
6949 else if (flag && thing4.IsEquipmentOrRanged && !thing4.HasTag(CTAG.gift) && ShouldEquip(thing4, useFav: true))
6950 {
6951 _ListItems.Add(thing4);
6952 }
6953 }
6954 }
6955 }
6956 if (_ListItems.Count == 0)
6957 {
6958 return;
6959 }
6960 _ListItems.ForeachReverse(delegate(Thing t)
6961 {
6962 if (t.IsEquipmentOrRanged)
6963 {
6964 bool flag3 = false;
6965 int slot = t.category.slot;
6966 int equipValue = t.GetEquipValue();
6967 foreach (Thing listItem in _ListItems)
6968 {
6969 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
6970 {
6971 flag3 = true;
6972 break;
6973 }
6974 }
6975 if (flag3)
6976 {
6977 _ListItems.Remove(t);
6978 }
6979 }
6980 });
6981 bool flag2 = false;
6982 foreach (Thing listItem2 in _ListItems)
6983 {
6984 Thing thing = listItem2;
6985 if (things.IsFull(thing))
6986 {
6987 break;
6988 }
6989 Thing thing2 = listItem2.parent as Thing;
6990 if (thing.Num > 2)
6991 {
6992 thing = thing.Split(2);
6993 }
6994 if (msg)
6995 {
6996 Say("takeSharedItem", this, thing, thing2.GetName(NameStyle.Full));
6997 }
6998 AddCard(thing);
6999 if (ShouldEquip(thing, useFav: true) && thing.category.slot != 0)
7000 {
7001 TryEquip(thing, useFav: true);
7002 flag2 = true;
7003 }
7004 }
7005 if (flag2 && flag)
7006 {
7007 TryPutSharedItems(containers);
7008 }
7009 }
bool IsIdentified
Definition: Card.cs:2313
bool HasItemProtection
bool IsActive(int id, int days=-1)
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:498
bool IsSharedContainer
Definition: Thing.cs:92

References Card.c_isImportant, Trait.GetHealAction(), FactionBranch.HasItemProtection, Card.HasTag(), Card.id, if(), PolicyManager.IsActive(), Card.IsEquipmentOrRanged, Card.IsIdentified, Thing.IsSharedContainer, Card.Num, FactionBranch.policies, Card.things, and Card.trait.

◆ TryUpgrade()

void Chara.TryUpgrade ( bool  msg = true)
inline

Definition at line 7947 of file Chara.cs.

7948 {
7949 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
7950 {
7951 return;
7952 }
7953 for (int i = 0; i < 100; i++)
7954 {
7955 if (base.feat == 0)
7956 {
7957 break;
7958 }
7959 if (base.c_upgrades == null)
7960 {
7961 base.c_upgrades = new CharaUpgrade();
7962 }
7963 if (base.c_upgrades.halt)
7964 {
7965 break;
7966 }
7967 Rand.SetSeed(base.uid + base.c_upgrades.count);
7968 int num = EClass.rnd(100);
7969 int num2 = 0;
7970 int num3 = 1;
7971 int num4 = 0;
7972 bool flag = false;
7973 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
7974 List<Element> list = ListAvailabeFeats(pet: true);
7975 if (num >= 90 && list.Count > 0)
7976 {
7977 Element element = list.RandomItem();
7978 num2 = element.id;
7979 num4 = element.CostLearn;
7980 }
7981 else if (num >= 60 && ie.Any())
7982 {
7983 num2 = ie.RandomItem().id;
7984 num4 = 3;
7985 }
7986 else
7987 {
7988 num2 = Element.List_MainAttributesMajor.RandomItem();
7989 num4 = 1;
7990 num3 = 2;
7991 flag = true;
7992 }
7993 Rand.SetSeed();
7994 if (num4 > base.feat)
7995 {
7996 break;
7997 }
7998 base.feat -= num4;
7999 base.c_upgrades.count++;
8000 base.c_upgrades.spent += num4;
8001 bool flag2 = false;
8002 if (flag)
8003 {
8004 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8005 {
8006 if (item.idEle == num2)
8007 {
8008 item.value += num3;
8009 item.cost += num4;
8010 flag2 = true;
8011 break;
8012 }
8013 }
8014 }
8015 if (!flag2)
8016 {
8017 base.c_upgrades.items.Add(new CharaUpgrade.Item
8018 {
8019 idEle = num2,
8020 value = num3,
8021 cost = num4
8022 });
8023 }
8024 SourceElement.Row row = EClass.sources.elements.map[num2];
8025 if (row.category == "feat")
8026 {
8027 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8028 }
8029 else if (elements.ValueWithoutLink(row.id) == 0)
8030 {
8031 elements.Learn(row.id);
8032 }
8033 else
8034 {
8035 elements.ModBase(num2, num3);
8036 }
8037 }
8038 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:9106
void Learn(int ele, int v=1)
virtual int CostLearn
Definition: ELEMENT.cs:312
static int[] List_MainAttributesMajor
Definition: ELEMENT.cs:240
static void SetSeed(int a=-1)
Definition: Rand.cs:37

References SourceElement.Row.category, Element.CostLearn, EClass.debug, SourceManager.elements, CoreDebug.enable, Element.id, SourceElement.Row.id, item, Element.List_MainAttributesMajor, EClass.rnd(), Rand.SetSeed(), and EClass.sources.

Referenced by Card.LevelUp(), and WindowCharaMini.Refresh().

◆ TryUse()

bool Chara.TryUse ( Thing  t)
inline

Definition at line 7306 of file Chara.cs.

7307 {
7308 if (t.id == "338")
7309 {
7310 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
7311 if (thing != null)
7312 {
7313 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
7314 SE.Change();
7315 t.trait.OnBlend(thing, this);
7316 return true;
7317 }
7318 return false;
7319 }
7320 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
7321 {
7322 return false;
7323 }
7324 if (t.id == "cigar")
7325 {
7326 (t.trait as TraitItemProc).OnUse(this);
7327 return true;
7328 }
7329 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
7330 {
7332 {
7333 target = t
7334 });
7335 return true;
7336 }
7337 if (t.trait.CanDrink(this))
7338 {
7339 Drink(t);
7340 return true;
7341 }
7342 if (t.trait.CanRead(this))
7343 {
7345 {
7346 target = t
7347 });
7348 return true;
7349 }
7350 if (base.hp < MaxHP * 90 / 100)
7351 {
7352 Action healAction = t.trait.GetHealAction(this);
7353 if (healAction != null)
7354 {
7355 healAction();
7356 return true;
7357 }
7358 }
7359 return false;
7360 }
bool isAcidproof
Definition: Card.cs:670
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8228
virtual bool CanRead(Chara c)
Definition: Trait.cs:960
virtual bool CanDrink(Chara c)
Definition: Trait.cs:978
virtual void OnBlend(Thing t, Chara c)
Definition: Trait.cs:604

References Trait.CanDrink(), Trait.CanEat(), Trait.CanRead(), Drink, Trait.GetHealAction(), Thing.GetName(), Stats.GetPhase(), Card.id, Card.isAcidproof, Card.IsEquipmentOrRanged, Card.IsNegativeGift, Trait.OnBlend(), Thing.source, and Card.trait.

Referenced by AI_Shopping.Buy(), and AI_Idle.Run().

◆ TryWorkOutside()

bool Chara.TryWorkOutside ( SourceHobby::Row  sourceWork)
inline

Definition at line 8489 of file Chara.cs.

8490 {
8491 if (EClass.world.date.IsExpired(GetInt(51)))
8492 {
8493 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
8494 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
8495 homeBranch.expeditions.Add(expedition);
8496 return true;
8497 }
8498 return false;
8499 }
ExpeditionType
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
void Add(Expedition ex)
static Expedition Create(Chara c, ExpeditionType type)
Definition: Expedition.cs:112
int hours
Definition: Expedition.cs:6
ExpeditionManager expeditions
string expedition
Definition: SourceHobby.cs:29

References ExpeditionManager.Add(), Expedition.Create(), World.date, FactionBranch.expeditions, Date.GetRaw(), Expedition.hours, Date.IsExpired(), and EClass.world.

◆ UpdateAngle()

void Chara.UpdateAngle ( )
inline

Definition at line 3350 of file Chara.cs.

3351 {
3352 if (IsPCC)
3353 {
3354 if (base.dir == 0)
3355 {
3356 angle = 225f;
3357 }
3358 else if (base.dir == 1)
3359 {
3360 angle = 135f;
3361 }
3362 else if (base.dir == 2)
3363 {
3364 angle = 45f;
3365 }
3366 else if (base.dir == 3)
3367 {
3368 angle = -45f;
3369 }
3370 }
3371 else if (base.dir == 0)
3372 {
3373 angle = 165f;
3374 }
3375 else if (base.dir == 1)
3376 {
3377 angle = 300f;
3378 }
3379 else if (base.dir == 2)
3380 {
3381 angle = 0f;
3382 }
3383 else if (base.dir == 3)
3384 {
3385 angle = 120f;
3386 }
3387 }

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3411 of file Chara.cs.

3412 {
3413 int num = 4;
3414 for (int i = -num; i < num + 1; i++)
3415 {
3416 for (int j = -num; j < num + 1; j++)
3417 {
3418 shared.Set(pos.x + i, pos.z + j);
3419 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3420 {
3421 _ = 1;
3422 }
3423 }
3424 }
3425 }
bool isSeen
Definition: Cell.cs:282
static Point shared
Definition: Chara.cs:11

References Point.cell, Cell.isSeen, Point.IsValid, and Point.Set().

◆ UseAbility() [1/2]

bool Chara.UseAbility ( Act  a,
Card  tc = null,
Point  pos = null,
bool  pt = false 
)
inline

Definition at line 5359 of file Chara.cs.

5360 {
5361 if (!IsPC && HasCooldown(a.id))
5362 {
5363 return false;
5364 }
5365 if (a.source.proc.TryGet(0) == "Heal" && HasElement(1422))
5366 {
5367 List<int> list = new List<int> { 8400, 8401, 8402, 8403, 8404, 8405 };
5368 int num = list.IndexOf(a.id);
5369 if (num != -1)
5370 {
5371 int num2 = list.TryGet(num + Evalue(1422));
5372 a = elements.GetElement(num2)?.act ?? ACT.Create(num2);
5373 }
5374 }
5375 int num3 = 1;
5376 Act.Cost cost = a.GetCost(this);
5377 a.GetPower(this);
5378 int i = 1;
5379 int num4 = 0;
5380 bool flag = a.IsTargetHostileParty();
5381 if (IsPC && HasCondition<StanceManaCost>())
5382 {
5383 num4 = Evalue(1657);
5384 }
5385 _pts.Clear();
5386 if (a.TargetType.ForceParty)
5387 {
5388 pt = true;
5389 }
5390 if (pt)
5391 {
5392 i = 0;
5393 if (flag)
5394 {
5395 ForeachEnemy(delegate
5396 {
5397 i++;
5398 });
5399 }
5400 else
5401 {
5402 ForeachParty(delegate
5403 {
5404 i++;
5405 });
5406 }
5407 }
5408 if (a is Spell && IsPC && a.vPotential < i)
5409 {
5410 i = 1;
5411 _pts.Clear();
5412 _pts.Add(this);
5413 pt = false;
5414 }
5415 int num5 = 100;
5416 if (!a.TargetType.ForceParty && i > 1)
5417 {
5418 num5 = (IsPC ? (i * 100) : (50 + i * 50));
5419 }
5420 int num6 = cost.cost * num5 / 100;
5421 if (cost.type == Act.CostType.MP && Evalue(483) > 0)
5422 {
5423 num6 = num6 * 100 / (100 + (int)Mathf.Sqrt(Evalue(483) * 10) * 3);
5424 }
5425 if (i == 0)
5426 {
5427 if (IsPC)
5428 {
5430 }
5431 return false;
5432 }
5433 if (!IsPC && cost.type == Act.CostType.MP && mana.value < 0 && (EClass.rnd(4) != 0 || IsPCFaction || (base.IsPowerful && mana.value < -20)))
5434 {
5435 return false;
5436 }
5437 if (IsPC)
5438 {
5439 if (!Dialog.warned && cost.type == Act.CostType.MP && cost.cost > 0 && mana.value < num6 && !EClass.debug.godMode)
5440 {
5441 ActPlan.warning = true;
5442 Dialog.TryWarnMana(delegate
5443 {
5444 if (UseAbility(a, tc, pos, pt))
5445 {
5447 }
5448 });
5449 return false;
5450 }
5451 EClass.ui.CloseLayers();
5452 }
5453 if ((isConfused && EClass.rnd(4) == 0) || (isBlind && (pt || (pos != null && !pos.Equals(base.pos)) || (tc != null && tc.pos != null && !tc.pos.Equals(base.pos))) && EClass.rnd(2) == 0))
5454 {
5455 Say("shakeHead", this);
5456 return true;
5457 }
5458 if (tc != null && tc != this)
5459 {
5460 LookAt(tc.pos);
5461 }
5462 if (pos != null && !base.pos.Equals(pos))
5463 {
5464 LookAt(pos);
5465 }
5466 if (a.CanRapidFire && HasElement(1648))
5467 {
5468 num3 = 1 + Evalue(1648);
5469 }
5470 if (IsPC && cost.cost > 0 && a.Value == 0)
5471 {
5473 return false;
5474 }
5475 if (a is Spell)
5476 {
5477 string s = (isConfused ? "_cast_confuse" : (HasCondition<ConDim>() ? "_cast_dim" : ""));
5478 if (!a.source.tag.Contains("useHand"))
5479 {
5480 Say(race.castStyle.IsEmpty("cast"), this, a.source.GetName().ToLower(), s.lang());
5481 }
5482 if (IsPC)
5483 {
5484 _ = (i + 1) / 2;
5485 if (a.vPotential < i)
5486 {
5487 Msg.Say("noSpellStock");
5488 EInput.Consume();
5489 return false;
5490 }
5491 if (num4 > 0 && a.vPotential >= i * 2)
5492 {
5493 a.vPotential -= i * 2;
5494 num6 = num6 * (100 - num4 * 20) / 100;
5495 }
5496 else
5497 {
5498 a.vPotential -= i;
5499 }
5501 }
5502 }
5503 else if (a.source.langAct.Length != 0 && tc != null)
5504 {
5505 string text = a.source.langAct[0];
5506 string text2 = ((a.source.langAct.Length >= 2) ? a.source.langAct[1] : "");
5507 if (text == "spell_hand")
5508 {
5509 string[] list2 = Lang.GetList("attack" + race.meleeStyle.IsEmpty("Touch"));
5510 string @ref = text2.lang(list2[4]);
5511 Say(tc.IsPCParty ? "cast_hand_ally" : "cast_hand", this, tc, @ref, tc.IsPCParty ? list2[1] : list2[2]);
5512 }
5513 else
5514 {
5515 Say(text, this, tc, text2.IsEmpty() ? "" : text2.lang());
5516 }
5517 if (a.source.id == 6630)
5518 {
5519 Talk("insult_" + (base.IsMale ? "m" : "f"));
5520 }
5521 }
5522 switch (cost.type)
5523 {
5524 case Act.CostType.MP:
5525 if (Evalue(1421) >= 2 && base.hp <= MaxHP / (9 - Evalue(1421) * 2))
5526 {
5527 num6 /= 2;
5528 }
5529 PlayEffect("cast");
5530 mana.Mod(-num6);
5531 if (isDead)
5532 {
5533 return true;
5534 }
5535 elements.ModExp(304, Mathf.Clamp(num6 * 2, 1, 200));
5536 break;
5537 case Act.CostType.SP:
5538 stamina.Mod(-num6);
5539 ignoreSPAbsorb = true;
5540 break;
5541 }
5542 if (a is Spell && GetCondition<ConSilence>() != null)
5543 {
5544 Say("cast_silence", this);
5545 return true;
5546 }
5547 if (isDead)
5548 {
5549 return true;
5550 }
5551 int spellExp = elements.GetSpellExp(this, a, num5);
5552 if (EClass.rnd(100) >= CalcCastingChance(a, i) && !EClass.debug.godMode)
5553 {
5554 Say("fizzle", this);
5555 PlayEffect("fizzle");
5556 PlaySound("fizzle");
5557 if (cost.cost > 0 && a.source.lvFactor > 0)
5558 {
5559 ModExp(a.id, spellExp / 5);
5560 }
5561 RemoveCondition<ConInvisibility>();
5562 return true;
5563 }
5564 bool flag2 = true;
5565 if (HasTalk("phrase_" + a.source.alias))
5566 {
5567 EClass.player.forceTalk = true;
5568 Talk("phrase_" + a.source.alias);
5569 }
5570 if (pt)
5571 {
5572 Act.forcePt = true;
5573 if (flag)
5574 {
5575 ForeachEnemy(delegate(Chara c)
5576 {
5577 a.Perform(this, c, c.pos);
5578 });
5579 }
5580 else
5581 {
5582 ForeachParty(delegate(Chara c)
5583 {
5584 a.Perform(this, c, c.pos);
5585 });
5586 }
5587 Act.forcePt = false;
5588 }
5589 else
5590 {
5591 for (int j = 0; j < num3; j++)
5592 {
5593 if (a.TargetType != TargetType.SelfParty && tc != null && !tc.IsAliveInCurrentZone)
5594 {
5595 break;
5596 }
5597 ActEffect.RapidCount = j;
5598 ActEffect.RapidDelay = a.RapidDelay;
5599 flag2 = a.Perform(this, tc, pos);
5600 }
5601 }
5602 if (flag2 && !isDead)
5603 {
5604 if (cost.cost > 0 && a.source.lvFactor > 0)
5605 {
5606 ModExp(a.id, spellExp);
5607 }
5608 if (a.source.alias.StartsWith("sword_"))
5609 {
5610 ModExp(101, 50);
5611 }
5612 }
5613 ActEffect.RapidCount = 0;
5614 if (!IsPC && a.source.cooldown > 0)
5615 {
5616 AddCooldown(a.id, a.source.cooldown);
5617 }
5618 if (flag2 && !a.source.tag.Contains("keepInvisi") && EClass.rnd(2) == 0)
5619 {
5620 RemoveCondition<ConInvisibility>();
5621 }
5622 return flag2;
5623 void ForeachEnemy(Action<Chara> action)
5624 {
5625 if (_pts.Count == 0)
5626 {
5627 for (int num10 = EClass._map.charas.Count - 1; num10 >= 0; num10--)
5628 {
5629 Chara chara3 = EClass._map.charas[num10];
5630 if (chara3 != this && CanSeeLos(chara3) && chara3.IsHostile(this))
5631 {
5632 _pts.Add(chara3);
5633 }
5634 }
5635 }
5636 for (int num11 = _pts.Count - 1; num11 >= 0; num11--)
5637 {
5638 action(_pts[num11]);
5639 }
5640 }
5641 void ForeachParty(Action<Chara> action)
5642 {
5643 if (_pts.Count == 0)
5644 {
5645 if (IsPCParty)
5646 {
5647 for (int num7 = EClass.pc.party.members.Count - 1; num7 >= 0; num7--)
5648 {
5649 Chara chara = EClass.pc.party.members[num7];
5650 if (chara == this || chara.host != null || CanSeeLos(chara))
5651 {
5652 _pts.Add(chara);
5653 }
5654 }
5655 }
5656 else
5657 {
5658 for (int num8 = EClass._map.charas.Count - 1; num8 >= 0; num8--)
5659 {
5660 Chara chara2 = EClass._map.charas[num8];
5661 if ((chara2 == this || (chara2.IsFriendOrAbove(this) && CanSeeLos(chara2))) && (chara2 == tc || _pts.Count < 3 || EClass.rnd(_pts.Count * _pts.Count) > 6))
5662 {
5663 _pts.Add(chara2);
5664 }
5665 }
5666 }
5667 }
5668 for (int num9 = _pts.Count - 1; num9 >= 0; num9--)
5669 {
5670 action(_pts[num9]);
5671 }
5672 }
5673 }
Definition: ACT.cs:6
static Act Create(int id)
Definition: ACT.cs:36
Definition: ACT.cs:62
CostType
Definition: ACT.cs:64
virtual bool Perform()
Definition: ACT.cs:266
virtual TargetType TargetType
Definition: ACT.cs:142
virtual float RapidDelay
Definition: ACT.cs:175
bool IsTargetHostileParty()
Definition: ACT.cs:241
virtual bool CanRapidFire
Definition: ACT.cs:173
bool HasTalk(string idTopic)
Definition: Card.cs:6321
bool UseAbility(string idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5354
static List< Chara > _pts
Definition: Chara.cs:182
int CalcCastingChance(Element e, int num=1)
Definition: Chara.cs:5684
Definition: Dialog.cs:7
static bool warned
Definition: Dialog.cs:49
static void TryWarnMana(Action action)
Definition: Dialog.cs:391
int GetSpellExp(Chara c, Element e, int costMod=100)
int vPotential
Definition: ELEMENT.cs:254
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1068
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1021
Act act
Definition: ELEMENT.cs:392
static string SayNothingHappen()
Definition: Msg.cs:96
static TargetTypeSelfParty SelfParty
Definition: TargetType.cs:9
virtual bool ForceParty
Definition: TargetType.cs:41
Definition: ACT.cs:71
CostType type
Definition: ACT.cs:74
int cost
Definition: ACT.cs:72

References EClass._map, Element.act, Act.CanRapidFire, SourceRace.Row.castStyle, Map.charas, EInput.Consume(), Act.Cost.cost, ACT.Create(), EClass.debug, Player.EndTurn(), TargetType.ForceParty, Element.GetCost(), Lang.GetList(), Element.GetPower(), CoreDebug.godMode, host, Element.id, IsFriendOrAbove(), IsHostile(), Act.IsTargetHostileParty(), SourceRace.Row.meleeStyle, Party.members, Stats.Mod(), party, EClass.pc, Act.Perform(), EClass.player, Card.pos, Act.RapidDelay, EClass.rnd(), Msg.Say(), Msg.SayNothingHappen(), TargetType.SelfParty, LayerAbility.SetDirty(), Element.source, Act.TargetType, Dialog.TryWarnMana(), Act.Cost.type, EClass.ui, Element.Value, Stats.value, Element.vPotential, and Dialog.warned.

◆ UseAbility() [2/2]

bool Chara.UseAbility ( string  idAct,
Card  tc = null,
Point  pos = null,
bool  pt = false 
)
inline

◆ ValidateWorks()

void Chara.ValidateWorks ( )
inline

Definition at line 8537 of file Chara.cs.

8538 {
8539 _goalWork.FindWork(this, setAI: false);
8541 }
static GoalHobby _goalHobby
Definition: Chara.cs:204
static GoalWork _goalWork
Definition: Chara.cs:202
void ValidateHobby(Chara c)
Definition: GoalWork.cs:21
bool FindWork(Chara c, bool setAI=true)
Definition: GoalWork.cs:55

References GoalWork.FindWork(), and GoalWork.ValidateHobby().

Referenced by Zone.Deactivate().

◆ Vomit()

void Chara.Vomit ( )
inline

Definition at line 4867 of file Chara.cs.

4868 {
4869 base.c_vomit++;
4870 Say("vomit", this);
4871 PlaySound("vomit");
4872 if (!EClass._zone.IsRegion)
4873 {
4874 Thing thing = ThingGen.Create("731");
4876 {
4877 thing.MakeRefFrom(this);
4878 }
4879 EClass._zone.AddCard(thing, pos);
4880 }
4881 if (HasCondition<ConAnorexia>())
4882 {
4883 ModExp(70, -50);
4884 ModExp(71, -75);
4885 ModExp(77, -100);
4886 }
4887 else if (base.c_vomit > 10)
4888 {
4889 AddCondition<ConAnorexia>();
4890 }
4891 AddCondition<ConDim>();
4892 if (HasCondition<ConAnorexia>())
4893 {
4894 ModWeight(-1 * (1 + EClass.rnd(5)));
4895 }
4896 if (hunger.GetPhase() >= 4)
4897 {
4898 DamageHP(9999, AttackSource.Hunger);
4899 }
4900 hunger.Mod(30);
4901 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:9038

References EClass._zone, Zone.AddCard(), ThingGen.Create(), Stats.GetPhase(), Zone.IsPCFaction, Spatial.IsRegion, Card.MakeRefFrom(), Stats.Mod(), and EClass.rnd().

Referenced by FoodEffect.Proc(), and ConDrunk.Tick().

◆ WillConsumeTurn()

bool Chara.WillConsumeTurn ( )
inline

Definition at line 3427 of file Chara.cs.

3428 {
3429 for (int num = conditions.Count - 1; num >= 0; num--)
3430 {
3431 if (conditions[num].ConsumeTurn)
3432 {
3433 return true;
3434 }
3435 }
3436 return false;
3437 }

Referenced by AM_Adv._OnUpdateInput(), UIAutoTurn._Update(), and Player.CanAcceptInput().

◆ WriteNote()

override void Chara.WriteNote ( UINote  n,
Action< UINote onWriteNote = null,
IInspect::NoteMode  mode = IInspect::NoteMode::Default,
Recipe  recipe = null 
)
inlinevirtual

Reimplemented from Card.

Definition at line 6754 of file Chara.cs.

6755 {
6756 n.Clear();
6757 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
6758 SetImage(uIItem.image2);
6759 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
6760 n.AddText("");
6761 n.Build();
6762 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:5727
Definition: UIItem.cs:5
Image image2
Definition: UIItem.cs:16
UIText text2
Definition: UIItem.cs:8
UIItem AddHeaderCard(string text, Sprite sprite=null)
Definition: UINote.cs:84
void Clear()
Definition: UINote.cs:35
UIItem AddText(string text, FontColor color=FontColor.DontChange)
Definition: UINote.cs:113
void Build()
Definition: UINote.cs:49
void SetText(string s)
Definition: UIText.cs:159

References UINote.AddHeaderCard(), UINote.AddText(), UINote.Build(), UINote.Clear(), UIItem.image2, UIText.SetText(), and UIItem.text2.

Member Data Documentation

◆ _ability

CharaAbility Chara._ability

Definition at line 96 of file Chara.cs.

Referenced by SetMainElement().

◆ _baseWorkElements

ElementContainer Chara._baseWorkElements

Definition at line 200 of file Chara.cs.

◆ _cbits1

BitArray32 Chara._cbits1

Definition at line 84 of file Chara.cs.

Referenced by OnSerializing().

◆ _cints

int [] Chara._cints = new int[30]

Definition at line 82 of file Chara.cs.

Referenced by OnDeserialized(), and OnSerializing().

◆ _cooldowns

List<int> Chara._cooldowns

Definition at line 58 of file Chara.cs.

◆ _faction

Faction Chara._faction
private

Definition at line 152 of file Chara.cs.

Referenced by SetFaction().

◆ _goalHobby

GoalHobby Chara._goalHobby = new GoalHobby()
staticprivate

Definition at line 204 of file Chara.cs.

◆ _goalWork

GoalWork Chara._goalWork = new GoalWork()
staticprivate

Definition at line 202 of file Chara.cs.

◆ _historyFood

List<List<string> > Chara._historyFood

Definition at line 64 of file Chara.cs.

◆ _hobbies

List<int> Chara._hobbies

Definition at line 49 of file Chara.cs.

◆ _isLevitating

bool Chara._isLevitating

Definition at line 134 of file Chara.cs.

Referenced by HasHigherGround(), and Refresh().

◆ _job

SourceJob.Row Chara._job

Definition at line 158 of file Chara.cs.

Referenced by ChangeJob(), and OnCreate().

◆ _listAbility

List<int> Chara._listAbility

◆ _listFavCat

List<SourceCategory.Row> Chara._listFavCat = new List<SourceCategory.Row>()
staticprivate

Definition at line 190 of file Chara.cs.

◆ _listFavFood

List<SourceThing.Row> Chara._listFavFood = new List<SourceThing.Row>()
staticprivate

Definition at line 188 of file Chara.cs.

◆ _ListItems

List<Thing> Chara._ListItems = new List<Thing>()
staticprivate

Definition at line 186 of file Chara.cs.

◆ _NoGoalPC

NoGoal Chara._NoGoalPC = new NoGoal()
static

Definition at line 192 of file Chara.cs.

◆ _NoGoalRepeat

NoGoal Chara._NoGoalRepeat = new NoGoal()
static

Definition at line 194 of file Chara.cs.

Referenced by ActPlan.Item.Perform().

◆ _pts

List<Chara> Chara._pts = new List<Chara>()
staticprivate

Definition at line 182 of file Chara.cs.

◆ _race

SourceRace.Row Chara._race

Definition at line 156 of file Chara.cs.

Referenced by ChangeRace(), and OnCreate().

◆ _sharedPos

Point Chara._sharedPos = new Point()
staticprivate

Definition at line 170 of file Chara.cs.

Referenced by TryMoveTowards().

◆ _Speed

int Chara._Speed
private

Definition at line 168 of file Chara.cs.

Referenced by RefreshSpeed().

◆ _strs

string [] Chara._strs = new string[5]

Definition at line 79 of file Chara.cs.

◆ _tactics

Tactics Chara._tactics

Definition at line 160 of file Chara.cs.

◆ _works

List<int> Chara._works

Definition at line 52 of file Chara.cs.

◆ _workSummary

WorkSummary Chara._workSummary

Definition at line 55 of file Chara.cs.

◆ actTime

float Chara.actTime = 0.3f

Definition at line 174 of file Chara.cs.

Referenced by _Move(), and CharaRenderer.UpdatePosition().

◆ ai

◆ body

◆ bossText

bool Chara.bossText

Definition at line 144 of file Chara.cs.

Referenced by CardRenderer.Draw(), OnCreate(), and OnDeserialized().

◆ calmCheckTurn

int Chara.calmCheckTurn

Definition at line 116 of file Chara.cs.

Referenced by DoHostileAction(), and GoalCombat.Run().

◆ canSeeInvisible

bool Chara.canSeeInvisible

Definition at line 138 of file Chara.cs.

Referenced by CanSee(), CanSeeLos(), Refresh(), and PointTarget.ShouldIgnore().

◆ combatCount

int Chara.combatCount

Definition at line 114 of file Chara.cs.

◆ conditions

◆ conSleep

◆ consumeTurn

bool Chara.consumeTurn
static

Definition at line 176 of file Chara.cs.

◆ conSuspend

◆ contribution

int Chara.contribution

Definition at line 18 of file Chara.cs.

Referenced by OnCreate().

◆ dirtySpeed

bool Chara.dirtySpeed = true

Definition at line 166 of file Chara.cs.

Referenced by RefreshSpeed(), and SetDirtySpeed().

◆ emoIcon

Emo2 Chara.emoIcon

Definition at line 106 of file Chara.cs.

Referenced by TCOrbitChara.RefreshAll(), and BaseCondition.SetOwner().

◆ enemy

◆ faithElements

◆ global

◆ goalList

GoalList Chara.goalList = new GoalList()

Definition at line 196 of file Chara.cs.

◆ happiness

int Chara.happiness

Definition at line 108 of file Chara.cs.

Referenced by FactionBranch.GetHappiness(), and OnCreate().

◆ hasMovedThisTurn

bool Chara.hasMovedThisTurn
private

Definition at line 172 of file Chara.cs.

Referenced by _Move(), and Tick().

◆ hasTelepathy

bool Chara.hasTelepathy

◆ held

◆ host

◆ idleActTimer

int Chara.idleActTimer

Definition at line 112 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ idleTimer

float Chara.idleTimer

Definition at line 120 of file Chara.cs.

Referenced by CharaRenderer.UpdatePosition().

◆ IDTimeTable

string [] Chara.IDTimeTable = new string[2] { "default", "owl" }
static

Definition at line 15 of file Chara.cs.

◆ ignoreSPAbsorb

bool Chara.ignoreSPAbsorb

Definition at line 146 of file Chara.cs.

◆ isBerserk

bool Chara.isBerserk

◆ isBlind

◆ isConfused

◆ isCreated

bool Chara.isCreated

Definition at line 136 of file Chara.cs.

Referenced by CharaBody.Equip(), OnCreate(), OnDeserialized(), and CharaBody.Unequip().

◆ isDrunk

bool Chara.isDrunk

Definition at line 124 of file Chara.cs.

Referenced by _Move(), and AI_Idle.Run().

◆ isFainted

bool Chara.isFainted

Definition at line 128 of file Chara.cs.

◆ isOnCreate

bool Chara.isOnCreate
static

Definition at line 180 of file Chara.cs.

◆ isParalyzed

bool Chara.isParalyzed

Definition at line 132 of file Chara.cs.

Referenced by Point.ListWitnesses().

◆ isWet

bool Chara.isWet

Definition at line 142 of file Chara.cs.

Referenced by Card.DamageHP(), Refresh(), and GoalCombat.TryUseAbility().

◆ lastPos

Point Chara.lastPos = new Point()

Definition at line 90 of file Chara.cs.

Referenced by _Move().

◆ ListAdvJob

List<SourceJob.Row> Chara.ListAdvJob = new List<SourceJob.Row>()
static

Definition at line 164 of file Chara.cs.

Referenced by OnCreate().

◆ ListAdvRace

List<SourceRace.Row> Chara.ListAdvRace = new List<SourceRace.Row>()
static

Definition at line 162 of file Chara.cs.

Referenced by OnCreate().

◆ listHobby

List<Hobby> Chara.listHobby = new List<Hobby>()
staticprivate

Definition at line 13 of file Chara.cs.

◆ master

Chara Chara.master

Definition at line 88 of file Chara.cs.

Referenced by FindMaster(), MakeMinion(), MoveZone(), ReleaseMinion(), and AI_Idle.Run().

◆ memberType

◆ nextUse

Thing Chara.nextUse

Definition at line 100 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ orgPos

◆ parasite

◆ party

◆ path

PathProgress Chara.path = new PathProgress()

Definition at line 92 of file Chara.cs.

Referenced by AI_Goto.Run(), and AI_Goto.TryGoTo().

◆ pccData

◆ preventRegen

bool Chara.preventRegen
static

Definition at line 178 of file Chara.cs.

◆ quest

◆ ranged

◆ rawSlots

int [] Chara.rawSlots

Definition at line 73 of file Chara.cs.

Referenced by OnSerializing().

◆ resistCon

Dictionary<int, int> Chara.resistCon

Definition at line 210 of file Chara.cs.

◆ ride

◆ shared

Point Chara.shared = new Point()
staticprivate

Definition at line 11 of file Chara.cs.

◆ sharedCheckTurn

int Chara.sharedCheckTurn

Definition at line 118 of file Chara.cs.

Referenced by OnDeserialized(), and AI_Idle.Run().

◆ source

◆ spriteReplacer

SpriteReplacer Chara.spriteReplacer

Definition at line 150 of file Chara.cs.

Referenced by CoreDebug.UpdateInput().

◆ stealthSeen

int Chara.stealthSeen

Definition at line 184 of file Chara.cs.

◆ tempElements

◆ turnLastSeen

int Chara.turnLastSeen = -100

Definition at line 110 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ wasInWater

bool Chara.wasInWater

Definition at line 148 of file Chara.cs.

◆ workElements

ElementContainer Chara.workElements

Definition at line 40 of file Chara.cs.

Property Documentation

◆ _affinity

int Chara._affinity
getset

Definition at line 298 of file Chara.cs.

299 {
300 get
301 {
302 return _cints[5];
303 }
304 set
305 {
306 _cints[5] = value;
307 }
308 }

Referenced by TraitToolBrush.GetHeldEmo(), Affinity.GetIcon(), Affinity.Mod(), OnCreate(), and DramaActor.Talk().

◆ _alias

string Chara._alias
getset

Definition at line 214 of file Chara.cs.

215 {
216 get
217 {
218 return _strs[0];
219 }
220 set
221 {
222 _strs[0] = value;
223 }
224 }
string[] _strs
Definition: Chara.cs:79

Referenced by GetName(), OnCreate(), and CoreDebug.RegenerateNames().

◆ _idTimeTable

int Chara._idTimeTable
getset

Definition at line 336 of file Chara.cs.

337 {
338 get
339 {
340 return _cints[9];
341 }
342 set
343 {
344 _cints[9] = value;
345 }
346 }

Referenced by OnCreate().

◆ _maxStamina

int Chara._maxStamina
getset

Definition at line 360 of file Chara.cs.

361 {
362 get
363 {
364 return _cints[20];
365 }
366 set
367 {
368 _cints[20] = value;
369 }
370 }

Referenced by CalculateMaxStamina().

◆ ability

◆ actorPrefab

override string Chara.actorPrefab
get

Definition at line 514 of file Chara.cs.

515 {
516 get
517 {
518 if (IsPCC)
519 {
520 return "CharaActorPCC";
521 }
522 return "CharaActor";
523 }
524 }

◆ affinity

◆ Aka

◆ AliasMaterialOnCreate

override string Chara.AliasMaterialOnCreate
get

Definition at line 554 of file Chara.cs.

◆ baseWorkElements

ElementContainer Chara.baseWorkElements
get

Definition at line 962 of file Chara.cs.

963 {
964 get
965 {
966 if (_baseWorkElements == null)
967 {
969 foreach (Hobby item in ListHobbies())
970 {
971 Build(item);
972 }
973 foreach (Hobby item2 in ListWorks())
974 {
975 Build(item2);
976 }
977 }
978 return _baseWorkElements;
979 void Build(Hobby h)
980 {
981 if (!h.source.elements.IsEmpty())
982 {
983 for (int i = 0; i < h.source.elements.Length; i += 2)
984 {
985 int ele = h.source.elements[i];
986 int v = h.source.elements[i + 1];
988 }
989 }
990 }
991 }
992 }
ElementContainer _baseWorkElements
Definition: Chara.cs:200

◆ bladder

Stats Chara.bladder
get

Definition at line 1002 of file Chara.cs.

Referenced by WidgetStats._OnActivate(), WindowChara.RefreshStatus(), and GoalNeeds.Run().

◆ burden

◆ CanGainConResist

bool Chara.CanGainConResist
get

Definition at line 1012 of file Chara.cs.

1013 {
1014 get
1015 {
1016 if (base.rarity >= Rarity.Legendary)
1017 {
1018 return !IsPCFaction;
1019 }
1020 return false;
1021 }
1022 }

◆ CanOpenDoor

bool Chara.CanOpenDoor
get

Definition at line 814 of file Chara.cs.

815 {
816 get
817 {
818 if (base.INT < 5)
819 {
820 if (IsPCFaction)
821 {
822 return memberType == FactionMemberType.Default;
823 }
824 return false;
825 }
826 return true;
827 }
828 }

◆ CanWitness

bool Chara.CanWitness
get

Definition at line 866 of file Chara.cs.

867 {
868 get
869 {
870 if (!race.IsHuman && !race.IsFairy && !race.IsGod)
871 {
872 return race.id == "mutant";
873 }
874 return true;
875 }
876 }

Referenced by Point.ListWitnesses().

◆ corruption

int Chara.corruption
getset

Definition at line 372 of file Chara.cs.

373 {
374 get
375 {
376 return _cints[21];
377 }
378 set
379 {
380 _cints[21] = value;
381 }
382 }

Referenced by ActEffect.Proc().

◆ CurrentGeneSlot

int Chara.CurrentGeneSlot
get

Definition at line 936 of file Chara.cs.

937 {
938 get
939 {
940 if (base.c_genes != null)
941 {
942 return base.c_genes.GetGeneSlot(this);
943 }
944 return 0;
945 }
946 }

Referenced by InvOwnerGene._OnProcess(), InvOwnerGene.OnWriteNote(), and WindowCharaMini.Refresh().

◆ CurrentSpan

TimeTable.Span Chara.CurrentSpan
get

Definition at line 832 of file Chara.cs.

Referenced by ConSleep.Tick().

◆ currentZone

Zone Chara.currentZone
getset

Definition at line 250 of file Chara.cs.

251 {
252 get
253 {
254 return RefZone.Get(_cints[1]);
255 }
256 set
257 {
258 _cints[1] = RefZone.Set(value);
259 }
260 }
static int Set(Zone zone)
Definition: RefZone.cs:12
static Zone Get(int uid)
Definition: RefZone.cs:3

Referenced by _Move(), AM_ViewZone._OnUpdateInput(), Game.AddAdventurer(), Zone.AddGlobalCharasOnActivate(), Faction.AddReserve(), GameDate.AdvanceDay(), GameDate.AdvanceHour(), Zone.CanDestroy(), BaseGameScreen.Draw(), CoreDebug.Fix_RemoveDemitas(), BaseGameScreen.FocusPC(), GlobalGoalExplore.GetDestZone(), GlobalGoalVisitTown.GetDestZone(), Hobby.GetEfficiency(), IsEnemyOnPath(), Quest.IsVisibleOnQuestBoard(), CardManager.ListGlobalChara(), Region.ListTravelZones(), Player.MoveZone(), FactionBranch.OnAdvanceDay(), GlobalGoalAdv.OnAdvanceHour(), GlobalGoalVisitAndStay.OnAdvanceHour(), BaseListPeople.OnClick(), LayerNewZone.OnClickExit(), QuestDialog.OnDropReward(), Game.OnLoad(), Player.OnStartNewGame(), Scene.OnUpdate(), AM_BaseGameMode.OnUpdateInput(), AttackProcess.PlayRangedAnime(), CoreDebug.QuickStart(), FactionBranch.Recruit(), ActorEx.Refresh(), ItemCulture.Refresh(), BaseGameScreen.RefreshPosition(), GameScreenElona.RefreshPosition(), WindowChara.RefreshProfile(), LayerGlobalMap.RefreshSummary(), ContentFaction.RefreshZones(), LayerFactions.RefreshZones(), LayerLocation.RefreshZones(), FactionBranch.RemoveMemeber(), ButtonChara.SetChara(), ItemGeneral.SetChara(), Meeting.SetChara(), Quest.SetClient(), ListPeopleExpedition.SetSubText(), UIZoneInfo.SetZone(), Player.SimulateFaction(), and EloPos.WriteNote().

◆ daysStarved

int Chara.daysStarved
getset

Definition at line 324 of file Chara.cs.

325 {
326 get
327 {
328 return _cints[7];
329 }
330 set
331 {
332 _cints[7] = value;
333 }
334 }

◆ depression

Stats Chara.depression
get

Definition at line 1000 of file Chara.cs.

Referenced by WidgetStats._OnActivate(), and WindowChara.RefreshStatus().

◆ DestDist

int Chara.DestDist
get

Definition at line 862 of file Chara.cs.

Referenced by ConfigTactics.AllyDistance(), and CanReplace().

◆ DV

override int Chara.DV
get

Definition at line 724 of file Chara.cs.

725 {
726 get
727 {
728 if (IsPCFaction)
729 {
730 return WeaknessMod(elements.Value(64));
731 }
732 int num = base.LV;
733 if (num > 50)
734 {
735 num = 50 + (num - 50) / 10;
736 }
737 return WeaknessMod(num + elements.Value(64) * (100 + num + race.DV * 5) / 100);
738 int WeaknessMod(int a)
739 {
740 if (HasCondition<ConWeakness>())
741 {
742 if (a <= 0)
743 {
744 return a * 2;
745 }
746 return a / 2;
747 }
748 return a;
749 }
750 }
751 }

Referenced by WidgetStatsBar.Build(), WindowCharaMini.Refresh(), and WindowChara.RefreshProfile().

◆ faction

Faction Chara.faction
getset

Definition at line 422 of file Chara.cs.

423 {
424 get
425 {
426 return _faction ?? (_faction = EClass.game.factions.dictAll.TryGetValue(idFaction));
427 }
428 set
429 {
430 idFaction = value?.uid;
431 }
432 }
string idFaction
Definition: Chara.cs:239
Dictionary< string, Faction > dictAll
FactionManager factions
Definition: Game.cs:161

Referenced by WidgetMenuPanel._OnChangeMode(), Element._WriteNote(), FactionBranch.AddMemeber(), PolicyManager.AddPolicy(), GameDate.AdvanceDay(), GameDate.AdvanceMonth(), QuestDialog.CanStartQuest(), Zone.ClaimZone(), Map.CountChara(), Faction.CountMembers(), FactionBranch.DailyOutcome(), CharaBody.Equip(), FactionBranch.Evalue(), GoalSiege.GetDestCard(), RankedZone.GetFactionName(), RankedZoneManager.GetIncome(), FortuneRollData.GetPrizeList(), AttackProcess.GetWeaponEnc(), Element.IsFactionElement(), Religion.JoinFaith(), Religion.LeaveFaith(), Map.ListChara(), ElementContainer.ListElements(), FactionBranch.OnClaimZone(), ListPeopleRevive.OnList(), Game.OnLoad(), TraitBookSkill.OnRead(), TraitDeed.OnRead(), TraitDeedRelocate.OnRead(), ContentHomeReport.OnSwitchContent(), FactionBranch.OnUnclaimZone(), ActRanged.Perform(), AttackProcess.Perform(), Card.PurgeDuplicateArtifact(), UIHomeInfo.Refresh(), UIHomeInfo.RefreshInfo(), WindowChara.RefreshInfo(), ContentPolicy.RefreshPolicyList(), WindowChara.RefreshProfile(), ContentFaction.RefreshZones(), FactionBranch.RemoveMemeber(), AI_Idle.Run(), SetFaction(), FactionBranch.SetOwner(), GameDate.ShipPackages(), Player.SimulateFaction(), ContentRanking.SwitchRanking(), CharaBody.Unequip(), FactionBranch.Upgrade(), FactionBranch.ValidateUpgradePolicies(), ElementContainer.Value(), ElementContainerCard.ValueBonus(), Element.BonusInfo.WriteNote(), and TraitBookPlan.WriteNote().

◆ faith

◆ flipX

override bool Chara.flipX
get

Definition at line 542 of file Chara.cs.

543 {
544 get
545 {
546 if (base.dir != 1)
547 {
548 return base.dir == 2;
549 }
550 return true;
551 }
552 }

Referenced by CharaActor.RefreshSprite().

◆ goalListType

GoalListType Chara.goalListType
getset

Definition at line 274 of file Chara.cs.

275 {
276 get
277 {
278 return _cints[3].ToEnum<GoalListType>();
279 }
280 set
281 {
282 _cints[3] = (int)value;
283 }
284 }
GoalListType
Definition: GoalListType.cs:2

◆ HasHost

override bool Chara.HasHost
get

Definition at line 684 of file Chara.cs.

Referenced by ActEffect.Proc().

◆ HasNoGoal

◆ homeBranch

◆ homeZone

◆ hostility

◆ hunger

◆ hygiene

Stats Chara.hygiene
get

Definition at line 1004 of file Chara.cs.

Referenced by WidgetStats._OnActivate(), AI_Fuck.Finish(), ModAffinity(), and AI_Bladder.Run().

◆ idFaction

string Chara.idFaction
getset

Definition at line 238 of file Chara.cs.

239 {
240 get
241 {
242 return _strs[2];
243 }
244 set
245 {
246 _strs[2] = value;
247 }
248 }

◆ idFaith

string Chara.idFaith
getset

Definition at line 226 of file Chara.cs.

227 {
228 get
229 {
230 return _strs[1];
231 }
232 set
233 {
234 _strs[1] = value;
235 }
236 }

Referenced by Element.IsActive(), and ElementContainerFaction.IsEffective().

◆ IDPCCBodySet

string Chara.IDPCCBodySet
get

Definition at line 486 of file Chara.cs.

487 {
488 get
489 {
490 if (source.idActor.Length <= 1)
491 {
492 return "female";
493 }
494 return source.idActor[1];
495 }
496 }

Referenced by BaseListPeople.OnClick(), and OnCreate().

◆ idTimeTable

string Chara.idTimeTable
get

Definition at line 464 of file Chara.cs.

Referenced by LayerQuestBoard.RefreshHire().

◆ interest

int Chara.interest
getset

Definition at line 312 of file Chara.cs.

313 {
314 get
315 {
316 return _cints[6];
317 }
318 set
319 {
320 _cints[6] = value;
321 }
322 }

Referenced by Cuddle(), TraitToolBrush.GetHeldEmo(), DramaCustomSequence.GetRumor(), OnCreate(), AI_PlayMusic.Run(), DramaActor.Talk(), and TraitToolBrush.TrySetHeldAct().

◆ IsAdventurer

bool Chara.IsAdventurer
get

Definition at line 906 of file Chara.cs.

907 {
908 get
909 {
910 if (global != null && faction != EClass.pc.faction)
911 {
912 return IsPCC;
913 }
914 return false;
915 }
916 }

◆ isAlawysVisible

bool Chara.isAlawysVisible
getset

Definition at line 396 of file Chara.cs.

397 {
398 get
399 {
400 return _cbits1[1];
401 }
402 set
403 {
404 _cbits1[1] = value;
405 }
406 }

◆ IsAliveInCurrentZone

◆ isChara

override bool Chara.isChara
get

Definition at line 682 of file Chara.cs.

Referenced by TraitShackle.IsRestraining(), and Portrait.SetChara().

◆ isDead

◆ IsDeadOrSleeping

override bool Chara.IsDeadOrSleeping
get

Definition at line 568 of file Chara.cs.

569 {
570 get
571 {
572 if (!isDead && conSleep == null && conSuspend == null)
573 {
574 return isFainted;
575 }
576 return true;
577 }
578 }
bool isFainted
Definition: Chara.cs:128

Referenced by CharaRenderer.Draw(), CharaRenderer.DrawHat(), BaseTileMap.DrawTile(), TileMapElona.DrawTile(), GiveGift(), Player.OnAdvanceHour(), CharaActorPCC.OnRender(), RefreshSpeed(), AI_Fuck.Run(), StanceSongSleep.Tick(), and CharaRenderer.UpdatePosition().

◆ IsDisabled

override bool Chara.IsDisabled
get

◆ IsEyth

bool Chara.IsEyth
get

Definition at line 918 of file Chara.cs.

Referenced by TraitAltar.OnOffer().

◆ IsGlobal

◆ IsHuman

bool Chara.IsHuman
get

◆ IsHumanSpeak

bool Chara.IsHumanSpeak
get

Definition at line 880 of file Chara.cs.

881 {
882 get
883 {
884 if (!IsHuman)
885 {
886 return race.tag.Contains("humanSpeak");
887 }
888 return true;
889 }
890 }

Referenced by Card.GetTalkText(), ConEntangle.Tick(), and TryPush().

◆ IsIdle

bool Chara.IsIdle
get

Definition at line 848 of file Chara.cs.

849 {
850 get
851 {
852 if (!IsDeadOrSleeping)
853 {
854 return ai.Current.IsIdle;
855 }
856 return false;
857 }
858 }
virtual bool IsIdle
Definition: AIAct.cs:78

Referenced by _Move(), AI_Idle.Run(), and ConSleep.SuccubusVisit().

◆ IsInActiveZone

◆ IsInCombat

◆ IsLevitating

bool Chara.IsLevitating
get

Definition at line 592 of file Chara.cs.

593 {
594 get
595 {
596 if (ride != null)
597 {
598 return ride._isLevitating;
599 }
600 return _isLevitating;
601 }
602 }

Referenced by _Move(), ActEffect.DamageEle(), TraitTrap.OnActivateTrap(), TraitFloorSwitch.OnStepped(), Scene.OnUpdate(), and ConWet.Tick().

◆ IsLocalChara

bool Chara.IsLocalChara
get

Definition at line 836 of file Chara.cs.

837 {
838 get
839 {
840 if (!IsGlobal && !base.isSubsetCard)
841 {
842 return homeZone == EClass._zone;
843 }
844 return false;
845 }
846 }

Referenced by MakeAlly(), and ActThrow.Throw().

◆ IsMaid

bool Chara.IsMaid
get

Definition at line 892 of file Chara.cs.

893 {
894 get
895 {
896 if (EClass.Branch != null)
897 {
898 return EClass.Branch.uidMaid == base.uid;
899 }
900 return false;
901 }
902 }

Referenced by FactionBranch.GetMaid().

◆ IsMinion

override bool Chara.IsMinion
get

Definition at line 622 of file Chara.cs.

623 {
624 get
625 {
626 if (master == null)
627 {
628 return base.c_uidMaster != 0;
629 }
630 return true;
631 }
632 }

Referenced by ActPlan._Update(), ConStrife.AddKill(), CanBeTempAlly(), FindMaster(), AI_Shear.GetFur(), Zone_Casino.OnActivate(), Zone_CursedManor.OnGenerateMap(), ZoneInstanceRandomQuest.OnLeaveZone(), AI_PlayMusic.Run(), and GoalCombat.Run().

◆ IsMofuable

bool Chara.IsMofuable
get

Definition at line 960 of file Chara.cs.

Referenced by ActPlan._Update(), and AI_Idle.Run().

◆ IsMoving

override bool Chara.IsMoving
get

Definition at line 604 of file Chara.cs.

Referenced by BaseTileMap.Draw(), TileMapElona.Draw(), GetHoverText(), and UISong.Update().

◆ IsMultisize

override bool Chara.IsMultisize
get

◆ IsPC

override bool Chara.IsPC
get

Definition at line 608 of file Chara.cs.

Referenced by _Move(), TraitShrine._OnUse(), ActPlan._Update(), Element._WriteNote(), TraitSwitch.ActivateTrap(), Zone.AddGlobalCharasOnActivate(), Feat.Apply(), ActMelee.Attack(), CalcBurden(), CalculateMaxStamina(), TraitTrolley.CanActivate(), Thing.CanAutoFire(), AIAct.Cancel(), TraitFoodPreparedPackage.CanEat(), CanMoveTo(), Act.CanPerform(), TraitScroll.CanRead(), CanReplace(), CanSee(), Player.CanSee(), CanSeeLos(), CanSeeSimple(), ActThrow.CanThrow(), AI_Torture.CreateProgress(), Cuddle(), FactionBranch.DailyOutcome(), ActionMode.DoFunc(), DoHostileAction(), CharaRenderer.Draw(), BaseTileMap.DrawTile(), CharaBody.Equip(), AI_Fish.ProgressFish.Fail(), AI_Fuck.Finish(), GetBurden(), Element.GetCost(), GetFirstStep(), TraitToolBrush.GetHeldEmo(), FactionBranch.GetResidentTax(), Zone.GetSpawnPos(), HasAccess(), TraitGamble.IdleUse(), Zone.IsCrime(), Party.IsCriticallyWounded(), CharaBody.IsEquippable(), Religion.JoinFaith(), Kick(), Religion.LeaveFaith(), Point.ListWitnesses(), AI_Fish.Makefish(), StatsMana.Mod(), StatsStamina.Mod(), ModAffinity(), TraitBasketGame.OnActivateTrap(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), BaseListPeople.OnClick(), WindowChara.OnClickPortrait(), TaskHarvest.OnCreateProgress(), TaskPlow.OnCreateProgress(), TraitFortuneCookie.OnEat(), AI_Fish.ProgressFish.OnProgress(), AI_Fish.ProgressFish.OnProgressComplete(), TaskDig.OnProgressComplete(), TaskMine.OnProgressComplete(), TraitBaseSpellbook.OnRead(), TraitBookSecret.OnRead(), TraitBookSkill.OnRead(), TraitDiary.OnRead(), TraitIndulgence.OnRead(), TraitScrollStatic.OnRead(), ConBlind.OnRemoved(), ConFaint.OnRemoved(), ConReload.OnRemoved(), AI_Read.OnSetOwner(), ConBlind.OnStart(), ConSuffocation.OnStart(), TraitCurrencyMedal.OnStepped(), TraitMiniPool.OnStepped(), TraitNewZone.OnStepped(), WindowChara.OnSwitchContent(), ActRanged.Perform(), ActWait.Perform(), ActZap.Perform(), AttackProcess.Perform(), ActEffect.Poison(), ActPray.Pray(), FoodEffect.Proc(), ActEffect.Proc(), InvOwner.Transaction.Process(), TraitBaseSpellbook.ReadFailEffect(), ButtonRoster.Refresh(), WindowChara.RefreshNote(), WindowChara.RefreshProfile(), RefreshSpeed(), CoreDebug.RegenerateNames(), RequestProtection(), AI_Eat.Run(), AI_Fish.Run(), AI_Goto.Run(), AI_Idle.Run(), AI_PassTime.Run(), AI_PlayMusic.Run(), AI_Torture.Run(), AI_Trolley.Run(), AIProgress.Run(), GoalCombat.Run(), TaskPoint.Run(), Map.Save(), WindowChara.SetChara(), CharaRenderer.SetFirst(), LayerDragGrid.SetInv(), AIAct.Start(), ConSleep.SuccubusVisit(), Player.TargetRanged(), ConFear.Tick(), ConSleep.Tick(), ConSuffocation.Tick(), AIAct.TryCancel(), AI_Goto.TryGoTo(), GoalCombat.TryMove(), TryMove(), TryMoveFrom(), TryMoveTowards(), Trait.TryOpenLock(), LayerDragGrid.TryProc(), TraitBaseSpellbook.TryProgress(), TryPush(), ActRanged.TryReload(), TrySetEnemy(), TraitLeash.TrySetHeldAct(), TraitToolButcher.TrySetHeldAct(), GoalCombat.TryUseAbility(), CharaBody.Unequip(), CharaBody.UnqeuipIfTooHeavy(), CoreDebug.UpdateInput(), and CharaRenderer.UpdatePosition().

◆ IsPCC

◆ IsPCFaction

override bool Chara.IsPCFaction
get

Definition at line 666 of file Chara.cs.

667 {
668 get
669 {
670 if (EClass.pc != null)
671 {
672 return faction == EClass.pc.faction;
673 }
674 return false;
675 }
676 }

Referenced by _Move(), ActPlan._Update(), Element._WriteNote(), GameDate.AdvanceHour(), DramaCustomSequence.Build(), CallHelp(), TraitTrolley.CanActivate(), Thing.CanAutoFire(), CanBeTempAlly(), TraitSalesTag.CanTagSale(), ElementContainerFaction.CheckDirty(), Map.CountHostile(), Map.CountNonHostile(), Map.CountWildAnimal(), AI_Torture.CreateProgress(), ActionMode.DoFunc(), DoHostileAction(), AI_Fuck.Finish(), Element.IsFactionElement(), Quest.IsVisibleOnQuestBoard(), ElementContainer.ListElements(), Point.ListWitnesses(), ActEffect.LoveMiracle(), AI_Fish.Makefish(), StatsMana.Mod(), TraitHitchingPost.OnActivateTrap(), GlobalGoalAdv.OnAdvanceHour(), ElementContainerFaction.OnEquip(), Zone_SubTown.OnGenerateRooms(), BaseListPeople.OnInstantiate(), ElementContainerFaction.OnJoinFaith(), QuestTaskHunt.OnKillChara(), ElementContainerFaction.OnLeaveFaith(), ElementContainerCard.OnLevelDown(), ElementContainerCard.OnLevelUp(), ListPeopleBed.OnList(), Game.OnLoad(), ElementContainerFaction.OnUnequip(), Zone.OnVisit(), AttackProcess.Perform(), FoodEffect.Proc(), ActEffect.Proc(), TraitBaseSpellbook.ReadFailEffect(), TraitGeneratorWheel.Refresh(), WindowChara.RefreshProfile(), LayerQuestBoard.RefreshRanking(), RefreshSpeed(), RequestProtection(), Zone.ResetHostility(), CoreDebug.ResetPetUpgrades(), ActRide.Ride(), AI_Fish.Run(), AI_Fuck.Run(), AI_Idle.Run(), AI_PlayMusic.Run(), AI_Steal.Run(), GoalCombat.Run(), TraitGeneratorWheel.ShouldWork(), Zone.Simulate(), ConMiasma.Tick(), ConSleep.Tick(), TraitSwitch.TryDisarmTrap(), TrySetEnemy(), TraitStethoscope.TrySetHeldAct(), TraitToolButcher.TrySetHeldAct(), TraitWhipLove.TrySetHeldAct(), Map.TryShatter(), GoalCombat.TryUseAbility(), TraitBed.ValidateOwners(), and Element.BonusInfo.WriteNote().

◆ IsPCFactionMinion

override bool Chara.IsPCFactionMinion
get

Definition at line 650 of file Chara.cs.

651 {
652 get
653 {
654 if (master != null)
655 {
656 if (!master.IsPCFaction)
657 {
659 }
660 return true;
661 }
662 return false;
663 }
664 }

Referenced by ElementContainerFaction.CheckDirty(), DoHostileAction(), Point.ListWitnesses(), AI_PlayMusic.Run(), GoalCombat.Run(), and TrySetEnemy().

◆ IsPCParty

override bool Chara.IsPCParty
get

Definition at line 610 of file Chara.cs.

611 {
612 get
613 {
614 if (party != null)
615 {
616 return party.leader == EClass.pc;
617 }
618 return false;
619 }
620 }

Referenced by ActPlan._Update(), Zone.AbandonZone(), Zone.AddGlobalCharasOnActivate(), Faction.AddReserve(), GameDate.AdvanceHour(), FactionBranch.AutoClean(), CanReplace(), Player.CanSee(), TraitSalesTag.CanTagSale(), Cuddle(), FactionBranch.DailyOutcome(), Die(), DoHostileAction(), AI_Fuck.Finish(), FactionBranch.GenerateGarbage(), DramaCustomSequence.GetListGuide(), FactionBranch.GetProductBonus(), IsHostile(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), FactionBranch.OnAfterSimulate(), ZoneEventDefenseGame.OnCharaDie(), BaseListPeople.OnClick(), Zone_CursedManor.OnGenerateMap(), ListPeopleExpedition.OnList(), TraitBaseSpellbook.OnRead(), AI_Read.OnSetOwner(), FactionBranch.OnSimulateDay(), FactionBranch.OnSimulateHour(), TraitGeneMachine.OnUse(), ActWait.Perform(), ActWater.Perform(), ActZap.Perform(), AttackProcess.Perform(), AttackProcess.Prepare(), FoodEffect.Proc(), ActEffect.Proc(), ActEffect.ProcAt(), TCOrbitChara.RefreshAll(), Zone.RefreshCriminal(), FactionBranch.RefreshEfficiency(), UIHomeInfo.RefreshReport(), RefreshSpeed(), RequestProtection(), AI_Eat.Run(), AI_Fish.Run(), AI_Idle.Run(), AI_PlayMusic.Run(), GoalCombat.Run(), ItemGeneral.SetChara(), Zone.Simulate(), TraitSwitch.TryDisarmTrap(), TryPush(), TraitLeash.TrySetHeldAct(), GoalCombat.TryUseAbility(), CharaRenderer.UpdatePosition(), and TraitBed.ValidateOwners().

◆ IsPCPartyMinion

override bool Chara.IsPCPartyMinion
get

Definition at line 634 of file Chara.cs.

635 {
636 get
637 {
638 if (master != null)
639 {
640 if (!master.IsPCParty)
641 {
642 return master.IsPCPartyMinion;
643 }
644 return true;
645 }
646 return false;
647 }
648 }

Referenced by ActPlan._Update(), DoHostileAction(), IsEscorted(), MoveZone(), ZoneEventDefenseGame.OnCharaDie(), and ActEffect.Proc().

◆ IsPrisoner

bool Chara.IsPrisoner
get

Definition at line 904 of file Chara.cs.

◆ isSynced

override bool Chara.isSynced
get

Definition at line 686 of file Chara.cs.

687 {
688 get
689 {
690 if (renderer == null || !renderer.isSynced)
691 {
692 if (host != null)
693 {
694 return host.isSynced;
695 }
696 return false;
697 }
698 return true;
699 }
700 }

Referenced by _Move(), ActPlan._Update(), BaseGameScreen.Draw(), Player.HasValidRangedTarget(), Point.ListInspectorTargets(), BaseListPeople.OnClick(), AM_Adv.OnRenderTile(), Scene.OnUpdate(), AttackProcess.Perform(), AttackProcess.PlayRangedAnime(), AI_Idle.Run(), TalkTopic(), Player.TargetRanged(), ConSleep.Tick(), and TryPush().

◆ isThing

override bool Chara.isThing
get

Definition at line 680 of file Chara.cs.

◆ IsWealthy

bool Chara.IsWealthy
get

Definition at line 920 of file Chara.cs.

921 {
922 get
923 {
924 if (!source.works.Contains("Rich"))
925 {
926 return source.hobbies.Contains("Rich");
927 }
928 return true;
929 }
930 }

Referenced by FactionBranch.CountWealthyGuests(), FactionBranch.GetResidentTax(), and CalcMoney.Whore().

◆ job

◆ knowFav

bool Chara.knowFav
getset

Definition at line 408 of file Chara.cs.

409 {
410 get
411 {
412 return _cbits1[3];
413 }
414 set
415 {
416 _cbits1[3] = value;
417 }
418 }

Referenced by DramaActor.Talk(), and ConSleep.Tick().

◆ MainElement

Element Chara.MainElement
get

Definition at line 712 of file Chara.cs.

713 {
714 get
715 {
716 if (base.c_idMainElement == 0)
717 {
718 return Element.Void;
719 }
720 return elements.GetElement(base.c_idMainElement);
721 }
722 }

Referenced by Cuddle(), ZonePreEnterEncounter.Execute(), CardRow.GetName(), GetName(), Act.Perform(), AttackProcess.Perform(), ActEffect.ProcAt(), CharaAbility.Refresh(), Card.RefreshColor(), SetMainElement(), and GoalCombat.TryUseAbility().

◆ mana

◆ MaxGeneSlot

int Chara.MaxGeneSlot
get

◆ MaxHP

◆ MaxSummon

int Chara.MaxSummon
get

◆ NameBraced

string Chara.NameBraced
get

◆ NameTitled

string Chara.NameTitled
get

Definition at line 512 of file Chara.cs.

◆ OriginalHostility

Hostility Chara.OriginalHostility
get

Definition at line 466 of file Chara.cs.

467 {
468 get
469 {
470 if (EClass.pc == null || !IsPCFaction)
471 {
472 if (base.c_originalHostility == (Hostility)0)
473 {
474 if (!source.hostility.IsEmpty())
475 {
476 return source.hostility.ToEnum<Hostility>();
477 }
478 return Hostility.Enemy;
479 }
480 return base.c_originalHostility;
481 }
482 return Hostility.Ally;
483 }
484 }

Referenced by FactionBranch.AddMemeber(), CallHelp(), GuildFighter.CanGiveContribution(), Die(), IsHostile(), Point.ListWitnesses(), OnCreate(), Zone.OnGenerateMap(), QuestTaskHunt.OnKillChara(), Zone.ResetHostility(), AI_Steal.Run(), and GoalCombat.Run().

◆ Pref

override SourcePref Chara.Pref
get

Definition at line 782 of file Chara.cs.

783 {
784 get
785 {
786 if (spriteReplacer != null)
787 {
789 }
790 if (base.idSkin > 0)
791 {
792 switch (sourceCard.tiles.TryGet(base.idSkin))
793 {
794 case 2319:
795 case 2619:
796 case 2621:
797 case 2623:
798 case 2625:
800 case 2320:
801 case 2611:
802 case 2620:
803 case 2622:
804 case 2624:
805 case 2626:
806 case 2828:
808 }
809 }
810 return sourceCard.pref;
811 }
812 }
SourcePref snowputit2
Definition: CoreRef.cs:324
SourcePref sonwputit1
Definition: CoreRef.cs:322
SourcePref replacer1
Definition: CoreRef.cs:328
PrefData prefs
Definition: CoreRef.cs:405
CoreRef refs
Definition: Core.cs:51
SourcePref pref
Definition: RenderRow.cs:68

Referenced by CharaRenderer.Draw(), and BaseTileMap.DrawTile().

◆ PrefIndex

override int Chara.PrefIndex
get

Definition at line 526 of file Chara.cs.

527 {
528 get
529 {
530 if (sourceCard._tiles.Length != 0 || renderer.replacer != null)
531 {
532 if (base.dir != 1 && base.dir != 2)
533 {
534 return 0;
535 }
536 return 1;
537 }
538 return base.dir;
539 }
540 }

◆ PV

override int Chara.PV
get

Definition at line 753 of file Chara.cs.

754 {
755 get
756 {
757 if (IsPCFaction)
758 {
759 return WeaknessMod(elements.Value(65));
760 }
761 int num = base.LV;
762 if (num > 50)
763 {
764 num = 50 + (num - 50) / 10;
765 }
766 return WeaknessMod(num + elements.Value(65) * (100 + num + race.PV * 5) / 100);
767 int WeaknessMod(int a)
768 {
769 if (HasCondition<ConWeakness>())
770 {
771 if (a <= 0)
772 {
773 return a * 2;
774 }
775 return a / 2;
776 }
777 return a;
778 }
779 }
780 }

Referenced by WidgetStatsBar.Build(), WindowCharaMini.Refresh(), and WindowChara.RefreshProfile().

◆ race

◆ SAN

◆ SelfWeight

override int Chara.SelfWeight
get

Definition at line 708 of file Chara.cs.

◆ sleepiness

Stats Chara.sleepiness
get

◆ sourceCard

override CardRow Chara.sourceCard
get

◆ sourceRenderCard

override CardRow Chara.sourceRenderCard
get

Definition at line 448 of file Chara.cs.

449 {
450 get
451 {
452 if (pccData != null && !(source.renderData is RenderDataPcc))
453 {
455 }
456 return source;
457 }
458 }
static Row rowDefaultPCC
Definition: SourceChara.cs:131

◆ Speed

int Chara.Speed
get

Definition at line 948 of file Chara.cs.

949 {
950 get
951 {
952 if (dirtySpeed)
953 {
954 RefreshSpeed();
955 }
956 return _Speed;
957 }
958 }

Referenced by GameUpdater.ConditionUpdater.FixedUpdate(), and Tick().

◆ stamina

◆ tactics

Tactics Chara.tactics
get

Definition at line 830 of file Chara.cs.

◆ trait

◆ uidEditor

int Chara.uidEditor
getset

Definition at line 348 of file Chara.cs.

349 {
350 get
351 {
352 return _cints[10];
353 }
354 set
355 {
356 _cints[10] = value;
357 }
358 }

Referenced by SerializedCards.Add().

◆ WeightLimit

override int Chara.WeightLimit
get

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