Elin Decompiled Documentation EA 23.239 Nightly Patch 1
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)
 
Chara SetFaction (Faction f)
 
Chara SetHomeZone (Zone zone)
 
Chara SetHostility (Hostility h)
 
void OnBanish ()
 
Chara SetGlobal (Zone _home, int x, int z)
 
Chara SetGlobal ()
 
void RemoveGlobal ()
 
override void OnBeforeCreate ()
 
override void OnCreate (int genLv)
 
Chara ScaleByPrincipal ()
 
void SetFaith (string id)
 
void SetFaith (Religion r)
 
void HealAll ()
 
void Refresh (bool calledRecursive=false)
 
bool CanDuplicate ()
 
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 Banish (Chara owner)
 
void MakeMinion (Chara _master, MinionType type=MinionType.Default)
 
bool HasMinion (string id)
 
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 SaiyanRevive ()
 
void MakeGrave (string lastword)
 
void ApplyDeathPenalty ()
 
void Vomit ()
 
override void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
 
void TryDropBossLoot ()
 
void Kick (Point p, bool ignoreSelf=false, bool checkWall=true)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=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 ()
 
Chara GetNearbyCatToSniff ()
 
void Sniff (Chara c)
 
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)
 
bool RequestProtection (Chara attacker, Action< Chara > action)
 
bool ShouldThrowAway (Thing t, ClearInventoryType type)
 
void ClearInventory (ClearInventoryType type)
 
void ResetUpgrade ()
 
void TryUpgrade (bool msg=true)
 
bool CanBloom ()
 
void AddCooldown (int idEle, int turns=0)
 
void SetCooldown (int idEle, int turns=0)
 
bool HasCooldown (int idEle)
 
int GetCooldown (int idEle)
 
void TickCooldown ()
 
void ChooseNewGoal ()
 
Goal GetGoalFromTimeTable (int hour)
 
Goal GetGoalWork ()
 
Goal GetGoalHobby ()
 
bool HasHobbyOrWork (string alias)
 
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)
 
int CountDebuff ()
 
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)
 
void RemoveAllStances ()
 
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, bool isSunLit=false)
 
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, Thing origin=null)
 
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 (Recipe.Ingredient ing)
 
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 PurgeEythArtifact ()
 
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, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
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 long ApplyProtection (long dmg, int mod=100)
 
void DamageHP (long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
 
void DamageHP (long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
 
void ApplyElementEffect (Element e, int eleP, Card origin, bool checkHostileAct=false)
 
virtual void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
 
void Explode (Point p, Card origin)
 
void Deconstruct ()
 
void Destroy ()
 
void SpawnLoot (Card origin)
 
Thing TryMakeRandomItem (int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
 
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)
 
Card 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 GetHearingRadius ()
 
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
 
bool visibleWithTelepathy
 
bool isWeakToSunlight
 
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
 
const int SocketDiv = 1000
 
const int DamageLimit = 99999999
 
- 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]
 
bool IsAnimal [get]
 
bool IsHuman [get]
 
bool IsUndead [get]
 
bool IsMachine [get]
 
bool IsHorror [get]
 
bool IsFish [get]
 
bool IsFairy [get]
 
bool IsGod [get]
 
bool IsDragon [get]
 
bool IsPlant [get]
 
bool IsCat [get]
 
int DestDist [get]
 
bool HasNoGoal [get]
 
bool CanWitness [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 genLv [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 isScaled [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_lockedAge [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]
 
MixedFoodData c_mixedFoodData [get, set]
 
Thing c_bloodData [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
 
long _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 (long a)
 
static int rnd (int a)
 
static int curve (int a, int start, int step, int rate=75)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

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 6566 of file Chara.cs.

6567 {
6568 CardRenderer cardRenderer = renderer;
6569 CharaRenderer charaRenderer = new CharaRenderer();
6570 if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
6571 {
6572 base.idSkin = source.skinAntiSpider;
6573 }
6574 if (host != null)
6575 {
6576 charaRenderer.pccData = PCCData.Create("ride");
6577 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6578 charaRenderer.pccData.SetPart("body", "ride", idPart);
6579 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6580 }
6581 else
6582 {
6583 foreach (Condition condition in conditions)
6584 {
6585 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6586 if (rendererReplacer != null)
6587 {
6588 charaRenderer.replacer = rendererReplacer;
6589 charaRenderer.data = rendererReplacer.data;
6590 break;
6591 }
6592 }
6593 if (charaRenderer.replacer == null)
6594 {
6595 charaRenderer.pccData = pccData;
6596 }
6597 }
6598 renderer = charaRenderer;
6599 renderer.SetOwner(this);
6600 if (cardRenderer != null)
6601 {
6602 renderer.SetFirst(first: false, cardRenderer.position);
6603 }
6604 return charaRenderer;
6605 }
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:61
PCCData pccData
Chara host
Definition: Chara.cs:33
List< Condition > conditions
Definition: Chara.cs:211
SourceChara.Row source
Definition: Chara.cs:158
PCCData pccData
Definition: Chara.cs:67
new GameConfig game
Definition: CoreConfig.cs:609
PCCManager pccs
Definition: Core.cs:41
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:5
static Core core
Definition: EClass.cs:6

References CoreConfig.GameConfig.antiSpider, Core.config, EClass.core, RendererReplacer.data, CoreConfig.game, BaseCondition.GetRendererReplacer(), CharaRenderer.pccData, Core.pccs, CardRenderer.position, CardRenderer.replacer, CharaRenderer.SetOwner(), and SourceChara.Row.skinAntiSpider.

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

◆ _MakeAlly()

void Chara._MakeAlly ( )
inline

Definition at line 2288 of file Chara.cs.

2289 {
2290 if (EClass.pc.homeBranch != null)
2291 {
2293 }
2294 else
2295 {
2296 SetGlobal();
2298 }
2299 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2300 this.hostility = hostility2;
2301 orgPos = null;
2302 base.c_summonDuration = 0;
2303 base.isSummon = false;
2304 ReleaseMinion();
2305 SetInt(32);
2306 Refresh();
2307 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void ReleaseMinion()
Definition: Chara.cs:2354
Chara SetFaction(Faction f)
Definition: Chara.cs:1419
Point orgPos
Definition: Chara.cs:21
FactionBranch homeBranch
Definition: Chara.cs:1066
Chara SetGlobal()
Definition: Chara.cs:1486
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 2734 of file Chara.cs.

2735 {
2736 if (isDead)
2737 {
2738 return MoveResult.Fail;
2739 }
2740 if (IsPC)
2741 {
2742 float num = EClass.setting.defaultActPace;
2743 switch (burden.GetPhase())
2744 {
2745 case 3:
2746 num *= 1.5f;
2747 break;
2748 case 4:
2749 num *= 2f;
2750 break;
2751 }
2753 {
2754 int num2 = 30;
2755 if (!EClass.pc.HasElement(408))
2756 {
2758 {
2759 case Weather.Condition.Rain:
2760 num2 += 5;
2761 break;
2762 case Weather.Condition.RainHeavy:
2763 num2 += 10;
2764 num *= 1.5f;
2765 break;
2766 case Weather.Condition.Snow:
2767 num2 += 10;
2768 break;
2769 case Weather.Condition.SnowHeavy:
2770 num2 += 15;
2771 num *= 1.5f;
2772 break;
2773 }
2774 }
2775 if (newPoint.matFloor.id == 48)
2776 {
2777 num2 += 20;
2778 num *= 1.8f;
2779 }
2780 num2 = num2 * 100 / (100 + EvalueMax(240, -20) + EvalueMax(407, -5) * 5);
2781 EClass.world.date.AdvanceMin(num2 * 6);
2782 EClass.player.lastZonePos = null;
2784 int num3 = base.hp;
2785 for (int i = 0; i < num2 * 4; i++)
2786 {
2787 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2788 {
2789 if (!m.isDead)
2790 {
2791 m.TickConditions();
2792 }
2793 });
2794 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2795 {
2796 EClass.player.regionMoveWarned = true;
2797 Msg.Say("regionAbortMove");
2798 EInput.Consume(consumeAxis: true);
2799 SetAI(new NoGoal());
2800 return MoveResult.Fail;
2801 }
2802 }
2803 if (newPoint.cell.CanSuffocate())
2804 {
2805 AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2806 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2807 if (num4 >= 2)
2808 {
2809 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2810 }
2811 if (!isDead && !HasElement(429))
2812 {
2813 ModExp(200, 1 + num4 * 12);
2814 }
2815 }
2816 EClass.player.regionMoveWarned = false;
2817 if (isDead)
2818 {
2819 return MoveResult.Fail;
2820 }
2821 }
2822 if (num > EClass.setting.defaultActPace * 3f)
2823 {
2824 num = EClass.setting.defaultActPace * 3f;
2825 }
2826 actTime = num;
2827 }
2828 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2829 {
2830 ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2831 if (ride != null)
2832 {
2833 ride.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2834 }
2835 if (parasite != null)
2836 {
2837 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2838 }
2839 }
2840 Chara chara = ((ride == null) ? this : ride);
2841 if (!EClass._zone.IsRegion || chara.IsPC)
2842 {
2843 bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2844 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2845 {
2846 flag = true;
2847 }
2848 if (flag && newPoint.Distance(pos) <= 1)
2849 {
2850 Point randomNeighbor = pos.GetRandomNeighbor();
2851 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2852 {
2853 newPoint = randomNeighbor;
2854 if (isDrunk)
2855 {
2856 Talk("drunk");
2857 }
2858 }
2859 }
2860 }
2861 if (newPoint.x != pos.x || newPoint.z != pos.z)
2862 {
2863 LookAt(newPoint);
2864 }
2865 CellEffect effect = base.Cell.effect;
2866 if (effect != null && effect.id == 7)
2867 {
2868 CellEffect effect2 = base.Cell.effect;
2869 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2870 {
2871 Say("abWeb_caught", this);
2872 PlaySound("web");
2873 effect2.power = effect2.power * 3 / 4;
2874 renderer.PlayAnime(AnimeID.Shiver);
2875 return MoveResult.Fail;
2876 }
2877 Say("abWeb_pass", this);
2878 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2879 }
2880 if (IsPC)
2881 {
2882 if (EClass._zone.IsRegion)
2883 {
2885 }
2886 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2887 {
2889 }
2890 }
2891 if (newPoint.cell.hasDoor)
2892 {
2893 foreach (Thing thing in pos.Things)
2894 {
2895 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2896 {
2897 if (base.INT < 10)
2898 {
2899 return MoveResult.Fail;
2900 }
2901 traitDoor.TryOpenLock(this);
2902 return MoveResult.Door;
2903 }
2904 }
2905 }
2906 Cell cell = newPoint.cell;
2907 Cell cell2 = pos.cell;
2908 bool flag2 = cell.HasLiquid && !IsLevitating;
2909 bool hasBridge = cell.HasBridge;
2910 bool hasRamp = cell.HasRamp;
2911 bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2912 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2913 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2914 bool flag4 = cell.IsTopWater && !cell.isFloating;
2915 if (!EClass._zone.IsRegion)
2916 {
2917 if (cell.hasDoorBoat)
2918 {
2919 tileRow = FLOOR.sourceWood;
2920 row = MATERIAL.sourceOak;
2921 flag4 = false;
2922 }
2923 else if (flag3 && !tileRow.ignoreSnow)
2924 {
2925 if (tileRow.tileType.IsWater)
2926 {
2927 tileRow = FLOOR.sourceIce;
2928 row = MATERIAL.sourceIce;
2929 }
2930 else
2931 {
2932 tileRow = FLOOR.sourceSnow;
2933 row = MATERIAL.sourceSnow;
2934 }
2935 flag4 = false;
2936 }
2937 }
2938 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
2939 {
2940 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
2941 }
2942 if (isSynced)
2943 {
2944 string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
2945 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
2946 {
2947 text = cell.matObj.soundFoot;
2948 }
2949 if (IsPC)
2950 {
2951 foreach (Thing thing2 in newPoint.Things)
2952 {
2953 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
2954 {
2955 text = thing2.material.soundFoot;
2956 }
2957 }
2958 }
2959 if (!text.IsEmpty())
2960 {
2961 SoundManager.altLastData = IsPC;
2962 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
2963 }
2964 if (!flag4)
2965 {
2967 PCOrbit pcOrbit = EClass.screen.pcOrbit;
2968 bool flag5 = scene.actionMode.gameSpeed > 1f;
2969 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
2970 scene.psFoot.startColor = row.matColor;
2971 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2));
2972 if (flag5 && IsPC)
2973 {
2974 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
2975 scene.psSmoke.Emit(pcOrbit.emitSmoke);
2976 }
2977 }
2978 if (flag2 || flag4)
2979 {
2980 Effect.Get("ripple").Play(0.4f * actTime * EClass.scene.actionMode.gameSpeed, newPoint);
2981 }
2982 }
2983 lastPos.Set(pos);
2984 if (type != MoveType.Force)
2985 {
2986 if (newPoint.HasChara && ai.Current.PushChara)
2987 {
2988 TryPush(newPoint);
2989 }
2990 if (newPoint.HasChara && newPoint.Charas.Count == 1)
2991 {
2992 Chara chara2 = newPoint.Charas[0];
2993 if (CanReplace(chara2))
2994 {
2995 chara2.MoveByForce(lastPos, this);
2996 if (chara.IsPC)
2997 {
2998 Say("replace_pc", chara, chara2);
2999 }
3000 }
3001 }
3002 }
3003 if (cell.hasDoor)
3004 {
3005 foreach (Thing thing3 in newPoint.Things)
3006 {
3007 if (thing3.trait is TraitDoor traitDoor2)
3008 {
3009 traitDoor2.TryOpen(this);
3010 }
3011 }
3012 }
3013 EClass._zone.map.MoveCard(newPoint, this);
3014 SyncRide();
3016 {
3017 foreach (Chara member in EClass.pc.party.members)
3018 {
3019 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
3020 {
3021 member.TryMoveTowards(EClass.pc.pos);
3022 }
3023 }
3024 }
3026 {
3028 }
3029 if (IsPC)
3030 {
3031 PlaySound("Footstep/Extra/pcfootstep");
3032 if (pos.HasThing)
3033 {
3034 foreach (Card item in pos.ListCards())
3035 {
3036 if (!item.isThing || item.placeState != 0 || item.ignoreAutoPick)
3037 {
3038 continue;
3039 }
3041 {
3043 ContainerFlag containerFlag = item.category.GetRoot().id.ToEnum<ContainerFlag>();
3044 if (containerFlag == ContainerFlag.none)
3045 {
3046 containerFlag = ContainerFlag.other;
3047 }
3048 if ((dataPick.noRotten && item.IsDecayed) || (dataPick.onlyRottable && item.trait.Decay == 0))
3049 {
3050 continue;
3051 }
3052 if (dataPick.userFilter)
3053 {
3054 switch (dataPick.IsFilterPass(item.GetName(NameStyle.Full, 1)))
3055 {
3056 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
3057 Pick(item.Thing);
3058 continue;
3059 case Window.SaveData.FilterResult.Block:
3060 continue;
3061 }
3062 }
3063 if (dataPick.advDistribution)
3064 {
3065 foreach (int cat in dataPick.cats)
3066 {
3067 if (item.category.uid == cat)
3068 {
3069 Pick(item.Thing);
3070 }
3071 }
3072 }
3073 else if (!dataPick.flag.HasFlag(containerFlag))
3074 {
3075 Pick(item.Thing);
3076 }
3077 }
3078 else
3079 {
3080 Pick(item.Thing);
3081 }
3082 }
3083 }
3084 if (EClass._zone.IsRegion)
3085 {
3087 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
3088 {
3089 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() ?? "");
3090 }
3091 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
3092 {
3094 Msg.Say(Lang.GetList("walk_snow").RandomItem());
3095 }
3096 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
3097 {
3099 Msg.Say(Lang.GetList("walk_storm").RandomItem());
3100 }
3101 }
3103 }
3104 if (IsPCC)
3105 {
3106 int num5 = Mathf.Abs(cell2.topHeight - cell.topHeight);
3107 if ((num5 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
3108 {
3109 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num5 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
3110 }
3111 else
3112 {
3113 float surfaceHeight = cell2.GetSurfaceHeight();
3114 float surfaceHeight2 = cell.GetSurfaceHeight();
3115 num5 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3116 if (num5 >= 15)
3117 {
3118 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num5 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
3119 }
3120 }
3121 }
3122 lastPos.Things.ForeachReverse(delegate(Thing t)
3123 {
3124 t.trait.OnSteppedOut(this);
3125 });
3126 if (!IsPC)
3127 {
3128 pos.Things.ForeachReverse(delegate(Thing t)
3129 {
3130 t.trait.OnStepped(this);
3131 });
3132 }
3133 if (CanDestroyPath())
3134 {
3136 }
3137 if (IsPC)
3138 {
3139 if (renderer.anime == null && renderer.replacer != null)
3140 {
3142 }
3144 {
3145 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
3146 {
3147 EClass.player.flags.isShoesOff = false;
3148 EClass.pc.Say("shoes_on", EClass.pc);
3149 EClass.pc.SetPCCState(PCCState.Normal);
3150 }
3151 }
3152 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
3153 {
3154 EClass.player.flags.isShoesOff = true;
3155 EClass.pc.Say("shoes_off", EClass.pc);
3156 EClass.pc.SetPCCState(PCCState.ShoesOff);
3157 }
3158 }
3159 hasMovedThisTurn = true;
3160 return MoveResult.Success;
3161 }
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:44
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:2585
bool HasElement(int ele, int req=1)
Definition: Card.cs:5897
SourceMaterial.Row material
Definition: Card.cs:2051
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6129
int c_lockLv
Definition: Card.cs:964
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6684
Point pos
Definition: Card.cs:59
Trait trait
Definition: Card.cs:53
MoveType
Definition: Card.cs:20
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4060
MoveResult
Definition: Card.cs:13
bool IsInstalled
Definition: Card.cs:2381
int Evalue(int ele)
Definition: Card.cs:2571
int Dist(Card c)
Definition: Card.cs:7630
void ModExp(string alias, int a)
Definition: Card.cs:2648
bool isLeashed
Definition: Card.cs:842
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6781
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:3655
bool IsLevitating
Definition: Chara.cs:597
AIAct ai
Definition: Chara.cs:202
override bool IsPC
Definition: Chara.cs:612
bool isDrunk
Definition: Chara.cs:124
Party party
Definition: Chara.cs:43
bool CanDestroyPath()
Definition: Chara.cs:2402
bool IsInCombat
Definition: Chara.cs:864
bool HasCondition(string alias)
Definition: Chara.cs:9303
AIAct SetAI(AIAct g)
Definition: Chara.cs:8776
bool IsIdle
Definition: Chara.cs:853
override bool IsDisabled
Definition: Chara.cs:585
bool hasMovedThisTurn
Definition: Chara.cs:176
override bool isSynced
Definition: Chara.cs:691
bool CanMoveTo(Point p, bool allowDestroyPath=true)
Definition: Chara.cs:2415
void DestroyPath(Point pos)
Definition: Chara.cs:3163
override bool IsPCFaction
Definition: Chara.cs:671
float actTime
Definition: Chara.cs:178
override int MaxHP
Definition: Chara.cs:708
Zone currentZone
Definition: Chara.cs:255
bool CanReplace(Chara c)
Definition: Chara.cs:3274
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2600
Stats burden
Definition: Chara.cs:1144
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2608
void SyncRide()
Definition: Chara.cs:3884
bool isDead
Definition: Chara.cs:389
override void LookAt(Card c)
Definition: Chara.cs:3519
bool isConfused
Definition: Chara.cs:126
override bool IsPCC
Definition: Chara.cs:682
void TryPush(Point point)
Definition: Chara.cs:3207
void SetPCCState(PCCState state)
Definition: Chara.cs:6607
SourceRace.Row race
Definition: Chara.cs:464
bool allyKeepDistance
Definition: ConfigTactics.cs:6
static Game game
Definition: EClass.cs:8
static Scene scene
Definition: EClass.cs:30
static Zone _zone
Definition: EClass.cs:20
static World world
Definition: EClass.cs:40
static Map _map
Definition: EClass.cs:18
static int rnd(long a)
Definition: EClass.cs:58
static BaseGameScreen screen
Definition: EClass.cs:32
static int rndHalf(int a)
Definition: EClass.cs:87
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:272
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:218
Definition: Lang.cs:6
static string[] GetList(string id)
Definition: Lang.cs:114
static SourceMaterial.Row sourceOak
Definition: MATERIAL.cs:43
static SourceMaterial.Row sourceSnow
Definition: MATERIAL.cs:37
static SourceMaterial.Row sourceIce
Definition: MATERIAL.cs:39
void MoveCard(Point p, Card t)
Definition: Map.cs:841
void SetFoormark(Point pos, int id, int angle, int offset=0)
Definition: Map.cs:2060
void SetEffect(int x, int z, CellEffect effect=null)
Definition: Map.cs:1508
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:19
bool isShoesOff
Definition: Player.cs:347
int distanceTravel
Definition: Player.cs:893
Flags flags
Definition: Player.cs:1094
Window.SaveData dataPick
Definition: Player.cs:1034
bool regionMoveWarned
Definition: Player.cs:1157
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:1051
Point Set(int _x, int _z)
Definition: Point.cs:503
List< Thing > Things
Definition: Point.cs:338
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
List< Chara > Charas
Definition: Point.cs:340
bool HasThing
Definition: Point.cs:251
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
int Distance(Point p)
Definition: Point.cs:989
Cell cell
Definition: Point.cs:51
Point GetRandomNeighbor()
Definition: Point.cs:759
bool HasChara
Definition: Point.cs:238
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:318
virtual bool ShowDangerLv
Definition: Spatial.cs:503
virtual bool IsRegion
Definition: Spatial.cs:515
virtual string Name
Definition: Spatial.cs:509
SourceZone.Row source
Definition: Spatial.cs:453
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:1079
virtual bool IsChangeFloorHeight
Definition: Trait.cs:73
virtual void OnStepped(Chara c)
Definition: Trait.cs:1075
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:284
override int DangerLv
Definition: Zone.cs:107
bool IsPCFaction
Definition: Zone.cs:470
virtual bool KeepAllyDistance
Definition: Zone.cs:299
virtual bool HiddenInRegionMap
Definition: Zone.cs:410
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 7146 of file Chara.cs.

7147 {
7148 EClass.Sound.Play("pop_drama");
7149 if (book == "_chara" && IsPC)
7150 {
7151 step = "pc";
7152 }
7153 return LayerDrama.Activate(book, sheet, step, this, null, tag);
7154 }
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 9151 of file Chara.cs.

9152 {
9153 c.owner = this;
9154 if (!(c is ConBurning))
9155 {
9156 if (c is ConBleed && ResistLv(964) >= 3)
9157 {
9158 return null;
9159 }
9160 }
9161 else if (ResistLv(950) >= 3)
9162 {
9163 return null;
9164 }
9166 {
9167 if (c.GainResistFactor >= 400)
9168 {
9169 c.power /= 2;
9170 }
9171 ResistCon(c);
9172 if (c.power <= 0)
9173 {
9174 return null;
9175 }
9176 }
9177 if (!force)
9178 {
9179 if (c.source.negate.Length != 0)
9180 {
9181 string[] negate = c.source.negate;
9182 foreach (string text in negate)
9183 {
9184 if (HasElement(text))
9185 {
9186 return null;
9187 }
9188 }
9189 }
9190 Element defenseAttribute = c.GetDefenseAttribute(this);
9191 if (defenseAttribute != null)
9192 {
9193 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
9194 }
9195 if (c.source.resistance.Length != 0)
9196 {
9197 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
9198 if (num > 0)
9199 {
9200 c.power /= num * num + 1;
9201 if (c.power <= 40)
9202 {
9203 return null;
9204 }
9205 }
9206 }
9207 c.power = c.EvaluatePower(c.power);
9208 if (c.power <= 0)
9209 {
9210 return null;
9211 }
9212 }
9213 for (int j = 0; j < conditions.Count; j++)
9214 {
9215 if (conditions[j].id != c.id)
9216 {
9217 continue;
9218 }
9219 if (c.Type == ConditionType.Stance || c.IsToggle)
9220 {
9221 conditions[j].Kill();
9222 return null;
9223 }
9224 if (conditions[j].CanStack(c))
9225 {
9226 if (conditions[j].WillOverride)
9227 {
9228 conditions[j].Kill(silent: true);
9229 continue;
9230 }
9231 if (CanGainConResist)
9232 {
9233 AddResistCon(c);
9234 }
9235 conditions[j].OnStacked(c.power);
9236 conditions[j].OnStartOrStack();
9237 conditions[j].PlayEffect();
9238 }
9239 if (!conditions[j].AllowMultipleInstance)
9240 {
9241 return null;
9242 }
9243 }
9244 foreach (Condition condition in conditions)
9245 {
9246 if (condition.TryNullify(c))
9247 {
9248 return null;
9249 }
9250 }
9251 int num2 = c.EvaluateTurn(c.power);
9252 if (num2 == 0)
9253 {
9254 return null;
9255 }
9256 c.value = num2;
9257 conditions.Add(c);
9258 if (CanGainConResist)
9259 {
9260 AddResistCon(c);
9261 }
9262 c.SetOwner(this);
9263 c.Start();
9264 SetDirtySpeed();
9265 if (c.ShouldRefresh)
9266 {
9267 Refresh();
9268 }
9269 if (c.CancelAI)
9270 {
9271 ai.Cancel();
9272 }
9273 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
9274 {
9276 }
9277 if (c.SyncRide && (ride != null || parasite != null))
9278 {
9279 if (ride != null)
9280 {
9282 }
9283 if (parasite != null)
9284 {
9286 }
9287 }
9288 return c;
9289 }
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:566
int ResistLv(int res)
Definition: Card.cs:5892
void SetDirtySpeed()
Definition: Chara.cs:1851
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9146
bool CanGainConResist
Definition: Chara.cs:1161
void AddResistCon(Condition con)
Definition: Chara.cs:9546
void ResistCon(Condition con)
Definition: Chara.cs:9566
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:292
void EndTurn(bool consume=true)
Definition: Player.cs:2076
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 9141 of file Chara.cs.

9141 : Condition
9142 {
9143 return AddCondition(typeof(T).Name, p, force);
9144 }
string Name
Definition: Card.cs:2137

◆ AddCooldown()

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

Definition at line 8557 of file Chara.cs.

8558 {
8559 if (_cooldowns == null)
8560 {
8561 _cooldowns = new List<int>();
8562 }
8563 if (turns != 0)
8564 {
8565 _cooldowns.Add(idEle * 1000 + turns);
8566 return;
8567 }
8568 SourceElement.Row row = EClass.sources.elements.map[idEle];
8569 if (row.cooldown > 0)
8570 {
8571 _cooldowns.Add(idEle * 1000 + row.cooldown);
8572 }
8573 }
List< int > _cooldowns
Definition: Chara.cs:58

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

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

◆ AddFoodHistory()

void Chara.AddFoodHistory ( Thing  food)
inline

Definition at line 10037 of file Chara.cs.

10038 {
10039 if (!IsPCFaction || !IsGlobal)
10040 {
10041 _historyFood = null;
10042 return;
10043 }
10044 if (_historyFood == null)
10045 {
10046 _historyFood = new List<List<string>>
10047 {
10048 new List<string>()
10049 };
10050 }
10051 if (_historyFood[0].Count < 5)
10052 {
10053 _historyFood[0].Add(food.id);
10054 }
10055 }
override bool IsGlobal
Definition: Chara.cs:610
List< List< string > > _historyFood
Definition: Chara.cs:64

References food.

Referenced by FoodEffect.Proc().

◆ AddHobby()

void Chara.AddHobby ( int  id)
inline

Definition at line 8976 of file Chara.cs.

8977 {
8978 foreach (int hobby in _hobbies)
8979 {
8980 if (hobby == id)
8981 {
8982 return;
8983 }
8984 }
8985 _hobbies.Add(id);
8986 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2183 of file Chara.cs.

2184 {
2185 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2186 body.AddBodyPart(ele);
2187 if (msg)
2188 {
2189 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
2190 PlaySound("offering");
2191 }
2192 }
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:401

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 9546 of file Chara.cs.

9547 {
9548 if (con.power > 0 && con.GainResistFactor > 0)
9549 {
9550 int key = con.id;
9551 if (resistCon == null)
9552 {
9553 resistCon = new Dictionary<int, int>();
9554 }
9555 if (resistCon.ContainsKey(key))
9556 {
9557 resistCon[key] += con.power * con.GainResistFactor / 100;
9558 }
9559 else
9560 {
9561 resistCon[key] = con.power * con.GainResistFactor / 100;
9562 }
9563 }
9564 }
Dictionary< int, int > resistCon
Definition: Chara.cs:214

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

◆ AddWork()

void Chara.AddWork ( int  id)
inline

Definition at line 8988 of file Chara.cs.

8989 {
8990 foreach (int work in _works)
8991 {
8992 if (work == id)
8993 {
8994 return;
8995 }
8996 }
8997 _works.Add(id);
8998 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5190 of file Chara.cs.

5191 {
5192 if (!IsPC)
5193 {
5194 return;
5195 }
5196 int currency = GetCurrency();
5197 if (currency > 0)
5198 {
5199 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
5200 if (num <= 0)
5201 {
5202 num = 1;
5203 }
5204 Msg.Say("panaltyMoney", this, Lang._currency(num));
5205 ModCurrency(-num);
5207 }
5208 foreach (Element value in EClass.pc.elements.dict.Values)
5209 {
5210 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
5211 {
5212 EClass.pc.elements.ModExp(value.id, -500f);
5213 }
5214 }
5215 }
@ currency
ElementContainerCard elements
Definition: Card.cs:41
int GetCurrency(string id="money")
Definition: Card.cs:3972
void ModCurrency(int a, string id="money")
Definition: Card.cs:3958
void ModExp(int ele, float a, bool chain=false)
Dictionary< int, Element > dict
int id
Definition: ELEMENT.cs:250
bool IsMainAttribute
Definition: ELEMENT.cs:383
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:1959

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 2018 of file Chara.cs.

2019 {
2020 switch (tag)
2021 {
2022 case EditorTag.HostilityNeutral:
2023 {
2024 Hostility hostility2 = (base.c_originalHostility = Hostility.Neutral);
2025 this.hostility = hostility2;
2026 break;
2027 }
2028 case EditorTag.HostilityEnemy:
2029 {
2030 Hostility hostility2 = (base.c_originalHostility = Hostility.Enemy);
2031 this.hostility = hostility2;
2032 break;
2033 }
2034 case EditorTag.HostilityFriend:
2035 {
2036 Hostility hostility2 = (base.c_originalHostility = Hostility.Friend);
2037 this.hostility = hostility2;
2038 break;
2039 }
2040 case EditorTag.Male:
2041 bio.SetGender(2);
2042 base.c_idPortrait = Portrait.GetRandomPortrait(2, GetIdPortraitCat());
2043 break;
2044 case EditorTag.Female:
2045 bio.SetGender(1);
2046 base.c_idPortrait = Portrait.GetRandomPortrait(1, GetIdPortraitCat());
2047 break;
2048 case EditorTag.baby:
2049 SetFeat(1232);
2050 break;
2051 }
2052 base.ApplyEditorTags(tag);
2053 }
EditorTag
Definition: EditorTag.cs:2
void SetGender(int g)
Definition: Biography.cs:473
Biography bio
Definition: Card.cs:44
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:9771
string GetIdPortraitCat()
Definition: Chara.cs:8020
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 2145 of file Chara.cs.

2146 {
2147 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
2148 if (IsPCC)
2149 {
2150 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
2151 }
2152 }
SourceValueType
SourceJob.Row job
Definition: Chara.cs:466
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
PCCUniformManager uniforms
Definition: Game.cs:194

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 2231 of file Chara.cs.

2232 {
2233 string[] array = race.figure.Split('|');
2234 foreach (string s in array)
2235 {
2236 int num = ParseBodySlot(s);
2237 if (num != -1)
2238 {
2239 if (remove)
2240 {
2241 body.RemoveBodyPart(num);
2242 }
2243 else
2244 {
2245 body.AddBodyPart(num);
2246 }
2247 }
2248 }
2250 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV, remove, applyFeat: true);
2251 }
void RefreshBodyParts()
Definition: CharaBody.cs:287
void RemoveBodyPart(int ele)
Definition: CharaBody.cs:316
int ParseBodySlot(string s)
Definition: Chara.cs:2166

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

Referenced by ChangeRace(), and OnCreate().

◆ Banish()

void Chara.Banish ( Chara  owner)
inline

Definition at line 2322 of file Chara.cs.

2323 {
2324 owner?.Say("summon_vanish", this);
2325 pos.PlayEffect("vanish");
2326 pos.PlaySound("vanish");
2327 pos.PlayEffect("teleport");
2328 Destroy();
2329 }
void Destroy()
Definition: Card.cs:5067
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1253
Effect PlayEffect(string id)
Definition: Point.cs:1248

References Card.Destroy(), Point.PlayEffect(), Point.PlaySound(), Card.pos, and Card.Say().

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

◆ CalcBurden()

void Chara.CalcBurden ( )
inline

Definition at line 1819 of file Chara.cs.

1820 {
1821 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1822 if (num < 0)
1823 {
1824 num = 1000;
1825 }
1827 {
1828 num = 0;
1829 }
1830 burden.Set(num);
1831 SetDirtySpeed();
1832 }
override int WeightLimit
Definition: Chara.cs:710
bool ignoreWeight
Definition: CoreDebug.cs:187
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 6096 of file Chara.cs.

6097 {
6098 if (!(e is Spell))
6099 {
6100 return 100;
6101 }
6102 if (!IsPC)
6103 {
6104 int num2 = 95;
6105 if (host != null)
6106 {
6107 if (host.ride == this)
6108 {
6109 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
6110 }
6111 if (host.parasite == this)
6112 {
6113 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
6114 }
6115 }
6116 return num2;
6117 }
6118 int num3 = Evalue(304);
6119 if (!IsPCFaction)
6120 {
6121 num3 = Mathf.Max(num3, base.LV + 5);
6122 }
6123 int num4 = 0;
6124 int num5 = 0;
6125 bool num6 = GetArmorSkill() == 122;
6126 AttackStyle attackStyle = body.GetAttackStyle();
6127 if (num6)
6128 {
6129 num4 = 20 - Evalue(122) / 5;
6130 num5 += 10 - Evalue(1654) * 4;
6131 }
6132 else
6133 {
6134 num4 = 10 - Evalue(120) / 5;
6135 }
6136 if (num4 < 5)
6137 {
6138 num4 = 5;
6139 }
6140 if (ride != null)
6141 {
6142 num4 += 5;
6143 }
6144 if (parasite != null)
6145 {
6146 num4 += 10;
6147 }
6148 if (attackStyle == AttackStyle.TwoWield)
6149 {
6150 num4 += 5;
6151 }
6152 if (attackStyle == AttackStyle.Shield)
6153 {
6154 num4 += 10;
6155 num5 += 20 - Evalue(1654) * 8;
6156 }
6157 if (isConfused)
6158 {
6159 num4 += 10000;
6160 }
6161 if (HasCondition<ConDim>())
6162 {
6163 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
6164 }
6165 if (num > 1)
6166 {
6167 num4 += 5 * num;
6168 }
6169 if (num5 < 0)
6170 {
6171 num5 = 0;
6172 }
6173 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
6174 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:445
override int GetArmorSkill()
Definition: Chara.cs:7763
int EvalueRiding()
Definition: Chara.cs:6087
SourceElement.Row source
Definition: ELEMENT.cs:273
Definition: SPELL.cs:617

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 1999 of file Chara.cs.

2000 {
2001 int num = base.END;
2002 int num2 = 0;
2003 foreach (Element value in elements.dict.Values)
2004 {
2005 if (value.source.category == "skill")
2006 {
2007 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
2008 }
2009 }
2010 num2 = EClass.curve(num, 30, 10, 60);
2011 if (num2 < 10)
2012 {
2013 num2 = 10;
2014 }
2015 _maxStamina = num2 + 15;
2016 }
int _maxStamina
Definition: Chara.cs:365
static int curve(int a, int start, int step, int rate=75)
Definition: EClass.cs:68
int ValueWithoutLink
Definition: ELEMENT.cs:294
int vBase
Definition: ELEMENT.cs:252

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 6358 of file Chara.cs.

6359 {
6360 foreach (Chara chara in EClass._map.charas)
6361 {
6362 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6363 {
6364 chara.GoHostile(tg);
6365 }
6366 }
6367 }
Hostility OriginalHostility
Definition: Chara.cs:471
void GoHostile(Card _tg)
Definition: Chara.cs:6252
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 8108 of file Chara.cs.

8109 {
8110 if (things.IsFull())
8111 {
8112 return false;
8113 }
8114 if (t.c_isImportant)
8115 {
8116 return false;
8117 }
8118 if (t.id == "1084")
8119 {
8120 return true;
8121 }
8122 if (t.trait is TraitBookSecret)
8123 {
8124 return true;
8125 }
8126 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
8127 {
8128 return false;
8129 }
8130 return true;
8131 }
Rarity
Definition: Rarity.cs:2
string id
Definition: Card.cs:35
Rarity rarity
Definition: Card.cs:314
bool c_isImportant
Definition: Card.cs:1024
ThingContainer things
Definition: Card.cs:38
bool IsContainer
Definition: Card.cs:2089
bool IsFull(int y=0)
virtual bool CanExtendBuild
Definition: Trait.cs:168
virtual bool CanBeDestroyed
Definition: Trait.cs:294
virtual bool CanOnlyCarry
Definition: Trait.cs:292

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 8087 of file Chara.cs.

8088 {
8090 {
8091 return true;
8092 }
8093 if (!IsValidGiftWeight(t, num))
8094 {
8095 return false;
8096 }
8097 if (t.c_isImportant)
8098 {
8099 return false;
8100 }
8101 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
8102 {
8103 return false;
8104 }
8105 return true;
8106 }
SourceCategory.Row category
Definition: Card.cs:2049
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8077

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

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

◆ CanAutoPick()

bool Chara.CanAutoPick ( Card  c)
inline

Definition at line 4220 of file Chara.cs.

4221 {
4222 return true;
4223 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2309 of file Chara.cs.

2310 {
2311 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2312 {
2313 return false;
2314 }
2315 if (HasElement(1222))
2316 {
2317 return false;
2318 }
2319 return true;
2320 }
override bool IsMinion
Definition: Chara.cs:627
int MaxSummon
Definition: Chara.cs:714
override bool IsMultisize
Definition: Chara.cs:706
int CountMinions(Chara c)
Definition: Zone.cs:3697

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

Referenced by GoalCombat.Run().

◆ CanBloom()

bool Chara.CanBloom ( )
inline

Definition at line 8540 of file Chara.cs.

8541 {
8542 if (IsPC || base.isScaled || HasElement(1273))
8543 {
8544 return false;
8545 }
8546 if (!EClass.debug.godMode)
8547 {
8548 if (base.c_daysWithPC > 360)
8549 {
8550 return affinity.CanSleepBeside();
8551 }
8552 return false;
8553 }
8554 return true;
8555 }
bool CanSleepBeside()
Definition: Affinity.cs:77
Affinity affinity
Definition: Chara.cs:314
bool godMode
Definition: CoreDebug.cs:173

References Affinity.CanSleepBeside(), EClass.debug, and CoreDebug.godMode.

Referenced by WindowCharaMini.Refresh().

◆ CanDestroyPath()

bool Chara.CanDestroyPath ( )
inline

Definition at line 2402 of file Chara.cs.

2403 {
2404 if (!IsMultisize)
2405 {
2406 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2407 {
2408 return !(EClass._zone is Zone_Town);
2409 }
2410 return false;
2411 }
2412 return true;
2413 }

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

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

◆ CanDuplicate()

bool Chara.CanDuplicate ( )
inline

Definition at line 1758 of file Chara.cs.

1759 {
1760 if (EClass._zone.IsRegion || HasCondition<ConPoison>() || HasCondition<ConConfuse>() || HasCondition<ConDim>() || HasCondition<ConParalyze>() || HasCondition<ConSleep>() || HasCondition<ConBurning>() || HasCondition<ConFreeze>() || HasCondition<ConMiasma>() || corruption >= 100)
1761 {
1762 return false;
1763 }
1765 {
1766 return false;
1767 }
1768 if (id == "mech_scarab" && (isSynced || pos.cell.light > 0 || (!EClass._map.IsIndoor && !pos.cell.HasRoof && !EClass.world.date.IsNight)))
1769 {
1770 return false;
1771 }
1772 return true;
1773 }
byte light
Definition: Cell.cs:60
bool HasRoof
Definition: Cell.cs:648
int corruption
Definition: Chara.cs:377
int CurrentGeneSlot
Definition: Chara.cs:1071
bool IsNight
Definition: Date.cs:112
GamePrincipal principal
Definition: Game.cs:224
bool IsIndoor
Definition: Map.cs:131

References EClass._map, EClass._zone, Point.cell, corruption, CurrentGeneSlot, World.date, GamePrincipal.enableGeneDupe, EClass.game, Cell.HasRoof, Map.IsIndoor, Date.IsNight, Spatial.IsRegion, isSynced, Cell.light, Card.pos, Game.principal, and EClass.world.

Referenced by ActEffect.Proc(), and AI_Idle.Run().

◆ CanEat()

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

Definition at line 7494 of file Chara.cs.

7495 {
7496 if (t.IsDecayed && !HasElement(480))
7497 {
7498 return false;
7499 }
7500 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7501 {
7502 return false;
7503 }
7504 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7505 {
7506 return t.trait.CanEat(this);
7507 }
7508 return false;
7509 }
CTAG
Definition: CTAG.cs:2
bool IsNegativeGift
Definition: Card.cs:2396
bool IsDecayed
Definition: Card.cs:2287
bool HasTag(CTAG tag)
Definition: Card.cs:2595
bool isEquipped
Definition: Thing.cs:17
virtual bool CanEat(Chara c)
Definition: Trait.cs:977

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

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

◆ CanEquipRanged()

bool Chara.CanEquipRanged ( Thing  t)
inline

Definition at line 7662 of file Chara.cs.

7663 {
7664 return !body.IsTooHeavyToEquip(t);
7665 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:156

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 8008 of file Chara.cs.

8009 {
8010 foreach (ActList.Item item in ability.list.items)
8011 {
8012 if (item.act.id == 6630)
8013 {
8014 return true;
8015 }
8016 }
8017 return false;
8018 }
List< Item > items
Definition: ActList.cs:14
ActList list
Definition: CharaAbility.cs:12
CharaAbility ability
Definition: Chara.cs:424

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

◆ CanInteractTo() [1/2]

bool Chara.CanInteractTo ( Card  c)
inline

Definition at line 2509 of file Chara.cs.

2510 {
2511 return CanInteractTo(c.pos);
2512 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2509

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 2514 of file Chara.cs.

2515 {
2516 if (!p.IsValid)
2517 {
2518 return false;
2519 }
2520 if (EClass._map.cells[p.x, p.z].blocked)
2521 {
2522 return true;
2523 }
2524 if (!IsMultisize)
2525 {
2526 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2527 if (EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2528 {
2529 return false;
2530 }
2531 if (p.x != pos.x && p.z != pos.z)
2532 {
2533 Cell[,] cells = EClass._map.cells;
2534 int x = p.x;
2535 int z = pos.z;
2536 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2537 if (cells[pos.x, pos.z].weights[num2] == 0)
2538 {
2539 return false;
2540 }
2541 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2542 if (cells[p.x, p.z].weights[num2] == 0)
2543 {
2544 return false;
2545 }
2546 x = pos.x;
2547 z = p.z;
2548 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2549 if (cells[pos.x, pos.z].weights[num2] == 0)
2550 {
2551 return false;
2552 }
2553 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2554 if (cells[p.x, p.z].weights[num2] == 0)
2555 {
2556 return false;
2557 }
2558 }
2559 }
2560 return true;
2561 }
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 4215 of file Chara.cs.

4216 {
4217 return true;
4218 }

◆ CanMoveTo()

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

Definition at line 2415 of file Chara.cs.

2416 {
2417 if (!p.IsValid)
2418 {
2419 return false;
2420 }
2421 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2422 if (allowDestroyPath && CanDestroyPath())
2423 {
2424 if (!p.IsInBounds)
2425 {
2426 return false;
2427 }
2428 }
2429 else
2430 {
2431 if (EClass._map.cells[p.x, p.z].blocked || EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2432 {
2433 return false;
2434 }
2435 if (p.x != pos.x && p.z != pos.z)
2436 {
2437 Cell[,] cells = EClass._map.cells;
2438 int x = p.x;
2439 int z = pos.z;
2440 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2441 if (cells[pos.x, pos.z].weights[num2] == 0)
2442 {
2443 return false;
2444 }
2445 if (cells[x, z].blocked)
2446 {
2447 return false;
2448 }
2449 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2450 if (cells[p.x, p.z].weights[num2] == 0)
2451 {
2452 return false;
2453 }
2454 x = pos.x;
2455 z = p.z;
2456 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2457 if (cells[pos.x, pos.z].weights[num2] == 0)
2458 {
2459 return false;
2460 }
2461 if (cells[x, z].blocked)
2462 {
2463 return false;
2464 }
2465 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2466 if (cells[p.x, p.z].weights[num2] == 0)
2467 {
2468 return false;
2469 }
2470 }
2471 }
2472 if (IsPC)
2473 {
2474 if (IsEnemyOnPath(p))
2475 {
2476 return false;
2477 }
2478 }
2479 else if (p.HasChara && !IsMultisize && !CanReplace(p.FirstChara))
2480 {
2481 return false;
2482 }
2483 return true;
2484 }
bool IsEnemyOnPath(Point p, bool cancelAI=true)
Definition: Chara.cs:2486
Chara FirstChara
Definition: Point.cs:288
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 4225 of file Chara.cs.

4226 {
4227 if (c.isDestroyed)
4228 {
4229 return false;
4230 }
4231 Card rootCard = c.GetRootCard();
4232 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
4233 {
4234 return false;
4235 }
4236 if (rootCard != this && things.IsFull(c.Thing))
4237 {
4238 return false;
4239 }
4240 return true;
4241 }
bool isDestroyed
Definition: Card.cs:75
bool ExistsOnMap
Definition: Card.cs:2085
virtual Thing Thing
Definition: Card.cs:2058
Card GetRootCard()
Definition: Card.cs:3423

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 3274 of file Chara.cs.

3275 {
3277 {
3278 return false;
3279 }
3280 if (IsPC)
3281 {
3282 return true;
3283 }
3284 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3285 {
3286 return false;
3287 }
3288 if (!IsHostile(c))
3289 {
3290 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3291 {
3292 return true;
3293 }
3294 if (DestDist < c.DestDist)
3295 {
3296 return true;
3297 }
3298 if (IsPCParty && !c.IsPCParty)
3299 {
3300 return true;
3301 }
3302 if (IsPCFaction && !c.IsPCParty)
3303 {
3304 return true;
3305 }
3306 }
3307 return false;
3308 }
bool IsPCFactionOrMinion
Definition: Card.cs:2272
bool isSummon
Definition: Card.cs:710
int c_uidMaster
Definition: Card.cs:1449
bool noMove
Definition: Card.cs:770
new TraitChara trait
Definition: Chara.cs:503
override bool IsPCParty
Definition: Chara.cs:615
int DestDist
Definition: Chara.cs:998
bool IsHostile()
Definition: Chara.cs:6453
bool IsEscorted()
Definition: Chara.cs:2386
bool Equals(int _x, int _z)
Definition: Point.cs:960
virtual bool CanBePushed
Definition: TraitChara.cs:113

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 5058 of file Chara.cs.

5059 {
5060 return EClass.world.date.IsExpired(base.c_dateDeathLock);
5061 }
bool IsExpired(int time)
Definition: Date.cs:336

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 1218 of file Chara.cs.

1219 {
1220 if (c == this)
1221 {
1222 return true;
1223 }
1224 if (!c.pos.IsValid)
1225 {
1226 return false;
1227 }
1228 if (c.isChara)
1229 {
1231 {
1232 return true;
1233 }
1234 if (c.isHidden && c != this && !canSeeInvisible)
1235 {
1236 return false;
1237 }
1238 }
1239 if (IsPC)
1240 {
1241 if (fov != null)
1242 {
1243 return fov.lastPoints.ContainsKey(c.pos.index);
1244 }
1245 return false;
1246 }
1247 return true;
1248 }
virtual Chara Chara
Definition: Card.cs:2070
Fov fov
Definition: Card.cs:57
virtual bool isChara
Definition: Card.cs:2083
bool isHidden
Definition: Card.cs:530
bool canSeeInvisible
Definition: Chara.cs:138
bool visibleWithTelepathy
Definition: Chara.cs:150
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 visibleWithTelepathy.

Referenced by ActPlan._Update(), Act.CanPerform(), DoHostileAction(), AI_Idle.DoSomethingToCharaInRadius(), AI_Idle.DoSomethingToNearChara(), Point.FirstVisibleChara(), AI_Mofu.GetMofu(), 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]

◆ CanSeeLos() [2/2]

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

Definition at line 1259 of file Chara.cs.

1260 {
1261 if (dist == -1)
1262 {
1263 dist = pos.Distance(p);
1264 }
1265 if (dist > GetSightRadius())
1266 {
1267 return false;
1268 }
1269 if (IsPC)
1270 {
1271 if (fov != null)
1272 {
1273 return fov.lastPoints.ContainsKey(p.index);
1274 }
1275 return false;
1276 }
1277 return Los.IsVisible(pos, p);
1278 }
int GetSightRadius()
Definition: Card.cs:6379
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 1201 of file Chara.cs.

1202 {
1203 if (!p.IsValid || p.IsHidden)
1204 {
1205 return false;
1206 }
1207 if (IsPC)
1208 {
1209 if (fov != null)
1210 {
1211 return fov.lastPoints.ContainsKey(p.index);
1212 }
1213 return false;
1214 }
1215 return true;
1216 }
bool IsHidden
Definition: Point.cs:347

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 1299 of file Chara.cs.

1300 {
1301 if (EClass._zone.events.GetEvent<ZoneEventQuest>() != null)
1302 {
1303 return false;
1304 }
1305 if (!EClass.debug.godMode && sleepiness.GetPhase() == 0)
1306 {
1307 return stamina.GetPhase() <= 1;
1308 }
1309 return true;
1310 }
Stats sleepiness
Definition: Chara.cs:1156
Stats stamina
Definition: Chara.cs:1146
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 2154 of file Chara.cs.

2155 {
2156 ApplyJob(remove: true);
2157 base.c_idJob = idNew;
2158 _job = null;
2159 ApplyJob();
2160 if (IsPCC)
2161 {
2162 PCC.Get(pccData).Build();
2163 }
2164 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:2145
SourceJob.Row _job
Definition: Chara.cs:162

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 6954 of file Chara.cs.

6955 {
6956 memberType = type;
6957 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2253 of file Chara.cs.

2254 {
2255 ApplyRace(remove: true);
2256 base.c_idRace = idNew;
2257 _race = null;
2258 ApplyRace();
2259 ChangeMaterial(source.defMat.IsEmpty(race.material));
2260 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2231
SourceRace.Row _race
Definition: Chara.cs:160

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

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 1406 of file Chara.cs.

1407 {
1408 if (r != base.rarity)
1409 {
1410 base.rarity = r;
1411 if (renderer != null && renderer.isSynced)
1412 {
1414 }
1415 base.hp = MaxHP;
1416 }
1417 }
void RefreshExtra()

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

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8647 of file Chara.cs.

8648 {
8649 if (IsPC && EClass.AdvMode)
8650 {
8651 SetNoGoal();
8652 return;
8653 }
8654 if (IsPCParty || base.noMove)
8655 {
8656 SetAI(new GoalIdle());
8657 return;
8658 }
8659 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8660 {
8661 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8662 if (goalFromTimeTable != null)
8663 {
8664 SetAI(goalFromTimeTable);
8665 if (goalFromTimeTable is GoalWork)
8666 {
8667 goalFromTimeTable.Tick();
8668 }
8669 return;
8670 }
8671 }
8672 if (goalList.index == -2)
8673 {
8675 }
8676 SetAI(goalList.Next());
8677 }
Status Tick()
Definition: AIAct.cs:352
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8679
GoalListType goalListType
Definition: Chara.cs:279
AIAct SetNoGoal()
Definition: Chara.cs:8771
bool IsHomeMember()
Definition: Chara.cs:6515
bool IsGuest()
Definition: Chara.cs:6540
GoalList goalList
Definition: Chara.cs:200
bool IsInHomeZone()
Definition: Chara.cs:6520
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 7222 of file Chara.cs.

7223 {
7224 if (map == null)
7225 {
7226 map = EClass._map;
7227 }
7228 foreach (Card item in map.props.installed.all)
7229 {
7230 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7231 {
7232 traitBed.RemoveHolder(this);
7233 }
7234 }
7235 }
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:135

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

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

◆ ClearInventory()

void Chara.ClearInventory ( ClearInventoryType  type)
inline

Definition at line 8419 of file Chara.cs.

8420 {
8421 int num = 0;
8422 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8423 {
8424 Thing thing = things[num2];
8425 if (ShouldThrowAway(thing, type))
8426 {
8427 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8428 thing.Destroy();
8429 }
8430 }
8431 if (num > 0)
8432 {
8433 ModCurrency(num);
8434 if (type == ClearInventoryType.SellAtTown)
8435 {
8436 Msg.Say("party_sell", this, num.ToString() ?? "");
8437 PlaySound("pay");
8438 }
8439 }
8440 }
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:7233
int Num
Definition: Card.cs:158
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:8348

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 10251 of file Chara.cs.

10252 {
10253 if (tempElements != null)
10254 {
10256 tempElements = null;
10257 }
10258 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountDebuff()

int Chara.CountDebuff ( )
inline

Definition at line 9332 of file Chara.cs.

9333 {
9334 int num = 0;
9335 foreach (Condition condition in conditions)
9336 {
9337 if (condition.Type == ConditionType.Debuff)
9338 {
9339 num++;
9340 }
9341 }
9342 return num;
9343 }

References BaseStats.Type.

Referenced by GoalCombat.TryUseAbility().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 10057 of file Chara.cs.

10058 {
10059 if (_historyFood == null)
10060 {
10061 return -1;
10062 }
10063 int num = 0;
10064 foreach (List<string> item in _historyFood)
10065 {
10066 foreach (string item2 in item)
10067 {
10068 if (item2 == food.id)
10069 {
10070 num++;
10071 }
10072 }
10073 }
10074 return num;
10075 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 7911 of file Chara.cs.

7912 {
7913 Chara chara = CharaGen.Create(id);
7914 chara.c_originalHostility = base.c_originalHostility;
7915 if (chara.c_originalHostility != 0)
7916 {
7917 chara.hostility = chara.c_originalHostility;
7918 }
7919 if (orgPos != null)
7920 {
7921 chara.orgPos = orgPos.Copy();
7922 }
7923 chara.pos = pos.Copy();
7924 chara.isImported = true;
7925 chara.c_editorTags = base.c_editorTags;
7926 chara.c_editorTraitVal = base.c_editorTraitVal;
7927 chara.c_idTrait = base.c_idTrait;
7928 chara.homeZone = homeZone;
7929 return chara;
7930 }
Hostility c_originalHostility
Definition: Card.cs:976
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Zone homeZone
Definition: Chara.cs:267
Point Copy()
Definition: Point.cs:491

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 6188 of file Chara.cs.

6189 {
6190 Talk("goodBoy");
6191 Say(headpat ? "headpat" : "cuddle", this, c);
6192 c.ShowEmo(Emo.love);
6193 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
6194 {
6195 c.MakeEgg();
6196 }
6197 if (headpat && this != c)
6198 {
6199 if (c.interest > 0)
6200 {
6201 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
6202 c.interest -= 20 + EClass.rnd(10);
6203 }
6205 {
6206 foreach (Chara member in party.members)
6207 {
6208 if (!member.IsPC && CanSeeLos(member))
6209 {
6210 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
6211 }
6212 }
6213 }
6214 }
6215 if (c.Evalue(1221) > 0)
6216 {
6217 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
6218 if (c.id == "hedgehog_ether")
6219 {
6220 ele = 922;
6221 }
6222 Say("reflect_thorne", c, this);
6223 DamageHP(10L, ele, Power, AttackSource.Condition);
6224 }
6225 }
Emo
Definition: Emo.cs:2
virtual int Power
Definition: Card.cs:2295
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6097
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5720
Element MainElement
Definition: Chara.cs:717
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:7833
int interest
Definition: Chara.cs:317
Religion faith
Definition: Chara.cs:439
static Element Void
Definition: ELEMENT.cs:238
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(), ActEffect.Proc(), AI_Idle.Run(), and AI_Mofu.Run().

◆ Cure()

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

Definition at line 9395 of file Chara.cs.

9396 {
9397 bool flag = state == BlessedState.Blessed;
9398 switch (type)
9399 {
9400 case CureType.Heal:
9401 case CureType.Prayer:
9402 CureCondition<ConFear>();
9403 CureCondition<ConBlind>(2 * p / 100 + 5);
9404 CureCondition<ConPoison>(5 * p / 100 + 5);
9405 CureCondition<ConConfuse>(10 * p / 100 + 10);
9406 CureCondition<ConDim>(p / 100 + 5);
9407 CureCondition<ConBleed>(2 * p / 100 + 10);
9408 if (flag)
9409 {
9410 SAN.Mod(-15);
9411 }
9412 break;
9413 case CureType.CureBody:
9414 CureCondition<ConBlind>(5 * p / 100 + 15);
9415 CureCondition<ConPoison>(10 * p / 100 + 15);
9416 CureCondition<ConBleed>(5 * p / 100 + 20);
9417 CureTempElements(p, body: true, mind: false);
9418 break;
9419 case CureType.CureMind:
9420 CureCondition<ConFear>();
9421 CureCondition<ConDim>(3 * p / 100 + 10);
9422 CureTempElements(p, body: false, mind: true);
9423 break;
9424 case CureType.Sleep:
9425 {
9426 for (int num2 = conditions.Count - 1; num2 >= 0; num2--)
9427 {
9428 Condition condition2 = conditions[num2];
9429 if (!(condition2 is ConSleep) && !(condition2 is ConFaint))
9430 {
9431 if (condition2.isPerfume)
9432 {
9433 condition2.Mod(-1, force: true);
9434 }
9435 else if (condition2.Type == ConditionType.Bad || condition2.Type == ConditionType.Debuff)
9436 {
9437 condition2.Kill();
9438 }
9439 }
9440 }
9441 CureCondition<ConWait>();
9442 CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
9443 bool flag3 = HasCondition<ConAnorexia>();
9444 base.c_vomit -= (flag3 ? 3 : 2) * p / 100;
9445 if (base.c_vomit < 0)
9446 {
9447 base.c_vomit = 0;
9448 if (flag3)
9449 {
9450 RemoveCondition<ConAnorexia>();
9451 }
9452 }
9453 break;
9454 }
9455 case CureType.HealComplete:
9456 case CureType.Death:
9457 case CureType.Jure:
9458 case CureType.Boss:
9459 {
9460 bool flag2 = type == CureType.Death;
9461 CureTempElements(p * 100, body: true, mind: true);
9462 for (int num = conditions.Count - 1; num >= 0; num--)
9463 {
9464 Condition condition = conditions[num];
9465 if (condition is ConAnorexia && !flag2)
9466 {
9467 continue;
9468 }
9469 switch (condition.Type)
9470 {
9471 case ConditionType.Bad:
9472 case ConditionType.Debuff:
9473 case ConditionType.Disease:
9474 condition.Kill();
9475 continue;
9476 case ConditionType.Stance:
9477 if (flag2)
9478 {
9479 condition.Kill();
9480 continue;
9481 }
9482 break;
9483 }
9484 if (flag2 && condition.isPerfume)
9485 {
9486 condition.Kill();
9487 }
9488 }
9489 CureCondition<ConWait>();
9490 CureCondition<ConSleep>();
9491 if (flag2 || type == CureType.Boss)
9492 {
9493 SAN.Mod(-20);
9494 RemoveCondition<ConBrightnessOfLife>();
9495 }
9496 if (type == CureType.Jure)
9497 {
9498 SAN.Mod(-999);
9499 if (HasElement(1206))
9500 {
9501 SetFeat(1206, 0, msg: true);
9502 }
9503 }
9504 break;
9505 }
9506 }
9507 }
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:10221
Stats SAN
Definition: Chara.cs:1158
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(), StatsMana.Mod(), ActPray.Pray(), and Zone.Simulate().

◆ CureCondition< T >()

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

Definition at line 9345 of file Chara.cs.

9345 : Condition
9346 {
9347 T condition = GetCondition<T>();
9348 if (condition != null)
9349 {
9350 condition.value -= v;
9351 if (condition.value <= 0)
9352 {
9353 condition.Kill();
9354 }
9355 }
9356 }
T GetCondition< T >()
Definition: Chara.cs:9358

◆ CureHost()

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

Definition at line 9382 of file Chara.cs.

9383 {
9384 if (parasite != null)
9385 {
9386 parasite.Cure(type, p, state);
9387 }
9388 if (ride != null)
9389 {
9390 ride.Cure(type, p, state);
9391 }
9392 Cure(type, p, state);
9393 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9395

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 10221 of file Chara.cs.

10222 {
10223 if (tempElements != null)
10224 {
10225 if (body)
10226 {
10228 }
10229 if (mind)
10230 {
10232 }
10233 }
10234 void Cure(int[] eles)
10235 {
10236 foreach (int ele in eles)
10237 {
10238 if (tempElements == null)
10239 {
10240 break;
10241 }
10242 Element element = tempElements.GetElement(ele);
10243 if (element != null && element.vBase < 0)
10244 {
10245 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
10246 }
10247 }
10248 }
10249 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:10129
Element GetElement(string alias)
static int[] List_Body
Definition: ELEMENT.cs:244
static int[] List_Mind
Definition: ELEMENT.cs:246

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 10187 of file Chara.cs.

10188 {
10189 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
10190 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 10175 of file Chara.cs.

10176 {
10177 if (body)
10178 {
10179 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
10180 }
10181 if (mind)
10182 {
10183 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
10184 }
10185 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10187

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3163 of file Chara.cs.

3164 {
3165 bool broke = false;
3166 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
3167 {
3168 if (_p.IsValid)
3169 {
3170 if (_p.HasBlock)
3171 {
3172 EClass._map.MineBlock(_p, recoverBlock: false, this);
3173 if (_p.HasObj)
3174 {
3175 EClass._map.MineObj(_p, null, this);
3176 }
3177 broke = true;
3178 }
3179 if (_p.HasObj && _p.IsBlocked)
3180 {
3181 EClass._map.MineObj(_p, null, this);
3182 broke = true;
3183 }
3184 _p.Things.ForeachReverse(delegate(Thing t)
3185 {
3186 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
3187 {
3188 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3189 {
3190 t.Destroy();
3191 }
3192 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
3193 {
3194 t.SetPlaceState(PlaceState.roaming);
3195 }
3196 }
3197 });
3198 }
3199 });
3200 if (broke)
3201 {
3202 Msg.Say("stomp");
3203 Shaker.ShakeCam("stomp");
3204 }
3205 }
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool IsUnique
Definition: Card.cs:2091
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
Definition: Point.cs:1385
bool IsBlocked
Definition: Point.cs:363
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(), and ActThrow.Throw().

◆ Die()

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

Reimplemented from Card.

Definition at line 5253 of file Chara.cs.

5254 {
5255 combatCount = 0;
5256 if (isDead || host != null)
5257 {
5258 return;
5259 }
5260 bool isInActiveZone = IsInActiveZone;
5261 if (isInActiveZone)
5262 {
5263 if (IsPC)
5264 {
5266 }
5267 if (base.isSummon)
5268 {
5269 if (id == "tsunami")
5270 {
5271 pos.PlaySound("water");
5272 }
5273 else
5274 {
5275 Say("summon_vanish", this);
5276 pos.PlayEffect("vanish");
5277 pos.PlaySound("vanish");
5278 }
5279 Destroy();
5280 return;
5281 }
5282 if (attackSource == AttackSource.DeathSentense)
5283 {
5284 if (trait is TraitLittleOne)
5285 {
5286 MakeEgg();
5287 if (IsPCFaction)
5288 {
5290 }
5291 }
5292 PlayEffect("revive");
5293 PlaySound("chime_angel");
5294 }
5295 else
5296 {
5297 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
5298 .Emit(50);
5299 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
5300 PlaySound(base.material.GetSoundDead(source));
5301 }
5304 ClearFOV();
5305 }
5306 string text = "";
5307 "dead_in".langGame(EClass._zone.Name);
5308 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
5309 if (LangGame.Has("dead_" + attackSource))
5310 {
5311 text = "dead_" + attackSource;
5312 }
5313 else
5314 {
5315 if (e != Element.Void && e != null)
5316 {
5317 text = "dead_" + e.source.alias;
5318 }
5319 if (text == "" || !LangGame.Has(text))
5320 {
5321 text = "dead";
5322 }
5323 }
5324 if (IsPC)
5325 {
5326 EClass._zone.isDeathLocation = true;
5327 string s = ((origin == null) ? text : "dead_by");
5329 if (attackSource == AttackSource.Wrath)
5330 {
5332 }
5333 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
5335 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
5336 {
5337 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
5338 }
5339 AI_PlayMusic.keepPlaying = false;
5340 }
5341 if (isInActiveZone)
5342 {
5343 if (attackSource == AttackSource.DeathSentense)
5344 {
5345 Msg.Say("goto_heaven", this);
5346 }
5347 else
5348 {
5349 if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5350 {
5351 Msg.Say(text, this, "", text2);
5352 }
5353 string text3 = TalkTopic("dead");
5354 if (!text3.IsEmpty())
5355 {
5356 text3 = text3.StripBrackets();
5357 }
5358 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5359 if (!IsPC && flag)
5360 {
5361 MakeGrave(text3);
5362 }
5363 Msg.SetColor();
5364 SpawnLoot(origin);
5365 }
5366 if (IsPC)
5367 {
5369 }
5370 }
5371 if (IsPCFaction)
5372 {
5373 if (homeBranch != null)
5374 {
5375 homeBranch.Log(text, this, "");
5376 }
5377 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5378 if (!IsPC)
5379 {
5380 if (EClass.player.stats.allyDeath == 0)
5381 {
5382 Tutorial.Reserve("death_pet");
5383 }
5385 }
5386 }
5387 if (id == "mandrake" || HasElement(488))
5388 {
5389 Say("a_scream", this);
5390 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5391 }
5392 daysStarved = 0;
5393 isDead = true;
5395 enemy = null;
5396 _cooldowns = null;
5397 base.isSale = false;
5398 SetInt(70);
5399 EClass._map.props.sales.Remove(this);
5400 Cure(CureType.Death);
5401 SetAI(new NoGoal());
5403 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5404 {
5405 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5406 }
5407 if (IsPC)
5408 {
5409 EClass.player.returnInfo = null;
5410 EClass.player.uidLastTravelZone = 0;
5411 foreach (Chara chara3 in EClass._map.charas)
5412 {
5413 if (chara3.IsHostile())
5414 {
5415 chara3.hostility = chara3.OriginalHostility;
5416 }
5417 if (chara3.enemy == EClass.pc)
5418 {
5419 chara3.enemy = null;
5420 }
5421 }
5422 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5423 {
5424 EClass.player.preventDeathPenalty = true;
5425 }
5426 }
5427 else
5428 {
5429 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5430 if (currentZone is Zone_LittleGarden && id == "littleOne")
5431 {
5432 flag2 = false;
5433 }
5434 if (flag2)
5435 {
5436 EClass._map.deadCharas.Add(this);
5437 }
5438 currentZone.RemoveCard(this);
5439 }
5440 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5441 {
5442 int a = -10;
5443 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5444 {
5445 a = -5;
5446 }
5447 ModAffinity(EClass.pc, a, show: false);
5448 string text4 = id;
5449 if (!(text4 == "quru"))
5450 {
5451 if (text4 == "corgon")
5452 {
5453 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5454 }
5455 }
5456 else
5457 {
5458 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5459 }
5460 }
5461 if (origin != null)
5462 {
5463 if (origin.IsPCParty || origin.IsPCPartyMinion)
5464 {
5465 int num = 0;
5466 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5467 {
5468 num = -5;
5469 }
5470 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5471 {
5472 EClass.pc.Say("killcat");
5473 num = -1;
5474 }
5475 if (EClass.pc.party.HasElement(1563) && num < 0)
5476 {
5477 num = num * 30 / 100;
5478 }
5479 if (num != 0)
5480 {
5481 EClass.player.ModKarma(num);
5482 }
5483 }
5484 if (origin == EClass.pc)
5485 {
5486 EClass.pc.faith.Revelation("kill", 10);
5487 }
5488 else if (origin.IsPCFaction)
5489 {
5490 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5491 origin.Chara.ShowEmo(Emo.love);
5492 }
5493 }
5494 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5495 {
5496 EClass.player.doneBackers.Add(base.sourceBacker.id);
5497 }
5498 if (base.IsPCFactionOrMinion)
5499 {
5501 {
5502 Msg.Say("abort_allyDead");
5503 }
5504 }
5506 {
5507 Msg.Say("abort_enemyDead");
5508 }
5509 if (IsPCParty && !IsPC)
5510 {
5512 base.c_wasInPcParty = true;
5513 EClass.pc.Say("allyDead");
5514 }
5515 switch (id)
5516 {
5517 case "littleOne":
5518 if (attackSource != AttackSource.DeathSentense && !IsPCFaction)
5519 {
5520 EClass.player.flags.little_killed = true;
5522 }
5523 break;
5524 case "big_daddy":
5525 if (!IsPCFaction)
5526 {
5527 Chara chara = CharaGen.Create("littleOne");
5528 EClass._zone.AddCard(chara, pos.Copy());
5529 Msg.Say("little_pop");
5531 }
5532 break;
5533 case "shark_sister":
5534 if (!IsPCFaction)
5535 {
5536 Chara t = CharaGen.Create("sister_shark");
5537 EClass._zone.AddCard(t, pos.Copy());
5538 Msg.Say("shark_pop");
5539 }
5540 break;
5541 }
5542 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5543 {
5544 Chara chara2 = CharaGen.CreateFromFilter("c_plant", base.LV);
5545 EClass._zone.AddCard(chara2, pos.Copy());
5546 if (chara2.LV < base.LV)
5547 {
5548 chara2.SetLv(base.LV);
5549 }
5550 chara2.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5551 Msg.Say("plant_pop", this, chara2);
5552 }
5554 }
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:485
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:2615
void AddBlood(int a=1, int id=-1)
Definition: Card.cs:5944
virtual bool IsPCParty
Definition: Card.cs:2149
Card SetLv(int a)
Definition: Card.cs:2901
ICardParent parent
Definition: Card.cs:55
virtual bool IsPCPartyMinion
Definition: Card.cs:2153
void ClearFOV()
Definition: Card.cs:6547
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6163
virtual bool IsPCFaction
Definition: Card.cs:2269
void SpawnLoot(Card origin)
Definition: Card.cs:5107
int LV
Definition: Card.cs:386
virtual bool isSynced
Definition: Card.cs:2087
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:879
int daysStarved
Definition: Chara.cs:329
void MakeMinion(Chara _master, MinionType type=MinionType.Default)
Definition: Chara.cs:2331
string NameBraced
Definition: Chara.cs:514
void ClearTempElements()
Definition: Chara.cs:10251
string TalkTopic(string topic="calm")
Definition: Chara.cs:6888
void TryDropBossLoot()
Definition: Chara.cs:5556
bool IsLocalChara
Definition: Chara.cs:841
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:838
void TryDropCarryOnly()
Definition: Chara.cs:4544
void MakeGrave(string lastword)
Definition: Chara.cs:5170
UD_String_MatData matColors
static ColorProfile Colors
Definition: EClass.cs:38
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:141
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
bool HasElement(int ele, bool excludePC=false)
Definition: Party.cs:194
void RemoveMember(Chara c)
Definition: Party.cs:102
int allyDeath
Definition: Player.cs:111
void ModKarma(int a)
Definition: Player.cs:2511
Stats stats
Definition: Player.cs:1016
int little_dead
Definition: Player.cs:926
HashSet< int > doneBackers
Definition: Player.cs:1073
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2405
string deathMsg
Definition: Player.cs:1185
void TalkWitnesses(Chara criminal, string idTalk, int radius=4, WitnessType type=WitnessType.everyone, Func< Chara, bool > talkIf=null, int chance=3)
Definition: Point.cs:815
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)
void OnCharaDie(Chara c)
virtual bool HasLaw
Definition: Zone.cs:226
void RemoveCard(Card t)
Definition: Zone.cs:1999
void ResetHostility()
Definition: Zone.cs:2670
ZoneInstance instance
Definition: Zone.cs:52

References EClass._map, EClass._zone, ConfigAutoCombat.abortOnAllyDead, ConfigAutoCombat.abortOnEnemyDead, Zone.AddCard(), AddCondition(), Player.Stats.allyDeath, Game.Config.autoCombat, Game.cards, 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, Player.little_dead, FactionBranch.Log(), Card.LV, MakeMinion(), ColorProfile.matColors, ModAffinity(), Player.ModKarma(), Spatial.Name, NameBraced, Religion.NameShort, ZoneEventManager.OnCharaDie(), 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, CellEffect.source, 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 10206 of file Chara.cs.

10207 {
10208 if (tempElements == null)
10209 {
10210 return;
10211 }
10212 foreach (Element item in tempElements.dict.Values.ToList())
10213 {
10214 if (item.vBase > 0)
10215 {
10216 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
10217 }
10218 }
10219 }

References ElementContainer.dict, and item.

◆ DoAI()

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

Definition at line 6176 of file Chara.cs.

6177 {
6178 SetAI(new DynamicAIAct("", delegate
6179 {
6180 onPerform();
6181 return true;
6182 })
6183 {
6184 wait = wait
6185 });
6186 }

◆ DoHostileAction()

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

Definition at line 6276 of file Chara.cs.

6277 {
6278 if (_tg == null || !_tg.isChara)
6279 {
6280 return;
6281 }
6282 Chara chara = _tg.Chara;
6283 if (chara.IsPC)
6284 {
6285 EClass.pc.combatCount = 10;
6286 }
6287 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
6288 {
6289 return;
6290 }
6291 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
6292 {
6293 chara.Say("frown", this, chara);
6294 }
6295 else
6296 {
6297 if (EClass._zone.IsRegion)
6298 {
6299 return;
6300 }
6301 if (IsPC)
6302 {
6303 if (chara.IsFriendOrAbove() && !immediate)
6304 {
6305 chara.Say("frown", this, chara);
6306 chara.ShowEmo(Emo.sad);
6307 chara.hostility = Hostility.Neutral;
6308 return;
6309 }
6310 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
6311 {
6312 bool flag = chara.id == "fanatic";
6313 if (EClass.rnd(4) == 0 || flag)
6314 {
6315 chara.Say("callHelp", chara);
6316 chara.CallHelp(this, flag);
6317 }
6318 }
6319 if (chara.hostility <= Hostility.Enemy)
6320 {
6321 foreach (Chara member in EClass.pc.party.members)
6322 {
6323 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
6324 {
6325 member.SetEnemy(chara);
6326 }
6327 }
6328 }
6329 }
6330 else if (chara.IsPC && hostility <= Hostility.Enemy)
6331 {
6332 foreach (Chara member2 in EClass.pc.party.members)
6333 {
6334 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
6335 {
6336 member2.SetEnemy(this);
6337 }
6338 }
6339 }
6340 if (chara.calmCheckTurn <= 0 || IsPC)
6341 {
6342 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
6343 }
6344 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
6345 {
6346 GoHostile(chara);
6347 chara.GoHostile(this);
6348 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
6349 {
6350 Thing t = ThingGen.Create("49");
6351 ActThrow.Throw(chara, pos, t);
6352 Act.TC = chara;
6353 }
6354 }
6355 }
6356 }
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
Definition: ActThrow.cs:97
override bool IsAliveInCurrentZone
Definition: Chara.cs:561
override bool IsPCPartyMinion
Definition: Chara.cs:639
int calmCheckTurn
Definition: Chara.cs:116
bool CanSee(Card c)
Definition: Chara.cs:1218
override bool IsPCFactionMinion
Definition: Chara.cs:655
bool IsFriendOrAbove()
Definition: Chara.cs:6545
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6227
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:6358
Hostility hostility
Definition: Chara.cs:291
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 Card.ApplyElementEffect(), ActMelee.Attack(), Point.CallGuard(), ActEffect.DamageEle(), DramaOutcome.fiama_starter_gift(), AI_Fuck.Finish(), ActRanged.Perform(), ActSummonGuard.Perform(), ActWater.Perform(), ActEffect.Proc(), AI_AttackHome.Run(), AI_Idle.Run(), GoalSiege.Run(), and ActThrow.Throw().

◆ Drink()

void Chara.Drink ( Card  t)
inline

Definition at line 5047 of file Chara.cs.

5048 {
5049 Say("drink", this, t.Duplicate(1));
5050 Say("quaff");
5051 PlaySound("drink");
5052 hunger.Mod(-2);
5053 t.ModNum(-1);
5054 t.trait.OnDrink(this);
5055 _ = IsPC;
5056 }
Thing Duplicate(int num)
Definition: Card.cs:3441
void ModNum(int a, bool notify=true)
Definition: Card.cs:3512
Stats hunger
Definition: Chara.cs:1142
virtual void OnDrink(Chara c)
Definition: Trait.cs:991

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 4556 of file Chara.cs.

4557 {
4558 if (held == null)
4559 {
4560 return null;
4561 }
4562 if (IsPC)
4563 {
4564 WidgetHotbar.dirtyCurrentItem = true;
4566 }
4567 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4568 card.OnLand();
4569 if (card.trait.CanOnlyCarry)
4570 {
4571 card.SetPlaceState(PlaceState.installed);
4572 }
4573 return card;
4574 }
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 4576 of file Chara.cs.

4577 {
4578 if (t.c_isImportant)
4579 {
4580 Msg.Say("markedImportant");
4581 return;
4582 }
4583 if (!t.trait.CanBeDropped)
4584 {
4585 Msg.Say("cantDrop", t);
4586 return;
4587 }
4588 if (t.trait is TraitAbility)
4589 {
4590 SE.Trash();
4591 t.Destroy();
4592 return;
4593 }
4594 Msg.Say("dropItem", t.Name);
4595 t.ignoreAutoPick = true;
4596 PlaySound("drop");
4597 EClass._zone.AddCard(t, pos);
4598 if (t.trait.CanOnlyCarry)
4599 {
4600 t.Install();
4601 }
4602 }
Card Install()
Definition: Card.cs:3738
virtual bool CanBeDropped
Definition: Trait.cs:300

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 1775 of file Chara.cs.

1776 {
1777 Chara chara = CharaGen.Create(id);
1778 chara.mana.value = mana.value;
1779 chara.stamina.value = stamina.value;
1780 foreach (KeyValuePair<int, Element> item in elements.dict)
1781 {
1782 Element orCreateElement = chara.elements.GetOrCreateElement(item.Key);
1783 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.vSource;
1784 }
1785 chara.SetFaith(faith);
1786 chara.bio = IO.DeepCopy(bio);
1787 chara.LV = base.LV;
1788 chara.c_daysWithGod = base.c_daysWithGod;
1789 chara.RefreshFaithElement();
1790 chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
1791 chara.isCopy = true;
1792 chara.isScaled = base.isScaled;
1793 if (HaveFur())
1794 {
1795 chara.c_fur = -1;
1796 }
1797 return chara;
1798 }
bool HaveFur()
Definition: Card.cs:7835
Stats mana
Definition: Chara.cs:1154
void RefreshFaithElement()
Definition: Chara.cs:10086
void SetFaith(string id)
Definition: Chara.cs:1705
Element GetOrCreateElement(Element ele)
int vSource
Definition: ELEMENT.cs:262
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(), and AI_Idle.Run().

◆ EnhanceTempElement()

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

Definition at line 10201 of file Chara.cs.

10202 {
10203 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
10204 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 10192 of file Chara.cs.

10193 {
10194 int[] array = (body ? Element.List_Body : Element.List_Mind);
10195 foreach (int ele in array)
10196 {
10197 EnhanceTempElement(ele, p, onlyRenew);
10198 }
10199 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10201

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 5024 of file Chara.cs.

5025 {
5026 int slot = EClass.sources.categories.map[s].slot;
5027 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
5028 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
5029 {
5030 SetEQQuality();
5031 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
5032 AddThing(thing);
5033 if (bodySlot != null && !body.Equip(thing, bodySlot))
5034 {
5035 thing.Destroy();
5036 }
5037 }
5038 }
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3101
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:4971
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 5004 of file Chara.cs.

5005 {
5006 SetEQQuality();
5007 if (r != Rarity.Random)
5008 {
5009 CardBlueprint.current.rarity = r;
5010 }
5011 Thing thing = ThingGen.Create(s, mat, base.LV);
5012 if (body.GetSlot(thing, onlyEmpty: true) == null)
5013 {
5014 return thing;
5015 }
5016 AddThing(thing);
5017 if (!body.Equip(thing))
5018 {
5019 thing.Destroy();
5020 }
5021 return thing;
5022 }

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 5040 of file Chara.cs.

5041 {
5042 SetEQQuality();
5043 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
5044 AddThing(t);
5045 }
Thing SetNum(int a)
Definition: Card.cs:3492

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 6087 of file Chara.cs.

6088 {
6089 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
6090 {
6091 return 25 + Evalue(226) * 125 / 100;
6092 }
6093 return Evalue(226);
6094 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3485 of file Chara.cs.

3486 {
3487 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3488 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3489 zone = zone ?? EClass.world.region;
3491 {
3492 state = ZoneTransition.EnterState.Fall,
3493 x = pos.x,
3494 z = pos.z
3495 });
3496 }
void MoveZone(string alias)
Definition: Chara.cs:3310
int lv
Definition: Spatial.cs:142
Zone FindZone(int lv)
Definition: Spatial.cs:728
Region region
Definition: World.cs:23
Definition: Zone.cs:12
Zone GetTopZone()
Definition: Zone.cs:1920

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 7713 of file Chara.cs.

7714 {
7715 TraitToolRange ranged = weapon.trait as TraitToolRange;
7716 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7717 if (thing != null)
7718 {
7719 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7720 if (thing2 != null)
7721 {
7722 return thing2;
7723 }
7724 }
7725 return things.Find((Thing t) => ranged.IsAmmo(t));
7726 }
bool IsAmmo
Definition: Card.cs:2247
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 7237 of file Chara.cs.

7238 {
7239 foreach (Card item in EClass._map.props.installed.all)
7240 {
7241 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7242 {
7243 return traitBed;
7244 }
7245 }
7246 return null;
7247 }

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 7448 of file Chara.cs.

7449 {
7450 Thing result = null;
7451 int num = -1;
7452 if (IsPC)
7453 {
7454 return null;
7455 }
7456 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7457 {
7458 int num2 = CountNumEaten(item);
7459 int num3 = 100 - num2;
7460 if (num3 > num)
7461 {
7462 result = item;
7463 num = num3;
7464 }
7465 }
7466 return result;
7467 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7494
int CountNumEaten(Thing food)
Definition: Chara.cs:10057
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 2377 of file Chara.cs.

2378 {
2379 if (IsMinion)
2380 {
2381 master = EClass._map.FindChara(base.c_uidMaster);
2382 }
2383 return master;
2384 }
Chara master
Definition: Chara.cs:88
Chara FindChara(string id)
Definition: Map.cs:2568

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

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

◆ FindNearestNewEnemy()

bool Chara.FindNearestNewEnemy ( )
inline

Definition at line 6438 of file Chara.cs.

6439 {
6440 for (int i = 0; i < EClass._map.charas.Count; i++)
6441 {
6442 Chara chara = EClass._map.charas[i];
6443 if (chara != this && chara != enemy && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6444 {
6445 DoHostileAction(chara);
6446 enemy = chara;
6447 return true;
6448 }
6449 }
6450 return false;
6451 }
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6276

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 6369 of file Chara.cs.

6370 {
6371 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
6372 {
6373 return false;
6374 }
6375 if (enemy != null && !enemy.IsAliveInCurrentZone)
6376 {
6377 enemy = null;
6378 }
6379 if (enemy != null)
6380 {
6381 return false;
6382 }
6383 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
6384 {
6385 return false;
6386 }
6387 bool flag = enemy != null || ai is GoalCombat;
6388 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6389 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
6390 bool flag3 = !IsPCParty;
6391 Chara chara = null;
6392 int num2 = 9999;
6393 for (int i = 0; i < EClass._map.charas.Count; i++)
6394 {
6395 Chara chara2 = EClass._map.charas[i];
6396 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2))
6397 {
6398 continue;
6399 }
6400 int num3 = Dist(chara2);
6401 int num4 = GetSightRadius() + (flag ? 1 : 0);
6402 if (num3 > num4)
6403 {
6404 continue;
6405 }
6406 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
6407 {
6408 if (this == pos.FirstChara)
6409 {
6410 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6411 }
6412 stealthSeen++;
6413 }
6414 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!IsPCFaction || EClass.pc.ai.ShouldAllyAttack(chara2)))
6415 {
6416 if (!IsPCParty)
6417 {
6418 DoHostileAction(chara2);
6419 enemy = chara2;
6420 return true;
6421 }
6422 if (num3 < num2)
6423 {
6424 num2 = num3;
6425 chara = chara2;
6426 }
6427 }
6428 }
6429 if (chara != null)
6430 {
6431 DoHostileAction(chara);
6432 enemy = chara;
6433 return true;
6434 }
6435 return false;
6436 }
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
int stealthSeen
Definition: Chara.cs:188
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 7828 of file Chara.cs.

7829 {
7830 return FindBed()?.owner.pos.cell.room;
7831 }
TraitBed FindBed()
Definition: Chara.cs:7237

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

◆ GainAbility()

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

Definition at line 9972 of file Chara.cs.

9973 {
9974 Element orCreateElement = elements.GetOrCreateElement(ele);
9975 if (orCreateElement.ValueWithoutLink == 0)
9976 {
9977 elements.ModBase(orCreateElement.id, 1);
9978 }
9979 if (orCreateElement is Spell)
9980 {
9981 int num = EClass.curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
9982 int num2 = origin?.Evalue(765) ?? 0;
9983 num = num * (100 - num2) / 100;
9984 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
9985 a = Mathf.Max(1, EClass.rndHalf(a));
9986 if (orCreateElement.source.charge == 1)
9987 {
9988 a = 1;
9989 }
9990 orCreateElement.vPotential += a;
9991 }
9992 Say("spell_gain", this, orCreateElement.Name);
9993 LayerAbility.SetDirty(orCreateElement);
9994 }
Element ModBase(int ele, int v)
virtual string Name
Definition: ELEMENT.cs:304
static void SetDirty(Element a)

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

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

◆ GetActionText()

string Chara.GetActionText ( )
inline

Definition at line 7181 of file Chara.cs.

7182 {
7183 string result = "?????";
7184 if (ai != null)
7185 {
7186 result = ai.GetCurrentActionText();
7187 }
7188 return result;
7189 }
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 7763 of file Chara.cs.

7764 {
7765 if (body.GetWeight(armorOnly: true) <= 30000)
7766 {
7767 return 120;
7768 }
7769 return 122;
7770 }
int GetWeight(bool armorOnly=false)
Definition: CharaBody.cs:402

References CharaBody.GetWeight().

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

◆ GetBestRangedWeapon()

Thing Chara.GetBestRangedWeapon ( )
inline

Definition at line 7728 of file Chara.cs.

7729 {
7730 Thing result = null;
7731 int num = 0;
7732 foreach (Thing thing in things)
7733 {
7734 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
7735 {
7736 num = thing.GetEquipValue();
7737 result = thing;
7738 }
7739 }
7740 return result;
7741 }
int GetEquipValue()
Definition: Card.cs:7134
bool IsRangedWeapon
Definition: Card.cs:2243
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7662

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 9320 of file Chara.cs.

9321 {
9322 for (int i = 0; i < conditions.Count; i++)
9323 {
9324 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
9325 {
9326 return conBuffStats.elements.GetElement(ele);
9327 }
9328 }
9329 return null;
9330 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 9315 of file Chara.cs.

9316 {
9317 return GetBuffStats(EClass.sources.elements.alias[alias].id);
9318 }
Element GetBuffStats(string alias)
Definition: Chara.cs:9315

References SourceManager.elements, and EClass.sources.

Referenced by GoalCombat.TryUseAbility().

◆ GetBurden()

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

Definition at line 1800 of file Chara.cs.

1801 {
1802 int num2 = (base.ChildrenWeight + ((t != null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 / WeightLimit;
1803 if (num2 < 0)
1804 {
1805 num2 = 1000;
1806 }
1808 {
1809 num2 = 0;
1810 }
1811 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
1812 if (num3 > 9)
1813 {
1814 num3 = 9;
1815 }
1816 return num3;
1817 }

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

◆ GetCondition< T >()

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

Definition at line 9358 of file Chara.cs.

9358 : Condition
9359 {
9360 for (int i = 0; i < conditions.Count; i++)
9361 {
9362 if (conditions[i] is T)
9363 {
9364 return conditions[i] as T;
9365 }
9366 }
9367 return null;
9368 }

◆ GetCooldown()

int Chara.GetCooldown ( int  idEle)
inline

Definition at line 8613 of file Chara.cs.

8614 {
8615 if (_cooldowns != null)
8616 {
8617 for (int i = 0; i < _cooldowns.Count; i++)
8618 {
8619 if (_cooldowns[i] / 1000 == idEle)
8620 {
8621 return _cooldowns[i] % 1000;
8622 }
8623 }
8624 }
8625 return 0;
8626 }

Referenced by NotificationCooldown.OnRefresh().

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3605 of file Chara.cs.

3606 {
3607 Debug.Log(angle);
3608 if (!renderer.hasActor)
3609 {
3610 if (angle == 0f || angle == 45f || angle == 90f)
3611 {
3612 return 2;
3613 }
3614 if (angle == -135f || angle == 180f || angle == -90f)
3615 {
3616 return 1;
3617 }
3618 if (angle == 135f)
3619 {
3620 return 0;
3621 }
3622 return 3;
3623 }
3624 return renderer.actor.currentDir;
3625 }
virtual int currentDir
Definition: CardActor.cs:41
float angle
Definition: Card.cs:71

References Debug.

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

◆ GetDestination()

Point Chara.GetDestination ( )
inline

Definition at line 7156 of file Chara.cs.

7157 {
7158 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
7159 }
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 4629 of file Chara.cs.

4630 {
4631 if (elements.Value(122) > elements.Value(120))
4632 {
4633 return elements.GetElement(122);
4634 }
4635 return elements.GetElement(120);
4636 }
int Value(int ele)

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4604 of file Chara.cs.

4605 {
4606 int num = Evalue(131);
4607 int num2 = Evalue(130);
4608 int num3 = Evalue(123);
4609 if (num > num2 && num > num3)
4610 {
4611 return AttackStyle.TwoWield;
4612 }
4613 if (num2 > num && num2 > num3)
4614 {
4615 return AttackStyle.TwoHand;
4616 }
4617 if (num3 > num && num3 > num2)
4618 {
4619 return AttackStyle.Shield;
4620 }
4621 return AttackStyle.Default;
4622 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 7952 of file Chara.cs.

7953 {
7954 SourceCategory.Row r = null;
7955 if (_listFavCat.Count == 0)
7956 {
7957 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
7958 {
7959 if (row.gift > 0)
7960 {
7961 _listFavCat.Add(row);
7962 }
7963 }
7964 }
7965 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7966 {
7967 r = _listFavCat.RandomItem();
7968 });
7969 return r;
7970 }
static List< SourceCategory.Row > _listFavCat
Definition: Chara.cs:194
int seed
Definition: Game.cs:200
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 7932 of file Chara.cs.

7933 {
7934 if (_listFavFood.Count == 0)
7935 {
7936 foreach (SourceThing.Row row in EClass.sources.things.rows)
7937 {
7938 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
7939 {
7940 _listFavFood.Add(row);
7941 }
7942 }
7943 }
7944 SourceThing.Row r = null;
7945 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7946 {
7947 r = _listFavFood.RandomItem();
7948 });
7949 return r;
7950 }
static List< SourceThing.Row > _listFavFood
Definition: Chara.cs:192
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 4624 of file Chara.cs.

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

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 2563 of file Chara.cs.

2564 {
2565 return PathManager.Instance.GetFirstStep(pos, newPoint, this, IsPC ? 40 : 10, (!IsMultisize) ? moveType : PathManager.MoveType.Default);
2566 }
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(), ActEffect.Proc(), GoalCombat.Run(), GoalManualMove.Run(), and GoalManualMove.TryMove().

◆ GetGoalFromTimeTable()

Goal Chara.GetGoalFromTimeTable ( int  hour)
inline

Definition at line 8679 of file Chara.cs.

8680 {
8681 if (IsPC)
8682 {
8683 return null;
8684 }
8685 switch (TimeTable.GetSpan(idTimeTable, hour))
8686 {
8687 case TimeTable.Span.Sleep:
8689 {
8690 return new GoalSleep();
8691 }
8692 break;
8693 case TimeTable.Span.Eat:
8694 return new GoalIdle();
8695 case TimeTable.Span.Work:
8696 if (IsGuest())
8697 {
8698 return new GoalIdle();
8699 }
8700 return GetGoalWork();
8701 case TimeTable.Span.Free:
8702 if (IsGuest())
8703 {
8704 return new GoalIdle();
8705 }
8706 return GetGoalHobby();
8707 }
8708 return null;
8709 }
Goal GetGoalWork()
Definition: Chara.cs:8711
Goal GetGoalHobby()
Definition: Chara.cs:8724
string idTimeTable
Definition: Chara.cs:468
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 8724 of file Chara.cs.

8725 {
8726 if (IsPrisoner)
8727 {
8728 return new GoalIdle();
8729 }
8730 if (memberType == FactionMemberType.Livestock)
8731 {
8732 return new GoalGraze();
8733 }
8734 return new GoalHobby();
8735 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1038

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 8711 of file Chara.cs.

8712 {
8713 if (IsPrisoner)
8714 {
8715 return new GoalIdle();
8716 }
8717 if (memberType == FactionMemberType.Livestock)
8718 {
8719 return new GoalGraze();
8720 }
8721 return new GoalWork();
8722 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 7166 of file Chara.cs.

7167 {
7168 int num = 50;
7169 if (FindBed() != null)
7170 {
7171 num += 50;
7172 }
7173 return num;
7174 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 7161 of file Chara.cs.

7162 {
7163 return base.LV / 2 + 4;
7164 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6691 of file Chara.cs.

6692 {
6693 string text = base.Name;
6694 if (IsFriendOrAbove())
6695 {
6696 text = text.TagColor(EClass.Colors.colorFriend);
6697 }
6698 else if (IsHostile())
6699 {
6700 text = text.TagColor(EClass.Colors.colorHostile);
6701 }
6702 int num = 2;
6703 int lV = EClass.pc.LV;
6704 if (base.LV >= lV * 5)
6705 {
6706 num = 0;
6707 }
6708 else if (base.LV >= lV * 2)
6709 {
6710 num = 1;
6711 }
6712 else if (base.LV <= lV / 4)
6713 {
6714 num = 4;
6715 }
6716 else if (base.LV <= lV / 2)
6717 {
6718 num = 3;
6719 }
6720 string text2 = Lang.GetList("lvComparison")[num];
6721 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6722 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6723 s = (" (" + s.lang() + ") ").TagSize(14);
6724 s = "";
6725 if (memberType == FactionMemberType.Guest)
6726 {
6727 s += (" (" + "guest".lang() + ") ").TagSize(14);
6728 }
6729 else if (memberType == FactionMemberType.Livestock)
6730 {
6731 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6732 }
6733 if (!EClass.pc.IsMoving)
6734 {
6735 if (EClass.pc.HasHigherGround(this))
6736 {
6737 text2 += "lowerGround".lang();
6738 }
6739 else if (HasHigherGround(EClass.pc))
6740 {
6741 text2 += "higherGround".lang();
6742 }
6743 }
6744 if (Evalue(1232) > 0)
6745 {
6746 text2 = "milkBaby".lang().TagSize(14) + text2;
6747 }
6748 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6749 {
6750 text2 = "hasBounty".lang().TagSize(14) + text2;
6751 }
6752 if (EClass.pc.HasElement(481))
6753 {
6754 text2 += ("(" + faith.Name + ")").TagSize(14);
6755 }
6756 if (EClass.pc.HasElement(6607))
6757 {
6758 s += CraftUtil.GetBloodText(this).TagSize(14).TagColor(EClass.Colors.colorBlood);
6759 }
6760 return text + text2 + s;
6761 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1190
override bool IsMoving
Definition: Chara.cs:608
bool IsNeutral()
Definition: Chara.cs:6496
Color colorHostile
Color colorBlood
Color colorFriend
Gradient gradientLVComparison
static string GetBloodText(Chara c)
Definition: CraftUtil.cs:117
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:56

References ColorProfile.colorBlood, ColorProfile.colorFriend, ColorProfile.colorHostile, EClass.Colors, Guild.Fighter, CraftUtil.GetBloodText(), 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 6763 of file Chara.cs.

6764 {
6765 string text = "";
6766 if (knowFav)
6767 {
6768 text += Environment.NewLine;
6769 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
6770 }
6771 string text2 = "";
6773 {
6774 text2 += Environment.NewLine;
6775 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
6776 text2 += Environment.NewLine;
6777 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");
6778 text2 += Environment.NewLine;
6779 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
6780 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin + " scaled:" + base.isScaled;
6781 }
6783 {
6784 text2 += Environment.NewLine;
6785 text2 += "<size=14>";
6786 foreach (Hobby item in ListWorks())
6787 {
6788 text2 = text2 + item.Name + ", ";
6789 }
6790 foreach (Hobby item2 in ListHobbies())
6791 {
6792 text2 = text2 + item2.Name + ", ";
6793 }
6794 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
6795 }
6796 string text3 = "";
6797 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
6798 if (enumerable.Count() > 0)
6799 {
6800 text3 += Environment.NewLine;
6801 text3 += "<size=14>";
6802 int num = 0;
6803 foreach (BaseStats item3 in enumerable)
6804 {
6805 string text4 = item3.GetPhaseStr();
6806 if (text4.IsEmpty() || text4 == "#")
6807 {
6808 continue;
6809 }
6810 Color c = Color.white;
6811 switch (item3.source.group)
6812 {
6813 case "Bad":
6814 case "Debuff":
6815 case "Disease":
6817 break;
6818 case "Buff":
6820 break;
6821 }
6823 {
6824 text4 = text4 + "(" + item3.GetValue() + ")";
6825 if (resistCon != null && resistCon.ContainsKey(item3.id))
6826 {
6827 text4 = text4 + "{" + resistCon[item3.id] + "}";
6828 }
6829 }
6830 num++;
6831 text3 = text3 + text4.TagColor(c) + ", ";
6832 }
6833 if (num == 0)
6834 {
6835 text3 = "";
6836 }
6837 else
6838 {
6839 text = "";
6840 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
6841 }
6842 }
6844 {
6845 text3 += Environment.NewLine;
6846 foreach (ActList.Item item4 in ability.list.items)
6847 {
6848 text3 = text3 + item4.act.Name + ", ";
6849 }
6850 text3 = text3.TrimEnd(", ".ToCharArray());
6851 }
6852 return text + text2 + text3;
6853 }
override string ToString()
Definition: AIAct.cs:124
virtual string GetPhaseStr()
Definition: BaseStats.cs:47
virtual int GetValue()
Definition: BaseStats.cs:52
bool isScaled
Definition: Card.cs:914
SourceCategory.Row GetFavCat()
Definition: Chara.cs:7952
bool knowFav
Definition: Chara.cs:413
override string GetName(NameStyle style, int num=-1)
Definition: Chara.cs:1357
override int DV
Definition: Chara.cs:729
List< Hobby > ListHobbies(bool useMemberType=true)
Definition: Chara.cs:8867
override int PV
Definition: Chara.cs:758
SourceThing.Row GetFavFood()
Definition: Chara.cs:7932
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:8840
Color colorDebuff
bool showExtra
Definition: CoreDebug.cs:168
Definition: Hobby.cs:5
SourceTactics tactics

References Color, ColorProfile.colorBuff, ColorProfile.colorDebuff, EClass.Colors, EClass.debug, BaseStats.GetPhaseStr(), BaseStats.GetValue(), held, BaseStats.id, SourceJob.Row.id, Card.isScaled, 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 8034 of file Chara.cs.

8035 {
8036 if (id == "olderyoungersister")
8037 {
8038 if (base.idSkin != 2)
8039 {
8040 return "UN_olderyoungersister";
8041 }
8042 return "UN_olderyoungersister_alt";
8043 }
8044 if (Portrait.allIds.Contains("UN_" + id + ".png"))
8045 {
8046 return "UN_" + id;
8047 }
8048 return base.c_idPortrait;
8049 }
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 8020 of file Chara.cs.

8021 {
8022 string text = race.id;
8023 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
8024 {
8025 return "foxfolk";
8026 }
8027 if (trait is TraitGuard)
8028 {
8029 return "guard";
8030 }
8031 return "";
8032 }

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 6949 of file Chara.cs.

6950 {
6951 return GetSprite();
6952 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6615

◆ GetName()

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

Reimplemented from Card.

Definition at line 1357 of file Chara.cs.

1358 {
1359 if (base.isBackerContent && EClass.core.config.backer.Show(base.c_idBacker))
1360 {
1361 if (id == "follower" && !IsGlobal)
1362 {
1363 return "_follower".lang(EClass.sources.backers.map[base.c_idBacker].Name, faith.Name);
1364 }
1365 return EClass.sources.backers.map[base.c_idBacker].Name;
1366 }
1367 string text = base.c_altName ?? source.GetName(this);
1368 text = text.Replace("#ele5", MainElement.source.GetAltname(3)).Replace("#ele4", MainElement.source.GetAltname(2)).Replace("#ele3", MainElement.source.GetAltname(1))
1369 .Replace("#ele2", MainElement.source.GetAltname(0))
1370 .Replace("#ele", MainElement.source.GetName().ToLower());
1371 if (base.c_bossType == BossType.Evolved)
1372 {
1373 text = "_evolved".lang(text.ToTitleCase(wholeText: true));
1374 }
1375 trait.SetName(ref text);
1376 if (text.Length > 0 && char.IsLower(text[0]))
1377 {
1378 if (base.rarity >= Rarity.Legendary)
1379 {
1380 text = text.ToTitleCase();
1381 }
1382 else if (num != 0)
1383 {
1384 text = text.AddArticle();
1385 }
1386 }
1387 if (style == NameStyle.Simple)
1388 {
1389 return text;
1390 }
1391 int num2 = ((base.rarity == Rarity.Mythical) ? 3 : ((base.rarity >= Rarity.Legendary) ? 2 : ((!_alias.IsEmpty()) ? 1 : (-1))));
1392 if (trait is TraitAdventurer)
1393 {
1394 num2 = 1;
1395 }
1396 text = (Aka.IsEmpty() ? text.Bracket(num2) : (num2 switch
1397 {
1398 -1 => "_aka",
1399 1 => "_aka3",
1400 _ => "_aka2",
1401 }).lang((num2 == -1) ? Aka : Aka.ToTitleCase(wholeText: true), text.Bracket(num2)));
1402 string text2 = (base.isSale ? "forSale".lang(Lang._currency(GetPrice(CurrencyType.Money, sell: true, PriceType.PlayerShop), "money")) : "");
1403 return text + text2;
1404 }
BossType
Definition: BossType.cs:2
string Aka
Definition: Chara.cs:216
string _alias
Definition: Chara.cs:219
BackerContentConfig backer
Definition: CoreConfig.cs:613
string Name
Definition: Religion.cs:30
SourceBacker backers
virtual void SetName(ref string s)
Definition: Trait.cs:700

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().

◆ GetNearbyCatToSniff()

Chara Chara.GetNearbyCatToSniff ( )
inline

Definition at line 7972 of file Chara.cs.

7973 {
7974 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
7975 {
7976 if (enumerator.MoveNext())
7977 {
7978 return enumerator.Current;
7979 }
7980 }
7981 return null;
7982 }
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1220

References race.

Referenced by ActEffect.Proc(), AI_Idle.Run(), and GoalCombat.TryUseAbility().

◆ GetPietyValue()

int Chara.GetPietyValue ( )
inline

Definition at line 10077 of file Chara.cs.

10078 {
10079 if (base._IsPC)
10080 {
10081 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
10082 }
10083 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
10084 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 5063 of file Chara.cs.

5064 {
5065 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
5066 if (!IsPCFaction)
5067 {
5068 return;
5069 }
5071 {
5072 if (homeZone != null && EClass._zone != homeZone)
5073 {
5074 Msg.Say("returnHome", this, homeZone.Name);
5076 }
5077 }
5078 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
5079 {
5080 EClass.pc.party.AddMemeber(this, showMsg: true);
5081 }
5082 }
static FactionBranch Branch
Definition: EClass.cs:22
void AddMemeber(Chara c, bool showMsg=false)
Definition: Party.cs:57
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:619
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 8818 of file Chara.cs.

8819 {
8820 BaseArea result = null;
8821 foreach (Hobby item in ListWorks())
8822 {
8823 AIWork aI = item.GetAI(this);
8824 if (aI.SetDestination())
8825 {
8826 if (aI.destArea != null)
8827 {
8828 result = aI.destArea;
8829 }
8830 else if (aI.destThing != null)
8831 {
8832 result = aI.destThing.pos.cell.room;
8833 }
8834 break;
8835 }
8836 }
8837 return result;
8838 }
Definition: AIWork.cs:6
Thing destThing
Definition: AIWork.cs:17
bool SetDestination()
Definition: AIWork.cs:56
BaseArea destArea
Definition: AIWork.cs:13

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 6615 of file Chara.cs.

6616 {
6617 if (IsPCC)
6618 {
6619 PCC pCC = PCC.Get(pccData);
6620 pCC.Build();
6621 return pCC.variation.idle[0, 0];
6622 }
6623 if (spriteReplacer != null)
6624 {
6625 return spriteReplacer.data.GetSprite();
6626 }
6627 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);
6628 }
SpriteReplacer spriteReplacer
Definition: Chara.cs:154
override CardRow sourceCard
Definition: Chara.cs:450
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:67
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 6639 of file Chara.cs.

6640 {
6641 if (IsPCC)
6642 {
6644 {
6646 }
6647 }
6648 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && (GetBool(123) || affinity.CanSleepBeside()))
6649 {
6650 return EClass.setting.pass.subDead;
6651 }
6652 return SubPassData.Default;
6653 }
bool GetBool(int id)
Definition: BaseCard.cs:15
ConSleep conSleep
Definition: Chara.cs:102
override bool IsDeadOrSleeping
Definition: Chara.cs:573
PassSetting pass
Definition: GameSetting.cs:303
bool altHeldPos
Definition: Player.cs:1153
static SubPassData Default
Definition: SubPassData.cs:7

References Player.altHeldPos, Affinity.CanSleepBeside(), 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 7176 of file Chara.cs.

7177 {
7178 return GetHappiness().ToString() ?? "";
7179 }
int GetHappiness()
Definition: Chara.cs:7166

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 8956 of file Chara.cs.

8957 {
8958 string text = (simple ? "" : ("hobby".lang() + ":"));
8959 foreach (Hobby item in ListHobbies())
8960 {
8961 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8962 }
8963 return text.TrimEnd(',');
8964 }

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 8966 of file Chara.cs.

8967 {
8968 string text = (simple ? "" : ("work".lang() + ":"));
8969 foreach (Hobby item in ListWorks())
8970 {
8971 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8972 }
8973 return text.TrimEnd(',');
8974 }

References item.

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

◆ GetTopicText()

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

Definition at line 6855 of file Chara.cs.

6856 {
6857 string key = source.idText.IsEmpty(id);
6858 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
6859 {
6860 key = "littleOne2";
6861 }
6862 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
6863 if (row == null)
6864 {
6865 return null;
6866 }
6867 string text = row.GetText(topic, returnNull: true);
6868 if (text.IsEmpty())
6869 {
6870 return null;
6871 }
6872 if (text.StartsWith("@"))
6873 {
6874 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
6875 if (row == null)
6876 {
6877 return null;
6878 }
6879 text = row.GetText(topic, returnNull: true);
6880 if (text.IsEmpty())
6881 {
6882 return null;
6883 }
6884 }
6885 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
6886 }
SourceCharaText charaText

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 7994 of file Chara.cs.

7995 {
7996 int num = 0;
7997 if (base.c_upgrades != null)
7998 {
7999 num += base.c_upgrades.spent;
8000 }
8001 if (base.c_genes != null)
8002 {
8003 num += base.c_genes.GetTotalCost();
8004 }
8005 return num + base.feat;
8006 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 8887 of file Chara.cs.

8888 {
8889 foreach (Hobby item in ListWorks())
8890 {
8891 if (item.source.alias == id)
8892 {
8893 return item;
8894 }
8895 }
8896 foreach (Hobby item2 in ListHobbies())
8897 {
8898 if (item2.source.alias == id)
8899 {
8900 return item2;
8901 }
8902 }
8903 return null;
8904 }
SourceHobby.Row source
Definition: Hobby.cs:8

References item, and Hobby.source.

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

◆ GetWorkSummary()

WorkSummary Chara.GetWorkSummary ( )
inline

Definition at line 9039 of file Chara.cs.

9040 {
9041 if (_workSummary == null)
9042 {
9043 _workSummary = new WorkSummary();
9044 }
9045 return _workSummary;
9046 }
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 8133 of file Chara.cs.

8134 {
8135 if (c.IsHostile() || c.IsDeadOrSleeping)
8136 {
8137 Msg.Say("affinityNone", c, this);
8138 return;
8139 }
8140 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
8141 {
8142 bool num = t.blessedState == BlessedState.Doomed;
8143 int num2 = 200 + t.LV * 3;
8144 if (t.rarity == Rarity.Legendary)
8145 {
8146 num2 *= 3;
8147 }
8148 if (t.rarity >= Rarity.Mythical)
8149 {
8150 num2 *= 5;
8151 }
8152 if (num)
8153 {
8154 num2 *= 2;
8155 }
8156 EClass.pc.PlayEffect("identify");
8157 EClass.pc.PlaySound("identify");
8158 c.PlayEffect("mutation");
8159 c.Say("draw_curse", c, t);
8160 t.Destroy();
8161 List<Element> list = new List<Element>();
8162 foreach (Element value in EClass.pc.elements.dict.Values)
8163 {
8164 if (value is Spell)
8165 {
8166 list.Add(value);
8167 }
8168 }
8169 if (list.Count == 0)
8170 {
8172 return;
8173 }
8174 Element element = list.RandomItem();
8175 EClass.pc.ModExp(element.id, num2);
8176 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
8177 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
8178 return;
8179 }
8180 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
8181 {
8182 GiveLovePotion(c, t);
8183 return;
8184 }
8185 if (t.trait is TraitErohon && c.id == t.c_idRefName)
8186 {
8187 c.OnGiveErohon(t);
8188 return;
8189 }
8190 if (t.trait is TraitTicketMassage)
8191 {
8192 t.ModNum(-1);
8193 c.Talk("ticket");
8194 switch (t.id)
8195 {
8196 case "ticket_massage":
8197 c.ModAffinity(EClass.pc, 10);
8199 {
8200 target = c
8201 });
8202 break;
8203 case "ticket_armpillow":
8204 c.ModAffinity(EClass.pc, 20);
8205 EClass.pc.AddCondition<ConSleep>(300, force: true);
8206 c.SetAI(new AI_ArmPillow
8207 {
8208 target = EClass.pc
8209 });
8210 break;
8211 case "ticket_champagne":
8212 c.ModAffinity(EClass.pc, 10);
8214 break;
8215 }
8216 return;
8217 }
8218 if (t.id == "flyer")
8219 {
8220 stamina.Mod(-1);
8221 if (c.things.Find((Thing a) => a.id == "flyer") != null)
8222 {
8223 c.Talk("flyer_miss");
8224 DoHostileAction(c);
8225 return;
8226 }
8227 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
8228 {
8229 Msg.Say("affinityNone", c, this);
8230 t.Destroy();
8231 elements.ModExp(291, 10f);
8232 return;
8233 }
8234 elements.ModExp(291, 50f);
8235 }
8236 if (t.id == "statue_weird")
8237 {
8238 EClass.pc.Say("statue_sell");
8239 }
8240 t.isGifted = true;
8241 c.nextUse = c.affinity.OnGift(t);
8242 if (!t.isDestroyed)
8243 {
8244 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
8245 {
8246 q.OnGiveItem(c, t);
8247 });
8248 if (c.TryEquip(t))
8249 {
8250 c.nextUse = null;
8251 }
8252 }
8253 }
Thing OnGift(Thing t)
Definition: Affinity.cs:129
int ExpToNext
Definition: Card.cs:2008
bool isCopy
Definition: Card.cs:878
bool IsCursed
Definition: Card.cs:2255
int CHA
Definition: Card.cs:2347
bool IsEquipmentOrRanged
Definition: Card.cs:2218
void SayNothingHappans()
Definition: Card.cs:6776
string c_idRefName
Definition: Card.cs:1641
void AddExp(int a)
Definition: Card.cs:2947
void GiveLovePotion(Chara c, Thing t)
Definition: Chara.cs:8266
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7623
void OnGiveErohon(Thing t)
Definition: Chara.cs:8255
QuestManager quests
Definition: Game.cs:182
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
virtual void OnGiveItem(Chara c, Thing t)
Definition: Quest.cs:536

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 8266 of file Chara.cs.

8267 {
8268 c.Say("give_love", c, t);
8269 c.PlaySound(t.material.GetSoundDead());
8270 c.ShowEmo(Emo.angry);
8271 c.ModAffinity(EClass.pc, -20, show: false);
8272 c.Talk("pervert");
8273 t.Destroy();
8274 }

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 6252 of file Chara.cs.

6253 {
6254 if (enemy == null && !IsPC)
6255 {
6256 if (GetInt(106) == 0)
6257 {
6258 TalkTopic("aggro");
6259 }
6260 if (OriginalHostility != Hostility.Enemy)
6261 {
6262 ShowEmo(Emo.angry);
6263 }
6264 SetEnemy(_tg.Chara);
6265 }
6267 {
6268 if (hostility >= Hostility.Neutral)
6269 {
6270 Say("angry", this);
6271 }
6272 hostility = Hostility.Enemy;
6273 }
6274 }
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual bool IsPCFactionMinion
Definition: Card.cs:2155

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

Referenced by CallHelp(), and DoHostileAction().

◆ HasAccess() [1/2]

bool Chara.HasAccess ( Card  c)
inline

Definition at line 1280 of file Chara.cs.

1281 {
1282 return HasAccess(c.pos);
1283 }
bool HasAccess(Card c)
Definition: Chara.cs:1280

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 1285 of file Chara.cs.

1286 {
1287 if (!EClass._zone.IsPCFaction || p.cell.room == null || IsPC)
1288 {
1289 return true;
1290 }
1291 return p.cell.room.data.accessType switch
1292 {
1293 BaseArea.AccessType.Resident => memberType == FactionMemberType.Default,
1294 BaseArea.AccessType.Private => false,
1295 _ => true,
1296 };
1297 }

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 9291 of file Chara.cs.

9292 {
9293 for (int i = 0; i < conditions.Count; i++)
9294 {
9295 if (conditions[i] is T)
9296 {
9297 return true;
9298 }
9299 }
9300 return false;
9301 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8608 of file Chara.cs.

8609 {
8610 return GetCooldown(idEle) != 0;
8611 }
int GetCooldown(int idEle)
Definition: Chara.cs:8613

Referenced by StatsMana.Mod(), RequestProtection(), and NotificationCooldown.ShouldRemove().

◆ HasHigherGround()

bool Chara.HasHigherGround ( Card  c)
inline

Definition at line 1190 of file Chara.cs.

1191 {
1192 if (c == null)
1193 {
1194 return false;
1195 }
1196 float num = renderer.position.y - pos.Position(0).y + (_isLevitating ? 0.4f : 0f);
1197 float num2 = c.renderer.position.y - c.pos.Position(0).y + ((c.isChara && c.Chara._isLevitating) ? 0.4f : 0f);
1198 return num > num2 + 0.1f;
1199 }
bool _isLevitating
Definition: Chara.cs:134
ref Vector3 Position(int height)
Definition: Point.cs:548

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

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

◆ HasHobbyOrWork()

bool Chara.HasHobbyOrWork ( string  alias)
inline

Definition at line 8737 of file Chara.cs.

8738 {
8739 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
8740 listHobby.Clear();
8741 if (_works == null || _hobbies == null)
8742 {
8743 RerollHobby();
8744 }
8745 foreach (int work in _works)
8746 {
8747 if (work == num)
8748 {
8749 return true;
8750 }
8751 }
8752 foreach (int hobby in _hobbies)
8753 {
8754 if (hobby == num)
8755 {
8756 return true;
8757 }
8758 }
8759 return false;
8760 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:9000
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2342 of file Chara.cs.

2343 {
2344 foreach (Chara chara in EClass._map.charas)
2345 {
2346 if (chara.c_uidMaster == base.uid)
2347 {
2348 return true;
2349 }
2350 }
2351 return false;
2352 }

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

Referenced by ActEffect.ProcAt().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1716 of file Chara.cs.

1717 {
1718 Cure(CureType.HealComplete);
1719 base.hp = MaxHP;
1720 mana.value = mana.max;
1721 stamina.value = stamina.max;
1722 Refresh();
1723 }
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 4427 of file Chara.cs.

4428 {
4429 if (held == t || t.isDestroyed || t.Num <= 0)
4430 {
4431 return;
4432 }
4433 if (IsPC && t.isNPCProperty)
4434 {
4435 t.isNPCProperty = false;
4437 pos.TryWitnessCrime(this);
4438 }
4439 PickHeld();
4440 if (t.isChara)
4441 {
4443 {
4444 t.ShowEmo(Emo.love);
4445 }
4446 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4447 }
4448 else
4449 {
4450 if (num == -1 || num > t.Num)
4451 {
4452 num = t.Num;
4453 }
4454 if (num < t.Num)
4455 {
4456 t = t.Split(num);
4457 }
4458 }
4459 if (t.GetRootCard() != this)
4460 {
4461 t = Pick(t.Thing, msg: false, tryStack: false);
4462 if (t.GetRootCard() != this)
4463 {
4464 return;
4465 }
4466 }
4467 held = t;
4468 if (held.GetLightRadius() > 0)
4469 {
4471 }
4472 if (IsPC)
4473 {
4475 WidgetHotbar.dirtyCurrentItem = true;
4476 }
4477 }
Thing Split(int a)
Definition: Card.cs:3481
bool isNPCProperty
Definition: Card.cs:554
void RecalculateFOV()
Definition: Card.cs:6341
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2127
int GetLightRadius()
Definition: Card.cs:6388
void PickHeld(bool msg=false)
Definition: Chara.cs:4479
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:873

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 9123 of file Chara.cs.

9124 {
9125 if (!onDeserialize)
9126 {
9127 _cints[10] = 20;
9128 _cints[11] = 70;
9129 _cints[13] = 70;
9130 _cints[14] = 70;
9131 _cints[15] = 70;
9132 _cints[17] = 0;
9133 _cints[18] = 0;
9134 }
9135 foreach (Condition condition in conditions)
9136 {
9137 condition.SetOwner(this, onDeserialize);
9138 }
9139 }
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 7469 of file Chara.cs.

7470 {
7471 if (t == null)
7472 {
7473 t = FindBestFoodToEat();
7474 }
7475 if (t == null)
7476 {
7477 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7478 }
7479 if (t == null)
7480 {
7481 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7482 }
7483 if (t != null)
7484 {
7485 Say("eat_start", this, t.Duplicate(1));
7486 if (sound)
7487 {
7488 PlaySound("eat");
7489 }
7490 FoodEffect.Proc(this, t);
7491 }
7492 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7448
static void Proc(Chara c, Thing food, bool consume=true)
Definition: FoodEffect.cs:11

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

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

◆ IsBranchMember()

bool Chara.IsBranchMember ( )
inline

Definition at line 6506 of file Chara.cs.

6507 {
6508 if (faction == EClass.Home)
6509 {
6510 return homeZone == EClass.game.activeZone;
6511 }
6512 return false;
6513 }
Faction faction
Definition: Chara.cs:427
Zone activeZone
Definition: Game.cs:251

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

◆ IsCriticallyWounded()

bool Chara.IsCriticallyWounded ( bool  includeRide = false)
inline

Definition at line 1177 of file Chara.cs.

1178 {
1179 if (host == null || includeRide)
1180 {
1181 if (Evalue(1421) <= 0)
1182 {
1183 return base.hp < MaxHP / 5;
1184 }
1185 return base.hp + mana.value < (MaxHP + mana.max) / 5;
1186 }
1187 return false;
1188 }

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 2486 of file Chara.cs.

2487 {
2488 if (!currentZone.IsRegion && p.IsValid)
2489 {
2490 CellDetail detail = p.detail;
2491 if (detail != null && detail.charas.Count > 0)
2492 {
2493 foreach (Chara chara in p.detail.charas)
2494 {
2495 if (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed)
2496 {
2497 if (cancelAI && EClass.pc.ai is GoalManualMove)
2498 {
2499 EClass.pc.ai.Cancel();
2500 }
2501 return true;
2502 }
2503 }
2504 }
2505 }
2506 return false;
2507 }
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 2386 of file Chara.cs.

2387 {
2388 if (!IsPCPartyMinion)
2389 {
2390 return false;
2391 }
2392 foreach (Quest item in EClass.game.quests.list)
2393 {
2394 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2395 {
2396 return true;
2397 }
2398 }
2399 return false;
2400 }
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 6550 of file Chara.cs.

6551 {
6552 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6553 {
6555 {
6556 return true;
6557 }
6558 }
6559 else if (IsHostile() && c.IsHostile())
6560 {
6561 return true;
6562 }
6563 return false;
6564 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6458 of file Chara.cs.

6459 {
6460 if (c == null)
6461 {
6462 return false;
6463 }
6464 if (base.IsPCFactionOrMinion)
6465 {
6466 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6467 {
6468 return true;
6469 }
6470 }
6471 else
6472 {
6474 {
6475 return true;
6476 }
6477 if (OriginalHostility >= Hostility.Friend)
6478 {
6479 if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
6480 {
6481 return true;
6482 }
6483 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6484 {
6485 return true;
6486 }
6487 }
6488 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6489 {
6490 return true;
6491 }
6492 }
6493 return false;
6494 }
bool IsCriminal
Definition: Player.cs:1337

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 6520 of file Chara.cs.

6521 {
6522 return EClass.game.activeZone == currentZone;
6523 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6525 of file Chara.cs.

6525 : TraitSpot
6526 {
6527 foreach (T item in EClass._map.props.installed.traits.List<T>())
6528 {
6529 foreach (Point item2 in item.ListPoints())
6530 {
6531 if (pos.Equals(item2))
6532 {
6533 return true;
6534 }
6535 }
6536 }
6537 return false;
6538 }
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 6496 of file Chara.cs.

6497 {
6498 return hostility == Hostility.Neutral;
6499 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 8077 of file Chara.cs.

8078 {
8079 int num2 = ((!HasElement(1411)) ? 1 : 3);
8080 if (GetBurden(t, num) >= num2)
8081 {
8082 return false;
8083 }
8084 return true;
8085 }
int GetBurden(Card t=null, int num=-1)
Definition: Chara.cs:1800

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

◆ Kick() [1/2]

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

Definition at line 5720 of file Chara.cs.

5721 {
5723 {
5724 return;
5725 }
5726 if (t.IsPC)
5727 {
5729 }
5730 if (t.host != null)
5731 {
5732 return;
5733 }
5734 if (t == this)
5735 {
5736 if (!ignoreSelf)
5737 {
5738 Debug.Log(t.pos.GetNearestPoint());
5739 if (TryMove(t.pos.GetNearestPoint()) != MoveResult.Success)
5740 {
5742 }
5743 }
5744 return;
5745 }
5746 if (show)
5747 {
5748 Say("kick", this, t);
5749 }
5750 PlaySound("kick");
5751 if ((t.conSuspend == null || t.conSuspend.uidMachine != 0) && t.trait.CanBePushed && (!t.IsHostile() || EClass.rnd(2) == 0) && !t.noMove && !t.isRestrained)
5752 {
5753 t.MoveByForce(t.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), this, checkWall && !t.pos.IsBlocked);
5754 }
5755 if (t.conSleep != null)
5756 {
5757 t.conSleep.Kill();
5758 }
5759 if (IsPC && t.IsFriendOrAbove() && !t.IsPCFactionOrMinion && karmaLoss)
5760 {
5762 }
5763 t.PlayEffect("kick");
5764 }
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:5810
ConSuspend conSuspend
Definition: Chara.cs:104
MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2710
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,
bool  checkWall = true 
)
inline

Definition at line 5712 of file Chara.cs.

5713 {
5714 foreach (Chara item in p.ListCharas())
5715 {
5716 Kick(item, ignoreSelf, karmaLoss: true, show: true, checkWall);
5717 }
5718 }
List< Chara > ListCharas()
Definition: Point.cs:1171

References item, and Kick.

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

◆ ListAvailabeFeats()

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

Definition at line 9756 of file Chara.cs.

9757 {
9758 List<Element> list = new List<Element>();
9759 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
9760 {
9762 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
9763 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
9764 {
9765 list.Add(Element.Create(feat.id, num) as Feat);
9766 }
9767 }
9768 return list;
9769 }
int feat
Definition: Card.cs:374
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1105
Definition: FEAT.cs:295

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 8867 of file Chara.cs.

8868 {
8869 listHobby.Clear();
8870 if (!useMemberType || memberType != FactionMemberType.Livestock)
8871 {
8872 if (_hobbies == null)
8873 {
8874 RerollHobby();
8875 }
8876 foreach (int hobby in _hobbies)
8877 {
8878 listHobby.Add(new Hobby
8879 {
8880 id = hobby
8881 });
8882 }
8883 }
8884 return listHobby;
8885 }

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 8840 of file Chara.cs.

8841 {
8842 listHobby.Clear();
8843 if (useMemberType && memberType == FactionMemberType.Livestock)
8844 {
8845 listHobby.Add(new Hobby
8846 {
8847 id = 45
8848 });
8849 }
8850 else
8851 {
8852 if (_works == null)
8853 {
8854 RerollHobby();
8855 }
8856 foreach (int work in _works)
8857 {
8858 listHobby.Add(new Hobby
8859 {
8860 id = work
8861 });
8862 }
8863 }
8864 return listHobby;
8865 }

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 3524 of file Chara.cs.

3525 {
3526 angle = Util.GetAngle(p.x - pos.x, p.z - pos.z);
3527 if (EClass._zone.IsRegion)
3528 {
3529 if (angle > 100f && angle < 170f)
3530 {
3531 base.dir = 2;
3532 }
3533 else if (angle > 170f && angle < 190f)
3534 {
3535 base.dir = 0;
3536 }
3537 else if (angle > 190f || (angle < -10f && angle > -100f))
3538 {
3539 base.dir = 3;
3540 }
3541 else
3542 {
3543 base.dir = 1;
3544 }
3545 angle -= 45f;
3546 }
3547 else if (angle > 170f && angle < 235f)
3548 {
3549 base.dir = 0;
3550 }
3551 else if (angle > 80f && angle < 145f)
3552 {
3553 base.dir = 1;
3554 }
3555 else if (angle > -100f && angle < -35f)
3556 {
3557 base.dir = 3;
3558 }
3559 else if (angle > -10f && angle < 55f)
3560 {
3561 base.dir = 2;
3562 }
3564 }

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2268 of file Chara.cs.

2269 {
2270 if (IsLocalChara && !base.IsUnique)
2271 {
2272 Debug.Log("Creating Replacement NPC for:" + this);
2274 }
2275 _MakeAlly();
2276 if (msg)
2277 {
2278 EClass.pc.Say("hire", this);
2279 EClass.Sound.Play("good");
2280 }
2281 EClass.pc.party.AddMemeber(this);
2282 if (EClass._zone.IsTown)
2283 {
2285 }
2286 }
Chara CreateReplacement()
Definition: Chara.cs:7911
void _MakeAlly()
Definition: Chara.cs:2288
virtual bool IsTown
Definition: Zone.cs:220
void RefreshListCitizen()
Definition: Zone.cs:3536

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(), DramaOutcome.nasu_join(), TraitDiary.OnRead(), TraitGiftNewYear.OnUse(), DramaOutcome.poppy_found(), ActEffect.Proc(), ActRide.Ride(), DramaOutcome.sister_friend(), ActThrow.Throw(), and Religion.TryGetGift().

◆ MakeBraineCell()

Thing Chara.MakeBraineCell ( )
inline

Definition at line 8056 of file Chara.cs.

8057 {
8058 return DNA.GenerateGene(this, DNA.Type.Brain);
8059 }
Definition: DNA.cs:8
Type
Definition: DNA.cs:10
static Thing GenerateGene(Chara c, Type? type=null)
Definition: DNA.cs:116

References DNA.GenerateGene().

◆ MakeGene()

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

Definition at line 8051 of file Chara.cs.

8052 {
8053 return DNA.GenerateGene((HasElement(1290) && Evalue(418) >= 0) ? EClass.sources.charas.map["caladrius"].model.Chara : this, type);
8054 }
SourceChara charas

References SourceManager.charas, DNA.GenerateGene(), and EClass.sources.

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

◆ MakeGrave()

void Chara.MakeGrave ( string  lastword)
inline

Definition at line 5170 of file Chara.cs.

5171 {
5172 if (!EClass._zone.IsRegion)
5173 {
5174 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
5175 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
5176 {
5177 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
5178 }
5179 Thing thing = ThingGen.Create(list.RandomItem());
5180 thing.MakeRefFrom(this);
5181 if (!lastword.IsEmpty())
5182 {
5183 thing.c_note = lastword;
5184 }
5185 thing.isModified = true;
5186 EClass._zone.AddCard(thing, pos).Install();
5187 }
5188 }
Card MakeRefFrom(string id)
Definition: Card.cs:5702

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 2331 of file Chara.cs.

2332 {
2333 ReleaseMinion();
2334 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2335 this.hostility = hostility2;
2336 base.c_uidMaster = _master.uid;
2337 base.c_minionType = type;
2338 master = _master;
2339 Refresh();
2340 }
int uid
Definition: Card.cs:122

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 2262 of file Chara.cs.

2263 {
2264 _MakeAlly();
2265 EClass.pc.party.AddMemeber(this);
2266 }

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 7833 of file Chara.cs.

7834 {
7835 if (c == this)
7836 {
7837 return;
7838 }
7839 if (IsPC)
7840 {
7841 c.ModAffinity(EClass.pc, a, show);
7842 }
7843 else
7844 {
7846 {
7847 return;
7848 }
7849 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
7850 if (IsPCFaction && homeBranch != null)
7851 {
7852 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
7853 }
7854 bool flag = a > 0;
7855 if (flag)
7856 {
7857 a = a * num / 100;
7858 if (affinity.GetLunchChance() > EClass.rnd(100) && GetInt(71) >= 0 && GetInt(71) < EClass.world.date.GetRaw())
7859 {
7860 SetInt(71, -1);
7861 }
7862 }
7863 if (show)
7864 {
7865 if (a == 0)
7866 {
7867 if (!showOnlyEmo)
7868 {
7869 Say("affinityNone", this, c);
7870 }
7871 }
7872 else
7873 {
7874 ShowEmo((!flag) ? Emo.angry : Emo.love);
7875 c.ShowEmo(flag ? Emo.love : Emo.sad);
7876 if (!showOnlyEmo)
7877 {
7878 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
7879 }
7880 }
7881 }
7882 if (c.IsPC)
7883 {
7884 a = affinity.Mod(a);
7885 }
7886 }
7887 }
int Mod(int a)
Definition: Affinity.cs:192
int GetLunchChance()
Definition: Affinity.cs:86
Stats hygiene
Definition: Chara.cs:1152
int GetRaw(int offsetHours=0)
Definition: Date.cs:326
int Evalue(int ele)
static int GetAffinityMod(int phase)
Definition: StatsHygiene.cs:19
virtual bool CanChangeAffinity
Definition: Trait.cs:558

References World.date, FactionBranch.Evalue(), StatsHygiene.GetAffinityMod(), Affinity.GetLunchChance(), Stats.GetPhase(), Date.GetRaw(), HasCondition(), hygiene, IsPC, Affinity.Mod(), ModAffinity(), EClass.pc, EClass.rnd(), Card.ShowEmo(), and EClass.world.

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

◆ ModCorruption()

void Chara.ModCorruption ( int  a)
inline

Definition at line 9713 of file Chara.cs.

9714 {
9715 if (a > 0)
9716 {
9717 if (Evalue(962) >= 25 || (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0))
9718 {
9719 return;
9720 }
9721 int num = Evalue(412);
9722 if (num != 0)
9723 {
9724 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
9725 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
9726 }
9727 }
9728 if (a == 0)
9729 {
9730 return;
9731 }
9732 int num3 = (corruption + a) / 100 - corruption / 100;
9733 for (int i = 0; i < Mathf.Abs(num3); i++)
9734 {
9735 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
9736 {
9737 break;
9738 }
9739 }
9740 corruption += a;
9741 int num4 = 0;
9742 foreach (Element value in elements.dict.Values)
9743 {
9744 if (value.source.category == "ether")
9745 {
9746 num4 += value.Value;
9747 }
9748 }
9749 if (num4 > 0 && IsPC)
9750 {
9751 Tutorial.Reserve("ether");
9752 }
9753 corruption = num4 * 100 + corruption % 100;
9754 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9876
static float rndf(float a)
Definition: EClass.cs:92

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

Referenced by Card.ApplyElementEffect(), and CoreDebug.Fix_EtherDisease().

◆ ModHeight()

void Chara.ModHeight ( int  a)
inline

Definition at line 9662 of file Chara.cs.

9663 {
9664 if (!HasElement(450))
9665 {
9666 long num = bio.height;
9667 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9668 if (num < 1)
9669 {
9670 num = 1L;
9671 }
9672 if (num > 999999999)
9673 {
9674 num = 999999999L;
9675 }
9676 if (num != bio.height)
9677 {
9678 bio.height = (int)num;
9679 Say((a > 0) ? "height_gain" : "height_lose", this);
9680 }
9681 }
9682 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 10129 of file Chara.cs.

10130 {
10131 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
10132 {
10133 return;
10134 }
10135 bool flag = HasElement(1215);
10136 if (tempElements == null)
10137 {
10139 tempElements.SetParent(this);
10140 }
10141 if (a > 0 && flag)
10142 {
10143 a = a * 150 / 100;
10144 }
10145 int num = elements.ValueWithoutLink(ele);
10146 int num2 = Mathf.Abs(num) + 100;
10147 int num3 = num2 / (flag ? 2 : 4);
10148 int num4 = -num - 100;
10149 int num5 = tempElements.Base(ele);
10150 int num6 = num5 + a;
10151 if (onlyRenew)
10152 {
10153 num3 = Mathf.Min(a, num3);
10154 num4 = Mathf.Max(a, -num2 / 3);
10155 }
10156 if (a > 0 && num6 > num3)
10157 {
10158 a = ((num3 > num5) ? (num3 - num5) : 0);
10159 }
10160 if (a < 0 && num6 < num4)
10161 {
10162 a = ((num4 < num5) ? (num4 - num5) : 0);
10163 }
10164 Element element = tempElements.ModBase(ele, a);
10165 if (element.vBase == 0)
10166 {
10167 tempElements.Remove(element.id);
10168 if (tempElements.dict.Count == 0)
10169 {
10170 tempElements = null;
10171 }
10172 }
10173 }
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 9684 of file Chara.cs.

9685 {
9686 if (HasElement(450) || a == 0)
9687 {
9688 return;
9689 }
9690 long num = bio.weight;
9691 long num2 = bio.height;
9692 long num3 = num2 * num2 * 18 / 25000;
9693 long num4 = num2 * num2 * 24 / 10000;
9694 if (ignoreLimit || (num > num3 && num < num4))
9695 {
9696 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9697 if (num < 1)
9698 {
9699 num = 1L;
9700 }
9701 if (num > 999999999)
9702 {
9703 num = 999999999L;
9704 }
9705 if (num != bio.weight)
9706 {
9707 bio.weight = (int)num;
9708 Say((a > 0) ? "weight_gain" : "weight_lose", this);
9709 }
9710 }
9711 }
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 2600 of file Chara.cs.

2601 {
2602 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2603 {
2604 ai.Current.TryCancel(c);
2605 }
2606 }
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:2734

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 3435 of file Chara.cs.

3436 {
3437 MoveHome(EClass.game.world.FindZone(id), x, z);
3438 }
void MoveHome(string id, int x=-1, int z=-1)
Definition: Chara.cs:3435
new World world
Definition: Game.cs:176

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 3440 of file Chara.cs.

3441 {
3442 if (isDead)
3443 {
3444 Revive();
3445 }
3446 else
3447 {
3448 Cure(CureType.Death);
3449 }
3450 CureCondition<ConSuspend>();
3451 if (IsPCParty)
3452 {
3454 }
3455 FactionBranch factionBranch = homeBranch;
3456 if (x == -1)
3457 {
3458 x = 50;
3459 }
3460 if (z == -1)
3461 {
3462 z = 50;
3463 }
3464 Point point = new Point(x, z);
3465 if (zone.IsActiveZone)
3466 {
3467 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3468 }
3469 zone.AddCard(this, point);
3470 SetHomeZone(zone);
3471 global.transition = new ZoneTransition
3472 {
3473 state = ZoneTransition.EnterState.Dead,
3474 x = point.x,
3475 z = point.z
3476 };
3477 orgPos = new Point(x, z);
3478 if (factionBranch != null)
3479 {
3481 factionBranch.policies.Validate();
3482 }
3483 }
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8906
Chara SetHomeZone(Zone zone)
Definition: Chara.cs:1427
PolicyManager policies
bool IsActiveZone
Definition: Zone.cs:492

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 2582 of file Chara.cs.

2583 {
2584 List<Point> list = new List<Point>();
2585 pos.ForeachNeighbor(delegate(Point p)
2586 {
2587 list.Add(p.Copy());
2588 });
2589 list.Shuffle();
2590 foreach (Point item in list)
2591 {
2592 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2593 {
2594 return true;
2595 }
2596 }
2597 return false;
2598 }
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1397

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

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2568 of file Chara.cs.

2569 {
2570 Point randomNeighbor = pos.GetRandomNeighbor();
2571 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2572 {
2573 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2574 {
2575 return false;
2576 }
2577 return TryMove(randomNeighbor) == MoveResult.Success;
2578 }
2579 return false;
2580 }
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool IsDeepWater
Definition: Point.cs:276

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 3323 of file Chara.cs.

3324 {
3325 if (z == currentZone)
3326 {
3327 return;
3328 }
3329 if (HasCondition<ConInvulnerable>())
3330 {
3331 RemoveCondition<ConInvulnerable>();
3332 }
3333 if (IsPC)
3334 {
3335 EClass.player.nextZone = z;
3337 {
3340 {
3341 if (EClass.player.returnInfo != null)
3342 {
3343 EClass.player.returnInfo.turns += 5;
3344 }
3346 {
3347 EClass.game.Save(isAutoSave: true);
3348 }
3349 }
3350 EClass.player.deathZoneMove = false;
3351 }
3353 if (currentZone.instance != null)
3354 {
3356 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3357 transition = new ZoneTransition
3358 {
3359 state = instance.ReturnState,
3360 x = instance.x,
3361 z = instance.z
3362 };
3363 instance.OnLeaveZone();
3364 Debug.Log(z);
3365 }
3366 EInput.Consume(consumeAxis: true);
3367 EClass.player.uidLastZone = currentZone.uid;
3369 {
3371 {
3372 Msg.Say("enterZone", z.Name);
3373 }
3374 else
3375 {
3376 if (z.IsRegion)
3377 {
3378 Msg.Say("leaveZone", currentZone.Name);
3379 }
3380 else if (z.id != currentZone.id)
3381 {
3382 Msg.Say("enterZone", z.Name);
3383 }
3384 EClass.player.lastZonePos = pos.Copy();
3385 }
3386 EClass.player.lastTransition = transition;
3387 }
3388 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3389 {
3391 }
3392 EClass.player.listSummon = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3393 foreach (Chara item2 in EClass.player.listSummon)
3394 {
3395 EClass._zone.RemoveCard(item2);
3396 }
3397 }
3398 if (party != null && party.leader == this)
3399 {
3400 foreach (Chara member in party.members)
3401 {
3402 if (member != this && !member.isDead && member.parent is Zone)
3403 {
3404 member.MoveZone(z);
3405 }
3406 }
3407 }
3408 if (global == null)
3409 {
3410 Debug.Log(base.Name);
3411 return;
3412 }
3413 transition.uidLastZone = currentZone?.uid ?? 0;
3414 global.transition = transition;
3415 if (z.IsActiveZone)
3416 {
3417 Point spawnPos = z.GetSpawnPos(this);
3418 global.transition = null;
3419 if (IsPC)
3420 {
3421 EClass.player.lastTransition = null;
3422 }
3423 z.AddCard(this, spawnPos);
3424 if (IsBranchMember())
3425 {
3427 }
3428 }
3429 else
3430 {
3431 z.AddCard(this);
3432 }
3433 }
MinionType c_minionType
Definition: Card.cs:988
bool IsBranchMember()
Definition: Chara.cs:6506
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2377
bool ignoreAutoSave
Definition: CoreDebug.cs:126
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:1028
RoomManager rooms
Definition: Map.cs:31
Chara leader
Definition: Party.cs:31
bool deathZoneMove
Definition: Player.cs:1169
List< Chara > listSummon
Definition: Player.cs:1221
ReturnInfo returnInfo
Definition: Player.cs:866
bool simulatingZone
Definition: Player.cs:1179
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:260
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
Definition: Zone.cs:1328

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 3315 of file Chara.cs.

3316 {
3318 {
3319 state = state
3320 });
3321 }

◆ MutateRandom()

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

Definition at line 9876 of file Chara.cs.

9877 {
9878 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
9879 {
9880 Say("resistMutation", this);
9881 return false;
9882 }
9883 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
9884 for (int i = 0; i < tries; i++)
9885 {
9886 SourceElement.Row row = ie.RandomItem();
9887 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
9888 {
9889 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
9890 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
9891 if (base.c_corruptionHistory.Count == 0)
9892 {
9893 base.c_corruptionHistory = null;
9894 }
9895 }
9896 Element element = elements.GetElement(row.id);
9897 int num = 1;
9898 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))
9899 {
9900 continue;
9901 }
9902 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
9903 {
9904 row = EClass.sources.elements.alias[row.aliasParent];
9905 element = elements.GetElement(row.id);
9906 }
9907 bool flag = row.tag.Contains("neg");
9908 if (vec > 0)
9909 {
9910 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
9911 {
9912 continue;
9913 }
9914 }
9915 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
9916 {
9917 continue;
9918 }
9919 bool flag2 = true;
9920 if (element != null)
9921 {
9922 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
9923 if (num > element.source.max)
9924 {
9925 num = element.source.max - 1;
9926 }
9927 flag = (flag && num > element.Value) || (!flag && num < element.Value);
9928 flag2 = num > element.Value;
9929 if (vec > 0 && !flag2)
9930 {
9931 continue;
9932 }
9933 }
9934 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
9935 SetFeat(row.id, num);
9936 if (flag2 && ether)
9937 {
9938 if (base.c_corruptionHistory == null)
9939 {
9940 base.c_corruptionHistory = new List<int>();
9941 }
9942 base.c_corruptionHistory.Add(row.id);
9943 if (IsPCFaction)
9944 {
9945 Element element2 = elements.GetElement(row.id);
9946 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
9947 }
9949 {
9950 EClass.player.flags.gotEtherDisease = true;
9951 Thing thing = ThingGen.Create("parchment");
9952 thing.SetStr(53, "letter_ether");
9953 Thing thing2 = ThingGen.Create("1165");
9954 thing2.SetBlessedState(BlessedState.Normal);
9955 Thing p = ThingGen.CreateParcel(null, thing2, thing);
9957 }
9958 }
9959 if (EClass.core.IsGameStarted && pos != null)
9960 {
9961 PlaySound(ether ? "mutation_ether" : "mutation");
9962 PlayEffect("mutation");
9964 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9965 }
9966 return true;
9967 }
9968 Say("nothingHappens");
9969 return false;
9970 }
void SetStr(int id, string value=null)
Definition: BaseCard.cs:63
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3892
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:467
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 10022 of file Chara.cs.

10023 {
10024 if (_historyFood != null)
10025 {
10026 while (_historyFood.Count > 5)
10027 {
10028 _historyFood.RemoveAt(_historyFood.Count - 1);
10029 }
10030 if (_historyFood[0].Count > 0)
10031 {
10032 _historyFood.Insert(0, new List<string>());
10033 }
10034 }
10035 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1441 of file Chara.cs.

1442 {
1443 if (!IsGlobal)
1444 {
1445 return;
1446 }
1447 memberType = FactionMemberType.Default;
1448 foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)).ToList())
1449 {
1451 }
1452 UniqueData uniqueData = base.c_uniqueData;
1453 if (uniqueData != null)
1454 {
1455 Debug.Log(uniqueData.uidZone + "/" + EClass.game.spatials.map.ContainsKey(uniqueData.uidZone) + "/" + uniqueData.x + "/" + uniqueData.y);
1456 }
1457 if (uniqueData != null && EClass.game.spatials.map.ContainsKey(uniqueData.uidZone))
1458 {
1459 MoveHome(EClass.game.spatials.map[uniqueData.uidZone] as Zone, uniqueData.x, uniqueData.y);
1460 return;
1461 }
1462 Zone z = EClass.game.spatials.Find("somewhere");
1463 if (trait is TraitAdventurer)
1464 {
1465 z = EClass.world.region.ListTowns().RandomItem();
1466 SetHomeZone(z);
1467 }
1468 MoveZone(z, ZoneTransition.EnterState.RandomVisit);
1469 }
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
Definition: Chara.cs:4243
List< Zone > ListTowns()
Definition: Region.cs:270
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 1508 of file Chara.cs.

1509 {
1510 if (source.job == "*r")
1511 {
1512 base.c_idJob = EClass.sources.jobs.rows.Where((SourceJob.Row j) => j.playable < 4).RandomItem().id;
1513 }
1514 if (bp.idJob != null)
1515 {
1516 base.c_idJob = bp.idJob;
1517 }
1518 if (bp.idRace != null)
1519 {
1520 base.c_idRace = bp.idRace;
1521 }
1522 }
CardBlueprint bp
Definition: Card.cs:77
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 1524 of file Chara.cs.

1525 {
1526 if (source.tag.Contains("boss"))
1527 {
1528 bossText = true;
1529 }
1530 int num = ((bp.lv != -999) ? bp.lv : base.LV);
1531 if (trait.AdvType == TraitChara.Adv_Type.Adv || trait.AdvType == TraitChara.Adv_Type.Adv_Fairy)
1532 {
1533 if (ListAdvRace.Count == 0)
1534 {
1535 ListAdvRace = EClass.sources.races.rows.Where((SourceRace.Row a) => a.playable <= 1 && a.id != "fairy").ToList();
1536 ListAdvJob = EClass.sources.jobs.rows.Where((SourceJob.Row a) => a.playable <= 4).ToList();
1537 }
1538 if (trait.AdvType == TraitChara.Adv_Type.Adv)
1539 {
1540 base.c_idRace = ListAdvRace.RandomItem().id;
1541 }
1542 base.c_idJob = ListAdvJob.RandomItem().id;
1543 _race = null;
1544 _job = null;
1545 num = 10 + EClass.rnd(40);
1546 }
1547 bio = new Biography();
1548 bio.Generate(this);
1549 if (source.idActor.Length != 0 && source.idActor[0] == "pcc" && pccData == null)
1550 {
1551 pccData = PCCData.Create(IDPCCBodySet);
1552 if (source.idActor.Length > 2)
1553 {
1554 pccData.SetPart("body", IDPCCBodySet, source.idActor[2]);
1555 }
1556 else
1557 {
1558 pccData.Randomize(IDPCCBodySet);
1559 }
1560 }
1561 if (source.mainElement.Length != 0)
1562 {
1563 int _genLv = Mathf.Min(genLv, 100);
1564 List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>();
1565 string[] mainElement = source.mainElement;
1566 for (int i = 0; i < mainElement.Length; i++)
1567 {
1568 string[] array = mainElement[i].Split('/');
1569 SourceElement.Row row = EClass.sources.elements.alias["ele" + array[0]];
1570 int num2 = source.LV * row.eleP / 100;
1571 if (list.Count == 0 || num2 < _genLv || array[0] == bp.idEle)
1572 {
1573 list.Add(new Tuple<string, int, int>(array[0], (array.Length > 1) ? int.Parse(array[1]) : 0, num2));
1574 }
1575 }
1576 Tuple<string, int, int> tuple = list.RandomItemWeighted((Tuple<string, int, int> a) => 10000 / (100 + (_genLv - a.Item3) * 25));
1577 if (!bp.idEle.IsEmpty())
1578 {
1579 tuple = list.Where((Tuple<string, int, int> a) => a.Item1 == bp.idEle || "ele" + a.Item1 == bp.idEle).FirstOrDefault() ?? tuple;
1580 }
1581 SetMainElement(tuple.Item1, (tuple.Item2 == 0) ? 10 : tuple.Item2, elemental: true);
1582 if (list.Count >= 2)
1583 {
1584 num = tuple.Item3 + base.LV - source.LV;
1585 }
1586 }
1587 if (source.name == "*r")
1588 {
1589 base.c_altName = NameGen.getRandomName();
1590 }
1591 if (source.GetText("aka") == "*r" || trait.UseRandomAlias)
1592 {
1593 _alias = AliasGen.GetRandomAlias();
1594 }
1595 happiness = EClass.rnd(100);
1596 contribution = EClass.rnd(100);
1597 RerollHobby();
1598 _idTimeTable = ((EClass.rnd(5) == 0) ? 1 : 0);
1599 ApplyRace();
1600 ApplyJob();
1601 ChangeMaterial(source.defMat.IsEmpty(race.material), ignoreFixedMaterial: true);
1602 if (num != source.LV)
1603 {
1604 SetLv(num);
1605 }
1606 if (base.LV > 5 && race.id == "mutant")
1607 {
1608 for (int j = 0; j < Mathf.Min(1 + base.LV / 5, 22); j++)
1609 {
1610 SetFeat(1644, j + 1);
1611 }
1612 }
1613 switch (id)
1614 {
1615 case "putty_mech_b":
1616 case "putty_mech":
1617 case "robot":
1618 SetFeat(1248, 1 + EClass.rnd(5));
1619 break;
1620 }
1621 InitStats();
1622 body.SetOwner(this);
1624 if (race.EQ.Length != 0 || !source.equip.IsEmpty())
1625 {
1626 TryRestock(onCreate: true);
1627 }
1628 switch (id)
1629 {
1630 case "dodo":
1631 base.idSkin = EClass.rnd(4);
1632 break;
1633 case "putty_snow":
1634 if (EClass.rnd(100) == 0 || EClass.debug.enable)
1635 {
1636 base.idSkin = EClass.rnd(4);
1637 }
1638 break;
1639 case "snail":
1640 base.idSkin = 5;
1641 break;
1642 case "olderyoungersister":
1643 base.idSkin = 1;
1644 break;
1645 case "sister_undead":
1646 case "dog":
1647 case "cat":
1648 base.idSkin = EClass.rnd(sourceCard.tiles.Length);
1649 if (id == "sister_undead" && EClass.rnd(10) == 0)
1650 {
1652 if (row2 != null && (!EClass.player.doneBackers.Contains(row2.id) || EClass.core.config.test.ignoreBackerDestoryFlag))
1653 {
1654 ApplyBacker(row2.id);
1655 }
1656 }
1657 break;
1658 case "baby":
1659 case "ika":
1660 SetFeat(1232, 3);
1661 break;
1662 }
1663 if (HasTag(CTAG.random_color))
1664 {
1665 DyeRandom();
1666 }
1667 SetAI(new NoGoal());
1668 if (!source.faith.IsEmpty())
1669 {
1670 SetFaith(source.faith);
1671 }
1672 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown")
1673 {
1675 }
1676 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown_nefu")
1677 {
1679 }
1680 else
1681 {
1682 SetFaith(EClass.game.religions.GetRandomReligion(onlyJoinable: true, EClass.rnd(10) == 0));
1683 }
1684 _affinity = 0;
1685 interest = 100;
1688 Refresh();
1689 stamina.value = stamina.max;
1690 mana.value = mana.max;
1691 isCreated = true;
1692 }
static int indexSister
void Generate(Chara c)
Definition: Biography.cs:323
void ClampInitialSkill()
Definition: Card.cs:2939
void DyeRandom()
Definition: Card.cs:5970
void ApplyBacker(int bid)
Definition: Card.cs:6957
int genLv
Definition: Card.cs:194
void SetOwner(Chara chara, bool deserialized=false)
Definition: CharaBody.cs:18
string IDPCCBodySet
Definition: Chara.cs:491
int _affinity
Definition: Chara.cs:303
void SetMainElement(string id, int v=0, bool elemental=false)
Definition: Chara.cs:2067
int happiness
Definition: Chara.cs:108
int contribution
Definition: Chara.cs:18
void CalculateMaxStamina()
Definition: Chara.cs:1999
bool isCreated
Definition: Chara.cs:136
int _idTimeTable
Definition: Chara.cs:341
void TryRestock(bool onCreate)
Definition: Chara.cs:4638
static List< SourceRace.Row > ListAdvRace
Definition: Chara.cs:166
void InitStats(bool onDeserialize=false)
Definition: Chara.cs:9123
bool bossText
Definition: Chara.cs:144
static List< SourceJob.Row > ListAdvJob
Definition: Chara.cs:168
bool ignoreBackerDestoryFlag
Definition: CoreConfig.cs:562
bool enable
Definition: CoreDebug.cs:286
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:127

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(), Card.genLv, 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 1327 of file Chara.cs.

1328 {
1329 isCreated = true;
1330 _cbits1.Bits = (uint)_cints[0];
1331 InitStats(onDeserialize: true);
1332 body.SetOwner(this, deserialized: true);
1333 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV);
1334 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV);
1335 if (global != null && global.goal != null)
1336 {
1337 global.goal.SetOwner(this);
1338 }
1339 if (IsPCC)
1340 {
1341 pccData.state = (base.isCensored ? PCCState.Naked : PCCState.Normal);
1342 }
1343 if (tempElements != null)
1344 {
1345 tempElements.SetParent(this);
1346 }
1347 UpdateAngle();
1349 Refresh();
1350 if (source.tag.Contains("boss"))
1351 {
1352 bossText = true;
1353 }
1354 sharedCheckTurn = EClass.rnd(200);
1355 }
int sharedCheckTurn
Definition: Chara.cs:118
void UpdateAngle()
Definition: Chara.cs:3566
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 8255 of file Chara.cs.

8256 {
8257 Say("give_erohon", this);
8258 AddCondition<ConParalyze>(50, force: true);
8259 AddCondition<ConConfuse>(50, force: true);
8260 AddCondition<ConFear>(1000, force: true);
8261 ModAffinity(EClass.pc, 100);
8262 t.Destroy();
8263 Talk("pervert");
8264 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 8061 of file Chara.cs.

8062 {
8063 if (!isDead)
8064 {
8065 if (HasElement(1231))
8066 {
8067 Talk("insulted");
8068 AddCondition<ConEuphoric>(100 * Evalue(1231));
8069 }
8070 else if (EClass.rnd(20) == 0)
8071 {
8072 SetFeat(1231, 1, msg: true);
8073 }
8074 }
8075 }

References EClass.rnd().

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

◆ OnSerializing()

override void Chara.OnSerializing ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1312 of file Chara.cs.

1313 {
1314 if (enemy != null)
1315 {
1316 SetInt(55, enemy.uid);
1317 }
1318 _cints[0] = (int)_cbits1.Bits;
1319 List<BodySlot> slots = body.slots;
1320 rawSlots = new int[slots.Count];
1321 for (int i = 0; i < slots.Count; i++)
1322 {
1323 rawSlots[i] = slots[i].elementId;
1324 }
1325 }
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,
bool  isSunLit = false 
)
inline

Definition at line 9624 of file Chara.cs.

9625 {
9626 if (days < 1)
9627 {
9628 days = 1;
9629 }
9630 int num = power * days;
9631 if (stamina.value < 0)
9632 {
9633 stamina.Set(1);
9634 }
9635 if (isWeakToSunlight && isSunLit)
9636 {
9637 base.hp = 0;
9638 if (mana.value > 0)
9639 {
9640 mana.Set(0);
9641 }
9642 AddCondition<ConBurning>(1000, force: true);
9643 }
9644 else
9645 {
9646 HealHP(num);
9647 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9648 mana.Mod(num);
9649 }
9650 if (IsPCFaction)
9651 {
9652 hunger.Mod(20);
9653 }
9654 sleepiness.Set(0);
9655 if (!IsMinion)
9656 {
9657 interest = 100;
9658 }
9659 Cure(CureType.Sleep, power);
9660 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:4000
bool isWeakToSunlight
Definition: Chara.cs:152
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 9604 of file Chara.cs.

9605 {
9606 bool isSunLit = pos.IsSunLit;
9607 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9608 int num = bed?.Power ?? 20;
9609 if (traitPillow != null)
9610 {
9611 num += traitPillow.owner.Power / 2;
9612 }
9613 if (bed != null)
9614 {
9615 num += bed.Evalue(750) * 5;
9616 if (bed.trait is TraitBedCoffin)
9617 {
9618 isSunLit = false;
9619 }
9620 }
9621 OnSleep(num, days, isSunLit);
9622 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9604
bool IsSunLit
Definition: Point.cs:182
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 2166 of file Chara.cs.

2167 {
2168 return s switch
2169 {
2170 "é ­" => 30,
2171 "首" => 31,
2172 "体" => 32,
2173 "背" => 33,
2174 "手" => 35,
2175 "指" => 36,
2176 "è…•" => 34,
2177 "è…°" => 37,
2178 "è¶³" => 39,
2179 _ => -1,
2180 };
2181 }

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 9081 of file Chara.cs.

9082 {
9083 Hobby hobby = new Hobby();
9084 hobby.id = session.id;
9085 WorkSummary workSummary = _workSummary;
9086 hobby.GetAI(this).OnPerformWork(IsRealTime);
9087 if (!isHobby)
9088 {
9089 workSummary.progress += EClass.rnd(5) + 5;
9090 }
9091 int num = PerformWork(hobby, 0, isHobby);
9092 int num2 = PerformWork(hobby, 1, isHobby);
9093 int num3 = PerformWork(hobby, 2, isHobby);
9094 int num4 = PerformWork(hobby, 3, isHobby);
9095 workSummary.money += num;
9096 workSummary.food += num2;
9097 workSummary.knowledge += num3;
9098 workSummary.material += num4;
9099 int PerformWork(Hobby work, int idx, bool isHobby)
9100 {
9101 if (idx >= work.source.resources.Length)
9102 {
9103 return 0;
9104 }
9105 int num5 = work.source.resources[idx];
9106 int num6 = num5;
9107 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
9108 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
9109 if (num6 > 0 && num5 <= 0)
9110 {
9111 num5 = 1;
9112 }
9113 return num5;
9114 }
9115 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:9081
AIWork GetAI(Chara c)
Definition: Hobby.cs:12
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 4263 of file Chara.cs.

4264 {
4265 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4266 {
4268 return t;
4269 }
4270 if (t.parent == this)
4271 {
4272 return t;
4273 }
4274 t = TryPoisonPotion(t);
4275 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4276 if (!dest.IsValid)
4277 {
4278 if (t.parent != EClass._zone)
4279 {
4280 if (IsPC)
4281 {
4282 Say("backpack_full_drop", t);
4283 SE.Drop();
4284 }
4285 return EClass._zone.AddCard(t, pos).Thing;
4286 }
4287 if (IsPC)
4288 {
4289 Say("backpack_full", t);
4290 }
4291 return t;
4292 }
4293 if (dest.stack != null)
4294 {
4295 if (msg)
4296 {
4297 PlaySound("pick_thing");
4298 Say("pick_thing", this, t);
4299 }
4300 t.TryStackTo(dest.stack);
4301 return dest.stack;
4302 }
4303 TryAbsorbRod(t);
4304 if (msg)
4305 {
4306 PlaySound("pick_thing");
4307 Say("pick_thing", this, t);
4308 }
4310 return dest.container.AddThing(t, tryStack);
4311 }
bool isNew
Definition: Card.cs:482
bool TryStackTo(Thing to)
Definition: Card.cs:3394
string c_idRefCard
Definition: Card.cs:1737
void TryReservePickupTutorial(Thing t)
Definition: Chara.cs:4357
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4313
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4327
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(), 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 4479 of file Chara.cs.

4480 {
4481 if (held == null)
4482 {
4483 return;
4484 }
4485 Card card = held;
4486 if (IsPC && held.invY == 1)
4487 {
4488 WidgetHotbar.dirtyCurrentItem = true;
4490 held = null;
4491 return;
4492 }
4493 if (held.isChara)
4494 {
4495 DropHeld();
4496 return;
4497 }
4499 {
4500 Say("canOnlyCarry", held);
4501 DropHeld();
4502 return;
4503 }
4504 bool flag = held != things.TryStack(held.Thing);
4505 if (!flag && things.IsOverflowing())
4506 {
4507 if (IsPC)
4508 {
4509 Say("backpack_full_drop", held);
4510 SE.Drop();
4511 }
4512 DropHeld();
4513 return;
4514 }
4515 if (msg)
4516 {
4517 PlaySound("pick_thing");
4518 Say("pick_held", this, card);
4519 if (IsPC && card.id == "statue_weird")
4520 {
4521 Say("statue_pick");
4522 }
4523 }
4524 if (IsPC)
4525 {
4526 WidgetHotbar.dirtyCurrentItem = true;
4527 if (!flag)
4528 {
4530 if (held.GetRootCard() != EClass.pc)
4531 {
4532 Pick(held.Thing, msg: false);
4533 }
4534 }
4535 }
4536 held = null;
4537 }
int invY
Definition: Card.cs:1955
bool IsHotItem
Definition: Card.cs:119
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4556
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 4243 of file Chara.cs.

4244 {
4245 if (num != 0)
4246 {
4247 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4248 }
4249 }

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 4251 of file Chara.cs.

4252 {
4253 if (things.GetDest(t).IsValid)
4254 {
4255 Pick(t, msg);
4256 }
4257 else
4258 {
4259 EClass._zone.AddCard(t, p);
4260 }
4261 }

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

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1725 of file Chara.cs.

1726 {
1727 if (source == null)
1728 {
1729 Debug.LogError("source is null");
1730 SetSource();
1731 }
1732 if (ride != null && ride.source != null)
1733 {
1734 ride.Refresh(calledRecursive: true);
1735 }
1736 hasTelepathy = false;
1737 isWet = false;
1738 _isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
1740 isWeakToSunlight = HasElement(1251) && !HasElement(431);
1741 base.isHidden = HasElement(415);
1742 foreach (Condition condition in conditions)
1743 {
1744 condition.OnRefresh();
1745 }
1746 if (isWet)
1747 {
1748 base.isHidden = false;
1749 }
1751 SetDirtySpeed();
1752 if (host != null && !calledRecursive && host.source != null)
1753 {
1754 host.Refresh(calledRecursive: true);
1755 }
1756 }
virtual void OnRefresh()
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1725
bool isWet
Definition: Chara.cs:142
override void SetSource()
Definition: Chara.cs:2055
bool IsUndead
Definition: Chara.cs:891
bool IsHorror
Definition: Chara.cs:915
bool IsMachine
Definition: Chara.cs:903

References _isLevitating, canSeeInvisible, conditions, Debug, Card.HasElement(), hasTelepathy, host, IsHorror, IsMachine, IsMultisize, IsUndead, isWeakToSunlight, isWet, BaseCondition.OnRefresh(), Refresh(), ride, SetDirtySpeed(), SetSource(), source, and visibleWithTelepathy.

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 10086 of file Chara.cs.

10087 {
10088 if (faithElements != null)
10089 {
10091 }
10093 if (idFaith == "eyth" && !HasElement(1228))
10094 {
10095 return;
10096 }
10097 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
10098 if (row == null)
10099 {
10100 return;
10101 }
10103 if (!HasCondition<ConExcommunication>())
10104 {
10105 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
10106 if (row2 != null)
10107 {
10108 faithElements.SetBase(row2.id, 1);
10109 }
10110 int[] array = row.elements;
10111 int num = GetPietyValue() * (120 + Evalue(1407) * 15 + Evalue(1228) * 20) / 100;
10112 for (int i = 0; i < array.Length; i += 2)
10113 {
10114 int num2 = array[i + 1] * num / 50;
10115 if (array[i] == 79)
10116 {
10117 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
10118 }
10119 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10120 {
10121 num2 = 20;
10122 }
10123 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
10124 }
10125 }
10127 }
string idFaith
Definition: Chara.cs:231
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:10077
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 1860 of file Chara.cs.

1861 {
1862 if (ride != null && !ride.IsDeadOrSleeping)
1863 {
1865 _Speed = ride._Speed;
1866 info?.AddText("rideSpeed".lang(_Speed.ToString() ?? ""));
1867 }
1868 else if (host != null)
1869 {
1870 if (host.ride == this)
1871 {
1872 _Speed = Evalue(79);
1873 _Speed = _Speed * 100 / Mathf.Clamp(100 + (int)_Speed * ((!race.tag.Contains("noRide")) ? 1 : 5) - base.STR - host.EvalueRiding() * 2 - (race.tag.Contains("ride") ? 50 : 0), 100, 1000);
1874 }
1875 else
1876 {
1877 _Speed = (Evalue(79) + host.Evalue(79)) / 2;
1878 }
1879 }
1880 else
1881 {
1882 _Speed = Evalue(79) + Evalue(407) / 2;
1883 }
1884 if (body.GetSlot(37, onlyEmpty: false)?.thing != null && HasElement(1209) && !HasElement(419))
1885 {
1886 _Speed -= 25L;
1887 info?.AddText(-25L, EClass.sources.elements.map[1209].GetName());
1888 }
1889 if (parasite != null)
1890 {
1891 long speed = _Speed;
1892 _Speed = _Speed * 100 / Mathf.Clamp(120 + parasite.LV * 2 - base.STR - Evalue(227) * 2, 100, 1000);
1893 info?.AddText(_Speed - speed, "parasiteSpeed".lang());
1894 }
1895 if (_Speed < elements.ValueWithoutLink(79) / 3)
1896 {
1898 info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
1899 }
1900 int num = 100;
1901 if (EClass._zone.map != null && EClass._zone.IsUnderwater)
1902 {
1903 int num2 = Evalue(200);
1904 num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, 0, 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25);
1905 if (info != null && num != 100)
1906 {
1907 info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
1908 }
1909 }
1910 if (IsPCFaction)
1911 {
1912 switch (burden.GetPhase())
1913 {
1914 case 1:
1915 num -= 10;
1916 info?.AddFix(-10, burden.GetPhaseStr());
1917 break;
1918 case 2:
1919 num -= 20;
1920 info?.AddFix(-20, burden.GetPhaseStr());
1921 break;
1922 case 3:
1923 num -= 30;
1924 info?.AddFix(-30, burden.GetPhaseStr());
1925 break;
1926 case 4:
1927 num -= (IsPC ? 50 : 100);
1928 info?.AddFix(IsPC ? (-50) : (-100), burden.GetPhaseStr());
1929 break;
1930 }
1931 if (IsPC)
1932 {
1933 switch (stamina.GetPhase())
1934 {
1935 case 1:
1936 num -= 10;
1937 info?.AddFix(-10, stamina.GetPhaseStr());
1938 break;
1939 case 0:
1940 num -= 20;
1941 info?.AddFix(-20, stamina.GetPhaseStr());
1942 break;
1943 }
1944 switch (sleepiness.GetPhase())
1945 {
1946 case 2:
1947 num -= 10;
1948 info?.AddFix(-10, sleepiness.GetPhaseStr());
1949 break;
1950 case 3:
1951 num -= 20;
1952 info?.AddFix(-20, sleepiness.GetPhaseStr());
1953 break;
1954 }
1955 switch (hunger.GetPhase())
1956 {
1957 case 3:
1958 case 4:
1959 num -= 10;
1960 info?.AddFix(-10, hunger.GetPhaseStr());
1961 break;
1962 case 5:
1963 num -= 30;
1964 info?.AddFix(-30, hunger.GetPhaseStr());
1965 break;
1966 }
1967 num += EClass.player.lastEmptyAlly * Evalue(1646);
1968 info?.AddFix(EClass.player.lastEmptyAlly * Evalue(1646), EClass.sources.elements.map[1646].GetName());
1969 }
1971 {
1972 num += EClass.player.lastEmptyAlly * 10 - 10;
1973 info?.AddFix(EClass.player.lastEmptyAlly * 10 - 10, "exceedParty".lang());
1974 }
1975 }
1976 else if (base.LV >= 1000 && !EClass.game.principal.disableVoidBlessing && !base.IsPCFactionOrMinion)
1977 {
1978 num += EClass.curve((base.LV - 900) / 100 * 10, 500, 100);
1979 info?.AddFix(EClass.curve((base.LV - 900) / 100 * 10, 500, 100), "enemySpeedBuff".lang());
1980 }
1981 if (HasCondition<ConGravity>())
1982 {
1983 num -= 30;
1984 info?.AddFix(-30, GetCondition<ConGravity>().Name);
1985 }
1986 if (_Speed < 10)
1987 {
1988 _Speed = 10L;
1989 }
1990 _Speed = _Speed * num / 100;
1991 if (_Speed < 10)
1992 {
1993 _Speed = 10L;
1994 info?.AddText("minSpeed".lang(10.ToString() ?? ""));
1995 }
1996 dirtySpeed = false;
1997 }
Thing thing
Definition: BodySlot.cs:8
override string ToString()
Definition: Chara.cs:1172
void RefreshSpeed(Element.BonusInfo info=null)
Definition: Chara.cs:1860
bool dirtySpeed
Definition: Chara.cs:170
long _Speed
Definition: Chara.cs:172
void AddText(string text, FontColor col=FontColor.Warning)
Definition: ELEMENT.cs:111
void AddFix(int v, string text)
Definition: ELEMENT.cs:132
bool disableVoidBlessing
int lastEmptyAlly
Definition: Player.cs:1193
virtual bool IsUnderwater
Definition: Zone.cs:266

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 8906 of file Chara.cs.

8907 {
8908 if (workElements != null)
8909 {
8911 }
8912 workElements = null;
8913 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
8914 {
8915 return;
8916 }
8917 foreach (Hobby item in ListHobbies())
8918 {
8919 TryAdd(item);
8920 }
8921 foreach (Hobby item2 in ListWorks())
8922 {
8923 TryAdd(item2);
8924 }
8925 if (workElements != null)
8926 {
8928 }
8929 void TryAdd(Hobby h)
8930 {
8931 if (!h.source.elements.IsEmpty())
8932 {
8933 if (workElements == null)
8934 {
8936 }
8937 for (int i = 0; i < h.source.elements.Length; i += 2)
8938 {
8939 int num = h.source.elements[i];
8940 int num2 = h.source.elements[i + 1];
8941 int num3 = 100;
8942 if (num != 2115 && num != 2207)
8943 {
8944 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
8945 if (num3 <= 0)
8946 {
8947 continue;
8948 }
8949 }
8950 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
8951 }
8952 }
8953 }
8954 }
ElementContainer workElements
Definition: Chara.cs:40
int GetEfficiency(Chara c)
Definition: Hobby.cs:31

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 2354 of file Chara.cs.

2355 {
2356 base.c_uidMaster = 0;
2357 master = null;
2358 enemy = null;
2359 foreach (Chara chara in EClass._map.charas)
2360 {
2361 if (chara.enemy == this)
2362 {
2363 chara.SetEnemy();
2364 chara.ai.Cancel();
2365 }
2366 }
2367 ai.Cancel();
2368 Refresh();
2369 }

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

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

◆ RemoveAllStances()

void Chara.RemoveAllStances ( )
inline

Definition at line 9509 of file Chara.cs.

9510 {
9511 for (int num = conditions.Count - 1; num >= 0; num--)
9512 {
9513 Condition condition = conditions[num];
9514 if (condition.Type == ConditionType.Stance)
9515 {
9516 condition.Kill();
9517 }
9518 }
9519 }

References Condition.Kill(), and BaseStats.Type.

◆ RemoveCondition< T >()

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

Definition at line 9370 of file Chara.cs.

9370 : Condition
9371 {
9372 for (int num = conditions.Count - 1; num >= 0; num--)
9373 {
9374 if (conditions[num] is T)
9375 {
9376 conditions[num].Kill();
9377 break;
9378 }
9379 }
9380 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

Definition at line 1499 of file Chara.cs.

1500 {
1501 if (IsGlobal)
1502 {
1503 global = null;
1505 }
1506 }

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

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

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 2194 of file Chara.cs.

2195 {
2196 if (body.slots.Count != 0)
2197 {
2198 BodySlot bodySlot = body.slots.LastItem();
2199 body.RemoveBodyPartAt(body.slots.Count - 1);
2200 if (msg)
2201 {
2202 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2203 PlaySound("offering");
2204 }
2205 }
2206 }
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()

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

Definition at line 8276 of file Chara.cs.

8277 {
8278 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this)
8279 {
8280 return false;
8281 }
8282 if (host != null && host.isRestrained)
8283 {
8284 return false;
8285 }
8286 if (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion)
8287 {
8288 return false;
8289 }
8290 bool flag = false;
8291 foreach (Chara chara in EClass._map.charas)
8292 {
8293 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))
8294 {
8295 continue;
8296 }
8297 bool flag2 = chara.HasElement(1225) && !chara.GetBool(126);
8298 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
8299 {
8300 continue;
8301 }
8302 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
8303 int num2 = Dist(chara);
8304 if (num2 > 25)
8305 {
8306 continue;
8307 }
8308 if (num2 > num || !chara.CanSeeLos(pos, num2))
8309 {
8310 if (!flag2)
8311 {
8312 continue;
8313 }
8314 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
8315 if (!nearestPoint.IsValid)
8316 {
8317 continue;
8318 }
8319 chara.Teleport(nearestPoint);
8320 chara.AddCooldown(1225, 10);
8321 num2 = Dist(chara);
8322 Say("intercept_loyal", chara, this);
8323 chara.SetEnemy(attacker);
8324 attacker.SetEnemy(chara);
8325 if (num2 > num || !chara.CanSeeLos(pos, num2))
8326 {
8327 continue;
8328 }
8329 }
8330 if (!flag && !HasElement(1225))
8331 {
8332 Say("intercept", chara, this);
8333 if (EClass.rnd(10) == 0)
8334 {
8335 chara.Talk("intercept", base.NameSimple);
8336 }
8337 if (attacker.enemy == this)
8338 {
8339 attacker.SetEnemy(chara);
8340 }
8341 action(chara);
8342 flag = true;
8343 }
8344 }
8345 return flag;
8346 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5836
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8557
bool HasCooldown(int idEle)
Definition: Chara.cs:8608

References EClass._map, AddCooldown(), CanSeeLos(), Map.charas, conSuspend, enemy, Card.Evalue(), BaseCard.GetBool(), Point.GetNearestPoint(), 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 9000 of file Chara.cs.

9001 {
9002 if (_hobbies != null && _works != null)
9003 {
9004 _hobbies.Clear();
9005 _works.Clear();
9006 }
9007 else
9008 {
9009 _hobbies = new List<int>();
9010 _works = new List<int>();
9011 }
9012 if (source.hobbies.IsEmpty())
9013 {
9014 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
9015 }
9016 else
9017 {
9018 string[] hobbies = source.hobbies;
9019 foreach (string key in hobbies)
9020 {
9021 AddHobby(EClass.sources.hobbies.alias[key].id);
9022 }
9023 }
9024 if (source.works.IsEmpty())
9025 {
9026 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
9027 }
9028 else
9029 {
9030 string[] hobbies = source.works;
9031 foreach (string key2 in hobbies)
9032 {
9033 AddWork(EClass.sources.hobbies.alias[key2].id);
9034 }
9035 }
9037 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:9039
void AddWork(int id)
Definition: Chara.cs:8988
void AddHobby(int id)
Definition: Chara.cs:8976
List< Row > listWorks
Definition: SourceHobby.cs:64
List< Row > listHobbies
Definition: SourceHobby.cs:61
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 2208 of file Chara.cs.

2209 {
2210 for (int num = body.slots.Count - 1; num >= 0; num--)
2211 {
2212 BodySlot bodySlot = body.slots[num];
2213 if (bodySlot.elementId == 45 || bodySlot.elementId == 40)
2214 {
2215 return;
2216 }
2217 body.RemoveBodyPart(num);
2218 }
2219 string[] array = race.figure.Split('|');
2220 foreach (string s in array)
2221 {
2222 int num2 = ParseBodySlot(s);
2223 if (num2 != -1)
2224 {
2225 body.AddBodyPart(num2);
2226 }
2227 }
2229 }

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8442 of file Chara.cs.

8443 {
8444 _ = base.c_upgrades;
8445 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9566 of file Chara.cs.

9567 {
9568 if (con.power > 0 && resistCon != null)
9569 {
9570 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9571 if (1000 < EClass.rnd(a))
9572 {
9573 con.power = 0;
9574 }
9575 else if (500 < EClass.rnd(a))
9576 {
9577 con.power /= 5;
9578 }
9579 else if (200 < EClass.rnd(a))
9580 {
9581 con.power /= 3;
9582 }
9583 else if (100 < EClass.rnd(a))
9584 {
9585 con.power /= 2;
9586 }
9587 }
9588 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4648 of file Chara.cs.

4649 {
4650 string equip = source.equip;
4651 if (equip.IsEmpty())
4652 {
4653 equip = job.equip;
4654 }
4655 if (equip == "none")
4656 {
4657 return;
4658 }
4659 bool flag = true;
4660 switch (id)
4661 {
4662 case "kettle":
4663 case "quru":
4664 case "loytel":
4665 case "shojo":
4666 EQ_ID("staff_long", 1);
4667 EQ_CAT("head");
4668 EQ_CAT("torso");
4669 EQ_CAT("arm");
4670 return;
4671 case "adv_yukiimo":
4672 if (onCreate)
4673 {
4674 EQ_ID("tail_snowleopard");
4675 }
4676 break;
4677 case "adv_kiria":
4678 if (onCreate)
4679 {
4680 EQ_ID("sword_zephir");
4681 }
4682 break;
4683 case "adv_mesherada":
4684 if (onCreate)
4685 {
4686 EQ_ID("dagger_hathaway");
4687 }
4688 break;
4689 case "adv_verna":
4690 if (onCreate)
4691 {
4692 EQ_ID("staff_long", -1, Rarity.Legendary);
4693 }
4694 if (onCreate)
4695 {
4696 EQ_ID("cloak_wing", -1, Rarity.Mythical);
4697 }
4698 break;
4699 case "big_sister":
4700 if (onCreate)
4701 {
4702 EQ_ID("sword_muramasa");
4703 }
4704 break;
4705 case "adv_gaki":
4706 if (onCreate)
4707 {
4708 EQ_ID("dagger_gaki");
4709 }
4710 if (onCreate)
4711 {
4712 EQ_ID("dagger_ninto");
4713 }
4714 break;
4715 case "adv_ivory":
4716 EQ_ID("dagger", -1, Rarity.Legendary);
4717 AddThing("60");
4718 break;
4719 case "adv_wini":
4720 if (onCreate)
4721 {
4722 EQ_ID("staff_Cat", -1, Rarity.Mythical);
4723 }
4725 if (onCreate)
4726 {
4727 AddThing("1071");
4728 }
4729 break;
4730 case "namamani":
4731 if (onCreate)
4732 {
4733 AddThing("gun_gravity2");
4734 }
4735 break;
4736 case "lomias":
4737 if (onCreate)
4738 {
4739 AddThing("bow_vindale");
4740 }
4741 break;
4742 case "larnneire":
4743 if (onCreate)
4744 {
4745 EQ_ID("EtherDagger2");
4746 }
4747 break;
4748 case "keeper_garden":
4749 if (!body.HasWeapon())
4750 {
4751 EQ_ID("sword_ragnarok");
4752 }
4753 break;
4754 case "ungaga_pap":
4755 if (onCreate)
4756 {
4757 EQ_ID("axe_destruction");
4758 }
4759 break;
4760 case "lurie_boss":
4761 if (onCreate)
4762 {
4763 EQ_ID("ribbon_duponne");
4764 }
4765 break;
4766 case "seeker":
4767 if (onCreate)
4768 {
4769 EQ_ID("helm_seeker");
4770 }
4771 EQ_ID("robe_pope");
4772 EQ_ID("sword_katana");
4773 EQ_ID("staff");
4774 EQ_ID("sword_katana");
4775 if (onCreate)
4776 {
4777 EQ_ID("boots_seven");
4778 }
4779 if (onCreate)
4780 {
4781 for (int i = 0; i < 20; i++)
4782 {
4784 }
4785 EQ_Item("panty");
4786 AddThing("plat").SetNum(6);
4787 }
4788 break;
4789 case "ephrond":
4790 if (onCreate)
4791 {
4792 AddThing("guitar_efrond");
4793 }
4794 break;
4795 case "ashland":
4796 if (onCreate)
4797 {
4798 AddThing("guitar_ash");
4799 }
4800 break;
4801 case "swordkeeper":
4802 if (onCreate)
4803 {
4804 EQ_ID("EtherDagger");
4805 }
4806 break;
4807 case "mech_angel":
4808 if (onCreate)
4809 {
4810 Thing thing = ThingGen.Create("pole_holy");
4811 thing.SetReplica(on: true);
4812 thing.rarity = Rarity.Normal;
4813 thing.elements.SetTo(60, -15);
4814 thing.elements.SetTo(418, -100);
4815 thing.elements.SetTo(93, 50);
4816 AddThing(thing);
4817 body.Equip(thing);
4818 flag = false;
4819 }
4820 break;
4821 }
4822 if (!TryEquipRanged())
4823 {
4824 switch (id)
4825 {
4826 case "tyche":
4827 case "trooper":
4828 case "mech_scarab":
4829 AddThing("gun_laser");
4830 break;
4831 case "rocketman":
4832 {
4833 Thing thing2 = AddThing("panzerfaust");
4834 thing2.ChangeMaterial("iron");
4835 thing2.c_ammo = 0;
4836 break;
4837 }
4838 default:
4839 switch (equip)
4840 {
4841 case "archer":
4842 EQ_CAT((EClass.rnd(4) == 0) ? "crossbow" : "bow");
4843 break;
4844 case "inquisitor":
4845 case "gunner":
4846 EQ_CAT("gun");
4847 break;
4848 }
4849 break;
4850 }
4851 }
4852 int num = ((base.rarity >= Rarity.Mythical) ? (base.LV * 3) : ((base.rarity >= Rarity.Legendary) ? (base.LV * 2) : base.LV));
4853 if (trait is TraitAdventurer)
4854 {
4855 num *= 3;
4856 }
4857 if (race.id == "asura")
4858 {
4859 for (int j = 0; j < 4; j++)
4860 {
4861 EQ_CAT(job.weapon.RandomItem());
4862 }
4863 }
4864 for (int k = 0; k < ((!(race.id == "mutant")) ? 1 : (2 + base.LV / 30)); k++)
4865 {
4866 if (flag)
4867 {
4868 if (source.ContainsTag("boxer"))
4869 {
4870 EQ_CAT("martial");
4871 }
4872 else if (!job.weapon.IsEmpty())
4873 {
4874 if (race.id == "mutant" || (body.slotMainHand != null && body.slotMainHand.thing == null))
4875 {
4876 EQ_CAT(job.weapon.RandomItem());
4877 }
4878 if (race.id == "mutant" || (Evalue(131) > 0 && EClass.rnd(2) == 0))
4879 {
4880 EQ_CAT(job.weapon.RandomItem());
4881 }
4882 }
4883 }
4884 EQ_CAT("torso");
4885 if (EClass.rnd(num) > 5)
4886 {
4887 EQ_CAT("arm");
4888 }
4889 if (EClass.rnd(num) > 10)
4890 {
4891 EQ_CAT("head");
4892 }
4893 if (EClass.rnd(num) > 15)
4894 {
4895 EQ_CAT("back");
4896 }
4897 if (EClass.rnd(num) > 20)
4898 {
4899 EQ_CAT("ring");
4900 }
4901 if (EClass.rnd(num) > 25)
4902 {
4903 EQ_CAT("amulet");
4904 }
4905 if (EClass.rnd(num) > 30)
4906 {
4907 EQ_CAT("foot");
4908 }
4909 if (EClass.rnd(num) > 35)
4910 {
4911 EQ_CAT("waist");
4912 }
4913 if (EClass.rnd(num) > 40)
4914 {
4915 EQ_CAT("ring");
4916 }
4917 }
4918 if (trait is TraitBard)
4919 {
4920 AddThing(ThingGen.Create("lute"));
4921 if (EClass.debug.enable || EClass.rnd(100) == 0)
4922 {
4923 EQ_ID("shield_lute");
4924 }
4925 }
4926 if (HasTag(CTAG.shield))
4927 {
4928 EQ_CAT("shield");
4929 }
4930 }
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3038
Card AddCard(Card c)
Definition: Card.cs:3087
void SetReplica(bool on)
Definition: Card.cs:3072
bool HasWeapon()
Definition: CharaBody.cs:378
BodySlot slotMainHand
Definition: CharaBody.cs:10
void EQ_Item(string s, int num=1)
Definition: Chara.cs:5040
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
Definition: Chara.cs:5004
bool TryEquipRanged()
Definition: Chara.cs:7743
void EQ_CAT(string s)
Definition: Chara.cs:5024
void SetTo(int id, int v)
static Thing CreateSpellbook(string alias, int num=1)
Definition: ThingGen.cs:151

References Card.ChangeMaterial(), RenderRow.ContainsTag(), ThingGen.Create(), ThingGen.CreateFromCategory(), ThingGen.CreateSpellbook(), EClass.debug, Card.elements, CoreDebug.enable, CharaBody.Equip(), SourceChara.Row.equip, SourceJob.Row.equip, CharaBody.HasWeapon(), SourceRace.Row.id, EClass.rnd(), Card.SetReplica(), ElementContainer.SetTo(), CharaBody.slotMainHand, BodySlot.thing, and SourceJob.Row.weapon.

Referenced by CoreDebug.QuickStart().

◆ RestockInventory()

void Chara.RestockInventory ( bool  onCreate)
inline

Definition at line 4932 of file Chara.cs.

4933 {
4934 switch (id)
4935 {
4936 case "lomias":
4937 if (ShouldRestock("_meat"))
4938 {
4939 AddCard(ThingGen.Create("_meat").MakeRefFrom("begger"));
4940 }
4941 break;
4942 case "fiama":
4943 Restock("book_story", 1);
4944 break;
4945 case "rock_thrower":
4946 Restock("stone", 10 + EClass.rnd(10));
4947 break;
4948 case "giant":
4949 Restock("rock", 2 + EClass.rnd(10));
4950 break;
4951 case "farris":
4952 Restock("lute", 1);
4953 Restock("book_story_home", 1);
4954 break;
4955 case "begger":
4956 break;
4957 }
4958 void Restock(string id, int num)
4959 {
4960 if (ShouldRestock(id))
4961 {
4962 AddCard(ThingGen.Create(id).SetNum(num));
4963 }
4964 }
4965 bool ShouldRestock(string id)
4966 {
4967 return things.Find(id) == null;
4968 }
4969 }

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

◆ Revive()

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

Definition at line 5084 of file Chara.cs.

5085 {
5086 if (!isDead)
5087 {
5088 return;
5089 }
5090 isDead = false;
5091 base.hp = MaxHP / 3;
5092 mana.value = 0;
5093 stamina.value = 0;
5094 if (hunger.value > 30)
5095 {
5096 hunger.value = 30;
5097 }
5098 sleepiness.value = 0;
5100 RemoveCondition<StanceTaunt>();
5101 if (id == "keeper_garden")
5102 {
5103 SaiyanRevive();
5104 }
5105 if (IsPC)
5106 {
5108 {
5109 Msg.Say("noDeathPenalty2", this);
5110 }
5112 {
5113 Msg.Say("noDeathPenalty", this);
5114 }
5115 else
5116 {
5118 }
5119 List<Thing> dropList = new List<Thing>();
5120 EClass.pc.things.Foreach(delegate(Thing t)
5121 {
5123 {
5124 t.ignoreAutoPick = true;
5125 dropList.Add(t);
5126 }
5127 }, onlyAccessible: false);
5128 foreach (Thing item in dropList)
5129 {
5131 Msg.Say("backpack_full_drop", item);
5132 }
5133 EClass.player.preventDeathPenalty = false;
5134 }
5135 if (IsPCFaction && homeBranch != null)
5136 {
5137 homeBranch.Log("bRevive", this);
5138 }
5139 if (p != null)
5140 {
5141 if (!p.IsInBounds)
5142 {
5144 }
5145 EClass._zone.AddCard(this, p);
5146 if (msg)
5147 {
5148 SE.Play("revive");
5149 Msg.Say("revive", this);
5150 PlayEffect("revive");
5151 }
5152 SetCensored(enable: false);
5153 }
5154 }
void SetCensored(bool enable)
Definition: Card.cs:7679
Card parentCard
Definition: Card.cs:103
void SaiyanRevive()
Definition: Chara.cs:5156
void ApplyDeathPenalty()
Definition: Chara.cs:5190
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1167
void Foreach(Action< Thing > action, bool onlyAccessible=true)
override int SelfWeight
Definition: Thing.cs:82

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 3505 of file Chara.cs.

3506 {
3507 if (renderer.hasActor)
3508 {
3509 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3510 }
3511 else
3512 {
3513 base.dir = ((base.dir == 0) ? 1 : 0);
3514 }
3515 UpdateAngle();
3517 }

Referenced by AI_Dance.Run().

◆ SaiyanRevive()

void Chara.SaiyanRevive ( )
inline

Definition at line 5156 of file Chara.cs.

5157 {
5158 ModCorruption(-100000);
5159 if (base.LV < 10000000)
5160 {
5161 SetLv(base.LV * 10 + 9);
5162 }
5163 Refresh();
5164 base.hp = MaxHP;
5165 mana.value = mana.max;
5166 stamina.value = stamina.max;
5167 bossText = true;
5168 }
void ModCorruption(int a)
Definition: Chara.cs:9713

References Stats.max, and Refresh().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 8776 of file Chara.cs.

8777 {
8778 if (IsPC)
8779 {
8781 }
8782 if (ai.IsRunning)
8783 {
8784 if (ai == g && ai.IsNoGoal)
8785 {
8786 return g;
8787 }
8788 ai.Cancel();
8789 if (ai == g)
8790 {
8791 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
8792 return g;
8793 }
8794 }
8795 if (HasCondition<ConWait>())
8796 {
8797 RemoveCondition<ConWait>();
8798 }
8799 ai = g;
8800 ai.SetOwner(this);
8801 if (IsPC)
8802 {
8804 }
8805 return g;
8806 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:179
QueueManager queues
Definition: Player.cs:1209
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(), AM_Paint.OnUpdateInput(), ActBloodsuck.Perform(), ActNTR.Perform(), ActRanged.Perform(), ActRestrain.Perform(), ActPlan.Item.Perform(), LayerCraftFloat.RefreshCraft(), AI_Idle.Run(), GoalSpot.Run(), ZoneEventSiege.ShouldEnd(), Zone.Simulate(), ConSleep.SuccubusVisit(), ActThrow.Throw(), TaskManager.Designations.TryRemoveDesignation(), InvOwnerCraft.TryStartCraft(), and GoalWork.TryWork().

◆ SetAIAggro()

void Chara.SetAIAggro ( )
inline

Definition at line 8766 of file Chara.cs.

8767 {
8768 SetAI(new GoalCombat());
8769 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 8762 of file Chara.cs.

8763 {
8764 }

◆ SetAIImmediate()

◆ SetCooldown()

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

Definition at line 8575 of file Chara.cs.

8576 {
8577 if (_cooldowns == null)
8578 {
8579 _cooldowns = new List<int>();
8580 }
8581 bool flag = false;
8582 for (int i = 0; i < _cooldowns.Count; i++)
8583 {
8584 if (_cooldowns[i] / 1000 == idEle)
8585 {
8586 if (turns == 0)
8587 {
8588 _cooldowns.RemoveAt(i);
8589 }
8590 else
8591 {
8592 _cooldowns[i] = idEle * 1000 + turns;
8593 }
8594 flag = true;
8595 break;
8596 }
8597 }
8598 if (!flag && turns > 0)
8599 {
8600 AddCooldown(idEle, turns);
8601 }
8602 if (_cooldowns.Count == 0)
8603 {
8604 _cooldowns = null;
8605 }
8606 }

Referenced by ConTransmuteBat.OnRemoved().

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3498 of file Chara.cs.

3499 {
3500 base.dir = d;
3501 UpdateAngle();
3503 }

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

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1851 of file Chara.cs.

1852 {
1853 dirtySpeed = true;
1854 if (host != null)
1855 {
1857 }
1858 }

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 6227 of file Chara.cs.

6228 {
6229 enemy = c;
6230 if (c == null)
6231 {
6232 if (ai is GoalCombat)
6233 {
6234 ai.Cancel();
6235 }
6236 }
6237 else
6238 {
6239 calmCheckTurn = 10 + EClass.rnd(30);
6240 }
6241 return c;
6242 }

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 4971 of file Chara.cs.

4972 {
4974 Rarity rarity = Rarity.Normal;
4975 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
4976 Rarity rarity2 = base.rarity;
4977 if (id == "big_sister")
4978 {
4979 num = (isOnCreate ? 8 : 4);
4980 }
4981 if (!isOnCreate && EClass.rnd(10) != 0)
4982 {
4983 num /= 2;
4984 }
4985 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
4986 {
4987 rarity = Rarity.Superior;
4988 }
4989 else if (rarity2 == Rarity.Legendary)
4990 {
4991 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
4992 }
4993 else if (rarity2 >= Rarity.Mythical)
4994 {
4995 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
4996 }
4997 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
4998 {
4999 rarity = Rarity.Legendary;
5000 }
5001 CardBlueprint.current.rarity = rarity;
5002 }
static void Set(CardBlueprint _bp=null)
static CardBlueprint CharaGenEQ
static bool isOnCreate
Definition: Chara.cs:184

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

◆ SetFaction()

Chara Chara.SetFaction ( Faction  f)
inline

Definition at line 1419 of file Chara.cs.

1420 {
1421 _faction = null;
1422 faction = f;
1424 return this;
1425 }
Faction _faction
Definition: Chara.cs:156
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 1710 of file Chara.cs.

1711 {
1712 faith = r;
1714 }

References faith, and RefreshFaithElement().

◆ SetFaith() [2/2]

void Chara.SetFaith ( string  id)
inline

Definition at line 1705 of file Chara.cs.

1706 {
1708 }
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 9771 of file Chara.cs.

9772 {
9773 Feat feat = elements.GetElement(id) as Feat;
9774 int num = 0;
9775 if (feat != null && feat.Value > 0)
9776 {
9777 if (value == feat.Value)
9778 {
9779 return;
9780 }
9781 num = feat.Value;
9782 feat.Apply(-feat.Value, elements);
9783 }
9784 if (value > 0)
9785 {
9786 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
9787 feat.Apply(feat.Value, elements);
9788 }
9789 else
9790 {
9791 elements.Remove(id);
9792 }
9794 {
9795 Refresh();
9797 }
9798 if (!msg)
9799 {
9800 return;
9801 }
9802 if (feat.source.textInc.IsEmpty())
9803 {
9804 PlaySound("ding_skill");
9806 Say("gainFeat", this, feat.FullName);
9807 }
9808 else
9809 {
9810 bool flag = value < num;
9811 if (feat.source.tag.Contains("neg"))
9812 {
9813 flag = !flag;
9814 }
9815 switch (id)
9816 {
9817 case 1270:
9818 if (!flag)
9819 {
9820 PlaySound("chime_angel");
9821 }
9822 break;
9823 case 1271:
9824 if (!flag)
9825 {
9826 PlaySound("chime_devil");
9827 }
9828 break;
9829 default:
9830 PlaySound("mutation");
9831 break;
9832 }
9834 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
9835 }
9837 }
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(), ConSleep.OnRemoved(), FoodEffect.Proc(), CoreDebug.SetElement(), and DramaOutcome.upgrade_miscreation().

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1486 of file Chara.cs.

1487 {
1488 if (!IsGlobal)
1489 {
1491 global = new GlobalData();
1492 base.isSubsetCard = false;
1493 enemy = null;
1494 base.c_uidMaster = 0;
1495 }
1496 return this;
1497 }

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 1471 of file Chara.cs.

1472 {
1473 SetGlobal();
1474 homeZone = _home;
1475 _home.AddCard(this, x, z);
1476 global.transition = new ZoneTransition
1477 {
1478 state = ZoneTransition.EnterState.Exact,
1479 x = x,
1480 z = z
1481 };
1482 orgPos = new Point(x, z);
1483 return this;
1484 }

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

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

◆ SetHomeZone()

Chara Chara.SetHomeZone ( Zone  zone)
inline

Definition at line 1427 of file Chara.cs.

1428 {
1429 homeZone = zone;
1430 SetGlobal();
1431 return this;
1432 }

References homeZone, and SetGlobal().

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

◆ SetHostility()

Chara Chara.SetHostility ( Hostility  h)
inline

Definition at line 1434 of file Chara.cs.

1435 {
1436 Hostility hostility2 = (base.c_originalHostility = h);
1437 this.hostility = hostility2;
1438 return this;
1439 }

Referenced by Zone_Specwing.OnActivate(), Zone_CurryRuinDungeon.OnGenerateMap(), Zone.SetAlarm(), and Zone.TryGenerateBigDaddy().

◆ SetMainElement() [1/2]

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

Definition at line 2076 of file Chara.cs.

2077 {
2078 if (base.c_idMainElement != 0)
2079 {
2080 SetElements(base.c_idMainElement, remove: true);
2081 base.c_idMainElement = 0;
2082 }
2083 if (id != 0)
2084 {
2085 _ = EClass.sources.elements.map[id];
2086 SetElements(id, remove: false);
2087 base.c_idMainElement = id;
2088 if (elemental)
2089 {
2090 base.isElemental = true;
2091 _colorInt = 0;
2092 Color colorSprite = EClass.setting.elements[MainElement.source.alias].colorSprite;
2093 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);
2094 }
2095 _ability = null;
2096 }
2097 void SetElements(int idEle, bool remove)
2098 {
2099 elements.SetBase(idEle, (!remove) ? ((v == 0) ? 10 : v) : 0);
2100 elements.ModBase(EClass.sources.elements.alias[EClass.sources.elements.map[idEle].aliasRef].id, remove ? (-20) : 20);
2101 switch (idEle)
2102 {
2103 case 910:
2104 elements.ModBase(951, remove ? 10 : (-10));
2105 break;
2106 case 911:
2107 elements.ModBase(950, remove ? 10 : (-10));
2108 break;
2109 case 912:
2110 elements.ModBase(953, remove ? 10 : (-10));
2111 break;
2112 case 913:
2113 elements.ModBase(952, remove ? 10 : (-10));
2114 break;
2115 case 916:
2116 elements.ModBase(960, remove ? 10 : (-10));
2117 break;
2118 case 919:
2119 elements.ModBase(956, remove ? 10 : (-10));
2120 break;
2121 case 925:
2122 elements.ModBase(962, remove ? 10 : (-10));
2123 break;
2124 case 922:
2125 elements.ModBase(965, remove ? 10 : (-10));
2126 break;
2127 case 921:
2128 elements.ModBase(971, remove ? 10 : (-10));
2129 break;
2130 case 926:
2131 elements.ModBase(961, remove ? 10 : (-10));
2132 break;
2133 case 914:
2134 case 915:
2135 case 917:
2136 case 918:
2137 case 920:
2138 case 923:
2139 case 924:
2140 break;
2141 }
2142 }
2143 }
int _colorInt
Definition: Card.cs:67
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 2067 of file Chara.cs.

2068 {
2069 if (!id.StartsWith("ele"))
2070 {
2071 id = "ele" + id;
2072 }
2073 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
2074 }

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 9839 of file Chara.cs.

9840 {
9841 SourceElement.Row row = EClass.sources.elements.map[idEle];
9843 Element element = elements.GetElement(idEle);
9844 Element element2 = elements.GetElement(row2.id);
9845 int num = element?.Value ?? 0;
9846 if (a < 0)
9847 {
9848 a = 0;
9849 }
9850 if (a > row.max)
9851 {
9852 a = row.max;
9853 }
9854 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
9855 if (a == 0 && (element == null || element.Value == 0))
9856 {
9858 return;
9859 }
9860 if (element != null && element.Value == a)
9861 {
9863 return;
9864 }
9865 if (element2 != null && element2.Value > 0)
9866 {
9867 SetFeat(element2.id, 0);
9868 }
9869 SetFeat(idEle, a);
9870 PlaySound("mutation");
9871 PlayEffect("mutation");
9873 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9874 }

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 8771 of file Chara.cs.

8772 {
8773 return SetAI(_NoGoalPC);
8774 }
static NoGoal _NoGoalPC
Definition: Chara.cs:196

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6607 of file Chara.cs.

6608 {
6609 if (IsPCC)
6610 {
6611 PCC.Get(pccData).Build(state);
6612 }
6613 }

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 6655 of file Chara.cs.

6656 {
6657 p.mat = base.material;
6658 p.matColor = base.colorInt;
6659 if (!renderer.usePass)
6660 {
6661 return;
6662 }
6663 if (renderer.replacer != null)
6664 {
6665 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6666 }
6667 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6668 {
6669 if (source._tiles_snow.Length > 1)
6670 {
6671 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6672 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6673 }
6674 else
6675 {
6676 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6677 }
6678 }
6679 else if (sourceCard._tiles.Length > 1)
6680 {
6681 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6682 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6683 }
6684 else
6685 {
6686 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6687 }
6688 p.dir = base.dir;
6689 }
override bool flipX
Definition: Chara.cs:547
virtual bool IsSnowCovered
Definition: Spatial.cs:545

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 7201 of file Chara.cs.

7202 {
7203 switch (m)
7204 {
7205 case UIList.SortMode.ByJob:
7206 sortVal = job._index * 10000 + sourceCard._index;
7207 break;
7208 case UIList.SortMode.ByRace:
7209 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
7210 break;
7211 case UIList.SortMode.ByFeat:
7212 sortVal = -GetTotalFeat();
7213 break;
7214 default:
7215 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7216 break;
7217 case UIList.SortMode.ByWorkk:
7218 break;
7219 }
7220 }
int sortVal
Definition: Card.cs:101
int GetTotalFeat()
Definition: Chara.cs:7994
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 2055 of file Chara.cs.

2056 {
2057 source = EClass.sources.charas.map.TryGetValue(id);
2058 if (source == null)
2059 {
2060 Debug.LogWarning("Chara " + id + " not found");
2061 id = "chicken";
2062 source = EClass.sources.charas.map[id];
2063 }
2064 path.walker = this;
2065 }

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2371 of file Chara.cs.

2372 {
2373 base.c_summonDuration = duration;
2374 base.isSummon = true;
2375 }

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 7511 of file Chara.cs.

7512 {
7513 if (t.IsRangedWeapon && t.category.slot == 0)
7514 {
7515 if (!CanEquipRanged(t))
7516 {
7517 return false;
7518 }
7519 int num = 0;
7520 foreach (Thing thing in things)
7521 {
7522 if (thing.IsRangedWeapon)
7523 {
7524 if (thing.category.slot != 0 && thing.isEquipped)
7525 {
7526 return false;
7527 }
7528 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7529 {
7530 num = thing.GetEquipValue();
7531 }
7532 }
7533 }
7534 if (t.GetEquipValue() > num)
7535 {
7536 return true;
7537 }
7538 return false;
7539 }
7540 BodySlot bodySlot = body.GetSlot(t);
7541 if (bodySlot == null)
7542 {
7543 return false;
7544 }
7545 if (useFav)
7546 {
7547 switch (GetFavAttackStyle())
7548 {
7549 case AttackStyle.Default:
7550 case AttackStyle.TwoHand:
7551 if (t.IsMeleeWeapon)
7552 {
7553 bodySlot = body.slotMainHand;
7554 }
7555 else if (bodySlot.elementId == 35)
7556 {
7557 return false;
7558 }
7559 break;
7560 case AttackStyle.Shield:
7561 if (t.IsMeleeWeapon)
7562 {
7563 bodySlot = body.slotMainHand;
7564 }
7565 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7566 {
7567 return false;
7568 }
7569 break;
7570 case AttackStyle.TwoWield:
7571 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7572 {
7573 return false;
7574 }
7575 break;
7576 }
7577 }
7578 if (!body.IsEquippable(t, bodySlot, text: false))
7579 {
7580 return false;
7581 }
7582 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7583 {
7584 return false;
7585 }
7586 if (!base.IsPCFactionOrMinion)
7587 {
7588 int num2 = 0;
7589 foreach (Element value in t.elements.dict.Values)
7590 {
7591 if (value.Value <= 0)
7592 {
7593 int num3 = 100;
7594 switch (value.id)
7595 {
7596 case 418:
7597 num3 = 10;
7598 break;
7599 case 60:
7600 case 61:
7601 case 62:
7602 num3 = 200;
7603 break;
7604 case 962:
7605 num3 = 10000;
7606 break;
7607 }
7608 num2 += value.Value * num3 / 100;
7609 }
7610 }
7611 if (num2 < -40)
7612 {
7613 return false;
7614 }
7615 }
7616 if (t.HasTag(CTAG.gift))
7617 {
7618 return false;
7619 }
7620 return true;
7621 }
bool IsMeleeWeapon
Definition: Card.cs:2241
BlessedState blessedState
Definition: Card.cs:278
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:106
AttackStyle GetFavAttackStyle()
Definition: Chara.cs:4604

References Card.blessedState, Card.category, ElementContainer.dict, BodySlot.elementId, Card.elements, Card.GetEquipValue(), CharaBody.GetSlot(), Card.HasTag(), Element.id, CharaBody.IsEquippable(), Thing.isEquipped, Card.IsMeleeWeapon, Card.IsRangedWeapon, CharaBody.slotMainHand, BodySlot.thing, and Element.Value.

◆ ShouldThrowAway()

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

Definition at line 8348 of file Chara.cs.

8349 {
8350 if (IsPCFaction)
8351 {
8352 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
8353 {
8354 return false;
8355 }
8356 if (t.trait.GetHealAction(this) != null)
8357 {
8358 return false;
8359 }
8360 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
8361 {
8362 return false;
8363 }
8364 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
8365 {
8366 return false;
8367 }
8368 }
8369 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed)
8370 {
8371 return false;
8372 }
8373 if (t.trait is TraitCurrency || t.trait is TraitTool)
8374 {
8375 return false;
8376 }
8377 switch (type)
8378 {
8379 case ClearInventoryType.SellAtTown:
8380 if (!t.isGifted && !t.isNPCProperty)
8381 {
8382 return false;
8383 }
8384 break;
8385 case ClearInventoryType.Purge:
8386 switch (t.category.id)
8387 {
8388 case "fish":
8389 if (EClass.rnd(3) == 0)
8390 {
8391 return true;
8392 }
8393 break;
8394 case "junk":
8395 case "garbage":
8396 if (EClass.rnd(3) != 0)
8397 {
8398 return true;
8399 }
8400 break;
8401 }
8402 if (t.id == "flyer")
8403 {
8404 return true;
8405 }
8406 if (!t.IsDecayed && EClass.rnd(3) == 0)
8407 {
8408 return false;
8409 }
8410 if (!things.IsFull() && t.IsRangedWeapon)
8411 {
8412 return false;
8413 }
8414 break;
8415 }
8416 return true;
8417 }
bool IsThrownWeapon
Definition: Card.cs:2245
bool IsFood
Definition: Card.cs:2175
bool isGifted
Definition: Card.cs:782
virtual Action GetHealAction(Chara c)
Definition: Trait.cs:602

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 6959 of file Chara.cs.

6960 {
6961 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
6962 if (conSuspend != null && IsPCParty)
6963 {
6964 RemoveCondition<ConSuspend>();
6965 }
6966 if (LayerDrama.forceJump == null)
6967 {
6968 if (IsDeadOrSleeping)
6969 {
6970 ShowDialog("_chara", "sleep");
6971 return;
6972 }
6973 if (EClass.pc.isHidden && !CanSee(EClass.pc))
6974 {
6975 ShowDialog("_chara", "invisible");
6976 return;
6977 }
6979 {
6981 ShowDialog("_chara", "give_card");
6982 Thing thing = ThingGen.Create("figure");
6983 thing.MakeFigureFrom(id);
6984 EClass.player.DropReward(thing);
6985 thing = ThingGen.Create("figure3");
6986 thing.MakeFigureFrom(id);
6987 EClass.player.DropReward(thing);
6988 return;
6989 }
6990 if (GetInt(71) == -2)
6991 {
6992 ShowDialog("_chara", "give_lunch");
6993 Thing t = CraftUtil.MakeLoveLunch(this);
6995 SetInt(71, EClass.world.date.GetRaw() + 43200);
6996 return;
6997 }
6998 if (base.isRestrained)
6999 {
7000 ShowDialog("_chara", "strain");
7001 return;
7002 }
7003 if (IsEscorted())
7004 {
7005 ShowDialog("_chara", "escort");
7006 return;
7007 }
7008 if (EClass._zone is Zone_Music)
7009 {
7010 ShowDialog("_chara", "party");
7011 return;
7012 }
7013 if (EClass.game.quests.OnShowDialog(this))
7014 {
7015 return;
7016 }
7017 switch (id)
7018 {
7019 case "loytel":
7020 {
7022 {
7023 EClass.game.quests.Get("pre_debt_runaway").Complete();
7024 EClass.player.flags.loytelEscaped = false;
7025 EClass.game.quests.Add("debt", "loytel");
7026 ShowDialog("loytel", "loytelEscaped");
7027 return;
7028 }
7029 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
7030 if (questDebt != null && questDebt.paid)
7031 {
7032 questDebt.stage++;
7033 if (questDebt.stage > 7)
7034 {
7035 questDebt.stage = 7;
7036 }
7037 ShowDialog("loytel", "debt" + questDebt.stage);
7038 return;
7039 }
7040 break;
7041 }
7042 case "farris":
7043 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3" || EClass.game.IsSurvival)
7044 {
7045 ShowDialog("farris");
7046 return;
7047 }
7048 switch (EClass.game.quests.GetPhase<QuestExploration>())
7049 {
7050 case -1:
7051 ShowDialog("farris", "nymelle_noQuest");
7052 break;
7053 case 0:
7054 ShowDialog("farris", "nymelle_first");
7055 break;
7056 case 1:
7057 ShowDialog("farris", "home_first");
7058 break;
7059 default:
7060 ShowDialog("farris");
7061 break;
7062 }
7063 return;
7064 case "ashland":
7065 ShowDialog("ashland");
7066 return;
7067 case "fiama":
7068 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv && EClass.game.quests.GetPhase<QuestExploration>() == 3)
7069 {
7070 SoundManager.ForceBGM();
7071 LayerDrama.ActivateMain("mono", "nymelle_crystal");
7072 }
7074 {
7076 {
7077 EClass.player.flags.fiamaFirstDream = true;
7078 ShowDialog("fiama", "firstDream");
7079 }
7081 {
7082 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
7083 {
7084 EClass.player.flags.fiamaStoryBookGiven = true;
7085 EClass.player.DropReward(ThingGen.Create("book_story"));
7086 });
7087 }
7088 else
7089 {
7090 ShowDialog("fiama");
7091 }
7092 }
7093 else
7094 {
7095 ShowDialog("fiama");
7096 }
7097 return;
7098 case "big_sister":
7100 {
7101 ShowDialog("big_sister", "little_saved");
7102 EClass.player.flags.little_saved = false;
7103 return;
7104 }
7106 {
7107 ShowDialog("big_sister", "little_dead");
7108 EClass.player.flags.little_killed = false;
7109 return;
7110 }
7111 break;
7112 }
7113 if (trait is TraitGuildDoorman)
7114 {
7115 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
7116 ShowDialog("guild_doorman", "main", tag);
7117 return;
7118 }
7119 if (trait is TraitGuildClerk)
7120 {
7121 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
7122 ShowDialog("guild_clerk", "main", tag2);
7123 return;
7124 }
7125 }
7126 bool flag = true;
7127 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
7128 {
7129 flag = false;
7130 }
7131 if (flag && File.Exists(CorePath.DramaData + id + ".xlsx"))
7132 {
7133 ShowDialog(id);
7134 }
7135 else
7136 {
7137 ShowDialog("_chara");
7138 }
7139 }
bool CanGiveCard()
Definition: Affinity.cs:63
void MakeFigureFrom(string id)
Definition: Card.cs:5697
void ShowDialog()
Definition: Chara.cs:6959
bool DroppedCard(string id)
Definition: CodexManager.cs:46
void MarkCardDrop(string id)
Definition: CodexManager.cs:41
static string DramaData
Definition: CorePath.cs:178
static Thing MakeLoveLunch(Chara c)
Definition: CraftUtil.cs:207
bool IsSurvival
Definition: Game.cs:275
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:479
int storyFiama
Definition: Player.cs:623
bool little_saved
Definition: Player.cs:443
bool fiamaStoryBookGiven
Definition: Player.cs:299
bool fiamaFirstDream
Definition: Player.cs:311
bool little_killed
Definition: Player.cs:455
CodexManager codex
Definition: Player.cs:1115
bool EnableDreamStory
Definition: Player.cs:1268
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2542
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:473
ReligionHealing Healing
bool IsCrystalLv
Definition: Zone_Nymelle.cs:25
virtual bool IsFestival
Definition: Zone.cs:206

References EClass._zone, LayerDrama.ActivateMain(), QuestManager.Add(), Affinity.CanGiveCard(), Player.codex, Quest.Complete(), ThingGen.Create(), World.date, CorePath.DramaData, CodexManager.DroppedCard(), Player.DropReward(), Player.EnableDreamStory, faith, Player.Flags.fiamaFirstDream, Player.Flags.fiamaStoryBookGiven, Player.flags, LayerDrama.forceJump, EClass.game, QuestManager.Get(), Date.GetRaw(), ReligionManager.Healing, Spatial.id, Zone_Nymelle.IsCrystalLv, Zone.IsFestival, Card.isHidden, Game.IsSurvival, Player.Flags.little_killed, Player.Flags.little_saved, Player.Flags.loytelEscaped, Card.MakeFigureFrom(), CraftUtil.MakeLoveLunch(), CodexManager.MarkCardDrop(), QuestManager.OnShowDialog(), QuestDebt.paid, EClass.pc, EClass.player, Game.quests, Game.religions, QuestDebt.stage, Player.Flags.storyFiama, and EClass.world.

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 7141 of file Chara.cs.

7142 {
7143 return _ShowDialog(book, null, step, tag);
7144 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:7146

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 9590 of file Chara.cs.

9591 {
9592 RemoveCondition<ConAwakening>();
9593 AddCondition(Condition.Create(100, delegate(ConSleep con)
9594 {
9595 con.pcSleep = 15;
9596 con.pcBed = bed;
9597 con.pcPillow = pillow;
9598 con.pickup = pickup;
9599 con.posBed = posBed;
9600 con.posPillow = posPillow;
9601 }), force: true);
9602 }

References bed, and Condition.Create().

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

◆ Sniff()

void Chara.Sniff ( Chara  c)
inline

Definition at line 7984 of file Chara.cs.

7985 {
7986 Say("abCatSniff", this, c);
7987 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
7988 c.ShowEmo(Emo.angry);
7989 ShowEmo(Emo.love);
7990 Talk("sniff");
7991 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
7992 }

References Card.CHA, EClass.curve(), Card.ShowEmo(), and Card.Talk().

Referenced by ActEffect.Proc(), and AI_Idle.Run().

◆ SplitHeld()

Card Chara.SplitHeld ( int  a)
inline

Definition at line 4539 of file Chara.cs.

4540 {
4541 return held.Split(a);
4542 }

References Card.Split().

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

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1834 of file Chara.cs.

1835 {
1836 bool flag = EClass._map.FindThing((Thing t) => t.IsInstalled && t.pos.Equals(EClass.pc.pos) && t.trait is TraitStairsUp) != null;
1837 Say(flag ? "dmgBurdenStairs" : "dmgBurdenFallDown", this);
1838 int num = MaxHP;
1839 if (Evalue(1421) > 0)
1840 {
1841 num = mana.max;
1842 }
1843 int num2 = (num * (base.ChildrenWeight * 100 / WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
1844 if (base.hp <= 0)
1845 {
1846 num2 *= 2;
1847 }
1848 DamageHP(num2, flag ? AttackSource.BurdenStairs : AttackSource.BurdenFallDown);
1849 }
Thing FindThing(Func< Thing, bool > func)
Definition: Map.cs:2592

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 3884 of file Chara.cs.

3885 {
3886 if (host != null)
3887 {
3888 host.SyncRide();
3889 }
3890 if (ride != null)
3891 {
3892 SyncRide(ride);
3893 }
3894 if (parasite != null)
3895 {
3897 }
3898 }

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 3900 of file Chara.cs.

3901 {
3902 if (!c.pos.Equals(pos))
3903 {
3904 if (!pos.IsValid)
3905 {
3906 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
3907 pos = new Point();
3908 }
3909 EClass._map.MoveCard(pos, c);
3910 }
3911 }

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

◆ TalkTopic()

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

Definition at line 6888 of file Chara.cs.

6889 {
6890 if (host == null && !IsInActiveZone)
6891 {
6892 return null;
6893 }
6894 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
6895 {
6896 return null;
6897 }
6898 if (IsPCParty)
6899 {
6900 int num = EClass.pc.party.members.Count - 1;
6901 switch (topic)
6902 {
6903 case "calm":
6904 if (EClass.rnd(num * 5) != 0)
6905 {
6906 return null;
6907 }
6908 break;
6909 case "aggro":
6910 if (EClass.rnd(num * 10) != 0)
6911 {
6912 return null;
6913 }
6914 break;
6915 case "kill":
6916 if (EClass.rnd(num * 3) != 0)
6917 {
6918 return null;
6919 }
6920 break;
6921 case "fov":
6922 return null;
6923 }
6924 }
6925 string topicText = GetTopicText(topic);
6926 if (topicText.IsEmpty())
6927 {
6928 return null;
6929 }
6930 string text = "_bracketTalk".lang();
6931 bool flag = topicText.StartsWith("*");
6932 bool flag2 = topicText.StartsWith("(");
6933 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
6934 topicText = ApplyTone(topicText);
6935 topicText = topicText.Replace("~", "*");
6936 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
6937 Msg.Say(topicText.Replace("&", ""));
6938 if (topic == "dead")
6939 {
6940 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
6941 }
6942 else if (flag || flag3 || flag2)
6943 {
6944 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
6945 }
6946 return topicText;
6947 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:6748
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:6827
string GetTopicText(string topic="calm")
Definition: Chara.cs:6855
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_Churyu.Run(), and AI_Idle.Run().

◆ Tick()

override void Chara.Tick ( )
inlinevirtual

Reimplemented from Card.

Definition at line 3913 of file Chara.cs.

3914 {
3915 SyncRide();
3916 combatCount--;
3917 ignoreSPAbsorb = false;
3918 if (IsPC)
3919 {
3920 if (hasMovedThisTurn)
3921 {
3922 pos.Things.ForeachReverse(delegate(Thing t)
3923 {
3925 {
3926 AI_Goto aI_Goto = ai.Current as AI_Goto;
3927 if ((aI_Goto == null && !(ai is GoalManualMove)) || (aI_Goto != null && !aI_Goto.dest.Equals(pos)))
3928 {
3929 return;
3930 }
3931 }
3932 t.trait.OnStepped(this);
3933 });
3934 if (isDead)
3935 {
3936 return;
3937 }
3938 hasMovedThisTurn = false;
3940 {
3941 EClass.player.haltMove = false;
3942 ActionMode.Adv.TryCancelInteraction(sound: false);
3943 EInput.Consume(1);
3944 return;
3945 }
3946 if (EClass._zone.IsRegion)
3947 {
3949 {
3950 foreach (Chara member in EClass.pc.party.members)
3951 {
3952 if (member.hunger.value > 65)
3953 {
3954 member.InstantEat(null, sound: false);
3955 }
3956 }
3957 }
3958 Chara chara = null;
3960 if (cell2 != null && (cell2.zone == null || (cell2.zone is Zone_Field && !cell2.zone.IsPCFaction)))
3961 {
3962 foreach (Chara chara2 in EClass._map.charas)
3963 {
3964 if (!chara2.IsPCFactionOrMinion && !chara2.IsGlobal && chara2.pos.Equals(EClass.pc.pos))
3965 {
3966 chara = chara2;
3967 break;
3968 }
3969 }
3970 }
3971 if (chara != null)
3972 {
3974 {
3975 EClass.player.safeTravel = 5 + EClass.rnd(5);
3976 }
3977 EClass._zone.RemoveCard(chara);
3978 Msg.Say("encounter");
3979 EClass.player.EnterLocalZone(encounter: true, chara);
3980 }
3981 else if (EClass.player.safeTravel <= 0)
3982 {
3983 if (cell2 != null && cell2.zone == null && !EClass.debug.ignoreEncounter)
3984 {
3986 if (!tileInfo.shore)
3987 {
3988 bool num = EClass.pc.HasCondition<ConWardMonster>();
3989 bool flag = EClass.pc.HasCondition<ConDrawMonster>();
3990 bool flag2 = EClass.game.quests.Get<QuestEscort>() != null;
3991 int num2 = (tileInfo.isRoad ? 22 : 12);
3992 if (flag2)
3993 {
3994 num2 = (tileInfo.isRoad ? 16 : 10);
3995 }
3996 if (num)
3997 {
3998 num2 *= (flag2 ? 2 : 20);
3999 }
4000 if (flag)
4001 {
4002 num2 /= 2;
4003 }
4004 if (EClass.rnd(num2) == 0)
4005 {
4006 Msg.Say("encounter");
4007 if (!flag)
4008 {
4009 EClass.player.safeTravel = 5 + EClass.rnd(5);
4010 }
4011 EClass.player.EnterLocalZone(encounter: true);
4012 }
4013 }
4014 }
4015 }
4016 else
4017 {
4019 }
4020 }
4021 }
4022 EClass.player.pickupDelay = 0f;
4023 if (EClass.player.returnInfo != null)
4024 {
4026 if (EClass.player.returnInfo.turns <= 0)
4027 {
4029 {
4030 EClass.player.returnInfo = null;
4032 }
4033 else
4034 {
4036 {
4037 int uidDest = EClass.player.returnInfo.uidDest;
4038 Zone zone = null;
4039 if (uidDest != 0)
4040 {
4041 zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
4042 }
4043 if (zone == null || zone.destryoed)
4044 {
4045 zone = EClass.world.region;
4046 }
4048 {
4049 Msg.Say("returnFail");
4050 }
4051 else
4052 {
4053 Msg.Say("returnComplete");
4054 EClass.player.uidLastTravelZone = 0;
4056 EClass.player.lastZonePos = null;
4057 }
4058 EClass.player.returnInfo = null;
4059 return;
4060 }
4061 EClass.player.returnInfo = null;
4062 Msg.Say("returnOverweight");
4063 }
4064 }
4065 }
4066 if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
4067 {
4069 return;
4070 }
4073 {
4074 RecipeUpdater.dirty = true;
4075 }
4077 }
4078 else
4079 {
4080 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (float)EClass.pc.Speed / (float)Speed);
4081 hasMovedThisTurn = false;
4082 }
4085 {
4086 return;
4087 }
4089 if (host != null && !consumeTurn)
4090 {
4091 if (host.ride == this && ((host.hasMovedThisTurn && IsInCombat) || (enemy != null && turn % 3 != 0)))
4092 {
4093 consumeTurn = true;
4094 }
4095 if (host.parasite == this && enemy != null && EClass.rnd(10) > EClass.rnd(host.Evalue(227) + 10))
4096 {
4097 if (Dist(enemy) < 3 && EClass.rnd(2) == 0)
4098 {
4099 Say("parasite_fail", this, host);
4100 if (EClass.rnd(2) == 0 && GetInt(106) == 0)
4101 {
4102 Talk("parasite_fail");
4103 }
4104 }
4105 consumeTurn = true;
4106 }
4107 }
4108 if (consumeTurn)
4109 {
4110 if (IsPC)
4111 {
4113 }
4114 }
4115 else
4116 {
4117 if (base.isRestrained)
4118 {
4119 TryUnrestrain();
4120 }
4121 if (enemy != null)
4122 {
4124 {
4125 enemy = null;
4126 }
4127 else if (!IsPC && (ai.CancelOnAggro || !ai.IsRunning))
4128 {
4129 SetAIAggro();
4130 }
4131 }
4132 if (HasNoGoal || !ai.IsRunning)
4133 {
4134 ChooseNewGoal();
4135 }
4136 ai.Tick();
4137 }
4138 Cell cell = base.Cell;
4140 {
4141 AddCondition<ConWet>(50);
4142 if (pos.IsHotSpring)
4143 {
4144 hygiene.Mod(2);
4145 }
4146 }
4147 if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode)
4148 {
4149 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
4150 }
4151 CellEffect e;
4152 if (cell.effect != null)
4153 {
4154 e = cell.effect;
4155 switch (e.id)
4156 {
4157 case 1:
4158 case 2:
4159 case 4:
4160 if (IsLevitating)
4161 {
4162 Say("levitating");
4163 break;
4164 }
4165 AddCondition<ConWet>(50);
4166 ProcEffect();
4167 break;
4168 case 3:
4169 PlaySound("fire_step");
4170 AddCondition<ConBurning>(30);
4171 break;
4172 case 5:
4173 if (!isWet)
4174 {
4175 PlaySound("bubble");
4176 AddCondition<ConWet>(30);
4177 ProcEffect();
4178 }
4179 break;
4180 case 6:
4181 if (hasMovedThisTurn)
4182 {
4183 Say("abMistOfDarkness_step", this);
4184 }
4185 break;
4186 }
4187 }
4188 if (IsPC)
4189 {
4190 if (EClass.player.currentHotItem.Thing != null)
4191 {
4193 }
4195 }
4196 void ClearEffect()
4197 {
4198 EClass._map.SetLiquid(cell.x, cell.z, 0, 0);
4199 }
4200 void ProcEffect()
4201 {
4202 if (e.idEffect != 0)
4203 {
4204 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
4205 {
4206 aliasEle = EClass.sources.elements.map[e.idEle].alias,
4207 n1 = e.n1,
4208 refVal = e.refVal
4209 });
4210 ClearEffect();
4211 }
4212 }
4213 }
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:65
void TryUnrestrain(bool force=false, Chara c=null)
Definition: Card.cs:7061
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:7469
int Speed
Definition: Chara.cs:1083
static bool consumeTurn
Definition: Chara.cs:180
void SetAIAggro()
Definition: Chara.cs:8766
bool ignoreSPAbsorb
Definition: Chara.cs:146
void ChooseNewGoal()
Definition: Chara.cs:8647
bool WillConsumeTurn()
Definition: Chara.cs:3643
bool ignoreEncounter
Definition: CoreDebug.cs:201
bool shore
Definition: EloMap.cs:50
TileInfo GetTileInfo(int gx, int gy)
Definition: EloMap.cs:286
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:1477
static string SayNothingHappen()
Definition: Msg.cs:96
int turns
Definition: Player.cs:84
bool haltMove
Definition: Player.cs:1171
float baseActTime
Definition: Player.cs:1199
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1941
HotItem currentHotItem
Definition: Player.cs:1100
int safeTravel
Definition: Player.cs:920
int eloY
Definition: Point.cs:81
int eloX
Definition: Point.cs:79
bool IsHotSpring
Definition: Point.cs:375
bool destryoed
Definition: Spatial.cs:45
virtual void OnTickHeld()
Definition: Trait.cs:1049
virtual bool IgnoreOnSteppedWhenMoving
Definition: Trait.cs:370
Definition: ActRef.cs:2

References EClass._map, EClass._zone, Game.activeZone, ActionMode.Adv, CoreConfig.GameConfig.alwaysUpdateRecipe, ConfigPreference.autoEat, Player.baseActTime, burden, Map.charas, Core.config, Game.config, EInput.Consume(), EClass.core, EClass.debug, Spatial.destryoed, Scene.elomap, Point.eloX, Point.eloY, Player.EnterLocalZone(), Point.Equals(), CoreConfig.game, EClass.game, QuestManager.Get(), EloMap.GetCell(), Stats.GetPhase(), EloMap.GetTileInfo(), Zone.GetTopZone(), Player.haltMove, HasCondition(), hunger, CoreDebug.ignoreEncounter, Trait.IgnoreOnSteppedWhenMoving, CoreDebug.ignoreWeight, InstantEat(), IsGlobal, Zone.IsPCFaction, Card.IsPCFactionOrMinion, Spatial.IsRegion, AIAct.IsRunning, Game.IsSurvival, SpatialManager.map, Party.members, MoveZone(), Trait.OnStepped(), party, EClass.pc, EClass.player, Card.pos, Game.Config.preference, Game.quests, World.region, Zone.RemoveCard(), Player.returnInfo, EClass.rnd(), Player.safeTravel, Msg.Say(), Msg.SayNothingHappen(), EClass.scene, EloMap.TileInfo.shore, Game.spatials, Player.stats, Card.trait, AM_Adv.TryCancelInteraction(), Player.ReturnInfo.turns, Player.Stats.turns, Player.ReturnInfo.uidDest, Stats.value, EClass.world, and EloMap.Cell.zone.

◆ TickConditions()

void Chara.TickConditions ( )
inline

Definition at line 3655 of file Chara.cs.

3656 {
3657 if (_cooldowns != null)
3658 {
3659 TickCooldown();
3660 }
3661 turn++;
3662 consumeTurn = false;
3663 preventRegen = false;
3664 emoIcon = Emo2.none;
3665 if (base.isSummon)
3666 {
3667 base.c_summonDuration--;
3668 if (base.c_summonDuration <= 0)
3669 {
3670 Die();
3671 return;
3672 }
3673 }
3675 {
3676 AddCondition<ConWet>(20);
3677 }
3678 switch (turn % 50)
3679 {
3680 case 0:
3681 happiness = (hunger.value + stamina.value + depression.value + bladder.value + hygiene.value) / 5;
3682 break;
3683 case 1:
3684 if (!IsPC || !EClass.debug.godMode)
3685 {
3686 if (EClass.rnd(2) == 0 && !HasCondition<ConAwakening>())
3687 {
3688 sleepiness.Mod(1);
3689 }
3690 if (EClass.rnd(3) == 0)
3691 {
3692 hunger.Mod(1);
3693 }
3694 if (IsPC && (sleepiness.GetPhase() != 0 || stamina.GetPhase() <= 1))
3695 {
3696 Tutorial.Play("sleep");
3697 }
3698 }
3699 break;
3700 case 2:
3701 if (parasite != null)
3702 {
3703 ModExp(227, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(227) - parasite.LV) * 25));
3704 }
3705 if (ride != null)
3706 {
3707 ModExp(226, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(226) - ride.LV) * 25));
3708 }
3709 break;
3710 case 3:
3711 {
3712 int phase = hygiene.GetPhase();
3713 int num = 0;
3714 num = ((!IsPC) ? ((phase > 3) ? 50 : 0) : ((phase > 3) ? 50 : 0));
3715 if (num > EClass.rnd(100))
3716 {
3717 hygiene.Mod(-1);
3718 }
3719 break;
3720 }
3721 case 5:
3722 case 30:
3724 {
3725 AddCondition<ConBurning>(1000, force: true);
3726 }
3727 break;
3728 case 15:
3729 if (HasElement(1250) && !HasCondition<ConVampire>())
3730 {
3731 AddCondition<ConVampire>();
3732 }
3733 break;
3734 }
3735 if (turn % 200 == 0)
3736 {
3738 }
3739 if (IsPCParty)
3740 {
3741 if (dirtyWeight)
3742 {
3743 CalcBurden();
3744 }
3745 int phase2 = burden.GetPhase();
3746 int phase3 = hunger.GetPhase();
3747 if (phase3 >= 4)
3748 {
3749 preventRegen = true;
3750 }
3751 if (EClass.rnd(EClass._zone.IsRegion ? 100 : 30) == 0 && phase2 >= 3)
3752 {
3753 Say("dmgBurden", this);
3754 DamageHP(MaxHP * (base.ChildrenWeight * 100 / WeightLimit) / 1000 + 1, AttackSource.Burden);
3755 if (isDead)
3756 {
3757 return;
3758 }
3759 }
3760 if (EClass.rnd(12) == 0)
3761 {
3762 if (IsPC)
3763 {
3764 if (phase2 > 0)
3765 {
3766 ModExp(207, 1 + phase2 * phase2);
3767 }
3768 }
3769 else
3770 {
3771 ModExp(207, 4);
3772 }
3773 }
3774 if (IsPC)
3775 {
3776 if (phase3 >= 5)
3777 {
3778 if (!(ai is AI_Eat) && EClass.rnd(5) == 0)
3779 {
3780 DamageHP(1 + EClass.rnd(2) + MaxHP / 50, AttackSource.Hunger);
3781 }
3782 if (!isDead && EClass.rnd(3) == 0)
3783 {
3784 stamina.Mod(-1);
3785 }
3786 }
3787 if (isDead)
3788 {
3789 return;
3790 }
3791 phase3 = stamina.GetPhase();
3792 if (phase3 <= 0)
3793 {
3794 preventRegen = true;
3795 }
3797 {
3798 if (EClass.rnd(100) == 0 && !isConfused)
3799 {
3800 Msg.Say("rain_confuse");
3801 AddCondition<ConConfuse>(500);
3802 }
3803 if (EClass.rnd(300) == 0 && !isBlind)
3804 {
3805 Msg.Say("rain_confuse");
3806 AddCondition<ConBlind>(200);
3807 }
3808 }
3809 if (turn % (200000 / Mathf.Max(100 + Evalue(409) * 10, 50)) == 0)
3810 {
3811 ModCorruption(1);
3812 }
3813 }
3814 }
3815 if (!IsPC)
3816 {
3817 int num2 = Evalue(409);
3818 if (num2 > 0 && turn % (200000 / Mathf.Max(100 + num2 * 10, 50)) == 0)
3819 {
3820 ModCorruption(1);
3821 }
3822 }
3823 for (int num3 = conditions.Count - 1; num3 >= 0; num3--)
3824 {
3825 if (num3 < conditions.Count)
3826 {
3827 Condition condition = conditions[num3];
3828 if (!condition.TimeBased)
3829 {
3830 condition.Tick();
3831 }
3832 if (!condition.IsKilled)
3833 {
3834 if (condition.ConsumeTurn)
3835 {
3836 consumeTurn = true;
3837 }
3838 if (condition.PreventRegen)
3839 {
3840 preventRegen = true;
3841 }
3842 if (condition.EmoIcon != 0 && condition.EmoIcon > emoIcon)
3843 {
3844 emoIcon = condition.EmoIcon;
3845 }
3846 }
3847 if (isDead)
3848 {
3849 return;
3850 }
3851 }
3852 }
3853 if (id == "tsunami")
3854 {
3855 if (elements.Base(79) < 30)
3856 {
3857 Die();
3858 return;
3859 }
3860 if (IsInCombat)
3861 {
3862 elements.SetTo(79, elements.Base(79) * 3 / 4);
3863 }
3864 }
3865 if (!preventRegen)
3866 {
3867 if (EClass.rnd(25) == 0 && base.hp < MaxHP)
3868 {
3869 HealHP(EClass.rnd(Evalue(300) / 3 + 1) + 1);
3870 elements.ModExp(300, 8f);
3871 }
3872 if (EClass.rnd(8) == 0 && mana.value < mana.max)
3873 {
3874 mana.Mod(EClass.rnd(Evalue(301) / 2 + 1) + 1);
3875 elements.ModExp(301, 8f);
3876 }
3877 if (EClass.rnd(20) == 0 && !IsPC && stamina.value < stamina.max)
3878 {
3879 stamina.Mod(EClass.rnd(5) + 1);
3880 }
3881 }
3882 }
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:85
void TickCooldown()
Definition: Chara.cs:8628
void DiminishTempElements(int a=1)
Definition: Chara.cs:10206
Emo2 emoIcon
Definition: Chara.cs:106
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Chara.cs:5253
bool isBlind
Definition: Chara.cs:130
static bool preventRegen
Definition: Chara.cs:182
void CalcBurden()
Definition: Chara.cs:1819
virtual bool IsKilled
Definition: Condition.cs:7
override void Tick()
Definition: Condition.cs:70
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 8628 of file Chara.cs.

8629 {
8630 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8631 {
8632 if (_cooldowns[num] % 1000 == 1)
8633 {
8634 _cooldowns.RemoveAt(num);
8635 }
8636 else
8637 {
8638 _cooldowns[num]--;
8639 }
8640 }
8641 if (_cooldowns.Count == 0)
8642 {
8643 _cooldowns = null;
8644 }
8645 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 9048 of file Chara.cs.

9049 {
9051 if (span != TimeTable.Span.Work && span != 0)
9052 {
9053 return;
9054 }
9055 WorkSummary workSummary = GetWorkSummary();
9056 if (span == TimeTable.Span.Work)
9057 {
9058 if (workSummary.work != null)
9059 {
9060 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
9061 }
9062 }
9063 else if (workSummary.hobbies.Count > 0)
9064 {
9065 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
9066 }
9067 }
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 1172 of file Chara.cs.

1173 {
1174 return base.Name + "(" + ai?.ToString() + ")" + pos?.ToString() + "/" + base.ExistsOnMap + "/" + isDead;
1175 }
override string ToString()
Definition: Point.cs:524

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 4327 of file Chara.cs.

4328 {
4329 if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
4330 {
4331 return;
4332 }
4333 Say("absorbRod", this, t);
4334 TraitRod rod = t.trait as TraitRod;
4335 bool flag = false;
4336 if (rod.source != null)
4337 {
4338 using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
4339 if (enumerator.MoveNext())
4340 {
4341 SourceElement.Row current = enumerator.Current;
4342 if (IsPC)
4343 {
4344 GainAbility(current.id, t.c_charges * 100, t);
4345 flag = true;
4346 }
4347 }
4348 }
4349 if (!flag)
4350 {
4351 mana.Mod(-50 * t.c_charges);
4352 }
4353 t.c_charges = 0;
4355 }
int c_charges
Definition: Card.cs:1269
void GainAbility(int ele, int mtp=100, Thing origin=null)
Definition: Chara.cs:9972

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 7249 of file Chara.cs.

7250 {
7251 if (!IsPCFaction && !IsGuest())
7252 {
7253 return null;
7254 }
7255 foreach (Card item in EClass._map.props.installed.all)
7256 {
7257 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7258 {
7259 traitBed.AddHolder(this);
7260 Msg.Say("claimBed", this);
7261 return traitBed;
7262 }
7263 }
7264 return null;
7265 }
bool CanAssign(Chara c)
Definition: TraitBed.cs:160

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 5556 of file Chara.cs.

5557 {
5559 {
5560 return;
5561 }
5562 int num = 0;
5563 bool flag = false;
5564 bool flag2 = false;
5565 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5566 TreasureType type = TreasureType.BossQuest;
5567 if (EClass._zone.Boss == this)
5568 {
5569 type = TreasureType.BossNefia;
5570 num = 2 + EClass.rnd(2);
5571 flag = (flag2 = true);
5572 EClass._zone.Boss = null;
5573 Msg.Say("boss_win", EClass._zone.Name);
5575 {
5576 Msg.Say("boss_win_void", EClass._zone.Name);
5577 EClass.player.flags.KilledBossInVoid = true;
5578 }
5579 if (EClass._zone.IsNefia)
5580 {
5583 SE.Play("Jingle/fanfare2");
5584 EClass._zone.SetBGM(114, refresh: true, 3f);
5585 }
5588 }
5589 switch (id)
5590 {
5591 case "vernis_boss":
5592 num = 5;
5593 flag = (flag2 = true);
5594 EClass.Sound.StopBGM(3f);
5595 EClass._zone.SetBGM(1, refresh: false);
5596 if (EClass.game.quests.GetPhase<QuestVernis>() == 8)
5597 {
5598 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5599 }
5600 break;
5601 case "lurie_boss":
5602 if (!(EClass._zone is Zone_Exile))
5603 {
5604 num = 5;
5605 flag = (flag2 = true);
5606 EClass._zone.SetBGM(120, refresh: true, 3f);
5608 {
5609 EClass.game.quests.Get<QuestNegotiationDarkness>().ChangePhase(4);
5610 EClass.player.flags.killedDuponne = true;
5611 }
5612 }
5613 break;
5614 case "ungaga_pap":
5615 num = 5;
5616 flag = (flag2 = true);
5618 {
5619 EClass._zone.SetBGM(46, refresh: true, 3f);
5620 }
5621 break;
5622 case "melilith_boss":
5623 num = 5;
5624 flag = (flag2 = true);
5625 EClass.Sound.StopBGM(3f);
5626 EClass._zone.SetBGM(1, refresh: false);
5627 break;
5628 case "doga":
5629 {
5630 QuestCurry questCurry = EClass.game.quests.Get<QuestCurry>();
5631 if (questCurry != null)
5632 {
5633 num = 5;
5634 flag = (flag2 = true);
5635 EClass.Sound.StopBGM(3f);
5636 EClass._zone.SetBGM(1, refresh: false);
5637 questCurry.NextPhase();
5638 }
5639 break;
5640 }
5641 case "fairy_raina":
5642 case "fairy_poina":
5643 {
5644 bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
5645 QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
5646 if (num2 && questNasu != null && questNasu.phase <= 1)
5647 {
5648 if (questNasu.phase == 0)
5649 {
5650 questNasu.NextPhase();
5651 }
5652 num = 5;
5653 flag = (flag2 = true);
5654 EClass.Sound.StopBGM(3f);
5655 EClass._zone.SetBGM(1, refresh: false);
5656 EClass.player.DropReward(ThingGen.Create("backpack_holding"));
5657 questNasu.NextPhase();
5658 }
5659 break;
5660 }
5661 case "isygarad":
5662 {
5663 num = 5;
5664 flag = (flag2 = true);
5665 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5666 if (questExploration != null)
5667 {
5668 SE.Play("kill_boss");
5669 questExploration.ChangePhase(3);
5670 EClass.Sound.StopBGM(3f);
5671 EClass._zone.SetBGM(1, refresh: false);
5672 }
5673 break;
5674 }
5675 case "swordkeeper":
5676 num = 10;
5677 flag = true;
5678 SE.Play("kill_boss");
5679 SoundManager.ForceBGM();
5680 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5681 break;
5682 }
5683 if (flag)
5684 {
5685 SE.Play("kill_boss");
5686 }
5687 if (num != 0)
5688 {
5690 {
5691 EClass.player.stats.deepest = EClass._zone.DangerLv;
5692 Msg.Say("update_deepest", EClass.player.stats.deepest.ToString() ?? "");
5693 }
5695 {
5696 EClass.player.stats.deepestVoid = -EClass._zone.lv;
5697 Msg.Say("update_deepest_void", EClass.player.stats.deepestVoid.ToString() ?? "");
5698 }
5699 EClass.player.willAutoSave = true;
5700 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5701 point.SetBlock();
5702 point.SetObj();
5703 EClass._zone.AddCard(thing, point).Install();
5704 ThingGen.TryLickChest(thing);
5705 }
5706 if (flag2)
5707 {
5709 }
5710 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:419
int deepest
Definition: Player.cs:114
long nefiaBeaten
Definition: Player.cs:136
int deepestVoid
Definition: Player.cs:117
void ModFame(int a)
Definition: Player.cs:2089
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:928
void SetBlock(int idMat=0, int idBlock=0)
Definition: Point.cs:918
int phase
Definition: Quest.cs:40
void NextPhase()
Definition: Quest.cs:572
void ChangePhase(int a)
Definition: Quest.cs:577
bool isConquered
Definition: Spatial.cs:382
static void TryLickChest(Thing chest)
Definition: ThingGen.cs:409
static Thing CreateTreasure(string id, int lv, TreasureType type=TreasureType.Map)
Definition: ThingGen.cs:256
static Thing CreateScroll(int ele, int num=1)
Definition: ThingGen.cs:182
virtual bool IsNefia
Definition: Zone.cs:282
void SetBGM(List< int > ids, bool refresh=true, float fadeDuration=0f)
Definition: Zone.cs:2923
Chara Boss
Definition: Zone.cs:83

References EClass._map, EClass._zone, LayerDrama.Activate(), Zone.AddCard(), Zone.Boss, Quest.ChangePhase(), ThingGen.Create(), ThingGen.CreateScroll(), ThingGen.CreateTreasure(), Zone.DangerLv, EClass.debug, Player.Stats.deepest, Player.Stats.deepestVoid, Player.DropReward(), CoreDebug.enable, Map.FindChara(), Player.flags, EClass.game, QuestManager.Get(), Point.GetNearestPoint(), Zone.GetTopZone(), Card.Install(), Spatial.isConquered, Zone.IsNefia, Player.Flags.KilledBossInVoid, Spatial.lv, Player.ModFame(), Player.ModKarma(), Spatial.Name, Player.Stats.nefiaBeaten, Quest.NextPhase(), Quest.phase, 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 4544 of file Chara.cs.

4545 {
4546 if (held != null && held.trait.CanOnlyCarry)
4547 {
4548 DropHeld();
4549 }
4550 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4551 {
4552 DropThing(item);
4553 }
4554 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4576

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

◆ TryEquip()

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

Definition at line 7623 of file Chara.cs.

7624 {
7625 if (!ShouldEquip(t, useFav))
7626 {
7627 return false;
7628 }
7629 if (t.category.slot == 0)
7630 {
7631 return false;
7632 }
7633 if (useFav)
7634 {
7635 BodySlot slot = body.GetSlot(t);
7636 switch (GetFavAttackStyle())
7637 {
7638 case AttackStyle.Default:
7639 case AttackStyle.TwoHand:
7640 if (t.IsMeleeWeapon)
7641 {
7642 slot = body.slotMainHand;
7643 }
7644 break;
7645 case AttackStyle.Shield:
7646 if (t.IsMeleeWeapon)
7647 {
7648 slot = body.slotMainHand;
7649 }
7650 break;
7651 }
7652 body.Equip(t, slot);
7653 }
7654 else
7655 {
7656 body.Equip(t);
7657 }
7658 Say("equip", this, t);
7659 return true;
7660 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7511

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 7743 of file Chara.cs.

7744 {
7745 if (IsPC)
7746 {
7748 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
7749 {
7750 ranged = thing;
7751 return true;
7752 }
7753 return false;
7754 }
7755 if (ranged != null && ranged.parent == this)
7756 {
7757 return true;
7758 }
7760 return ranged != null;
7761 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:7728

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 7667 of file Chara.cs.

7668 {
7669 Thing dest = null;
7670 if (IsPC)
7671 {
7673 {
7674 return FindThrowable(hotbar: true);
7675 }
7676 return null;
7677 }
7678 things.Foreach(delegate(Thing t)
7679 {
7680 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7681 {
7682 dest = t;
7683 }
7684 });
7685 return dest;
7686 Thing FindThrowable(bool hotbar)
7687 {
7688 things.Foreach(delegate(Thing t)
7689 {
7690 if (dest == null)
7691 {
7692 if (t.IsHotItem)
7693 {
7694 if (!hotbar)
7695 {
7696 return;
7697 }
7698 }
7699 else if (hotbar)
7700 {
7701 return;
7702 }
7703 if (t.HasTag(CTAG.throwWeapon))
7704 {
7705 dest = t;
7706 }
7707 }
7708 });
7709 return dest;
7710 }
7711 }

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 4405 of file Chara.cs.

4406 {
4407 if (held == t)
4408 {
4409 return true;
4410 }
4411 if (t.isDestroyed || t.Num <= 0)
4412 {
4413 return false;
4414 }
4415 if (!CanPick(t))
4416 {
4417 if (t.parent == null)
4418 {
4419 EClass._zone.AddCard(t, pos);
4420 }
4421 return false;
4422 }
4423 HoldCard(t, num);
4424 return true;
4425 }
bool CanPick(Card c)
Definition: Chara.cs:4225
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4427

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 7889 of file Chara.cs.

7890 {
7891 int num = Evalue(289);
7892 if (num == 0)
7893 {
7894 return false;
7895 }
7896 int lV = t.LV;
7897 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
7898 {
7899 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
7900 int num2 = 50;
7901 if (lV > num)
7902 {
7903 num2 += (lV - num) * 10;
7904 }
7905 elements.ModExp(289, Mathf.Min(num2, 1000));
7906 return true;
7907 }
7908 return false;
7909 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:2065

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 2710 of file Chara.cs.

2711 {
2712 foreach (Condition condition in conditions)
2713 {
2714 if (!condition.TryMove(newPoint))
2715 {
2716 return MoveResult.Fail;
2717 }
2718 }
2719 if (base.isRestrained)
2720 {
2721 if (!IsPC)
2722 {
2723 return MoveResult.Fail;
2724 }
2725 base.isRestrained = false;
2726 }
2727 if (!CanMoveTo(newPoint, allowDestroyPath))
2728 {
2729 return MoveResult.Fail;
2730 }
2731 return _Move(newPoint);
2732 }
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 2670 of file Chara.cs.

2671 {
2673 {
2674 return MoveResult.Fail;
2675 }
2676 Point point = p.Copy();
2677 int num = p.x - pos.x;
2678 int num2 = p.z - pos.z;
2679 if (num > 1)
2680 {
2681 num = 1;
2682 }
2683 else if (num < -1)
2684 {
2685 num = -1;
2686 }
2687 if (num2 > 1)
2688 {
2689 num2 = 1;
2690 }
2691 else if (num2 < -1)
2692 {
2693 num2 = -1;
2694 }
2695 if (num == 0 && num2 == 0)
2696 {
2697 num = EClass.rnd(3) - 1;
2698 num2 = EClass.rnd(3) - 1;
2699 }
2700 point.Set(pos);
2701 point.x -= num;
2702 point.z -= num2;
2703 if (point.IsValid && !point.HasChara)
2704 {
2705 return TryMove(point, allowDestroyPath: false);
2706 }
2707 return MoveResult.Fail;
2708 }
bool TooHeavyToMove()
Definition: Player.cs:2553

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 2608 of file Chara.cs.

2609 {
2610 if (p.Equals(pos))
2611 {
2612 return MoveResult.Success;
2613 }
2615 {
2616 return MoveResult.Fail;
2617 }
2618 bool flag = true;
2619 Point point = null;
2620 _sharedPos.Set(p);
2621 if (CanDestroyPath())
2622 {
2624 {
2625 return MoveResult.Success;
2626 }
2627 Debug.Log(CanMoveTo(pos));
2629 }
2630 int num = pos.Distance(p);
2631 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2632 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2633 {
2634 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2635 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2636 {
2637 return MoveResult.Success;
2638 }
2639 }
2640 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2641 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2642 {
2643 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2644 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2645 {
2646 return MoveResult.Success;
2647 }
2648 }
2649 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2650 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2651 {
2652 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2653 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2654 {
2655 return MoveResult.Success;
2656 }
2657 }
2658 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2659 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2660 {
2661 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2662 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2663 {
2664 return MoveResult.Success;
2665 }
2666 }
2667 return MoveResult.Fail;
2668 }
static Point _sharedPos
Definition: Chara.cs:174
void RequestPathImmediate(PathProgress progress)
Definition: PathManager.cs:41
List< PathFinderNode > nodes
Definition: PathProgress.cs:16
Point GetPointTowards(Point dest)
Definition: Point.cs:801

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 9521 of file Chara.cs.

9522 {
9523 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9524 {
9525 return false;
9526 }
9527 if (TC.hp > (long)TC.MaxHP * (long)Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) / 100)
9528 {
9529 return false;
9530 }
9531 if (TC.HasElement(427))
9532 {
9533 return false;
9534 }
9535 if (TC.IsPC && EClass.player.invlunerable)
9536 {
9537 return false;
9538 }
9539 PlaySound("hit_finish");
9540 Say("finish");
9541 Say("finish2", this, TC);
9542 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9543 return false;
9544 }
@ harvest
bool invlunerable
Definition: Player.cs:1173
Definition: TC.cs:4

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

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 9996 of file Chara.cs.

9997 {
9998 if (IsPCParty)
9999 {
10000 foreach (Chara member in EClass.pc.party.members)
10001 {
10002 if (member.HasElement(1641) && EClass.rnd(3) != 0)
10003 {
10004 Msg.Say("curse_nullify", member);
10005 return true;
10006 }
10007 }
10008 }
10009 else if (HasElement(1641) && EClass.rnd(3) != 0)
10010 {
10011 Say("curse_nullify", this);
10012 return true;
10013 }
10014 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
10015 {
10016 Say("curse_nullify", this);
10017 return true;
10018 }
10019 return false;
10020 }

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

◆ TryPickGroundItem()

void Chara.TryPickGroundItem ( )
inline

Definition at line 4381 of file Chara.cs.

4382 {
4383 foreach (Card item in pos.ListCards())
4384 {
4385 if ((IsPC || !(EClass.pc.ai is AI_UseCrafter aI_UseCrafter) || !aI_UseCrafter.ings.Contains(item)) && item.isThing && item.placeState == PlaceState.roaming && CanPick(item))
4386 {
4387 Thing thing = Pick(item.Thing);
4388 if (thing != null && !IsPC)
4389 {
4390 thing.isNPCProperty = true;
4391 }
4392 break;
4393 }
4394 }
4395 }

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4313 of file Chara.cs.

4314 {
4315 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4316 {
4317 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)
4318 .id;
4319 Say("poisonDrip", this);
4320 int num = t.Num;
4321 t.Destroy();
4322 t = ThingGen.Create(text).SetNum(num);
4323 }
4324 return t;
4325 }
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 3207 of file Chara.cs.

3208 {
3209 List<Chara> list = point.ListCharas();
3210 if (list.Count == 0)
3211 {
3212 return;
3213 }
3214 list.Copy().ForeachReverse(delegate(Chara c)
3215 {
3216 if (!c.ai.IsMoveAI && !c.IsPC && c.trait.CanBePushed && c != this && !c.noMove && (!EClass._zone.IsRegion || c.IsPCFactionOrMinion))
3217 {
3218 List<Point> list2 = new List<Point>();
3219 for (int i = point.x - 1; i <= point.x + 1; i++)
3220 {
3221 for (int j = point.z - 1; j <= point.z + 1; j++)
3222 {
3223 if (i != point.x || j != point.z)
3224 {
3225 Point point2 = new Point(i, j);
3226 if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
3227 {
3228 list2.Add(point2);
3229 }
3230 }
3231 }
3232 }
3233 if (list2.Count > 0)
3234 {
3235 if (list2.Count > 1)
3236 {
3237 list2.ForeachReverse(delegate(Point p)
3238 {
3239 if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
3240 {
3241 list2.Remove(p);
3242 }
3243 });
3244 }
3245 Point newPoint = list2.RandomItem();
3246 if (IsPC)
3247 {
3248 Say("displace", this, c);
3249 PlaySound("push");
3250 }
3251 else if (c.isSynced)
3252 {
3253 c.PlayEffect("push");
3254 }
3255 c.MoveByForce(newPoint, this, checkWall: true);
3256 if (!c.IsPC && c.trait is TraitRogue && EClass.rnd(3) == 0 && GetCurrency() > 20 && !HasElement(426))
3257 {
3258 int num = EClass.rndHalf(10 + Mathf.Min(GetCurrency() / 100, 1000));
3259 c.Talk("pushed");
3260 Say("pushed_money", this, c);
3261 ModCurrency(-num);
3262 c.ModCurrency(num);
3263 c.PlaySound("steal_money");
3264 }
3265 else if (IsPC && !c.IsPCParty && !c.IsUnique && c.IsHumanSpeak && EClass.rnd(5) == 0)
3266 {
3267 c.Talk("pushed");
3268 }
3269 }
3270 }
3271 });
3272 }
bool IsMoveAI
Definition: AIAct.cs:55
bool IsHumanSpeak
Definition: Chara.cs:1015

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 4397 of file Chara.cs.

4398 {
4399 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4400 {
4401 EClass._zone.AddCard(t, pos);
4402 }
4403 }
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2102

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 7300 of file Chara.cs.

7301 {
7303 }
void TryPutSharedItems(IEnumerable< Thing > containers, bool msg=true)
Definition: Chara.cs:7267
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 7267 of file Chara.cs.

7268 {
7269 if (GetInt(113) != 0)
7270 {
7271 return;
7272 }
7273 _ListItems.Clear();
7274 Thing bestRangedWeapon = GetBestRangedWeapon();
7275 foreach (Thing thing in things)
7276 {
7277 if (!thing.IsAmmo)
7278 {
7279 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
7280 {
7281 _ListItems.Add(thing);
7282 }
7283 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
7284 {
7285 _ListItems.Add(thing);
7286 }
7287 }
7288 }
7289 if (_ListItems.Count == 0)
7290 {
7291 return;
7292 }
7293 List<Thing> containers2 = containers.ToList();
7294 foreach (Thing listItem in _ListItems)
7295 {
7296 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
7297 }
7298 }
void Add(Act a, string s="")
Definition: ActPlan.cs:11
static List< Thing > _ListItems
Definition: Chara.cs:190

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 4357 of file Chara.cs.

4358 {
4359 if (t.id == "axe")
4360 {
4361 Tutorial.Reserve("tool");
4362 }
4363 if (t.category.id == "mushroom")
4364 {
4365 Tutorial.Reserve("food");
4366 }
4367 if (t.category.id == "herb")
4368 {
4369 Tutorial.Reserve("herb");
4370 }
4371 if (t.id == "pasture")
4372 {
4373 Tutorial.Reserve("pasture");
4374 }
4375 if (t.id == "log")
4376 {
4377 Tutorial.Reserve("process");
4378 }
4379 }

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4638 of file Chara.cs.

4639 {
4640 isOnCreate = onCreate;
4641 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4642 {
4643 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4644 }
4645 RestockInventory(onCreate);
4646 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:4932
void RestockEquip(bool onCreate)
Definition: Chara.cs:4648

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

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

◆ TrySetEnemy()

void Chara.TrySetEnemy ( Chara  c)
inline

Definition at line 6244 of file Chara.cs.

6245 {
6246 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))
6247 {
6248 SetEnemy(c);
6249 }
6250 }

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 7305 of file Chara.cs.

7306 {
7308 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7305

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 7310 of file Chara.cs.

7311 {
7312 if (base.isSummon || (memberType == FactionMemberType.Livestock && homeBranch != null && !homeBranch.policies.IsActive(2715)))
7313 {
7314 return;
7315 }
7316 int num = 2;
7317 int num2 = 2;
7318 bool flag = GetInt(113) == 0;
7319 int num3 = 2;
7320 int num4 = 2;
7321 int num5 = 2;
7323 {
7324 num4 = 0;
7325 num5 = 0;
7326 }
7327 foreach (Thing thing3 in things)
7328 {
7329 if (CanEat(thing3, shouldEat))
7330 {
7331 num -= thing3.Num;
7332 }
7333 if (thing3.trait.GetHealAction(this) != null)
7334 {
7335 num2 -= thing3.Num;
7336 }
7337 if (thing3.id == "polish_powder")
7338 {
7339 num3 -= thing3.Num;
7340 }
7341 if (thing3.trait is TraitBlanketColdproof)
7342 {
7343 num4 -= thing3.Num;
7344 }
7345 if (thing3.trait is TraitBlanketFireproof)
7346 {
7347 num5 -= thing3.Num;
7348 }
7349 }
7350 _ListItems.Clear();
7351 foreach (Thing container in containers)
7352 {
7353 if (!container.IsSharedContainer)
7354 {
7355 continue;
7356 }
7357 foreach (Thing thing4 in container.things)
7358 {
7359 if (!thing4.c_isImportant && thing4.IsIdentified)
7360 {
7361 if (num3 > 0 && thing4.id == "polish_powder")
7362 {
7363 _ListItems.Add(thing4);
7364 num3 -= thing4.Num;
7365 }
7366 else if (num4 > 0 && !HasElement(1236) && thing4.trait is TraitBlanketColdproof)
7367 {
7368 _ListItems.Add(thing4);
7369 num4 -= thing4.Num;
7370 }
7371 else if (num5 > 0 && thing4.trait is TraitBlanketFireproof)
7372 {
7373 _ListItems.Add(thing4);
7374 num5 -= thing4.Num;
7375 }
7376 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant)
7377 {
7378 _ListItems.Add(thing4);
7379 num -= thing4.Num;
7380 }
7381 else if (num2 > 0 && thing4.trait.GetHealAction(this) != null)
7382 {
7383 _ListItems.Add(thing4);
7384 num2 -= thing4.Num;
7385 }
7386 else if (flag && thing4.IsEquipmentOrRanged && !thing4.HasTag(CTAG.gift) && ShouldEquip(thing4, useFav: true))
7387 {
7388 _ListItems.Add(thing4);
7389 }
7390 }
7391 }
7392 }
7393 if (_ListItems.Count == 0)
7394 {
7395 return;
7396 }
7397 _ListItems.ForeachReverse(delegate(Thing t)
7398 {
7399 if (t.IsEquipmentOrRanged)
7400 {
7401 bool flag3 = false;
7402 int slot = t.category.slot;
7403 int equipValue = t.GetEquipValue();
7404 foreach (Thing listItem in _ListItems)
7405 {
7406 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
7407 {
7408 flag3 = true;
7409 break;
7410 }
7411 }
7412 if (flag3)
7413 {
7414 _ListItems.Remove(t);
7415 }
7416 }
7417 });
7418 bool flag2 = false;
7419 foreach (Thing listItem2 in _ListItems)
7420 {
7421 Thing thing = listItem2;
7422 if (things.IsFull(thing))
7423 {
7424 break;
7425 }
7426 Thing thing2 = listItem2.parent as Thing;
7427 if (thing.Num > 2)
7428 {
7429 thing = thing.Split(2);
7430 }
7431 if (msg)
7432 {
7433 Say("takeSharedItem", this, thing, thing2.GetName(NameStyle.Full));
7434 }
7435 AddCard(thing);
7436 if (ShouldEquip(thing, useFav: true) && thing.category.slot != 0)
7437 {
7438 TryEquip(thing, useFav: true);
7439 flag2 = true;
7440 }
7441 }
7442 if (flag2 && flag)
7443 {
7444 TryPutSharedItems(containers);
7445 }
7446 }
bool IsIdentified
Definition: Card.cs:2377
bool HasItemProtection
bool IsActive(int id, int days=-1)
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:531
bool IsSharedContainer
Definition: Thing.cs:112

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 8447 of file Chara.cs.

8448 {
8449 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
8450 {
8451 return;
8452 }
8453 for (int i = 0; i < 100; i++)
8454 {
8455 if (base.feat == 0)
8456 {
8457 break;
8458 }
8459 if (base.c_upgrades == null)
8460 {
8461 base.c_upgrades = new CharaUpgrade();
8462 }
8463 if (base.c_upgrades.halt)
8464 {
8465 break;
8466 }
8467 Rand.SetSeed(base.uid + base.c_upgrades.count);
8468 int num = EClass.rnd(100);
8469 int num2 = 0;
8470 int num3 = 1;
8471 int num4 = 0;
8472 bool flag = false;
8473 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
8474 List<Element> list = ListAvailabeFeats(pet: true);
8475 if (num >= 90 && list.Count > 0)
8476 {
8477 Element element = list.RandomItem();
8478 num2 = element.id;
8479 num4 = element.CostLearn;
8480 }
8481 else if (num >= 60 && ie.Any())
8482 {
8483 num2 = ie.RandomItem().id;
8484 num4 = 3;
8485 }
8486 else
8487 {
8488 num2 = Element.List_MainAttributesMajor.RandomItem();
8489 num4 = 1;
8490 num3 = 2;
8491 flag = true;
8492 }
8493 Rand.SetSeed();
8494 if (num4 > base.feat)
8495 {
8496 break;
8497 }
8498 base.feat -= num4;
8499 base.c_upgrades.count++;
8500 base.c_upgrades.spent += num4;
8501 bool flag2 = false;
8502 if (flag)
8503 {
8504 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8505 {
8506 if (item.idEle == num2)
8507 {
8508 item.value += num3;
8509 item.cost += num4;
8510 flag2 = true;
8511 break;
8512 }
8513 }
8514 }
8515 if (!flag2)
8516 {
8517 base.c_upgrades.items.Add(new CharaUpgrade.Item
8518 {
8519 idEle = num2,
8520 value = num3,
8521 cost = num4
8522 });
8523 }
8524 SourceElement.Row row = EClass.sources.elements.map[num2];
8525 if (row.category == "feat")
8526 {
8527 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8528 }
8529 else if (elements.ValueWithoutLink(row.id) == 0)
8530 {
8531 elements.Learn(row.id);
8532 }
8533 else
8534 {
8535 elements.ModBase(num2, num3);
8536 }
8537 }
8538 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:9756
void Learn(int ele, int v=1)
virtual int CostLearn
Definition: ELEMENT.cs:314
static int[] List_MainAttributesMajor
Definition: ELEMENT.cs:242
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 7772 of file Chara.cs.

7773 {
7774 if (t.id == "338")
7775 {
7776 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
7777 if (thing != null)
7778 {
7779 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
7780 SE.Change();
7781 t.trait.OnBlend(thing, this);
7782 return true;
7783 }
7784 return false;
7785 }
7786 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
7787 {
7788 return false;
7789 }
7790 if (t.id == "cigar")
7791 {
7792 (t.trait as TraitItemProc).OnUse(this);
7793 return true;
7794 }
7795 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
7796 {
7798 {
7799 target = t
7800 });
7801 return true;
7802 }
7803 if (t.trait.CanDrink(this))
7804 {
7805 Drink(t);
7806 return true;
7807 }
7808 if (t.trait.CanRead(this))
7809 {
7811 {
7812 target = t
7813 });
7814 return true;
7815 }
7816 if (base.hp < MaxHP * 90 / 100)
7817 {
7818 Action healAction = t.trait.GetHealAction(this);
7819 if (healAction != null)
7820 {
7821 healAction();
7822 return true;
7823 }
7824 }
7825 return false;
7826 }
bool isAcidproof
Definition: Card.cs:686
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8808
virtual bool CanRead(Chara c)
Definition: Trait.cs:968
virtual bool CanDrink(Chara c)
Definition: Trait.cs:986
virtual void OnBlend(Thing t, Chara c)
Definition: Trait.cs:612

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(), QuestDeliver.Deliver(), and AI_Idle.Run().

◆ TryWorkOutside()

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

Definition at line 9069 of file Chara.cs.

9070 {
9071 if (EClass.world.date.IsExpired(GetInt(51)))
9072 {
9073 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
9074 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
9075 homeBranch.expeditions.Add(expedition);
9076 return true;
9077 }
9078 return false;
9079 }
ExpeditionType
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 3566 of file Chara.cs.

3567 {
3568 if (IsPCC)
3569 {
3570 if (base.dir == 0)
3571 {
3572 angle = 225f;
3573 }
3574 else if (base.dir == 1)
3575 {
3576 angle = 135f;
3577 }
3578 else if (base.dir == 2)
3579 {
3580 angle = 45f;
3581 }
3582 else if (base.dir == 3)
3583 {
3584 angle = -45f;
3585 }
3586 }
3587 else if (base.dir == 0)
3588 {
3589 angle = 165f;
3590 }
3591 else if (base.dir == 1)
3592 {
3593 angle = 300f;
3594 }
3595 else if (base.dir == 2)
3596 {
3597 angle = 0f;
3598 }
3599 else if (base.dir == 3)
3600 {
3601 angle = 120f;
3602 }
3603 }

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3627 of file Chara.cs.

3628 {
3629 int num = 4;
3630 for (int i = -num; i < num + 1; i++)
3631 {
3632 for (int j = -num; j < num + 1; j++)
3633 {
3634 shared.Set(pos.x + i, pos.z + j);
3635 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3636 {
3637 _ = 1;
3638 }
3639 }
3640 }
3641 }
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 5771 of file Chara.cs.

5772 {
5773 if (HasCooldown(a.id))
5774 {
5775 return false;
5776 }
5777 if (a.source.proc.TryGet(0) == "Heal" && HasElement(1422) && !IsPC)
5778 {
5779 List<int> list = new List<int> { 8400, 8401, 8402, 8403, 8404, 8405 };
5780 int num = list.IndexOf(a.id);
5781 if (num != -1)
5782 {
5783 int num2 = list.TryGet(num + Evalue(1422));
5784 a = elements.GetElement(num2)?.act ?? ACT.Create(num2);
5785 }
5786 }
5787 int num3 = 1;
5788 Act.Cost cost = a.GetCost(this);
5789 a.GetPower(this);
5790 int i = 1;
5791 int num4 = 0;
5792 bool flag = a.IsTargetHostileParty();
5793 if (IsPC && HasCondition<StanceManaCost>())
5794 {
5795 num4 = Evalue(1657);
5796 }
5797 _pts.Clear();
5798 if (a.TargetType.ForceParty)
5799 {
5800 pt = true;
5801 }
5802 if (pt)
5803 {
5804 i = 0;
5805 if (flag)
5806 {
5807 ForeachEnemy(delegate
5808 {
5809 i++;
5810 });
5811 }
5812 else
5813 {
5814 ForeachParty(delegate
5815 {
5816 i++;
5817 });
5818 }
5819 }
5820 if (a is Spell && IsPC && a.vPotential < i)
5821 {
5822 i = 1;
5823 _pts.Clear();
5824 _pts.Add(this);
5825 pt = false;
5826 }
5827 int num5 = 100;
5828 if (!a.TargetType.ForceParty && i > 1)
5829 {
5830 num5 = (IsPC ? (i * 100) : (50 + i * 50));
5831 }
5832 int num6 = cost.cost * num5 / 100;
5833 if (cost.type == Act.CostType.MP && Evalue(483) > 0)
5834 {
5835 num6 = num6 * 100 / (100 + (int)Mathf.Sqrt(Evalue(483) * 10) * 3);
5836 }
5837 if (i == 0)
5838 {
5839 if (IsPC)
5840 {
5842 }
5843 return false;
5844 }
5845 if (!IsPC && cost.type == Act.CostType.MP && mana.value < 0 && (EClass.rnd(4) != 0 || IsPCFaction || (base.IsPowerful && mana.value < -20)))
5846 {
5847 return false;
5848 }
5849 if (IsPC)
5850 {
5851 if (!Dialog.warned && cost.type == Act.CostType.MP && cost.cost > 0 && mana.value < num6 && !EClass.debug.godMode)
5852 {
5853 ActPlan.warning = true;
5854 Dialog.TryWarnMana(delegate
5855 {
5856 if (UseAbility(a, tc, pos, pt))
5857 {
5859 }
5860 });
5861 return false;
5862 }
5863 EClass.ui.CloseLayers();
5864 }
5865 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))
5866 {
5867 Say("shakeHead", this);
5868 return true;
5869 }
5870 if (tc != null && tc != this)
5871 {
5872 LookAt(tc.pos);
5873 }
5874 if (pos != null && !base.pos.Equals(pos))
5875 {
5876 LookAt(pos);
5877 }
5878 if (a.CanRapidFire && HasElement(1648))
5879 {
5880 num3 = 1 + Evalue(1648);
5881 }
5882 if (IsPC && cost.cost > 0 && a.Value == 0)
5883 {
5885 return false;
5886 }
5887 if (a is Spell)
5888 {
5889 string s = (isConfused ? "_cast_confuse" : (HasCondition<ConDim>() ? "_cast_dim" : ""));
5890 if (!a.source.tag.Contains("useHand"))
5891 {
5892 Say(race.castStyle.IsEmpty("cast"), this, a.source.GetName().ToLower(), s.lang());
5893 }
5894 if (IsPC)
5895 {
5896 _ = (i + 1) / 2;
5897 if (a.vPotential < i)
5898 {
5899 Msg.Say("noSpellStock");
5900 EInput.Consume();
5901 return false;
5902 }
5903 if (num4 > 0 && a.vPotential >= i * 2)
5904 {
5905 a.vPotential -= i * 2;
5906 num6 = num6 * (100 - num4 * 20) / 100;
5907 }
5908 else
5909 {
5910 a.vPotential -= i;
5911 }
5913 }
5914 }
5915 else if (a.source.langAct.Length != 0 && tc != null)
5916 {
5917 string text = a.source.langAct[0];
5918 string text2 = ((a.source.langAct.Length >= 2) ? a.source.langAct[1] : "");
5919 if (text == "spell_hand")
5920 {
5921 string[] list2 = Lang.GetList("attack" + race.meleeStyle.IsEmpty("Touch"));
5922 string @ref = text2.lang(list2[4]);
5923 Say(tc.IsPCParty ? "cast_hand_ally" : "cast_hand", this, tc, @ref, tc.IsPCParty ? list2[1] : list2[2]);
5924 }
5925 else
5926 {
5927 Say(text, this, tc, text2.IsEmpty() ? "" : text2.lang());
5928 }
5929 if (a.source.id == 6630)
5930 {
5931 Talk("insult_" + (base.IsMale ? "m" : "f"));
5932 }
5933 }
5934 switch (cost.type)
5935 {
5936 case Act.CostType.MP:
5937 if (Evalue(1421) >= 2 && base.hp <= MaxHP / (9 - Evalue(1421) * 2))
5938 {
5939 num6 /= 2;
5940 }
5941 PlayEffect("cast");
5942 mana.Mod(-num6);
5943 if (isDead)
5944 {
5945 return true;
5946 }
5947 elements.ModExp(304, Mathf.Clamp(num6 * 2, 1, 200));
5948 break;
5949 case Act.CostType.SP:
5950 stamina.Mod(-num6);
5951 ignoreSPAbsorb = true;
5952 break;
5953 }
5954 if (a is Spell && GetCondition<ConSilence>() != null)
5955 {
5956 Say("cast_silence", this);
5957 return true;
5958 }
5959 if (isDead)
5960 {
5961 return true;
5962 }
5963 int spellExp = elements.GetSpellExp(this, a, num5);
5964 if (EClass.rnd(100) >= CalcCastingChance(a, i) && !EClass.debug.godMode)
5965 {
5966 Say("fizzle", this);
5967 PlayEffect("fizzle");
5968 PlaySound("fizzle");
5969 if (cost.cost > 0 && a.source.lvFactor > 0)
5970 {
5971 ModExp(a.id, spellExp / 5);
5972 }
5973 RemoveCondition<ConInvisibility>();
5974 return true;
5975 }
5976 bool flag2 = true;
5977 if (a.source.cooldown > 0 && (!IsPC || !a.source.tag.Contains("CD_npc")))
5978 {
5979 AddCooldown(a.id, a.source.cooldown);
5980 }
5981 if (HasTalk("phrase_" + a.source.alias))
5982 {
5983 EClass.player.forceTalk = true;
5984 Talk("phrase_" + a.source.alias);
5985 }
5986 if (pt)
5987 {
5988 Act.forcePt = true;
5989 if (flag)
5990 {
5991 ForeachEnemy(delegate(Chara c)
5992 {
5993 a.Perform(this, c, c.pos);
5994 });
5995 }
5996 else
5997 {
5998 ForeachParty(delegate(Chara c)
5999 {
6000 a.Perform(this, c, c.pos);
6001 });
6002 }
6003 Act.forcePt = false;
6004 }
6005 else
6006 {
6007 for (int j = 0; j < num3; j++)
6008 {
6009 if (a.TargetType != TargetType.SelfParty && tc != null && !tc.IsAliveInCurrentZone)
6010 {
6011 break;
6012 }
6013 ActEffect.RapidCount = j;
6014 ActEffect.RapidDelay = a.RapidDelay;
6015 flag2 = a.Perform(this, tc, pos);
6016 }
6017 }
6018 if (flag2 && !isDead)
6019 {
6020 if (cost.cost > 0 && a.source.lvFactor > 0)
6021 {
6022 ModExp(a.id, spellExp);
6023 }
6024 if (a.source.alias.StartsWith("sword_"))
6025 {
6026 ModExp(101, 50);
6027 }
6028 }
6029 ActEffect.RapidCount = 0;
6030 if (flag2 && !a.source.tag.Contains("keepInvisi") && EClass.rnd(2) == 0)
6031 {
6032 RemoveCondition<ConInvisibility>();
6033 }
6034 return flag2;
6035 void ForeachEnemy(Action<Chara> action)
6036 {
6037 if (_pts.Count == 0)
6038 {
6039 for (int num10 = EClass._map.charas.Count - 1; num10 >= 0; num10--)
6040 {
6041 Chara chara3 = EClass._map.charas[num10];
6042 if (chara3 != this && CanSeeLos(chara3) && chara3.IsHostile(this))
6043 {
6044 _pts.Add(chara3);
6045 }
6046 }
6047 }
6048 for (int num11 = _pts.Count - 1; num11 >= 0; num11--)
6049 {
6050 action(_pts[num11]);
6051 }
6052 }
6053 void ForeachParty(Action<Chara> action)
6054 {
6055 if (_pts.Count == 0)
6056 {
6057 if (IsPCParty)
6058 {
6059 for (int num7 = EClass.pc.party.members.Count - 1; num7 >= 0; num7--)
6060 {
6061 Chara chara = EClass.pc.party.members[num7];
6062 if (chara == this || chara.host != null || CanSeeLos(chara))
6063 {
6064 _pts.Add(chara);
6065 }
6066 }
6067 }
6068 else
6069 {
6070 for (int num8 = EClass._map.charas.Count - 1; num8 >= 0; num8--)
6071 {
6072 Chara chara2 = EClass._map.charas[num8];
6073 if ((chara2 == this || (chara2.IsFriendOrAbove(this) && CanSeeLos(chara2))) && (chara2 == tc || _pts.Count < 3 || EClass.rnd(_pts.Count * _pts.Count) > 6))
6074 {
6075 _pts.Add(chara2);
6076 }
6077 }
6078 }
6079 }
6080 for (int num9 = _pts.Count - 1; num9 >= 0; num9--)
6081 {
6082 action(_pts[num9]);
6083 }
6084 }
6085 }
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:6679
bool UseAbility(string idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5766
static List< Chara > _pts
Definition: Chara.cs:186
int CalcCastingChance(Element e, int num=1)
Definition: Chara.cs:6096
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:256
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1076
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1028
Act act
Definition: ELEMENT.cs:394
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 9117 of file Chara.cs.

9118 {
9119 _goalWork.FindWork(this, setAI: false);
9121 }
static GoalHobby _goalHobby
Definition: Chara.cs:208
static GoalWork _goalWork
Definition: Chara.cs:206
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 5217 of file Chara.cs.

5218 {
5219 base.c_vomit++;
5220 Say("vomit", this);
5221 PlaySound("vomit");
5222 if (!EClass._zone.IsRegion)
5223 {
5224 Thing thing = ThingGen.Create("731");
5226 {
5227 thing.MakeRefFrom(this);
5228 }
5229 EClass._zone.AddCard(thing, pos);
5230 }
5231 if (HasCondition<ConAnorexia>())
5232 {
5233 ModExp(70, -50);
5234 ModExp(71, -75);
5235 ModExp(77, -100);
5236 }
5237 else if (base.c_vomit > 10)
5238 {
5239 AddCondition<ConAnorexia>();
5240 }
5241 AddCondition<ConDim>();
5242 if (HasCondition<ConAnorexia>())
5243 {
5244 ModWeight(-1 * (1 + EClass.rnd(5)));
5245 }
5246 if (hunger.GetPhase() >= 4)
5247 {
5248 DamageHP(9999L, AttackSource.Hunger);
5249 }
5250 hunger.Mod(30);
5251 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:9684

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 3643 of file Chara.cs.

3644 {
3645 for (int num = conditions.Count - 1; num >= 0; num--)
3646 {
3647 if (conditions[num].ConsumeTurn)
3648 {
3649 return true;
3650 }
3651 }
3652 return false;
3653 }

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 7191 of file Chara.cs.

7192 {
7193 n.Clear();
7194 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
7195 SetImage(uIItem.image2);
7196 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
7197 n.AddText("");
7198 n.Build();
7199 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6070
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 204 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

◆ _faction

Faction Chara._faction
private

Definition at line 156 of file Chara.cs.

Referenced by SetFaction().

◆ _goalHobby

GoalHobby Chara._goalHobby = new GoalHobby()
staticprivate

Definition at line 208 of file Chara.cs.

◆ _goalWork

GoalWork Chara._goalWork = new GoalWork()
staticprivate

Definition at line 206 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 162 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 194 of file Chara.cs.

◆ _listFavFood

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

Definition at line 192 of file Chara.cs.

◆ _ListItems

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

Definition at line 190 of file Chara.cs.

◆ _NoGoalPC

NoGoal Chara._NoGoalPC = new NoGoal()
static

Definition at line 196 of file Chara.cs.

◆ _NoGoalRepeat

NoGoal Chara._NoGoalRepeat = new NoGoal()
static

Definition at line 198 of file Chara.cs.

Referenced by ActPlan.Item.Perform().

◆ _pts

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

Definition at line 186 of file Chara.cs.

◆ _race

SourceRace.Row Chara._race

Definition at line 160 of file Chara.cs.

Referenced by ChangeRace(), and OnCreate().

◆ _sharedPos

Point Chara._sharedPos = new Point()
staticprivate

Definition at line 174 of file Chara.cs.

Referenced by TryMoveTowards().

◆ _Speed

long Chara._Speed
private

Definition at line 172 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 164 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 178 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 180 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 170 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 200 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 176 of file Chara.cs.

Referenced by _Move().

◆ 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(), AI_Idle.Run(), and AI_PlayMusic.Run().

◆ isFainted

bool Chara.isFainted

Definition at line 128 of file Chara.cs.

◆ isOnCreate

bool Chara.isOnCreate
static

Definition at line 184 of file Chara.cs.

◆ isParalyzed

bool Chara.isParalyzed

Definition at line 132 of file Chara.cs.

Referenced by Point.ListWitnesses().

◆ isWeakToSunlight

bool Chara.isWeakToSunlight

Definition at line 152 of file Chara.cs.

Referenced by Refresh().

◆ isWet

bool Chara.isWet

◆ 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 168 of file Chara.cs.

Referenced by OnCreate().

◆ ListAdvRace

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

Definition at line 166 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(), Zone.OnVisit(), 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 182 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 214 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 154 of file Chara.cs.

Referenced by LayerEditSkin.RefreshImage().

◆ stealthSeen

int Chara.stealthSeen

Definition at line 188 of file Chara.cs.

◆ tempElements

◆ turnLastSeen

int Chara.turnLastSeen = -100

Definition at line 110 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ visibleWithTelepathy

bool Chara.visibleWithTelepathy

◆ 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 302 of file Chara.cs.

303 {
304 get
305 {
306 return _cints[5];
307 }
308 set
309 {
310 _cints[5] = value;
311 }
312 }

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

◆ _alias

string Chara._alias
getset

Definition at line 218 of file Chara.cs.

219 {
220 get
221 {
222 return _strs[0];
223 }
224 set
225 {
226 _strs[0] = value;
227 }
228 }
string[] _strs
Definition: Chara.cs:79

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

◆ _idTimeTable

int Chara._idTimeTable
getset

Definition at line 340 of file Chara.cs.

341 {
342 get
343 {
344 return _cints[9];
345 }
346 set
347 {
348 _cints[9] = value;
349 }
350 }

Referenced by OnCreate().

◆ _maxStamina

int Chara._maxStamina
getset

Definition at line 364 of file Chara.cs.

365 {
366 get
367 {
368 return _cints[20];
369 }
370 set
371 {
372 _cints[20] = value;
373 }
374 }

Referenced by CalculateMaxStamina().

◆ ability

◆ actorPrefab

override string Chara.actorPrefab
get

Definition at line 518 of file Chara.cs.

519 {
520 get
521 {
522 if (IsPCC)
523 {
524 return "CharaActorPCC";
525 }
526 return "CharaActor";
527 }
528 }

◆ affinity

◆ Aka

◆ AliasMaterialOnCreate

override string Chara.AliasMaterialOnCreate
get

Definition at line 558 of file Chara.cs.

◆ baseWorkElements

ElementContainer Chara.baseWorkElements
get

Definition at line 1110 of file Chara.cs.

1111 {
1112 get
1113 {
1114 if (_baseWorkElements == null)
1115 {
1117 foreach (Hobby item in ListHobbies())
1118 {
1119 Build(item);
1120 }
1121 foreach (Hobby item2 in ListWorks())
1122 {
1123 Build(item2);
1124 }
1125 }
1126 return _baseWorkElements;
1127 void Build(Hobby h)
1128 {
1129 if (!h.source.elements.IsEmpty())
1130 {
1131 for (int i = 0; i < h.source.elements.Length; i += 2)
1132 {
1133 int ele = h.source.elements[i];
1134 int v = h.source.elements[i + 1];
1135 _baseWorkElements.ModBase(ele, v);
1136 }
1137 }
1138 }
1139 }
1140 }
ElementContainer _baseWorkElements
Definition: Chara.cs:204

◆ bladder

Stats Chara.bladder
get

Definition at line 1150 of file Chara.cs.

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

◆ burden

◆ CanGainConResist

bool Chara.CanGainConResist
get

Definition at line 1160 of file Chara.cs.

1161 {
1162 get
1163 {
1164 if (base.rarity >= Rarity.Legendary)
1165 {
1166 return !IsPCFaction;
1167 }
1168 return false;
1169 }
1170 }

◆ CanOpenDoor

bool Chara.CanOpenDoor
get

Definition at line 818 of file Chara.cs.

819 {
820 get
821 {
822 if (base.INT < 5)
823 {
824 if (IsPCFaction)
825 {
826 return memberType == FactionMemberType.Default;
827 }
828 return false;
829 }
830 return true;
831 }
832 }

◆ CanWitness

bool Chara.CanWitness
get

Definition at line 1002 of file Chara.cs.

1003 {
1004 get
1005 {
1006 if (!IsHuman && !IsFairy && !IsGod)
1007 {
1008 return race.id == "mutant";
1009 }
1010 return true;
1011 }
1012 }
bool IsFairy
Definition: Chara.cs:939
bool IsGod
Definition: Chara.cs:951

Referenced by Point.ListWitnesses().

◆ corruption

int Chara.corruption
getset

Definition at line 376 of file Chara.cs.

377 {
378 get
379 {
380 return _cints[21];
381 }
382 set
383 {
384 _cints[21] = value;
385 }
386 }

Referenced by CanDuplicate().

◆ CurrentGeneSlot

int Chara.CurrentGeneSlot
get

Definition at line 1070 of file Chara.cs.

1071 {
1072 get
1073 {
1074 if (base.c_genes != null)
1075 {
1076 return base.c_genes.GetGeneSlot(this);
1077 }
1078 return 0;
1079 }
1080 }

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

◆ CurrentSpan

TimeTable.Span Chara.CurrentSpan
get

Definition at line 836 of file Chara.cs.

Referenced by ConSleep.Tick().

◆ currentZone

Zone Chara.currentZone
getset

Definition at line 254 of file Chara.cs.

255 {
256 get
257 {
258 return RefZone.Get(_cints[1]);
259 }
260 set
261 {
262 _cints[1] = RefZone.Set(value);
263 }
264 }
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 328 of file Chara.cs.

329 {
330 get
331 {
332 return _cints[7];
333 }
334 set
335 {
336 _cints[7] = value;
337 }
338 }

◆ depression

Stats Chara.depression
get

Definition at line 1148 of file Chara.cs.

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

◆ DestDist

int Chara.DestDist
get

Definition at line 998 of file Chara.cs.

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

◆ DV

override int Chara.DV
get

Definition at line 728 of file Chara.cs.

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

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

◆ faction

Faction Chara.faction
getset

Definition at line 426 of file Chara.cs.

427 {
428 get
429 {
430 return _faction ?? (_faction = EClass.game.factions.dictAll.TryGetValue(idFaction));
431 }
432 set
433 {
434 idFaction = value?.uid;
435 }
436 }
string idFaction
Definition: Chara.cs:243
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(), ActEffect.Proc(), Card.PurgeDuplicateArtifact(), Card.PurgeEythArtifact(), 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 546 of file Chara.cs.

547 {
548 get
549 {
550 if (base.dir != 1)
551 {
552 return base.dir == 2;
553 }
554 return true;
555 }
556 }

Referenced by CharaActor.RefreshSprite().

◆ goalListType

GoalListType Chara.goalListType
getset

Definition at line 278 of file Chara.cs.

279 {
280 get
281 {
282 return _cints[3].ToEnum<GoalListType>();
283 }
284 set
285 {
286 _cints[3] = (int)value;
287 }
288 }
GoalListType
Definition: GoalListType.cs:2

◆ HasHost

override bool Chara.HasHost
get

Definition at line 688 of file Chara.cs.

Referenced by ActEffect.Proc().

◆ HasNoGoal

◆ homeBranch

◆ homeZone

◆ hostility

◆ hunger

◆ hygiene

Stats Chara.hygiene
get

Definition at line 1152 of file Chara.cs.

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

◆ idFaction

string Chara.idFaction
getset

Definition at line 242 of file Chara.cs.

243 {
244 get
245 {
246 return _strs[2];
247 }
248 set
249 {
250 _strs[2] = value;
251 }
252 }

◆ idFaith

string Chara.idFaith
getset

Definition at line 230 of file Chara.cs.

231 {
232 get
233 {
234 return _strs[1];
235 }
236 set
237 {
238 _strs[1] = value;
239 }
240 }

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

◆ IDPCCBodySet

string Chara.IDPCCBodySet
get

Definition at line 490 of file Chara.cs.

491 {
492 get
493 {
494 if (source.idActor.Length <= 1)
495 {
496 return "female";
497 }
498 return source.idActor[1];
499 }
500 }

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

◆ idTimeTable

string Chara.idTimeTable
get

Definition at line 468 of file Chara.cs.

Referenced by LayerQuestBoard.RefreshHire().

◆ interest

int Chara.interest
getset

Definition at line 316 of file Chara.cs.

317 {
318 get
319 {
320 return _cints[6];
321 }
322 set
323 {
324 _cints[6] = value;
325 }
326 }

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

◆ IsAdventurer

bool Chara.IsAdventurer
get

Definition at line 1040 of file Chara.cs.

1041 {
1042 get
1043 {
1044 if (global != null && faction != EClass.pc.faction)
1045 {
1046 return IsPCC;
1047 }
1048 return false;
1049 }
1050 }

◆ isAlawysVisible

bool Chara.isAlawysVisible
getset

Definition at line 400 of file Chara.cs.

401 {
402 get
403 {
404 return _cbits1[1];
405 }
406 set
407 {
408 _cbits1[1] = value;
409 }
410 }

◆ IsAliveInCurrentZone

◆ IsAnimal

bool Chara.IsAnimal
get

Definition at line 866 of file Chara.cs.

867 {
868 get
869 {
870 if (!race.IsAnimal)
871 {
872 return HasTag(CTAG.animal);
873 }
874 return true;
875 }
876 }

Referenced by Map.CountWildAnimal(), AI_Fuck.Run(), and Card.SpawnLoot().

◆ IsCat

bool Chara.IsCat
get

Definition at line 986 of file Chara.cs.

987 {
988 get
989 {
990 if (!(race.id == "cat") && !(race.id == "catsister"))
991 {
992 return race.id == "catgod";
993 }
994 return true;
995 }
996 }

Referenced by Affinity.OnGift(), FoodEffect.Proc(), and AI_Idle.Run().

◆ isChara

override bool Chara.isChara
get

Definition at line 686 of file Chara.cs.

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

◆ isDead

◆ IsDeadOrSleeping

override bool Chara.IsDeadOrSleeping
get

◆ IsDisabled

override bool Chara.IsDisabled
get

◆ IsDragon

bool Chara.IsDragon
get

Definition at line 962 of file Chara.cs.

963 {
964 get
965 {
966 if (!race.IsDragon)
967 {
968 return HasTag(CTAG.dragon);
969 }
970 return true;
971 }
972 }

◆ IsEyth

bool Chara.IsEyth
get

◆ IsFairy

bool Chara.IsFairy
get

Definition at line 938 of file Chara.cs.

939 {
940 get
941 {
942 if (!race.IsFairy)
943 {
944 return HasTag(CTAG.fairy);
945 }
946 return true;
947 }
948 }

Referenced by Faction.IsWearingPanty().

◆ IsFish

bool Chara.IsFish
get

Definition at line 926 of file Chara.cs.

927 {
928 get
929 {
930 if (!race.IsFish)
931 {
932 return HasTag(CTAG.fish);
933 }
934 return true;
935 }
936 }

◆ IsGlobal

◆ IsGod

bool Chara.IsGod
get

Definition at line 950 of file Chara.cs.

951 {
952 get
953 {
954 if (!race.IsGod)
955 {
956 return HasTag(CTAG.god);
957 }
958 return true;
959 }
960 }

◆ IsHorror

bool Chara.IsHorror
get

Definition at line 914 of file Chara.cs.

915 {
916 get
917 {
918 if (!race.IsHorror)
919 {
920 return HasTag(CTAG.horror);
921 }
922 return true;
923 }
924 }

Referenced by Refresh().

◆ IsHuman

bool Chara.IsHuman
get

Definition at line 878 of file Chara.cs.

879 {
880 get
881 {
882 if (!race.IsHuman)
883 {
884 return HasTag(CTAG.human);
885 }
886 return true;
887 }
888 }

Referenced by CharaRenderer.DrawHat(), AI_Fuck.Finish(), Biography.Generate(), Faction.IsWearingPanty(), Card.MakeFoodFrom(), FoodEffect.Proc(), AI_Fuck.Run(), and AI_Idle.Run().

◆ IsHumanSpeak

bool Chara.IsHumanSpeak
get

Definition at line 1014 of file Chara.cs.

1015 {
1016 get
1017 {
1018 if (!IsHuman && !race.tag.Contains("humanSpeak"))
1019 {
1020 return HasTag(CTAG.humanSpeak);
1021 }
1022 return true;
1023 }
1024 }

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

◆ IsIdle

bool Chara.IsIdle
get

Definition at line 852 of file Chara.cs.

853 {
854 get
855 {
856 if (!IsDeadOrSleeping)
857 {
858 return ai.Current.IsIdle;
859 }
860 return false;
861 }
862 }
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 596 of file Chara.cs.

597 {
598 get
599 {
600 if (ride != null)
601 {
602 return ride._isLevitating;
603 }
604 return _isLevitating;
605 }
606 }

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

◆ IsLocalChara

bool Chara.IsLocalChara
get

Definition at line 840 of file Chara.cs.

841 {
842 get
843 {
844 if (!IsGlobal && !base.isSubsetCard)
845 {
846 return homeZone == EClass._zone;
847 }
848 return false;
849 }
850 }

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

◆ IsMachine

bool Chara.IsMachine
get

Definition at line 902 of file Chara.cs.

903 {
904 get
905 {
906 if (!race.IsMachine)
907 {
908 return HasTag(CTAG.machine);
909 }
910 return true;
911 }
912 }

Referenced by Refresh(), GoalCombat.Run(), Card.SpawnLoot(), ElementContainerCard.ValueBonus(), and Element.BonusInfo.WriteNote().

◆ IsMaid

bool Chara.IsMaid
get

Definition at line 1026 of file Chara.cs.

1027 {
1028 get
1029 {
1030 if (EClass.Branch != null)
1031 {
1032 return EClass.Branch.uidMaid == base.uid;
1033 }
1034 return false;
1035 }
1036 }

Referenced by FactionBranch.GetMaid().

◆ IsMinion

override bool Chara.IsMinion
get

Definition at line 626 of file Chara.cs.

627 {
628 get
629 {
630 if (master == null)
631 {
632 return base.c_uidMaster != 0;
633 }
634 return true;
635 }
636 }

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

◆ IsMofuable

bool Chara.IsMofuable
get

Definition at line 1098 of file Chara.cs.

1099 {
1100 get
1101 {
1102 if (!race.tag.Contains("mofu"))
1103 {
1104 return HasElement(419);
1105 }
1106 return true;
1107 }
1108 }

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

◆ IsMoving

override bool Chara.IsMoving
get

Definition at line 608 of file Chara.cs.

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

◆ IsMultisize

◆ IsPC

override bool Chara.IsPC
get

Definition at line 612 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(), Biography.GetAge(), GetBurden(), Element.GetCost(), GetFirstStep(), TraitToolBrush.GetHeldEmo(), FactionBranch.GetResidentTax(), Zone.GetSpawnPos(), HasAccess(), Party.HasElement(), 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(), ActEffect.ProcAt(), InvOwner.Transaction.Process(), TraitBaseSpellbook.ReadFailEffect(), ButtonRoster.Refresh(), TCOrbitChara.RefreshAll(), 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(), TaskHarvest.TryGetAct(), AI_Goto.TryGoTo(), GoalCombat.TryMove(), TryMove(), TryMoveFrom(), TryMoveTowards(), Trait.TryOpenLock(), LayerDragGrid.TryProc(), TraitBaseSpellbook.TryProgress(), TryPush(), ActRanged.TryReload(), TrySetEnemy(), TraitLeash.TrySetHeldAct(), TraitToolButcher.TrySetHeldAct(), Map.TrySmoothPick(), GoalCombat.TryUseAbility(), CharaBody.Unequip(), CharaBody.UnqeuipIfTooHeavy(), CharaRenderer.UpdatePosition(), and DramaOutcome.upgrade_miscreation().

◆ IsPCC

◆ IsPCFaction

override bool Chara.IsPCFaction
get

Definition at line 670 of file Chara.cs.

671 {
672 get
673 {
674 if (EClass.pc != null)
675 {
676 return faction == EClass.pc.faction;
677 }
678 return false;
679 }
680 }

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(), QuestNasu.OnComplete(), 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 654 of file Chara.cs.

655 {
656 get
657 {
658 if (master != null)
659 {
660 if (!master.IsPCFaction)
661 {
663 }
664 return true;
665 }
666 return false;
667 }
668 }

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

◆ IsPCParty

override bool Chara.IsPCParty
get

Definition at line 614 of file Chara.cs.

615 {
616 get
617 {
618 if (party != null)
619 {
620 return party.leader == EClass.pc;
621 }
622 return false;
623 }
624 }

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(), AI_Fish.Makefish(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), FactionBranch.OnAfterSimulate(), ZoneEventDefenseGame.OnCharaDie(), BaseListPeople.OnClick(), Zone_CursedManor.OnGenerateMap(), ListPeopleExpedition.OnList(), AI_Fish.ProgressFish.OnProgressComplete(), TraitBaseSpellbook.OnRead(), ConTransmute.OnRemoved(), AI_Read.OnSetOwner(), FactionBranch.OnSimulateDay(), FactionBranch.OnSimulateHour(), ConTransmute.OnStart(), TraitGeneMachine.OnUse(), Zone.OnVisit(), 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 638 of file Chara.cs.

639 {
640 get
641 {
642 if (master != null)
643 {
644 if (!master.IsPCParty)
645 {
646 return master.IsPCPartyMinion;
647 }
648 return true;
649 }
650 return false;
651 }
652 }

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

◆ IsPlant

bool Chara.IsPlant
get

Definition at line 974 of file Chara.cs.

975 {
976 get
977 {
978 if (!race.IsPlant)
979 {
980 return HasTag(CTAG.plant);
981 }
982 return true;
983 }
984 }

Referenced by GoalCombat.Run().

◆ IsPrisoner

bool Chara.IsPrisoner
get

Definition at line 1038 of file Chara.cs.

◆ isSynced

override bool Chara.isSynced
get

◆ isThing

override bool Chara.isThing
get

Definition at line 684 of file Chara.cs.

◆ IsUndead

bool Chara.IsUndead
get

Definition at line 890 of file Chara.cs.

891 {
892 get
893 {
894 if (!race.IsUndead)
895 {
896 return HasTag(CTAG.undead);
897 }
898 return true;
899 }
900 }

Referenced by Card.MakeFoodFrom(), and Refresh().

◆ IsWealthy

bool Chara.IsWealthy
get

Definition at line 1054 of file Chara.cs.

1055 {
1056 get
1057 {
1058 if (!source.works.Contains("Rich"))
1059 {
1060 return source.hobbies.Contains("Rich");
1061 }
1062 return true;
1063 }
1064 }

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

◆ job

◆ knowFav

bool Chara.knowFav
getset

Definition at line 412 of file Chara.cs.

413 {
414 get
415 {
416 return _cbits1[3];
417 }
418 set
419 {
420 _cbits1[3] = value;
421 }
422 }

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

◆ MainElement

Element Chara.MainElement
get

Definition at line 716 of file Chara.cs.

717 {
718 get
719 {
720 if (base.c_idMainElement == 0)
721 {
722 return Element.Void;
723 }
724 return elements.GetElement(base.c_idMainElement);
725 }
726 }

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 516 of file Chara.cs.

Referenced by ActEffect.Proc().

◆ OriginalHostility

Hostility Chara.OriginalHostility
get

Definition at line 470 of file Chara.cs.

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

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 786 of file Chara.cs.

787 {
788 get
789 {
790 if (spriteReplacer != null)
791 {
793 }
794 if (base.idSkin > 0)
795 {
796 switch (sourceCard.tiles.TryGet(base.idSkin))
797 {
798 case 2319:
799 case 2619:
800 case 2621:
801 case 2623:
802 case 2625:
804 case 2320:
805 case 2611:
806 case 2620:
807 case 2622:
808 case 2624:
809 case 2626:
810 case 2828:
812 }
813 }
814 return sourceCard.pref;
815 }
816 }
SourcePref snowputit2
Definition: CoreRef.cs:326
SourcePref sonwputit1
Definition: CoreRef.cs:324
SourcePref replacer1
Definition: CoreRef.cs:330
PrefData prefs
Definition: CoreRef.cs:415
CoreRef refs
Definition: Core.cs:51
SourcePref pref
Definition: RenderRow.cs:68
SourcePref pref
Definition: SpriteData.cs:23

Referenced by BaseTileMap.DrawTile(), and LayerEditSkin.OnClickEdit().

◆ PrefIndex

override int Chara.PrefIndex
get

Definition at line 530 of file Chara.cs.

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

◆ PV

override int Chara.PV
get

Definition at line 757 of file Chara.cs.

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

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

◆ race

◆ SAN

◆ SelfWeight

override int Chara.SelfWeight
get

Definition at line 712 of file Chara.cs.

◆ sleepiness

Stats Chara.sleepiness
get

◆ sourceCard

override CardRow Chara.sourceCard
get

◆ sourceRenderCard

override CardRow Chara.sourceRenderCard
get

Definition at line 452 of file Chara.cs.

453 {
454 get
455 {
456 if (pccData != null && !(source.renderData is RenderDataPcc))
457 {
459 }
460 return source;
461 }
462 }
static Row rowDefaultPCC
Definition: SourceChara.cs:140

◆ Speed

int Chara.Speed
get

Definition at line 1082 of file Chara.cs.

1083 {
1084 get
1085 {
1086 if (dirtySpeed)
1087 {
1088 RefreshSpeed();
1089 }
1090 if (_Speed > 100000000)
1091 {
1092 return 100000000;
1093 }
1094 return (int)_Speed;
1095 }
1096 }

Referenced by GameUpdater.ConditionUpdater.FixedUpdate().

◆ stamina

◆ tactics

Tactics Chara.tactics
get

Definition at line 834 of file Chara.cs.

◆ trait

◆ uidEditor

int Chara.uidEditor
getset

Definition at line 352 of file Chara.cs.

353 {
354 get
355 {
356 return _cints[10];
357 }
358 set
359 {
360 _cints[10] = value;
361 }
362 }

Referenced by SerializedCards.Add().

◆ WeightLimit

override int Chara.WeightLimit
get

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