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

Public Member Functions

override string ToString ()
 
bool IsCriticallyWounded (bool includeRide=false)
 
bool HasHigherGround (Card c)
 
bool CanSeeSimple (Point p)
 
bool CanSee (Card c)
 
bool CanSeeLos (Card c, int dist=-1)
 
bool CanSeeLos (Point p, int dist=-1)
 
bool HasAccess (Card c)
 
bool HasAccess (Point p)
 
bool CanSleep ()
 
override string GetName (NameStyle style, int num=-1)
 
override void ChangeRarity (Rarity r)
 
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 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)
 
void AddCooldown (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)
 
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 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
 
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]
 
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 6531 of file Chara.cs.

6532 {
6533 CardRenderer cardRenderer = renderer;
6534 CharaRenderer charaRenderer = new CharaRenderer();
6535 if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
6536 {
6537 base.idSkin = source.skinAntiSpider;
6538 }
6539 if (host != null)
6540 {
6541 charaRenderer.pccData = PCCData.Create("ride");
6542 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6543 charaRenderer.pccData.SetPart("body", "ride", idPart);
6544 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6545 }
6546 else
6547 {
6548 foreach (Condition condition in conditions)
6549 {
6550 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6551 if (rendererReplacer != null)
6552 {
6553 charaRenderer.replacer = rendererReplacer;
6554 charaRenderer.data = rendererReplacer.data;
6555 break;
6556 }
6557 }
6558 if (charaRenderer.replacer == null)
6559 {
6560 charaRenderer.pccData = pccData;
6561 }
6562 }
6563 renderer = charaRenderer;
6564 renderer.SetOwner(this);
6565 if (cardRenderer != null)
6566 {
6567 renderer.SetFirst(first: false, cardRenderer.position);
6568 }
6569 return charaRenderer;
6570 }
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:209
SourceChara.Row source
Definition: Chara.cs:156
PCCData pccData
Definition: Chara.cs:67
new GameConfig game
Definition: CoreConfig.cs:605
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 2282 of file Chara.cs.

2283 {
2284 if (EClass.pc.homeBranch != null)
2285 {
2287 }
2288 else
2289 {
2290 SetGlobal();
2292 }
2293 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2294 this.hostility = hostility2;
2295 orgPos = null;
2296 base.c_summonDuration = 0;
2297 base.isSummon = false;
2298 ReleaseMinion();
2299 SetInt(32);
2300 Refresh();
2301 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void ReleaseMinion()
Definition: Chara.cs:2339
Chara SetFaction(Faction f)
Definition: Chara.cs:1417
Point orgPos
Definition: Chara.cs:21
FactionBranch homeBranch
Definition: Chara.cs:1064
Chara SetGlobal()
Definition: Chara.cs:1484
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 2719 of file Chara.cs.

2720 {
2721 if (isDead)
2722 {
2723 return MoveResult.Fail;
2724 }
2725 if (IsPC)
2726 {
2727 float num = EClass.setting.defaultActPace;
2728 switch (burden.GetPhase())
2729 {
2730 case 3:
2731 num *= 1.5f;
2732 break;
2733 case 4:
2734 num *= 2f;
2735 break;
2736 }
2738 {
2739 int num2 = 30;
2740 if (!EClass.pc.HasElement(408))
2741 {
2743 {
2744 case Weather.Condition.Rain:
2745 num2 += 5;
2746 break;
2747 case Weather.Condition.RainHeavy:
2748 num2 += 10;
2749 num *= 1.5f;
2750 break;
2751 case Weather.Condition.Snow:
2752 num2 += 10;
2753 break;
2754 case Weather.Condition.SnowHeavy:
2755 num2 += 15;
2756 num *= 1.5f;
2757 break;
2758 }
2759 }
2760 if (newPoint.matFloor.id == 48)
2761 {
2762 num2 += 20;
2763 num *= 1.8f;
2764 }
2765 num2 = num2 * 100 / (100 + EvalueMax(240, -20) + EvalueMax(407, -5) * 5);
2766 EClass.world.date.AdvanceMin(num2 * 6);
2767 EClass.player.lastZonePos = null;
2769 int num3 = base.hp;
2770 for (int i = 0; i < num2 * 4; i++)
2771 {
2772 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2773 {
2774 if (!m.isDead)
2775 {
2776 m.TickConditions();
2777 }
2778 });
2779 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2780 {
2781 EClass.player.regionMoveWarned = true;
2782 Msg.Say("regionAbortMove");
2783 EInput.Consume(consumeAxis: true);
2784 SetAI(new NoGoal());
2785 return MoveResult.Fail;
2786 }
2787 }
2788 if (newPoint.cell.CanSuffocate())
2789 {
2790 AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2791 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2792 if (num4 >= 2)
2793 {
2794 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2795 }
2796 if (!isDead && !HasElement(429))
2797 {
2798 ModExp(200, 1 + num4 * 12);
2799 }
2800 }
2801 EClass.player.regionMoveWarned = false;
2802 if (isDead)
2803 {
2804 return MoveResult.Fail;
2805 }
2806 }
2807 if (num > EClass.setting.defaultActPace * 3f)
2808 {
2809 num = EClass.setting.defaultActPace * 3f;
2810 }
2811 actTime = num;
2812 }
2813 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2814 {
2815 ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2816 if (ride != null)
2817 {
2818 ride.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2819 }
2820 if (parasite != null)
2821 {
2822 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2823 }
2824 }
2825 Chara chara = ((ride == null) ? this : ride);
2826 if (!EClass._zone.IsRegion || chara.IsPC)
2827 {
2828 bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2829 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2830 {
2831 flag = true;
2832 }
2833 if (flag && newPoint.Distance(pos) <= 1)
2834 {
2835 Point randomNeighbor = pos.GetRandomNeighbor();
2836 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2837 {
2838 newPoint = randomNeighbor;
2839 if (isDrunk)
2840 {
2841 Talk("drunk");
2842 }
2843 }
2844 }
2845 }
2846 if (newPoint.x != pos.x || newPoint.z != pos.z)
2847 {
2848 LookAt(newPoint);
2849 }
2850 CellEffect effect = base.Cell.effect;
2851 if (effect != null && effect.id == 7)
2852 {
2853 CellEffect effect2 = base.Cell.effect;
2854 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2855 {
2856 Say("abWeb_caught", this);
2857 PlaySound("web");
2858 effect2.power = effect2.power * 3 / 4;
2859 renderer.PlayAnime(AnimeID.Shiver);
2860 return MoveResult.Fail;
2861 }
2862 Say("abWeb_pass", this);
2863 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2864 }
2865 if (IsPC)
2866 {
2867 if (EClass._zone.IsRegion)
2868 {
2870 }
2871 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2872 {
2874 }
2875 }
2876 if (newPoint.cell.hasDoor)
2877 {
2878 foreach (Thing thing in pos.Things)
2879 {
2880 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2881 {
2882 if (base.INT < 10)
2883 {
2884 return MoveResult.Fail;
2885 }
2886 traitDoor.TryOpenLock(this);
2887 return MoveResult.Door;
2888 }
2889 }
2890 }
2891 Cell cell = newPoint.cell;
2892 Cell cell2 = pos.cell;
2893 bool flag2 = cell.HasLiquid && !IsLevitating;
2894 bool hasBridge = cell.HasBridge;
2895 bool hasRamp = cell.HasRamp;
2896 bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2897 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2898 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2899 bool flag4 = cell.IsTopWater && !cell.isFloating;
2900 if (!EClass._zone.IsRegion)
2901 {
2902 if (cell.hasDoorBoat)
2903 {
2904 tileRow = FLOOR.sourceWood;
2905 row = MATERIAL.sourceOak;
2906 flag4 = false;
2907 }
2908 else if (flag3 && !tileRow.ignoreSnow)
2909 {
2910 if (tileRow.tileType.IsWater)
2911 {
2912 tileRow = FLOOR.sourceIce;
2913 row = MATERIAL.sourceIce;
2914 }
2915 else
2916 {
2917 tileRow = FLOOR.sourceSnow;
2918 row = MATERIAL.sourceSnow;
2919 }
2920 flag4 = false;
2921 }
2922 }
2923 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
2924 {
2925 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
2926 }
2927 if (isSynced)
2928 {
2929 string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
2930 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
2931 {
2932 text = cell.matObj.soundFoot;
2933 }
2934 if (IsPC)
2935 {
2936 foreach (Thing thing2 in newPoint.Things)
2937 {
2938 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
2939 {
2940 text = thing2.material.soundFoot;
2941 }
2942 }
2943 }
2944 if (!text.IsEmpty())
2945 {
2946 SoundManager.altLastData = IsPC;
2947 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
2948 }
2949 if (!flag4)
2950 {
2952 PCOrbit pcOrbit = EClass.screen.pcOrbit;
2953 bool flag5 = scene.actionMode.gameSpeed > 1f;
2954 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
2955 scene.psFoot.startColor = row.matColor;
2956 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2));
2957 if (flag5 && IsPC)
2958 {
2959 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
2960 scene.psSmoke.Emit(pcOrbit.emitSmoke);
2961 }
2962 }
2963 if (flag2 || flag4)
2964 {
2965 Effect.Get("ripple").Play(0.4f * actTime * EClass.scene.actionMode.gameSpeed, newPoint);
2966 }
2967 }
2968 lastPos.Set(pos);
2969 if (type != MoveType.Force)
2970 {
2971 if (newPoint.HasChara && ai.Current.PushChara)
2972 {
2973 TryPush(newPoint);
2974 }
2975 if (newPoint.HasChara && newPoint.Charas.Count == 1)
2976 {
2977 Chara chara2 = newPoint.Charas[0];
2978 if (CanReplace(chara2))
2979 {
2980 chara2.MoveByForce(lastPos, this);
2981 if (chara.IsPC)
2982 {
2983 Say("replace_pc", chara, chara2);
2984 }
2985 }
2986 }
2987 }
2988 if (cell.hasDoor)
2989 {
2990 foreach (Thing thing3 in newPoint.Things)
2991 {
2992 if (thing3.trait is TraitDoor traitDoor2)
2993 {
2994 traitDoor2.TryOpen(this);
2995 }
2996 }
2997 }
2998 EClass._zone.map.MoveCard(newPoint, this);
2999 SyncRide();
3001 {
3002 foreach (Chara member in EClass.pc.party.members)
3003 {
3004 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
3005 {
3006 member.TryMoveTowards(EClass.pc.pos);
3007 }
3008 }
3009 }
3011 {
3013 }
3014 if (IsPC)
3015 {
3016 PlaySound("Footstep/Extra/pcfootstep");
3017 if (pos.HasThing)
3018 {
3019 foreach (Card item in pos.ListCards())
3020 {
3021 if (!item.isThing || item.placeState != 0 || item.ignoreAutoPick)
3022 {
3023 continue;
3024 }
3026 {
3028 ContainerFlag containerFlag = item.category.GetRoot().id.ToEnum<ContainerFlag>();
3029 if (containerFlag == ContainerFlag.none)
3030 {
3031 containerFlag = ContainerFlag.other;
3032 }
3033 if ((dataPick.noRotten && item.IsDecayed) || (dataPick.onlyRottable && item.trait.Decay == 0))
3034 {
3035 continue;
3036 }
3037 if (dataPick.userFilter)
3038 {
3039 switch (dataPick.IsFilterPass(item.GetName(NameStyle.Full, 1)))
3040 {
3041 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
3042 Pick(item.Thing);
3043 continue;
3044 case Window.SaveData.FilterResult.Block:
3045 continue;
3046 }
3047 }
3048 if (dataPick.advDistribution)
3049 {
3050 foreach (int cat in dataPick.cats)
3051 {
3052 if (item.category.uid == cat)
3053 {
3054 Pick(item.Thing);
3055 }
3056 }
3057 }
3058 else if (!dataPick.flag.HasFlag(containerFlag))
3059 {
3060 Pick(item.Thing);
3061 }
3062 }
3063 else
3064 {
3065 Pick(item.Thing);
3066 }
3067 }
3068 }
3069 if (EClass._zone.IsRegion)
3070 {
3072 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
3073 {
3074 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() ?? "");
3075 }
3076 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
3077 {
3079 Msg.Say(Lang.GetList("walk_snow").RandomItem());
3080 }
3081 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
3082 {
3084 Msg.Say(Lang.GetList("walk_storm").RandomItem());
3085 }
3086 }
3088 }
3089 if (IsPCC)
3090 {
3091 int num5 = Mathf.Abs(cell2.topHeight - cell.topHeight);
3092 if ((num5 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
3093 {
3094 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num5 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
3095 }
3096 else
3097 {
3098 float surfaceHeight = cell2.GetSurfaceHeight();
3099 float surfaceHeight2 = cell.GetSurfaceHeight();
3100 num5 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3101 if (num5 >= 15)
3102 {
3103 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num5 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
3104 }
3105 }
3106 }
3107 lastPos.Things.ForeachReverse(delegate(Thing t)
3108 {
3109 t.trait.OnSteppedOut(this);
3110 });
3111 if (!IsPC)
3112 {
3113 pos.Things.ForeachReverse(delegate(Thing t)
3114 {
3115 t.trait.OnStepped(this);
3116 });
3117 }
3118 if (CanDestroyPath())
3119 {
3121 }
3122 if (IsPC)
3123 {
3124 if (renderer.anime == null && renderer.replacer != null)
3125 {
3127 }
3129 {
3130 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
3131 {
3132 EClass.player.flags.isShoesOff = false;
3133 EClass.pc.Say("shoes_on", EClass.pc);
3134 EClass.pc.SetPCCState(PCCState.Normal);
3135 }
3136 }
3137 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
3138 {
3139 EClass.player.flags.isShoesOff = true;
3140 EClass.pc.Say("shoes_off", EClass.pc);
3141 EClass.pc.SetPCCState(PCCState.ShoesOff);
3142 }
3143 }
3144 hasMovedThisTurn = true;
3145 return MoveResult.Success;
3146 }
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:2573
bool HasElement(int ele, int req=1)
Definition: Card.cs:5822
SourceMaterial.Row material
Definition: Card.cs:2039
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6054
int c_lockLv
Definition: Card.cs:964
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6609
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:3993
MoveResult
Definition: Card.cs:13
bool IsInstalled
Definition: Card.cs:2369
int Evalue(int ele)
Definition: Card.cs:2559
int Dist(Card c)
Definition: Card.cs:7555
void ModExp(string alias, int a)
Definition: Card.cs:2636
bool isLeashed
Definition: Card.cs:842
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6706
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:3640
bool IsLevitating
Definition: Chara.cs:595
AIAct ai
Definition: Chara.cs:200
override bool IsPC
Definition: Chara.cs:610
bool isDrunk
Definition: Chara.cs:124
Party party
Definition: Chara.cs:43
bool CanDestroyPath()
Definition: Chara.cs:2387
bool IsInCombat
Definition: Chara.cs:862
bool HasCondition(string alias)
Definition: Chara.cs:9214
AIAct SetAI(AIAct g)
Definition: Chara.cs:8687
bool IsIdle
Definition: Chara.cs:851
override bool IsDisabled
Definition: Chara.cs:583
bool hasMovedThisTurn
Definition: Chara.cs:174
override bool isSynced
Definition: Chara.cs:689
bool CanMoveTo(Point p, bool allowDestroyPath=true)
Definition: Chara.cs:2400
void DestroyPath(Point pos)
Definition: Chara.cs:3148
override bool IsPCFaction
Definition: Chara.cs:669
float actTime
Definition: Chara.cs:176
override int MaxHP
Definition: Chara.cs:706
Zone currentZone
Definition: Chara.cs:253
bool CanReplace(Chara c)
Definition: Chara.cs:3259
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2585
Stats burden
Definition: Chara.cs:1142
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2593
void SyncRide()
Definition: Chara.cs:3856
bool isDead
Definition: Chara.cs:387
override void LookAt(Card c)
Definition: Chara.cs:3504
bool isConfused
Definition: Chara.cs:126
override bool IsPCC
Definition: Chara.cs:680
void TryPush(Point point)
Definition: Chara.cs:3192
void SetPCCState(PCCState state)
Definition: Chara.cs:6572
SourceRace.Row race
Definition: Chara.cs:462
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:215
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:18
bool isShoesOff
Definition: Player.cs:344
int distanceTravel
Definition: Player.cs:890
Flags flags
Definition: Player.cs:1091
Window.SaveData dataPick
Definition: Player.cs:1031
bool regionMoveWarned
Definition: Player.cs:1154
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:1039
Point Set(int _x, int _z)
Definition: Point.cs:491
List< Thing > Things
Definition: Point.cs:326
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
List< Chara > Charas
Definition: Point.cs:328
bool HasThing
Definition: Point.cs:239
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
int Distance(Point p)
Definition: Point.cs:977
Cell cell
Definition: Point.cs:51
Point GetRandomNeighbor()
Definition: Point.cs:747
bool HasChara
Definition: Point.cs:226
TileType tileType
Definition: RenderRow.cs:77
Definition: Scene.cs:8
ParticleSystem psSmoke
Definition: Scene.cs:113
ActionMode actionMode
Definition: Scene.cs:79
ParticleSystem psFoot
Definition: Scene.cs:111
EloMap elomap
Definition: Scene.cs:149
bool Surface
Definition: SourcePref.cs: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:1077
virtual bool IsChangeFloorHeight
Definition: Trait.cs:73
virtual void OnStepped(Chara c)
Definition: Trait.cs:1073
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 7107 of file Chara.cs.

7108 {
7109 EClass.Sound.Play("pop_drama");
7110 if (book == "_chara" && IsPC)
7111 {
7112 step = "pc";
7113 }
7114 return LayerDrama.Activate(book, sheet, step, this, null, tag);
7115 }
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 9062 of file Chara.cs.

9063 {
9064 c.owner = this;
9065 if (!(c is ConBurning))
9066 {
9067 if (c is ConBleed && ResistLv(964) >= 3)
9068 {
9069 return null;
9070 }
9071 }
9072 else if (ResistLv(950) >= 3)
9073 {
9074 return null;
9075 }
9077 {
9078 if (c.GainResistFactor >= 400)
9079 {
9080 c.power /= 2;
9081 }
9082 ResistCon(c);
9083 if (c.power <= 0)
9084 {
9085 return null;
9086 }
9087 }
9088 if (!force)
9089 {
9090 if (c.source.negate.Length != 0)
9091 {
9092 string[] negate = c.source.negate;
9093 foreach (string text in negate)
9094 {
9095 if (HasElement(text))
9096 {
9097 return null;
9098 }
9099 }
9100 }
9101 Element defenseAttribute = c.GetDefenseAttribute(this);
9102 if (defenseAttribute != null)
9103 {
9104 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
9105 }
9106 if (c.source.resistance.Length != 0)
9107 {
9108 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
9109 if (num > 0)
9110 {
9111 c.power /= num * num + 1;
9112 if (c.power <= 40)
9113 {
9114 return null;
9115 }
9116 }
9117 }
9118 c.power = c.EvaluatePower(c.power);
9119 if (c.power <= 0)
9120 {
9121 return null;
9122 }
9123 }
9124 for (int j = 0; j < conditions.Count; j++)
9125 {
9126 if (conditions[j].id != c.id)
9127 {
9128 continue;
9129 }
9130 if (c.Type == ConditionType.Stance || c.IsToggle)
9131 {
9132 conditions[j].Kill();
9133 return null;
9134 }
9135 if (conditions[j].CanStack(c))
9136 {
9137 if (conditions[j].WillOverride)
9138 {
9139 conditions[j].Kill(silent: true);
9140 continue;
9141 }
9142 if (CanGainConResist)
9143 {
9144 AddResistCon(c);
9145 }
9146 conditions[j].OnStacked(c.power);
9147 conditions[j].OnStartOrStack();
9148 conditions[j].PlayEffect();
9149 }
9150 if (!conditions[j].AllowMultipleInstance)
9151 {
9152 return null;
9153 }
9154 }
9155 foreach (Condition condition in conditions)
9156 {
9157 if (condition.TryNullify(c))
9158 {
9159 return null;
9160 }
9161 }
9162 int num2 = c.EvaluateTurn(c.power);
9163 if (num2 == 0)
9164 {
9165 return null;
9166 }
9167 c.value = num2;
9168 conditions.Add(c);
9169 if (CanGainConResist)
9170 {
9171 AddResistCon(c);
9172 }
9173 c.SetOwner(this);
9174 c.Start();
9175 SetDirtySpeed();
9176 if (c.ShouldRefresh)
9177 {
9178 Refresh();
9179 }
9180 if (c.CancelAI)
9181 {
9182 ai.Cancel();
9183 }
9184 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
9185 {
9187 }
9188 if (c.SyncRide && (ride != null || parasite != null))
9189 {
9190 if (ride != null)
9191 {
9193 }
9194 if (parasite != null)
9195 {
9197 }
9198 }
9199 return c;
9200 }
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:5817
void SetDirtySpeed()
Definition: Chara.cs:1845
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9057
bool CanGainConResist
Definition: Chara.cs:1159
void AddResistCon(Condition con)
Definition: Chara.cs:9457
void ResistCon(Condition con)
Definition: Chara.cs:9477
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:2061
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 9052 of file Chara.cs.

9052 : Condition
9053 {
9054 return AddCondition(typeof(T).Name, p, force);
9055 }
string Name
Definition: Card.cs:2125

◆ AddCooldown()

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

Definition at line 8501 of file Chara.cs.

8502 {
8503 if (_cooldowns == null)
8504 {
8505 _cooldowns = new List<int>();
8506 }
8507 if (turns != 0)
8508 {
8509 _cooldowns.Add(idEle * 1000 + turns);
8510 return;
8511 }
8512 SourceElement.Row row = EClass.sources.elements.map[idEle];
8513 if (row.cooldown > 0)
8514 {
8515 _cooldowns.Add(idEle * 1000 + row.cooldown);
8516 }
8517 }
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 9923 of file Chara.cs.

9924 {
9925 if (!IsPCFaction || !IsGlobal)
9926 {
9927 _historyFood = null;
9928 return;
9929 }
9930 if (_historyFood == null)
9931 {
9932 _historyFood = new List<List<string>>
9933 {
9934 new List<string>()
9935 };
9936 }
9937 if (_historyFood[0].Count < 5)
9938 {
9939 _historyFood[0].Add(food.id);
9940 }
9941 }
override bool IsGlobal
Definition: Chara.cs:608
List< List< string > > _historyFood
Definition: Chara.cs:64

References food.

Referenced by FoodEffect.Proc().

◆ AddHobby()

void Chara.AddHobby ( int  id)
inline

Definition at line 8887 of file Chara.cs.

8888 {
8889 foreach (int hobby in _hobbies)
8890 {
8891 if (hobby == id)
8892 {
8893 return;
8894 }
8895 }
8896 _hobbies.Add(id);
8897 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2177 of file Chara.cs.

2178 {
2179 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2180 body.AddBodyPart(ele);
2181 if (msg)
2182 {
2183 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
2184 PlaySound("offering");
2185 }
2186 }
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 9457 of file Chara.cs.

9458 {
9459 if (con.power > 0 && con.GainResistFactor > 0)
9460 {
9461 int key = con.id;
9462 if (resistCon == null)
9463 {
9464 resistCon = new Dictionary<int, int>();
9465 }
9466 if (resistCon.ContainsKey(key))
9467 {
9468 resistCon[key] += con.power * con.GainResistFactor / 100;
9469 }
9470 else
9471 {
9472 resistCon[key] = con.power * con.GainResistFactor / 100;
9473 }
9474 }
9475 }
Dictionary< int, int > resistCon
Definition: Chara.cs:212

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

◆ AddWork()

void Chara.AddWork ( int  id)
inline

Definition at line 8899 of file Chara.cs.

8900 {
8901 foreach (int work in _works)
8902 {
8903 if (work == id)
8904 {
8905 return;
8906 }
8907 }
8908 _works.Add(id);
8909 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5155 of file Chara.cs.

5156 {
5157 if (!IsPC)
5158 {
5159 return;
5160 }
5161 int currency = GetCurrency();
5162 if (currency > 0)
5163 {
5164 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
5165 if (num <= 0)
5166 {
5167 num = 1;
5168 }
5169 Msg.Say("panaltyMoney", this, Lang._currency(num));
5170 ModCurrency(-num);
5172 }
5173 foreach (Element value in EClass.pc.elements.dict.Values)
5174 {
5175 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
5176 {
5177 EClass.pc.elements.ModExp(value.id, -500f);
5178 }
5179 }
5180 }
@ currency
ElementContainerCard elements
Definition: Card.cs:41
int GetCurrency(string id="money")
Definition: Card.cs:3905
void ModCurrency(int a, string id="money")
Definition: Card.cs:3891
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 2012 of file Chara.cs.

2013 {
2014 switch (tag)
2015 {
2016 case EditorTag.HostilityNeutral:
2017 {
2018 Hostility hostility2 = (base.c_originalHostility = Hostility.Neutral);
2019 this.hostility = hostility2;
2020 break;
2021 }
2022 case EditorTag.HostilityEnemy:
2023 {
2024 Hostility hostility2 = (base.c_originalHostility = Hostility.Enemy);
2025 this.hostility = hostility2;
2026 break;
2027 }
2028 case EditorTag.HostilityFriend:
2029 {
2030 Hostility hostility2 = (base.c_originalHostility = Hostility.Friend);
2031 this.hostility = hostility2;
2032 break;
2033 }
2034 case EditorTag.Male:
2035 bio.SetGender(2);
2036 base.c_idPortrait = Portrait.GetRandomPortrait(2, GetIdPortraitCat());
2037 break;
2038 case EditorTag.Female:
2039 bio.SetGender(1);
2040 base.c_idPortrait = Portrait.GetRandomPortrait(1, GetIdPortraitCat());
2041 break;
2042 case EditorTag.baby:
2043 SetFeat(1232);
2044 break;
2045 }
2046 base.ApplyEditorTags(tag);
2047 }
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:9657
string GetIdPortraitCat()
Definition: Chara.cs:7981
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 2139 of file Chara.cs.

2140 {
2141 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
2142 if (IsPCC)
2143 {
2144 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
2145 }
2146 }
SourceValueType
SourceJob.Row job
Definition: Chara.cs:464
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
PCCUniformManager uniforms
Definition: Game.cs:191

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

Referenced by ChangeJob(), and OnCreate().

◆ ApplyRace()

void Chara.ApplyRace ( bool  remove = false)
inline

Definition at line 2225 of file Chara.cs.

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

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

Referenced by ChangeRace(), and OnCreate().

◆ CalcBurden()

void Chara.CalcBurden ( )
inline

Definition at line 1813 of file Chara.cs.

1814 {
1815 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1816 if (num < 0)
1817 {
1818 num = 1000;
1819 }
1821 {
1822 num = 0;
1823 }
1824 burden.Set(num);
1825 SetDirtySpeed();
1826 }
override int WeightLimit
Definition: Chara.cs:708
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 6061 of file Chara.cs.

6062 {
6063 if (!(e is Spell))
6064 {
6065 return 100;
6066 }
6067 if (!IsPC)
6068 {
6069 int num2 = 95;
6070 if (host != null)
6071 {
6072 if (host.ride == this)
6073 {
6074 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
6075 }
6076 if (host.parasite == this)
6077 {
6078 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
6079 }
6080 }
6081 return num2;
6082 }
6083 int num3 = Evalue(304);
6084 if (!IsPCFaction)
6085 {
6086 num3 = Mathf.Max(num3, base.LV + 5);
6087 }
6088 int num4 = 0;
6089 int num5 = 0;
6090 bool num6 = GetArmorSkill() == 122;
6091 AttackStyle attackStyle = body.GetAttackStyle();
6092 if (num6)
6093 {
6094 num4 = 20 - Evalue(122) / 5;
6095 num5 += 10 - Evalue(1654) * 4;
6096 }
6097 else
6098 {
6099 num4 = 10 - Evalue(120) / 5;
6100 }
6101 if (num4 < 5)
6102 {
6103 num4 = 5;
6104 }
6105 if (ride != null)
6106 {
6107 num4 += 5;
6108 }
6109 if (parasite != null)
6110 {
6111 num4 += 10;
6112 }
6113 if (attackStyle == AttackStyle.TwoWield)
6114 {
6115 num4 += 5;
6116 }
6117 if (attackStyle == AttackStyle.Shield)
6118 {
6119 num4 += 10;
6120 num5 += 20 - Evalue(1654) * 8;
6121 }
6122 if (isConfused)
6123 {
6124 num4 += 10000;
6125 }
6126 if (HasCondition<ConDim>())
6127 {
6128 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
6129 }
6130 if (num > 1)
6131 {
6132 num4 += 5 * num;
6133 }
6134 if (num5 < 0)
6135 {
6136 num5 = 0;
6137 }
6138 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
6139 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:445
override int GetArmorSkill()
Definition: Chara.cs:7724
int EvalueRiding()
Definition: Chara.cs:6052
SourceElement.Row source
Definition: ELEMENT.cs:273
Definition: SPELL.cs:615

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

1994 {
1995 int num = base.END;
1996 int num2 = 0;
1997 foreach (Element value in elements.dict.Values)
1998 {
1999 if (value.source.category == "skill")
2000 {
2001 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
2002 }
2003 }
2004 num2 = EClass.curve(num, 30, 10, 60);
2005 if (num2 < 10)
2006 {
2007 num2 = 10;
2008 }
2009 _maxStamina = num2 + 15;
2010 }
int _maxStamina
Definition: Chara.cs:363
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 6323 of file Chara.cs.

6324 {
6325 foreach (Chara chara in EClass._map.charas)
6326 {
6327 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6328 {
6329 chara.GoHostile(tg);
6330 }
6331 }
6332 }
Hostility OriginalHostility
Definition: Chara.cs:469
void GoHostile(Card _tg)
Definition: Chara.cs:6217
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 8069 of file Chara.cs.

8070 {
8071 if (things.IsFull())
8072 {
8073 return false;
8074 }
8075 if (t.c_isImportant)
8076 {
8077 return false;
8078 }
8079 if (t.id == "1084")
8080 {
8081 return true;
8082 }
8083 if (t.trait is TraitBookSecret)
8084 {
8085 return true;
8086 }
8087 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
8088 {
8089 return false;
8090 }
8091 return true;
8092 }
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:2077
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 8048 of file Chara.cs.

8049 {
8051 {
8052 return true;
8053 }
8054 if (!IsValidGiftWeight(t, num))
8055 {
8056 return false;
8057 }
8058 if (t.c_isImportant)
8059 {
8060 return false;
8061 }
8062 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
8063 {
8064 return false;
8065 }
8066 return true;
8067 }
SourceCategory.Row category
Definition: Card.cs:2037
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8038

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

4192 {
4193 return true;
4194 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2303 of file Chara.cs.

2304 {
2305 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2306 {
2307 return false;
2308 }
2309 if (HasElement(1222))
2310 {
2311 return false;
2312 }
2313 return true;
2314 }
override bool IsMinion
Definition: Chara.cs:625
int MaxSummon
Definition: Chara.cs:712
override bool IsMultisize
Definition: Chara.cs:704
int CountMinions(Chara c)
Definition: Zone.cs:3691

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

Referenced by GoalCombat.Run().

◆ CanDestroyPath()

bool Chara.CanDestroyPath ( )
inline

Definition at line 2387 of file Chara.cs.

2388 {
2389 if (!IsMultisize)
2390 {
2391 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2392 {
2393 return !(EClass._zone is Zone_Town);
2394 }
2395 return false;
2396 }
2397 return true;
2398 }

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

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

◆ CanDuplicate()

bool Chara.CanDuplicate ( )
inline

Definition at line 1752 of file Chara.cs.

1753 {
1754 if (EClass._zone.IsRegion || HasCondition<ConPoison>() || HasCondition<ConConfuse>() || HasCondition<ConDim>() || HasCondition<ConParalyze>() || HasCondition<ConSleep>() || HasCondition<ConBurning>() || HasCondition<ConFreeze>() || HasCondition<ConMiasma>() || corruption >= 100)
1755 {
1756 return false;
1757 }
1759 {
1760 return false;
1761 }
1762 if (id == "mech_scarab" && (isSynced || pos.cell.light > 0 || (!EClass._map.IsIndoor && !pos.cell.HasRoof && !EClass.world.date.IsNight)))
1763 {
1764 return false;
1765 }
1766 return true;
1767 }
byte light
Definition: Cell.cs:60
bool HasRoof
Definition: Cell.cs:648
int corruption
Definition: Chara.cs:375
int CurrentGeneSlot
Definition: Chara.cs:1069
bool IsNight
Definition: Date.cs:112
GamePrincipal principal
Definition: Game.cs:221
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 7455 of file Chara.cs.

7456 {
7457 if (t.IsDecayed && !HasElement(480))
7458 {
7459 return false;
7460 }
7461 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7462 {
7463 return false;
7464 }
7465 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7466 {
7467 return t.trait.CanEat(this);
7468 }
7469 return false;
7470 }
CTAG
Definition: CTAG.cs:2
bool IsNegativeGift
Definition: Card.cs:2384
bool IsDecayed
Definition: Card.cs:2275
bool HasTag(CTAG tag)
Definition: Card.cs:2583
bool isEquipped
Definition: Thing.cs:17
virtual bool CanEat(Chara c)
Definition: Trait.cs:975

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

7624 {
7625 return !body.IsTooHeavyToEquip(t);
7626 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:156

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 7969 of file Chara.cs.

7970 {
7971 foreach (ActList.Item item in ability.list.items)
7972 {
7973 if (item.act.id == 6630)
7974 {
7975 return true;
7976 }
7977 }
7978 return false;
7979 }
List< Item > items
Definition: ActList.cs:14
ActList list
Definition: CharaAbility.cs:12
CharaAbility ability
Definition: Chara.cs:422

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

◆ CanInteractTo() [1/2]

bool Chara.CanInteractTo ( Card  c)
inline

Definition at line 2494 of file Chara.cs.

2495 {
2496 return CanInteractTo(c.pos);
2497 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2494

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

2500 {
2501 if (!p.IsValid)
2502 {
2503 return false;
2504 }
2505 if (EClass._map.cells[p.x, p.z].blocked)
2506 {
2507 return true;
2508 }
2509 if (!IsMultisize)
2510 {
2511 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2512 if (EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2513 {
2514 return false;
2515 }
2516 if (p.x != pos.x && p.z != pos.z)
2517 {
2518 Cell[,] cells = EClass._map.cells;
2519 int x = p.x;
2520 int z = pos.z;
2521 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2522 if (cells[pos.x, pos.z].weights[num2] == 0)
2523 {
2524 return false;
2525 }
2526 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2527 if (cells[p.x, p.z].weights[num2] == 0)
2528 {
2529 return false;
2530 }
2531 x = pos.x;
2532 z = p.z;
2533 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2534 if (cells[pos.x, pos.z].weights[num2] == 0)
2535 {
2536 return false;
2537 }
2538 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2539 if (cells[p.x, p.z].weights[num2] == 0)
2540 {
2541 return false;
2542 }
2543 }
2544 }
2545 return true;
2546 }
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 4186 of file Chara.cs.

4187 {
4188 return true;
4189 }

◆ CanMoveTo()

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

Definition at line 2400 of file Chara.cs.

2401 {
2402 if (!p.IsValid)
2403 {
2404 return false;
2405 }
2406 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2407 if (allowDestroyPath && CanDestroyPath())
2408 {
2409 if (!p.IsInBounds)
2410 {
2411 return false;
2412 }
2413 }
2414 else
2415 {
2416 if (EClass._map.cells[p.x, p.z].blocked || EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2417 {
2418 return false;
2419 }
2420 if (p.x != pos.x && p.z != pos.z)
2421 {
2422 Cell[,] cells = EClass._map.cells;
2423 int x = p.x;
2424 int z = pos.z;
2425 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2426 if (cells[pos.x, pos.z].weights[num2] == 0)
2427 {
2428 return false;
2429 }
2430 if (cells[x, z].blocked)
2431 {
2432 return false;
2433 }
2434 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2435 if (cells[p.x, p.z].weights[num2] == 0)
2436 {
2437 return false;
2438 }
2439 x = pos.x;
2440 z = p.z;
2441 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2442 if (cells[pos.x, pos.z].weights[num2] == 0)
2443 {
2444 return false;
2445 }
2446 if (cells[x, z].blocked)
2447 {
2448 return false;
2449 }
2450 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2451 if (cells[p.x, p.z].weights[num2] == 0)
2452 {
2453 return false;
2454 }
2455 }
2456 }
2457 if (IsPC)
2458 {
2459 if (IsEnemyOnPath(p))
2460 {
2461 return false;
2462 }
2463 }
2464 else if (p.HasChara && !IsMultisize && !CanReplace(p.FirstChara))
2465 {
2466 return false;
2467 }
2468 return true;
2469 }
bool IsEnemyOnPath(Point p, bool cancelAI=true)
Definition: Chara.cs:2471
Chara FirstChara
Definition: Point.cs:276
bool IsInBounds
Definition: Point.cs:104

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

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

◆ CanPick()

bool Chara.CanPick ( Card  c)
inline

Definition at line 4196 of file Chara.cs.

4197 {
4198 if (c.isDestroyed)
4199 {
4200 return false;
4201 }
4202 Card rootCard = c.GetRootCard();
4203 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
4204 {
4205 return false;
4206 }
4207 if (rootCard != this && things.IsFull(c.Thing))
4208 {
4209 return false;
4210 }
4211 return true;
4212 }
bool isDestroyed
Definition: Card.cs:75
bool ExistsOnMap
Definition: Card.cs:2073
virtual Thing Thing
Definition: Card.cs:2046
Card GetRootCard()
Definition: Card.cs:3356

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

3260 {
3262 {
3263 return false;
3264 }
3265 if (IsPC)
3266 {
3267 return true;
3268 }
3269 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3270 {
3271 return false;
3272 }
3273 if (!IsHostile(c))
3274 {
3275 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3276 {
3277 return true;
3278 }
3279 if (DestDist < c.DestDist)
3280 {
3281 return true;
3282 }
3283 if (IsPCParty && !c.IsPCParty)
3284 {
3285 return true;
3286 }
3287 if (IsPCFaction && !c.IsPCParty)
3288 {
3289 return true;
3290 }
3291 }
3292 return false;
3293 }
bool IsPCFactionOrMinion
Definition: Card.cs:2260
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:501
override bool IsPCParty
Definition: Chara.cs:613
int DestDist
Definition: Chara.cs:996
bool IsHostile()
Definition: Chara.cs:6418
bool IsEscorted()
Definition: Chara.cs:2371
bool Equals(int _x, int _z)
Definition: Point.cs:948
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 5023 of file Chara.cs.

5024 {
5025 return EClass.world.date.IsExpired(base.c_dateDeathLock);
5026 }
bool IsExpired(int time)
Definition: Date.cs:332

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

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

◆ CanSee()

bool Chara.CanSee ( Card  c)
inline

Definition at line 1216 of file Chara.cs.

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

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

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

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

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

◆ CanSleep()

bool Chara.CanSleep ( )
inline

Definition at line 1297 of file Chara.cs.

1298 {
1299 if (EClass._zone.events.GetEvent<ZoneEventQuest>() != null)
1300 {
1301 return false;
1302 }
1303 if (!EClass.debug.godMode && sleepiness.GetPhase() == 0)
1304 {
1305 return stamina.GetPhase() <= 1;
1306 }
1307 return true;
1308 }
Stats sleepiness
Definition: Chara.cs:1154
Stats stamina
Definition: Chara.cs:1144
bool godMode
Definition: CoreDebug.cs:173
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 2148 of file Chara.cs.

2149 {
2150 ApplyJob(remove: true);
2151 base.c_idJob = idNew;
2152 _job = null;
2153 ApplyJob();
2154 if (IsPCC)
2155 {
2156 PCC.Get(pccData).Build();
2157 }
2158 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:2139
SourceJob.Row _job
Definition: Chara.cs:160

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

6916 {
6917 memberType = type;
6918 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2247 of file Chara.cs.

2248 {
2249 ApplyRace(remove: true);
2250 base.c_idRace = idNew;
2251 _race = null;
2252 ApplyRace();
2253 ChangeMaterial(source.defMat.IsEmpty(race.material));
2254 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2225
SourceRace.Row _race
Definition: Chara.cs:158

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

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

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

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8558 of file Chara.cs.

8559 {
8560 if (IsPC && EClass.AdvMode)
8561 {
8562 SetNoGoal();
8563 return;
8564 }
8565 if (IsPCParty || base.noMove)
8566 {
8567 SetAI(new GoalIdle());
8568 return;
8569 }
8570 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8571 {
8572 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8573 if (goalFromTimeTable != null)
8574 {
8575 SetAI(goalFromTimeTable);
8576 if (goalFromTimeTable is GoalWork)
8577 {
8578 goalFromTimeTable.Tick();
8579 }
8580 return;
8581 }
8582 }
8583 if (goalList.index == -2)
8584 {
8586 }
8587 SetAI(goalList.Next());
8588 }
Status Tick()
Definition: AIAct.cs:352
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8590
GoalListType goalListType
Definition: Chara.cs:277
AIAct SetNoGoal()
Definition: Chara.cs:8682
bool IsHomeMember()
Definition: Chara.cs:6480
bool IsGuest()
Definition: Chara.cs:6505
GoalList goalList
Definition: Chara.cs:198
bool IsInHomeZone()
Definition: Chara.cs:6485
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 7183 of file Chara.cs.

7184 {
7185 if (map == null)
7186 {
7187 map = EClass._map;
7188 }
7189 foreach (Card item in map.props.installed.all)
7190 {
7191 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7192 {
7193 traitBed.RemoveHolder(this);
7194 }
7195 }
7196 }
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 8380 of file Chara.cs.

8381 {
8382 int num = 0;
8383 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8384 {
8385 Thing thing = things[num2];
8386 if (ShouldThrowAway(thing, type))
8387 {
8388 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8389 thing.Destroy();
8390 }
8391 }
8392 if (num > 0)
8393 {
8394 ModCurrency(num);
8395 if (type == ClearInventoryType.SellAtTown)
8396 {
8397 Msg.Say("party_sell", this, num.ToString() ?? "");
8398 PlaySound("pay");
8399 }
8400 }
8401 }
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:7158
void Destroy()
Definition: Card.cs:4996
int Num
Definition: Card.cs:158
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:8309

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

10138 {
10139 if (tempElements != null)
10140 {
10142 tempElements = null;
10143 }
10144 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountDebuff()

int Chara.CountDebuff ( )
inline

Definition at line 9243 of file Chara.cs.

9244 {
9245 int num = 0;
9246 foreach (Condition condition in conditions)
9247 {
9248 if (condition.Type == ConditionType.Debuff)
9249 {
9250 num++;
9251 }
9252 }
9253 return num;
9254 }

References BaseStats.Type.

Referenced by GoalCombat.TryUseAbility().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 9943 of file Chara.cs.

9944 {
9945 if (_historyFood == null)
9946 {
9947 return -1;
9948 }
9949 int num = 0;
9950 foreach (List<string> item in _historyFood)
9951 {
9952 foreach (string item2 in item)
9953 {
9954 if (item2 == food.id)
9955 {
9956 num++;
9957 }
9958 }
9959 }
9960 return num;
9961 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 7872 of file Chara.cs.

7873 {
7874 Chara chara = CharaGen.Create(id);
7875 chara.c_originalHostility = base.c_originalHostility;
7876 if (chara.c_originalHostility != 0)
7877 {
7878 chara.hostility = chara.c_originalHostility;
7879 }
7880 if (orgPos != null)
7881 {
7882 chara.orgPos = orgPos.Copy();
7883 }
7884 chara.pos = pos.Copy();
7885 chara.isImported = true;
7886 chara.c_editorTags = base.c_editorTags;
7887 chara.c_editorTraitVal = base.c_editorTraitVal;
7888 chara.c_idTrait = base.c_idTrait;
7889 chara.homeZone = homeZone;
7890 return chara;
7891 }
Hostility c_originalHostility
Definition: Card.cs:976
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Zone homeZone
Definition: Chara.cs:265
Point Copy()
Definition: Point.cs:479

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

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

◆ Cuddle()

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

Definition at line 6153 of file Chara.cs.

6154 {
6155 Talk("goodBoy");
6156 Say(headpat ? "headpat" : "cuddle", this, c);
6157 c.ShowEmo(Emo.love);
6158 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
6159 {
6160 c.MakeEgg();
6161 }
6162 if (headpat && this != c)
6163 {
6164 if (c.interest > 0)
6165 {
6166 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
6167 c.interest -= 20 + EClass.rnd(10);
6168 }
6170 {
6171 foreach (Chara member in party.members)
6172 {
6173 if (!member.IsPC && CanSeeLos(member))
6174 {
6175 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
6176 }
6177 }
6178 }
6179 }
6180 if (c.Evalue(1221) > 0)
6181 {
6182 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
6183 if (c.id == "hedgehog_ether")
6184 {
6185 ele = 922;
6186 }
6187 Say("reflect_thorne", c, this);
6188 DamageHP(10L, ele, Power, AttackSource.Condition);
6189 }
6190 }
Emo
Definition: Emo.cs:2
virtual int Power
Definition: Card.cs:2283
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6022
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5645
Element MainElement
Definition: Chara.cs:715
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:7794
int interest
Definition: Chara.cs:315
Religion faith
Definition: Chara.cs:437
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 9306 of file Chara.cs.

9307 {
9308 bool flag = state == BlessedState.Blessed;
9309 switch (type)
9310 {
9311 case CureType.Heal:
9312 case CureType.Prayer:
9313 CureCondition<ConFear>();
9314 CureCondition<ConBlind>(2 * p / 100 + 5);
9315 CureCondition<ConPoison>(5 * p / 100 + 5);
9316 CureCondition<ConConfuse>(10 * p / 100 + 10);
9317 CureCondition<ConDim>(p / 100 + 5);
9318 CureCondition<ConBleed>(2 * p / 100 + 10);
9319 if (flag)
9320 {
9321 SAN.Mod(-15);
9322 }
9323 break;
9324 case CureType.CureBody:
9325 CureCondition<ConBlind>(5 * p / 100 + 15);
9326 CureCondition<ConPoison>(10 * p / 100 + 15);
9327 CureCondition<ConBleed>(5 * p / 100 + 20);
9328 CureTempElements(p, body: true, mind: false);
9329 break;
9330 case CureType.CureMind:
9331 CureCondition<ConFear>();
9332 CureCondition<ConDim>(3 * p / 100 + 10);
9333 CureTempElements(p, body: false, mind: true);
9334 break;
9335 case CureType.Sleep:
9336 {
9337 for (int num2 = conditions.Count - 1; num2 >= 0; num2--)
9338 {
9339 Condition condition2 = conditions[num2];
9340 if (!(condition2 is ConSleep) && !(condition2 is ConFaint))
9341 {
9342 if (condition2.isPerfume)
9343 {
9344 condition2.Mod(-1, force: true);
9345 }
9346 else if (condition2.Type == ConditionType.Bad || condition2.Type == ConditionType.Debuff)
9347 {
9348 condition2.Kill();
9349 }
9350 }
9351 }
9352 CureCondition<ConWait>();
9353 CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
9354 bool flag3 = HasCondition<ConAnorexia>();
9355 base.c_vomit -= (flag3 ? 3 : 2) * p / 100;
9356 if (base.c_vomit < 0)
9357 {
9358 base.c_vomit = 0;
9359 if (flag3)
9360 {
9361 RemoveCondition<ConAnorexia>();
9362 }
9363 }
9364 break;
9365 }
9366 case CureType.HealComplete:
9367 case CureType.Death:
9368 case CureType.Jure:
9369 case CureType.Boss:
9370 {
9371 bool flag2 = type == CureType.Death;
9372 CureTempElements(p * 100, body: true, mind: true);
9373 for (int num = conditions.Count - 1; num >= 0; num--)
9374 {
9375 Condition condition = conditions[num];
9376 if (condition is ConAnorexia && !flag2)
9377 {
9378 continue;
9379 }
9380 switch (condition.Type)
9381 {
9382 case ConditionType.Bad:
9383 case ConditionType.Debuff:
9384 case ConditionType.Disease:
9385 condition.Kill();
9386 continue;
9387 case ConditionType.Stance:
9388 if (flag2)
9389 {
9390 condition.Kill();
9391 continue;
9392 }
9393 break;
9394 }
9395 if (flag2 && condition.isPerfume)
9396 {
9397 condition.Kill();
9398 }
9399 }
9400 CureCondition<ConWait>();
9401 CureCondition<ConSleep>();
9402 if (flag2 || type == CureType.Boss)
9403 {
9404 SAN.Mod(-20);
9405 RemoveCondition<ConBrightnessOfLife>();
9406 }
9407 if (type == CureType.Jure)
9408 {
9409 SAN.Mod(-999);
9410 if (HasElement(1206))
9411 {
9412 SetFeat(1206, 0, msg: true);
9413 }
9414 }
9415 break;
9416 }
9417 }
9418 }
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:10107
Stats SAN
Definition: Chara.cs:1156
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 9256 of file Chara.cs.

9256 : Condition
9257 {
9258 T condition = GetCondition<T>();
9259 if (condition != null)
9260 {
9261 condition.value -= v;
9262 if (condition.value <= 0)
9263 {
9264 condition.Kill();
9265 }
9266 }
9267 }
T GetCondition< T >()
Definition: Chara.cs:9269

◆ CureHost()

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

Definition at line 9293 of file Chara.cs.

9294 {
9295 if (parasite != null)
9296 {
9297 parasite.Cure(type, p, state);
9298 }
9299 if (ride != null)
9300 {
9301 ride.Cure(type, p, state);
9302 }
9303 Cure(type, p, state);
9304 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9306

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 10107 of file Chara.cs.

10108 {
10109 if (tempElements != null)
10110 {
10111 if (body)
10112 {
10114 }
10115 if (mind)
10116 {
10118 }
10119 }
10120 void Cure(int[] eles)
10121 {
10122 foreach (int ele in eles)
10123 {
10124 if (tempElements == null)
10125 {
10126 break;
10127 }
10128 Element element = tempElements.GetElement(ele);
10129 if (element != null && element.vBase < 0)
10130 {
10131 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
10132 }
10133 }
10134 }
10135 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:10015
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 10073 of file Chara.cs.

10074 {
10075 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
10076 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 10061 of file Chara.cs.

10062 {
10063 if (body)
10064 {
10065 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
10066 }
10067 if (mind)
10068 {
10069 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
10070 }
10071 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10073

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3148 of file Chara.cs.

3149 {
3150 bool broke = false;
3151 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
3152 {
3153 if (_p.IsValid)
3154 {
3155 if (_p.HasBlock)
3156 {
3157 EClass._map.MineBlock(_p, recoverBlock: false, this);
3158 if (_p.HasObj)
3159 {
3160 EClass._map.MineObj(_p, null, this);
3161 }
3162 broke = true;
3163 }
3164 if (_p.HasObj && _p.IsBlocked)
3165 {
3166 EClass._map.MineObj(_p, null, this);
3167 broke = true;
3168 }
3169 _p.Things.ForeachReverse(delegate(Thing t)
3170 {
3171 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
3172 {
3173 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3174 {
3175 t.Destroy();
3176 }
3177 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
3178 {
3179 t.SetPlaceState(PlaceState.roaming);
3180 }
3181 }
3182 });
3183 }
3184 });
3185 if (broke)
3186 {
3187 Msg.Say("stomp");
3188 Shaker.ShakeCam("stomp");
3189 }
3190 }
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool IsUnique
Definition: Card.cs:2079
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
Definition: Point.cs:1373
bool IsBlocked
Definition: Point.cs:351
Definition: Shaker.cs:5
static void ShakeCam(string id="default", float magnitude=1f)
Definition: Shaker.cs:25
virtual bool IsBlockPath
Definition: Trait.cs:53
virtual bool IsDoor
Definition: Trait.cs:57

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

Referenced by _Move(), 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 5218 of file Chara.cs.

5219 {
5220 combatCount = 0;
5221 if (isDead || host != null)
5222 {
5223 return;
5224 }
5225 bool isInActiveZone = IsInActiveZone;
5226 if (isInActiveZone)
5227 {
5228 if (IsPC)
5229 {
5231 }
5232 if (base.isSummon)
5233 {
5234 if (id == "tsunami")
5235 {
5236 pos.PlaySound("water");
5237 }
5238 else
5239 {
5240 Say("summon_vanish", this);
5241 pos.PlayEffect("vanish");
5242 pos.PlaySound("vanish");
5243 }
5244 Destroy();
5245 return;
5246 }
5247 if (attackSource == AttackSource.DeathSentense)
5248 {
5249 if (trait is TraitLittleOne)
5250 {
5251 MakeEgg();
5252 if (IsPCFaction)
5253 {
5255 }
5256 }
5257 PlayEffect("revive");
5258 PlaySound("chime_angel");
5259 }
5260 else
5261 {
5262 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
5263 .Emit(50);
5264 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
5265 PlaySound(base.material.GetSoundDead(source));
5266 }
5269 ClearFOV();
5270 }
5271 string text = "";
5272 "dead_in".langGame(EClass._zone.Name);
5273 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
5274 if (LangGame.Has("dead_" + attackSource))
5275 {
5276 text = "dead_" + attackSource;
5277 }
5278 else
5279 {
5280 if (e != Element.Void && e != null)
5281 {
5282 text = "dead_" + e.source.alias;
5283 }
5284 if (text == "" || !LangGame.Has(text))
5285 {
5286 text = "dead";
5287 }
5288 }
5289 if (IsPC)
5290 {
5291 EClass._zone.isDeathLocation = true;
5292 string s = ((origin == null) ? text : "dead_by");
5294 if (attackSource == AttackSource.Wrath)
5295 {
5297 }
5298 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
5300 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
5301 {
5302 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
5303 }
5304 AI_PlayMusic.keepPlaying = false;
5305 }
5306 if (isInActiveZone)
5307 {
5308 if (attackSource == AttackSource.DeathSentense)
5309 {
5310 Msg.Say("goto_heaven", this);
5311 }
5312 else
5313 {
5314 if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5315 {
5316 Msg.Say(text, this, "", text2);
5317 }
5318 string text3 = TalkTopic("dead");
5319 if (!text3.IsEmpty())
5320 {
5321 text3 = text3.StripBrackets();
5322 }
5323 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5324 if (!IsPC && flag)
5325 {
5326 MakeGrave(text3);
5327 }
5328 Msg.SetColor();
5329 SpawnLoot(origin);
5330 }
5331 if (IsPC)
5332 {
5334 }
5335 }
5336 if (IsPCFaction)
5337 {
5338 if (homeBranch != null)
5339 {
5340 homeBranch.Log(text, this, "");
5341 }
5342 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5343 if (!IsPC)
5344 {
5345 if (EClass.player.stats.allyDeath == 0)
5346 {
5347 Tutorial.Reserve("death_pet");
5348 }
5350 }
5351 }
5352 if (id == "mandrake" || HasElement(488))
5353 {
5354 Say("a_scream", this);
5355 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5356 }
5357 daysStarved = 0;
5358 isDead = true;
5360 enemy = null;
5361 _cooldowns = null;
5362 base.isSale = false;
5363 SetInt(70);
5364 EClass._map.props.sales.Remove(this);
5365 Cure(CureType.Death);
5366 SetAI(new NoGoal());
5368 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5369 {
5370 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5371 }
5372 if (IsPC)
5373 {
5374 EClass.player.returnInfo = null;
5375 EClass.player.uidLastTravelZone = 0;
5376 foreach (Chara chara3 in EClass._map.charas)
5377 {
5378 if (chara3.IsHostile())
5379 {
5380 chara3.hostility = chara3.OriginalHostility;
5381 }
5382 if (chara3.enemy == EClass.pc)
5383 {
5384 chara3.enemy = null;
5385 }
5386 }
5387 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5388 {
5389 EClass.player.preventDeathPenalty = true;
5390 }
5391 }
5392 else
5393 {
5394 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5395 if (currentZone is Zone_LittleGarden && id == "littleOne")
5396 {
5397 flag2 = false;
5398 }
5399 if (flag2)
5400 {
5401 EClass._map.deadCharas.Add(this);
5402 }
5403 currentZone.RemoveCard(this);
5404 }
5405 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5406 {
5407 int a = -10;
5408 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5409 {
5410 a = -5;
5411 }
5412 ModAffinity(EClass.pc, a, show: false);
5413 string text4 = id;
5414 if (!(text4 == "quru"))
5415 {
5416 if (text4 == "corgon")
5417 {
5418 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5419 }
5420 }
5421 else
5422 {
5423 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5424 }
5425 }
5426 if (origin != null)
5427 {
5428 if (origin.IsPCParty || origin.IsPCPartyMinion)
5429 {
5430 int num = 0;
5431 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5432 {
5433 num = -5;
5434 }
5435 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5436 {
5437 EClass.pc.Say("killcat");
5438 num = -1;
5439 }
5440 if (EClass.pc.party.HasElement(1563) && num < 0)
5441 {
5442 num = num * 30 / 100;
5443 }
5444 if (num != 0)
5445 {
5446 EClass.player.ModKarma(num);
5447 }
5448 }
5449 if (origin == EClass.pc)
5450 {
5451 EClass.pc.faith.Revelation("kill", 10);
5452 }
5453 else if (origin.IsPCFaction)
5454 {
5455 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5456 origin.Chara.ShowEmo(Emo.love);
5457 }
5458 }
5459 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5460 {
5461 EClass.player.doneBackers.Add(base.sourceBacker.id);
5462 }
5463 if (base.IsPCFactionOrMinion)
5464 {
5466 {
5467 Msg.Say("abort_allyDead");
5468 }
5469 }
5471 {
5472 Msg.Say("abort_enemyDead");
5473 }
5474 if (IsPCParty && !IsPC)
5475 {
5477 base.c_wasInPcParty = true;
5478 EClass.pc.Say("allyDead");
5479 }
5480 switch (id)
5481 {
5482 case "littleOne":
5483 if (attackSource != AttackSource.DeathSentense && !IsPCFaction)
5484 {
5485 EClass.player.flags.little_killed = true;
5487 }
5488 break;
5489 case "big_daddy":
5490 if (!IsPCFaction)
5491 {
5492 Chara chara = CharaGen.Create("littleOne");
5493 EClass._zone.AddCard(chara, pos.Copy());
5494 Msg.Say("little_pop");
5496 }
5497 break;
5498 case "shark_sister":
5499 if (!IsPCFaction)
5500 {
5501 Chara t = CharaGen.Create("sister_shark");
5502 EClass._zone.AddCard(t, pos.Copy());
5503 Msg.Say("shark_pop");
5504 }
5505 break;
5506 }
5507 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5508 {
5509 Chara chara2 = CharaGen.CreateFromFilter("c_plant", base.LV);
5510 EClass._zone.AddCard(chara2, pos.Copy());
5511 if (chara2.LV < base.LV)
5512 {
5513 chara2.SetLv(base.LV);
5514 }
5515 chara2.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5516 Msg.Say("plant_pop", this, chara2);
5517 }
5519 }
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:440
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:2603
void AddBlood(int a=1, int id=-1)
Definition: Card.cs:5869
virtual bool IsPCParty
Definition: Card.cs:2137
Card SetLv(int a)
Definition: Card.cs:2885
ICardParent parent
Definition: Card.cs:55
virtual bool IsPCPartyMinion
Definition: Card.cs:2141
void ClearFOV()
Definition: Card.cs:6472
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6088
virtual bool IsPCFaction
Definition: Card.cs:2257
void SpawnLoot(Card origin)
Definition: Card.cs:5036
int LV
Definition: Card.cs:386
virtual bool isSynced
Definition: Card.cs:2075
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:877
int daysStarved
Definition: Chara.cs:327
void MakeMinion(Chara _master, MinionType type=MinionType.Default)
Definition: Chara.cs:2316
string NameBraced
Definition: Chara.cs:512
void ClearTempElements()
Definition: Chara.cs:10137
string TalkTopic(string topic="calm")
Definition: Chara.cs:6849
void TryDropBossLoot()
Definition: Chara.cs:5521
bool IsLocalChara
Definition: Chara.cs:839
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:836
void TryDropCarryOnly()
Definition: Chara.cs:4515
void MakeGrave(string lastword)
Definition: Chara.cs:5135
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
void RemoveMember(Chara c)
Definition: Party.cs:101
bool HasElement(int ele)
Definition: Party.cs:180
int allyDeath
Definition: Player.cs:108
void ModKarma(int a)
Definition: Player.cs:2496
Stats stats
Definition: Player.cs:1013
int little_dead
Definition: Player.cs:923
HashSet< int > doneBackers
Definition: Player.cs:1070
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2390
string deathMsg
Definition: Player.cs:1182
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1241
void TalkWitnesses(Chara criminal, string idTalk, int radius=4, WitnessType type=WitnessType.everyone, Func< Chara, bool > talkIf=null, int chance=3)
Definition: Point.cs:803
Effect PlayEffect(string id)
Definition: Point.cs:1236
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 10092 of file Chara.cs.

10093 {
10094 if (tempElements == null)
10095 {
10096 return;
10097 }
10098 foreach (Element item in tempElements.dict.Values.ToList())
10099 {
10100 if (item.vBase > 0)
10101 {
10102 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
10103 }
10104 }
10105 }

References ElementContainer.dict, and item.

◆ DoAI()

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

Definition at line 6141 of file Chara.cs.

6142 {
6143 SetAI(new DynamicAIAct("", delegate
6144 {
6145 onPerform();
6146 return true;
6147 })
6148 {
6149 wait = wait
6150 });
6151 }

◆ DoHostileAction()

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

Definition at line 6241 of file Chara.cs.

6242 {
6243 if (_tg == null || !_tg.isChara)
6244 {
6245 return;
6246 }
6247 Chara chara = _tg.Chara;
6248 if (chara.IsPC)
6249 {
6250 EClass.pc.combatCount = 10;
6251 }
6252 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
6253 {
6254 return;
6255 }
6256 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
6257 {
6258 chara.Say("frown", this, chara);
6259 }
6260 else
6261 {
6262 if (EClass._zone.IsRegion)
6263 {
6264 return;
6265 }
6266 if (IsPC)
6267 {
6268 if (chara.IsFriendOrAbove() && !immediate)
6269 {
6270 chara.Say("frown", this, chara);
6271 chara.ShowEmo(Emo.sad);
6272 chara.hostility = Hostility.Neutral;
6273 return;
6274 }
6275 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
6276 {
6277 bool flag = chara.id == "fanatic";
6278 if (EClass.rnd(4) == 0 || flag)
6279 {
6280 chara.Say("callHelp", chara);
6281 chara.CallHelp(this, flag);
6282 }
6283 }
6284 if (chara.hostility <= Hostility.Enemy)
6285 {
6286 foreach (Chara member in EClass.pc.party.members)
6287 {
6288 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
6289 {
6290 member.SetEnemy(chara);
6291 }
6292 }
6293 }
6294 }
6295 else if (chara.IsPC && hostility <= Hostility.Enemy)
6296 {
6297 foreach (Chara member2 in EClass.pc.party.members)
6298 {
6299 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
6300 {
6301 member2.SetEnemy(this);
6302 }
6303 }
6304 }
6305 if (chara.calmCheckTurn <= 0 || IsPC)
6306 {
6307 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
6308 }
6309 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
6310 {
6311 GoHostile(chara);
6312 chara.GoHostile(this);
6313 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
6314 {
6315 Thing t = ThingGen.Create("49");
6316 ActThrow.Throw(chara, pos, t);
6317 Act.TC = chara;
6318 }
6319 }
6320 }
6321 }
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:559
override bool IsPCPartyMinion
Definition: Chara.cs:637
int calmCheckTurn
Definition: Chara.cs:116
bool CanSee(Card c)
Definition: Chara.cs:1216
override bool IsPCFactionMinion
Definition: Chara.cs:653
bool IsFriendOrAbove()
Definition: Chara.cs:6510
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6192
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:6323
Hostility hostility
Definition: Chara.cs:289
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 5012 of file Chara.cs.

5013 {
5014 Say("drink", this, t.Duplicate(1));
5015 Say("quaff");
5016 PlaySound("drink");
5017 hunger.Mod(-2);
5018 t.ModNum(-1);
5019 t.trait.OnDrink(this);
5020 _ = IsPC;
5021 }
Thing Duplicate(int num)
Definition: Card.cs:3374
void ModNum(int a, bool notify=true)
Definition: Card.cs:3445
Stats hunger
Definition: Chara.cs:1140
virtual void OnDrink(Chara c)
Definition: Trait.cs:989

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

4528 {
4529 if (held == null)
4530 {
4531 return null;
4532 }
4533 if (IsPC)
4534 {
4535 WidgetHotbar.dirtyCurrentItem = true;
4537 }
4538 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4539 card.OnLand();
4540 if (card.trait.CanOnlyCarry)
4541 {
4542 card.SetPlaceState(PlaceState.installed);
4543 }
4544 return card;
4545 }
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 4547 of file Chara.cs.

4548 {
4549 if (t.c_isImportant)
4550 {
4551 Msg.Say("markedImportant");
4552 return;
4553 }
4554 if (!t.trait.CanBeDropped)
4555 {
4556 Msg.Say("cantDrop", t);
4557 return;
4558 }
4559 if (t.trait is TraitAbility)
4560 {
4561 SE.Trash();
4562 t.Destroy();
4563 return;
4564 }
4565 Msg.Say("dropItem", t.Name);
4566 t.ignoreAutoPick = true;
4567 PlaySound("drop");
4568 EClass._zone.AddCard(t, pos);
4569 if (t.trait.CanOnlyCarry)
4570 {
4571 t.Install();
4572 }
4573 }
Card Install()
Definition: Card.cs:3671
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 1769 of file Chara.cs.

1770 {
1771 Chara chara = CharaGen.Create(id);
1772 chara.mana.value = mana.value;
1773 chara.stamina.value = stamina.value;
1774 foreach (KeyValuePair<int, Element> item in elements.dict)
1775 {
1776 Element orCreateElement = chara.elements.GetOrCreateElement(item.Key);
1777 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.vSource;
1778 }
1779 chara.SetFaith(faith);
1780 chara.bio = IO.DeepCopy(bio);
1781 chara.LV = base.LV;
1782 chara.c_daysWithGod = base.c_daysWithGod;
1783 chara.RefreshFaithElement();
1784 chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
1785 chara.isCopy = true;
1786 chara.isScaled = base.isScaled;
1787 if (HaveFur())
1788 {
1789 chara.c_fur = -1;
1790 }
1791 return chara;
1792 }
bool HaveFur()
Definition: Card.cs:7760
Stats mana
Definition: Chara.cs:1152
void RefreshFaithElement()
Definition: Chara.cs:9972
void SetFaith(string id)
Definition: Chara.cs:1700
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 10087 of file Chara.cs.

10088 {
10089 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
10090 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 10078 of file Chara.cs.

10079 {
10080 int[] array = (body ? Element.List_Body : Element.List_Mind);
10081 foreach (int ele in array)
10082 {
10083 EnhanceTempElement(ele, p, onlyRenew);
10084 }
10085 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10087

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 4989 of file Chara.cs.

4990 {
4991 int slot = EClass.sources.categories.map[s].slot;
4992 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
4993 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
4994 {
4995 SetEQQuality();
4996 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
4997 AddThing(thing);
4998 if (bodySlot != null && !body.Equip(thing, bodySlot))
4999 {
5000 thing.Destroy();
5001 }
5002 }
5003 }
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3085
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:4936
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 4969 of file Chara.cs.

4970 {
4971 SetEQQuality();
4972 if (r != Rarity.Random)
4973 {
4974 CardBlueprint.current.rarity = r;
4975 }
4976 Thing thing = ThingGen.Create(s, mat, base.LV);
4977 if (body.GetSlot(thing, onlyEmpty: true) == null)
4978 {
4979 return thing;
4980 }
4981 AddThing(thing);
4982 if (!body.Equip(thing))
4983 {
4984 thing.Destroy();
4985 }
4986 return thing;
4987 }

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

5006 {
5007 SetEQQuality();
5008 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
5009 AddThing(t);
5010 }
Thing SetNum(int a)
Definition: Card.cs:3425

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 6052 of file Chara.cs.

6053 {
6054 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
6055 {
6056 return 25 + Evalue(226) * 125 / 100;
6057 }
6058 return Evalue(226);
6059 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3470 of file Chara.cs.

3471 {
3472 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3473 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3474 zone = zone ?? EClass.world.region;
3476 {
3477 state = ZoneTransition.EnterState.Fall,
3478 x = pos.x,
3479 z = pos.z
3480 });
3481 }
void MoveZone(string alias)
Definition: Chara.cs:3295
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 7674 of file Chara.cs.

7675 {
7676 TraitToolRange ranged = weapon.trait as TraitToolRange;
7677 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7678 if (thing != null)
7679 {
7680 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7681 if (thing2 != null)
7682 {
7683 return thing2;
7684 }
7685 }
7686 return things.Find((Thing t) => ranged.IsAmmo(t));
7687 }
bool IsAmmo
Definition: Card.cs:2235
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 7198 of file Chara.cs.

7199 {
7200 foreach (Card item in EClass._map.props.installed.all)
7201 {
7202 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7203 {
7204 return traitBed;
7205 }
7206 }
7207 return null;
7208 }

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

7410 {
7411 Thing result = null;
7412 int num = -1;
7413 if (IsPC)
7414 {
7415 return null;
7416 }
7417 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7418 {
7419 int num2 = CountNumEaten(item);
7420 int num3 = 100 - num2;
7421 if (num3 > num)
7422 {
7423 result = item;
7424 num = num3;
7425 }
7426 }
7427 return result;
7428 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7455
int CountNumEaten(Thing food)
Definition: Chara.cs:9943
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 2362 of file Chara.cs.

2363 {
2364 if (IsMinion)
2365 {
2366 master = EClass._map.FindChara(base.c_uidMaster);
2367 }
2368 return master;
2369 }
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 6403 of file Chara.cs.

6404 {
6405 for (int i = 0; i < EClass._map.charas.Count; i++)
6406 {
6407 Chara chara = EClass._map.charas[i];
6408 if (chara != this && chara != enemy && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6409 {
6410 DoHostileAction(chara);
6411 enemy = chara;
6412 return true;
6413 }
6414 }
6415 return false;
6416 }
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6241

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

6335 {
6336 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
6337 {
6338 return false;
6339 }
6340 if (enemy != null && !enemy.IsAliveInCurrentZone)
6341 {
6342 enemy = null;
6343 }
6344 if (enemy != null)
6345 {
6346 return false;
6347 }
6348 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
6349 {
6350 return false;
6351 }
6352 bool flag = enemy != null || ai is GoalCombat;
6353 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6354 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
6355 bool flag3 = !IsPCParty;
6356 Chara chara = null;
6357 int num2 = 9999;
6358 for (int i = 0; i < EClass._map.charas.Count; i++)
6359 {
6360 Chara chara2 = EClass._map.charas[i];
6361 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2))
6362 {
6363 continue;
6364 }
6365 int num3 = Dist(chara2);
6366 int num4 = GetSightRadius() + (flag ? 1 : 0);
6367 if (num3 > num4)
6368 {
6369 continue;
6370 }
6371 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
6372 {
6373 if (this == pos.FirstChara)
6374 {
6375 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6376 }
6377 stealthSeen++;
6378 }
6379 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!IsPCFaction || EClass.pc.ai.ShouldAllyAttack(chara2)))
6380 {
6381 if (!IsPCParty)
6382 {
6383 DoHostileAction(chara2);
6384 enemy = chara2;
6385 return true;
6386 }
6387 if (num3 < num2)
6388 {
6389 num2 = num3;
6390 chara = chara2;
6391 }
6392 }
6393 }
6394 if (chara != null)
6395 {
6396 DoHostileAction(chara);
6397 enemy = chara;
6398 return true;
6399 }
6400 return false;
6401 }
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
int stealthSeen
Definition: Chara.cs:186
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 7789 of file Chara.cs.

7790 {
7791 return FindBed()?.owner.pos.cell.room;
7792 }
TraitBed FindBed()
Definition: Chara.cs:7198

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

9859 {
9860 Element orCreateElement = elements.GetOrCreateElement(ele);
9861 if (orCreateElement.ValueWithoutLink == 0)
9862 {
9863 elements.ModBase(orCreateElement.id, 1);
9864 }
9865 if (orCreateElement is Spell)
9866 {
9867 int num = EClass.curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
9868 int num2 = origin?.Evalue(765) ?? 0;
9869 num = num * (100 - num2) / 100;
9870 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
9871 a = Mathf.Max(1, EClass.rndHalf(a));
9872 if (orCreateElement.source.charge == 1)
9873 {
9874 a = 1;
9875 }
9876 orCreateElement.vPotential += a;
9877 }
9878 Say("spell_gain", this, orCreateElement.Name);
9879 LayerAbility.SetDirty(orCreateElement);
9880 }
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 7142 of file Chara.cs.

7143 {
7144 string result = "?????";
7145 if (ai != null)
7146 {
7147 result = ai.GetCurrentActionText();
7148 }
7149 return result;
7150 }
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 7724 of file Chara.cs.

7725 {
7726 if (body.GetWeight(armorOnly: true) <= 30000)
7727 {
7728 return 120;
7729 }
7730 return 122;
7731 }
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 7689 of file Chara.cs.

7690 {
7691 Thing result = null;
7692 int num = 0;
7693 foreach (Thing thing in things)
7694 {
7695 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
7696 {
7697 num = thing.GetEquipValue();
7698 result = thing;
7699 }
7700 }
7701 return result;
7702 }
int GetEquipValue()
Definition: Card.cs:7059
bool IsRangedWeapon
Definition: Card.cs:2231
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7623

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 9231 of file Chara.cs.

9232 {
9233 for (int i = 0; i < conditions.Count; i++)
9234 {
9235 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
9236 {
9237 return conBuffStats.elements.GetElement(ele);
9238 }
9239 }
9240 return null;
9241 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 9226 of file Chara.cs.

9227 {
9228 return GetBuffStats(EClass.sources.elements.alias[alias].id);
9229 }
Element GetBuffStats(string alias)
Definition: Chara.cs:9226

References SourceManager.elements, and EClass.sources.

Referenced by GoalCombat.TryUseAbility().

◆ GetBurden()

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

Definition at line 1794 of file Chara.cs.

1795 {
1796 int num2 = (base.ChildrenWeight + ((t != null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 / WeightLimit;
1797 if (num2 < 0)
1798 {
1799 num2 = 1000;
1800 }
1802 {
1803 num2 = 0;
1804 }
1805 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
1806 if (num3 > 9)
1807 {
1808 num3 = 9;
1809 }
1810 return num3;
1811 }

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

◆ GetCondition< T >()

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

Definition at line 9269 of file Chara.cs.

9269 : Condition
9270 {
9271 for (int i = 0; i < conditions.Count; i++)
9272 {
9273 if (conditions[i] is T)
9274 {
9275 return conditions[i] as T;
9276 }
9277 }
9278 return null;
9279 }

◆ GetCooldown()

int Chara.GetCooldown ( int  idEle)
inline

Definition at line 8524 of file Chara.cs.

8525 {
8526 if (_cooldowns != null)
8527 {
8528 for (int i = 0; i < _cooldowns.Count; i++)
8529 {
8530 if (_cooldowns[i] / 1000 == idEle)
8531 {
8532 return _cooldowns[i] % 1000;
8533 }
8534 }
8535 }
8536 return 0;
8537 }

Referenced by NotificationCooldown.OnRefresh().

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3590 of file Chara.cs.

3591 {
3592 Debug.Log(angle);
3593 if (!renderer.hasActor)
3594 {
3595 if (angle == 0f || angle == 45f || angle == 90f)
3596 {
3597 return 2;
3598 }
3599 if (angle == -135f || angle == 180f || angle == -90f)
3600 {
3601 return 1;
3602 }
3603 if (angle == 135f)
3604 {
3605 return 0;
3606 }
3607 return 3;
3608 }
3609 return renderer.actor.currentDir;
3610 }
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 7117 of file Chara.cs.

7118 {
7119 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
7120 }
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 4600 of file Chara.cs.

4601 {
4602 if (elements.Value(122) > elements.Value(120))
4603 {
4604 return elements.GetElement(122);
4605 }
4606 return elements.GetElement(120);
4607 }
int Value(int ele)

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4575 of file Chara.cs.

4576 {
4577 int num = Evalue(131);
4578 int num2 = Evalue(130);
4579 int num3 = Evalue(123);
4580 if (num > num2 && num > num3)
4581 {
4582 return AttackStyle.TwoWield;
4583 }
4584 if (num2 > num && num2 > num3)
4585 {
4586 return AttackStyle.TwoHand;
4587 }
4588 if (num3 > num && num3 > num2)
4589 {
4590 return AttackStyle.Shield;
4591 }
4592 return AttackStyle.Default;
4593 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 7913 of file Chara.cs.

7914 {
7915 SourceCategory.Row r = null;
7916 if (_listFavCat.Count == 0)
7917 {
7918 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
7919 {
7920 if (row.gift > 0)
7921 {
7922 _listFavCat.Add(row);
7923 }
7924 }
7925 }
7926 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7927 {
7928 r = _listFavCat.RandomItem();
7929 });
7930 return r;
7931 }
static List< SourceCategory.Row > _listFavCat
Definition: Chara.cs:192
int seed
Definition: Game.cs:197
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:22

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

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

◆ GetFavFood()

SourceThing.Row Chara.GetFavFood ( )
inline

Definition at line 7893 of file Chara.cs.

7894 {
7895 if (_listFavFood.Count == 0)
7896 {
7897 foreach (SourceThing.Row row in EClass.sources.things.rows)
7898 {
7899 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
7900 {
7901 _listFavFood.Add(row);
7902 }
7903 }
7904 }
7905 SourceThing.Row r = null;
7906 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7907 {
7908 r = _listFavFood.RandomItem();
7909 });
7910 return r;
7911 }
static List< SourceThing.Row > _listFavFood
Definition: Chara.cs:190
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 4595 of file Chara.cs.

4596 {
4597 return elements.ListElements((Element e) => e.source.categorySub == "weapon" && !e.HasTag("ranged")).FindMax((Element a) => a.Value);
4598 }
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 2548 of file Chara.cs.

2549 {
2550 return PathManager.Instance.GetFirstStep(pos, newPoint, this, IsPC ? 40 : 10, (!IsMultisize) ? moveType : PathManager.MoveType.Default);
2551 }
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 8590 of file Chara.cs.

8591 {
8592 if (IsPC)
8593 {
8594 return null;
8595 }
8596 switch (TimeTable.GetSpan(idTimeTable, hour))
8597 {
8598 case TimeTable.Span.Sleep:
8600 {
8601 return new GoalSleep();
8602 }
8603 break;
8604 case TimeTable.Span.Eat:
8605 return new GoalIdle();
8606 case TimeTable.Span.Work:
8607 if (IsGuest())
8608 {
8609 return new GoalIdle();
8610 }
8611 return GetGoalWork();
8612 case TimeTable.Span.Free:
8613 if (IsGuest())
8614 {
8615 return new GoalIdle();
8616 }
8617 return GetGoalHobby();
8618 }
8619 return null;
8620 }
Goal GetGoalWork()
Definition: Chara.cs:8622
Goal GetGoalHobby()
Definition: Chara.cs:8635
string idTimeTable
Definition: Chara.cs:466
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 8635 of file Chara.cs.

8636 {
8637 if (IsPrisoner)
8638 {
8639 return new GoalIdle();
8640 }
8641 if (memberType == FactionMemberType.Livestock)
8642 {
8643 return new GoalGraze();
8644 }
8645 return new GoalHobby();
8646 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1036

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 8622 of file Chara.cs.

8623 {
8624 if (IsPrisoner)
8625 {
8626 return new GoalIdle();
8627 }
8628 if (memberType == FactionMemberType.Livestock)
8629 {
8630 return new GoalGraze();
8631 }
8632 return new GoalWork();
8633 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 7127 of file Chara.cs.

7128 {
7129 int num = 50;
7130 if (FindBed() != null)
7131 {
7132 num += 50;
7133 }
7134 return num;
7135 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 7122 of file Chara.cs.

7123 {
7124 return base.LV / 2 + 4;
7125 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6656 of file Chara.cs.

6657 {
6658 string text = base.Name;
6659 if (IsFriendOrAbove())
6660 {
6661 text = text.TagColor(EClass.Colors.colorFriend);
6662 }
6663 else if (IsHostile())
6664 {
6665 text = text.TagColor(EClass.Colors.colorHostile);
6666 }
6667 int num = 2;
6668 int lV = EClass.pc.LV;
6669 if (base.LV >= lV * 5)
6670 {
6671 num = 0;
6672 }
6673 else if (base.LV >= lV * 2)
6674 {
6675 num = 1;
6676 }
6677 else if (base.LV <= lV / 4)
6678 {
6679 num = 4;
6680 }
6681 else if (base.LV <= lV / 2)
6682 {
6683 num = 3;
6684 }
6685 string text2 = Lang.GetList("lvComparison")[num];
6686 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6687 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6688 s = (" (" + s.lang() + ") ").TagSize(14);
6689 s = "";
6690 if (memberType == FactionMemberType.Guest)
6691 {
6692 s += (" (" + "guest".lang() + ") ").TagSize(14);
6693 }
6694 else if (memberType == FactionMemberType.Livestock)
6695 {
6696 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6697 }
6698 if (!EClass.pc.IsMoving)
6699 {
6700 if (EClass.pc.HasHigherGround(this))
6701 {
6702 text2 += "lowerGround".lang();
6703 }
6704 else if (HasHigherGround(EClass.pc))
6705 {
6706 text2 += "higherGround".lang();
6707 }
6708 }
6709 if (Evalue(1232) > 0)
6710 {
6711 text2 = "milkBaby".lang().TagSize(14) + text2;
6712 }
6713 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6714 {
6715 text2 = "hasBounty".lang().TagSize(14) + text2;
6716 }
6717 if (EClass.pc.HasElement(481))
6718 {
6719 text2 += ("(" + faith.Name + ")").TagSize(14);
6720 }
6721 return text + text2 + s;
6722 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1188
override bool IsMoving
Definition: Chara.cs:606
bool IsNeutral()
Definition: Chara.cs:6461
Color colorHostile
Color colorFriend
Gradient gradientLVComparison
bool ShowBounty(Chara c)
Definition: GuildFighter.cs:39
bool HasBounty(Chara c)
Definition: GuildFighter.cs:44
Definition: Guild.cs:2
static GuildFighter Fighter
Definition: Guild.cs:56

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

Referenced by WidgetMouseover.Refresh().

◆ GetHoverText2()

override string Chara.GetHoverText2 ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6724 of file Chara.cs.

6725 {
6726 string text = "";
6727 if (knowFav)
6728 {
6729 text += Environment.NewLine;
6730 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
6731 }
6732 string text2 = "";
6734 {
6735 text2 += Environment.NewLine;
6736 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
6737 text2 += Environment.NewLine;
6738 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");
6739 text2 += Environment.NewLine;
6740 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
6741 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin + " scaled:" + base.isScaled;
6742 }
6744 {
6745 text2 += Environment.NewLine;
6746 text2 += "<size=14>";
6747 foreach (Hobby item in ListWorks())
6748 {
6749 text2 = text2 + item.Name + ", ";
6750 }
6751 foreach (Hobby item2 in ListHobbies())
6752 {
6753 text2 = text2 + item2.Name + ", ";
6754 }
6755 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
6756 }
6757 string text3 = "";
6758 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
6759 if (enumerable.Count() > 0)
6760 {
6761 text3 += Environment.NewLine;
6762 text3 += "<size=14>";
6763 int num = 0;
6764 foreach (BaseStats item3 in enumerable)
6765 {
6766 string text4 = item3.GetPhaseStr();
6767 if (text4.IsEmpty() || text4 == "#")
6768 {
6769 continue;
6770 }
6771 Color c = Color.white;
6772 switch (item3.source.group)
6773 {
6774 case "Bad":
6775 case "Debuff":
6776 case "Disease":
6778 break;
6779 case "Buff":
6781 break;
6782 }
6784 {
6785 text4 = text4 + "(" + item3.GetValue() + ")";
6786 if (resistCon != null && resistCon.ContainsKey(item3.id))
6787 {
6788 text4 = text4 + "{" + resistCon[item3.id] + "}";
6789 }
6790 }
6791 num++;
6792 text3 = text3 + text4.TagColor(c) + ", ";
6793 }
6794 if (num == 0)
6795 {
6796 text3 = "";
6797 }
6798 else
6799 {
6800 text = "";
6801 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
6802 }
6803 }
6805 {
6806 text3 += Environment.NewLine;
6807 foreach (ActList.Item item4 in ability.list.items)
6808 {
6809 text3 = text3 + item4.act.Name + ", ";
6810 }
6811 text3 = text3.TrimEnd(", ".ToCharArray());
6812 }
6813 return text + text2 + text3;
6814 }
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:7913
bool knowFav
Definition: Chara.cs:411
override string GetName(NameStyle style, int num=-1)
Definition: Chara.cs:1355
override int DV
Definition: Chara.cs:727
List< Hobby > ListHobbies(bool useMemberType=true)
Definition: Chara.cs:8778
override int PV
Definition: Chara.cs:756
SourceThing.Row GetFavFood()
Definition: Chara.cs:7893
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:8751
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 7995 of file Chara.cs.

7996 {
7997 if (id == "olderyoungersister")
7998 {
7999 if (base.idSkin != 2)
8000 {
8001 return "UN_olderyoungersister";
8002 }
8003 return "UN_olderyoungersister_alt";
8004 }
8005 if (Portrait.allIds.Contains("UN_" + id + ".png"))
8006 {
8007 return "UN_" + id;
8008 }
8009 return base.c_idPortrait;
8010 }
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 7981 of file Chara.cs.

7982 {
7983 string text = race.id;
7984 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
7985 {
7986 return "foxfolk";
7987 }
7988 if (trait is TraitGuard)
7989 {
7990 return "guard";
7991 }
7992 return "";
7993 }

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

6911 {
6912 return GetSprite();
6913 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6580

◆ GetName()

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

Reimplemented from Card.

Definition at line 1355 of file Chara.cs.

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

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

7934 {
7935 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
7936 {
7937 if (enumerator.MoveNext())
7938 {
7939 return enumerator.Current;
7940 }
7941 }
7942 return null;
7943 }
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1208

References race.

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

◆ GetPietyValue()

int Chara.GetPietyValue ( )
inline

Definition at line 9963 of file Chara.cs.

9964 {
9965 if (base._IsPC)
9966 {
9967 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
9968 }
9969 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
9970 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 5028 of file Chara.cs.

5029 {
5030 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
5031 if (!IsPCFaction)
5032 {
5033 return;
5034 }
5036 {
5037 if (homeZone != null && EClass._zone != homeZone)
5038 {
5039 Msg.Say("returnHome", this, homeZone.Name);
5041 }
5042 }
5043 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
5044 {
5045 EClass.pc.party.AddMemeber(this, showMsg: true);
5046 }
5047 }
static FactionBranch Branch
Definition: EClass.cs:22
void AddMemeber(Chara c, bool showMsg=false)
Definition: Party.cs:56
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:607
virtual bool CanJoinParty
Definition: TraitChara.cs:47
virtual bool CanJoinPartyResident
Definition: TraitChara.cs:50

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

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

◆ GetRoomWork()

BaseArea Chara.GetRoomWork ( )
inline

Definition at line 8729 of file Chara.cs.

8730 {
8731 BaseArea result = null;
8732 foreach (Hobby item in ListWorks())
8733 {
8734 AIWork aI = item.GetAI(this);
8735 if (aI.SetDestination())
8736 {
8737 if (aI.destArea != null)
8738 {
8739 result = aI.destArea;
8740 }
8741 else if (aI.destThing != null)
8742 {
8743 result = aI.destThing.pos.cell.room;
8744 }
8745 break;
8746 }
8747 }
8748 return result;
8749 }
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 6580 of file Chara.cs.

6581 {
6582 if (IsPCC)
6583 {
6584 PCC pCC = PCC.Get(pccData);
6585 pCC.Build();
6586 return pCC.variation.idle[0, 0];
6587 }
6588 if (spriteReplacer != null)
6589 {
6590 return spriteReplacer.data.GetSprite();
6591 }
6592 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);
6593 }
SpriteReplacer spriteReplacer
Definition: Chara.cs:152
override CardRow sourceCard
Definition: Chara.cs:448
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 6604 of file Chara.cs.

6605 {
6606 if (IsPCC)
6607 {
6609 {
6611 }
6612 }
6613 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && (GetBool(123) || affinity.CanSleepBeside()))
6614 {
6615 return EClass.setting.pass.subDead;
6616 }
6617 return SubPassData.Default;
6618 }
bool CanSleepBeside()
Definition: Affinity.cs:77
bool GetBool(int id)
Definition: BaseCard.cs:15
ConSleep conSleep
Definition: Chara.cs:102
override bool IsDeadOrSleeping
Definition: Chara.cs:571
Affinity affinity
Definition: Chara.cs:312
PassSetting pass
Definition: GameSetting.cs:303
bool altHeldPos
Definition: Player.cs:1150
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 7137 of file Chara.cs.

7138 {
7139 return GetHappiness().ToString() ?? "";
7140 }
int GetHappiness()
Definition: Chara.cs:7127

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 8867 of file Chara.cs.

8868 {
8869 string text = (simple ? "" : ("hobby".lang() + ":"));
8870 foreach (Hobby item in ListHobbies())
8871 {
8872 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8873 }
8874 return text.TrimEnd(',');
8875 }

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 8877 of file Chara.cs.

8878 {
8879 string text = (simple ? "" : ("work".lang() + ":"));
8880 foreach (Hobby item in ListWorks())
8881 {
8882 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8883 }
8884 return text.TrimEnd(',');
8885 }

References item.

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

◆ GetTopicText()

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

Definition at line 6816 of file Chara.cs.

6817 {
6818 string key = source.idText.IsEmpty(id);
6819 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
6820 {
6821 key = "littleOne2";
6822 }
6823 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
6824 if (row == null)
6825 {
6826 return null;
6827 }
6828 string text = row.GetText(topic, returnNull: true);
6829 if (text.IsEmpty())
6830 {
6831 return null;
6832 }
6833 if (text.StartsWith("@"))
6834 {
6835 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
6836 if (row == null)
6837 {
6838 return null;
6839 }
6840 text = row.GetText(topic, returnNull: true);
6841 if (text.IsEmpty())
6842 {
6843 return null;
6844 }
6845 }
6846 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
6847 }
SourceCharaText charaText

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 7955 of file Chara.cs.

7956 {
7957 int num = 0;
7958 if (base.c_upgrades != null)
7959 {
7960 num += base.c_upgrades.spent;
7961 }
7962 if (base.c_genes != null)
7963 {
7964 num += base.c_genes.GetTotalCost();
7965 }
7966 return num + base.feat;
7967 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 8798 of file Chara.cs.

8799 {
8800 foreach (Hobby item in ListWorks())
8801 {
8802 if (item.source.alias == id)
8803 {
8804 return item;
8805 }
8806 }
8807 foreach (Hobby item2 in ListHobbies())
8808 {
8809 if (item2.source.alias == id)
8810 {
8811 return item2;
8812 }
8813 }
8814 return null;
8815 }
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 8950 of file Chara.cs.

8951 {
8952 if (_workSummary == null)
8953 {
8954 _workSummary = new WorkSummary();
8955 }
8956 return _workSummary;
8957 }
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 8094 of file Chara.cs.

8095 {
8096 if (c.IsHostile() || c.IsDeadOrSleeping)
8097 {
8098 Msg.Say("affinityNone", c, this);
8099 return;
8100 }
8101 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
8102 {
8103 bool num = t.blessedState == BlessedState.Doomed;
8104 int num2 = 200 + t.LV * 3;
8105 if (t.rarity == Rarity.Legendary)
8106 {
8107 num2 *= 3;
8108 }
8109 if (t.rarity >= Rarity.Mythical)
8110 {
8111 num2 *= 5;
8112 }
8113 if (num)
8114 {
8115 num2 *= 2;
8116 }
8117 EClass.pc.PlayEffect("identify");
8118 EClass.pc.PlaySound("identify");
8119 c.PlayEffect("mutation");
8120 c.Say("draw_curse", c, t);
8121 t.Destroy();
8122 List<Element> list = new List<Element>();
8123 foreach (Element value in EClass.pc.elements.dict.Values)
8124 {
8125 if (value is Spell)
8126 {
8127 list.Add(value);
8128 }
8129 }
8130 if (list.Count == 0)
8131 {
8133 return;
8134 }
8135 Element element = list.RandomItem();
8136 EClass.pc.ModExp(element.id, num2);
8137 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
8138 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
8139 return;
8140 }
8141 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
8142 {
8143 GiveLovePotion(c, t);
8144 return;
8145 }
8146 if (t.trait is TraitErohon && c.id == t.c_idRefName)
8147 {
8148 c.OnGiveErohon(t);
8149 return;
8150 }
8151 if (t.trait is TraitTicketMassage)
8152 {
8153 t.ModNum(-1);
8154 c.Talk("ticket");
8155 switch (t.id)
8156 {
8157 case "ticket_massage":
8158 c.ModAffinity(EClass.pc, 10);
8160 {
8161 target = c
8162 });
8163 break;
8164 case "ticket_armpillow":
8165 c.ModAffinity(EClass.pc, 20);
8166 EClass.pc.AddCondition<ConSleep>(300, force: true);
8167 c.SetAI(new AI_ArmPillow
8168 {
8169 target = EClass.pc
8170 });
8171 break;
8172 case "ticket_champagne":
8173 c.ModAffinity(EClass.pc, 10);
8175 break;
8176 }
8177 return;
8178 }
8179 if (t.id == "flyer")
8180 {
8181 stamina.Mod(-1);
8182 if (c.things.Find((Thing a) => a.id == "flyer") != null)
8183 {
8184 c.Talk("flyer_miss");
8185 DoHostileAction(c);
8186 return;
8187 }
8188 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
8189 {
8190 Msg.Say("affinityNone", c, this);
8191 t.Destroy();
8192 elements.ModExp(291, 10f);
8193 return;
8194 }
8195 elements.ModExp(291, 50f);
8196 }
8197 if (t.id == "statue_weird")
8198 {
8199 EClass.pc.Say("statue_sell");
8200 }
8201 t.isGifted = true;
8202 c.nextUse = c.affinity.OnGift(t);
8203 if (!t.isDestroyed)
8204 {
8205 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
8206 {
8207 q.OnGiveItem(c, t);
8208 });
8209 if (c.TryEquip(t))
8210 {
8211 c.nextUse = null;
8212 }
8213 }
8214 }
Thing OnGift(Thing t)
Definition: Affinity.cs:129
int ExpToNext
Definition: Card.cs:1996
bool isCopy
Definition: Card.cs:878
bool IsCursed
Definition: Card.cs:2243
int CHA
Definition: Card.cs:2335
bool IsEquipmentOrRanged
Definition: Card.cs:2206
void SayNothingHappans()
Definition: Card.cs:6701
string c_idRefName
Definition: Card.cs:1641
void AddExp(int a)
Definition: Card.cs:2931
void GiveLovePotion(Chara c, Thing t)
Definition: Chara.cs:8227
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7584
void OnGiveErohon(Thing t)
Definition: Chara.cs:8216
QuestManager quests
Definition: Game.cs:179
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
virtual void OnGiveItem(Chara c, Thing t)
Definition: Quest.cs: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 8227 of file Chara.cs.

8228 {
8229 c.Say("give_love", c, t);
8230 c.PlaySound(t.material.GetSoundDead());
8231 c.ShowEmo(Emo.angry);
8232 c.ModAffinity(EClass.pc, -20, show: false);
8233 c.Talk("pervert");
8234 t.Destroy();
8235 }

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

6218 {
6219 if (enemy == null && !IsPC)
6220 {
6221 if (GetInt(106) == 0)
6222 {
6223 TalkTopic("aggro");
6224 }
6225 if (OriginalHostility != Hostility.Enemy)
6226 {
6227 ShowEmo(Emo.angry);
6228 }
6229 SetEnemy(_tg.Chara);
6230 }
6232 {
6233 if (hostility >= Hostility.Neutral)
6234 {
6235 Say("angry", this);
6236 }
6237 hostility = Hostility.Enemy;
6238 }
6239 }
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual bool IsPCFactionMinion
Definition: Card.cs:2143

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

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

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

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

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

9203 {
9204 for (int i = 0; i < conditions.Count; i++)
9205 {
9206 if (conditions[i] is T)
9207 {
9208 return true;
9209 }
9210 }
9211 return false;
9212 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8519 of file Chara.cs.

8520 {
8521 return GetCooldown(idEle) != 0;
8522 }
int GetCooldown(int idEle)
Definition: Chara.cs:8524

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

◆ HasHigherGround()

bool Chara.HasHigherGround ( Card  c)
inline

Definition at line 1188 of file Chara.cs.

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

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

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

◆ HasHobbyOrWork()

bool Chara.HasHobbyOrWork ( string  alias)
inline

Definition at line 8648 of file Chara.cs.

8649 {
8650 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
8651 listHobby.Clear();
8652 if (_works == null || _hobbies == null)
8653 {
8654 RerollHobby();
8655 }
8656 foreach (int work in _works)
8657 {
8658 if (work == num)
8659 {
8660 return true;
8661 }
8662 }
8663 foreach (int hobby in _hobbies)
8664 {
8665 if (hobby == num)
8666 {
8667 return true;
8668 }
8669 }
8670 return false;
8671 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:8911
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2327 of file Chara.cs.

2328 {
2329 foreach (Chara chara in EClass._map.charas)
2330 {
2331 if (chara.c_uidMaster == base.uid)
2332 {
2333 return true;
2334 }
2335 }
2336 return false;
2337 }

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

Referenced by ActEffect.ProcAt().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1711 of file Chara.cs.

1712 {
1713 Cure(CureType.HealComplete);
1714 base.hp = MaxHP;
1715 mana.value = mana.max;
1716 stamina.value = stamina.max;
1717 Refresh();
1718 }
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 4398 of file Chara.cs.

4399 {
4400 if (held == t || t.isDestroyed || t.Num <= 0)
4401 {
4402 return;
4403 }
4404 if (IsPC && t.isNPCProperty)
4405 {
4406 t.isNPCProperty = false;
4408 pos.TryWitnessCrime(this);
4409 }
4410 PickHeld();
4411 if (t.isChara)
4412 {
4414 {
4415 t.ShowEmo(Emo.love);
4416 }
4417 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4418 }
4419 else
4420 {
4421 if (num == -1 || num > t.Num)
4422 {
4423 num = t.Num;
4424 }
4425 if (num < t.Num)
4426 {
4427 t = t.Split(num);
4428 }
4429 }
4430 if (t.GetRootCard() != this)
4431 {
4432 t = Pick(t.Thing, msg: false, tryStack: false);
4433 if (t.GetRootCard() != this)
4434 {
4435 return;
4436 }
4437 }
4438 held = t;
4439 if (held.GetLightRadius() > 0)
4440 {
4442 }
4443 if (IsPC)
4444 {
4446 WidgetHotbar.dirtyCurrentItem = true;
4447 }
4448 }
Thing Split(int a)
Definition: Card.cs:3414
bool isNPCProperty
Definition: Card.cs:554
void RecalculateFOV()
Definition: Card.cs:6266
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2115
int GetLightRadius()
Definition: Card.cs:6313
void PickHeld(bool msg=false)
Definition: Chara.cs:4450
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:861

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

9035 {
9036 if (!onDeserialize)
9037 {
9038 _cints[10] = 20;
9039 _cints[11] = 70;
9040 _cints[13] = 70;
9041 _cints[14] = 70;
9042 _cints[15] = 70;
9043 _cints[17] = 0;
9044 _cints[18] = 0;
9045 }
9046 foreach (Condition condition in conditions)
9047 {
9048 condition.SetOwner(this, onDeserialize);
9049 }
9050 }
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 7430 of file Chara.cs.

7431 {
7432 if (t == null)
7433 {
7434 t = FindBestFoodToEat();
7435 }
7436 if (t == null)
7437 {
7438 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7439 }
7440 if (t == null)
7441 {
7442 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7443 }
7444 if (t != null)
7445 {
7446 Say("eat_start", this, t.Duplicate(1));
7447 if (sound)
7448 {
7449 PlaySound("eat");
7450 }
7451 FoodEffect.Proc(this, t);
7452 }
7453 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7409
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 6471 of file Chara.cs.

6472 {
6473 if (faction == EClass.Home)
6474 {
6475 return homeZone == EClass.game.activeZone;
6476 }
6477 return false;
6478 }
Faction faction
Definition: Chara.cs:425
Zone activeZone
Definition: Game.cs:248

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

◆ IsCriticallyWounded()

bool Chara.IsCriticallyWounded ( bool  includeRide = false)
inline

Definition at line 1175 of file Chara.cs.

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

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

2472 {
2473 if (!currentZone.IsRegion && p.IsValid)
2474 {
2475 CellDetail detail = p.detail;
2476 if (detail != null && detail.charas.Count > 0)
2477 {
2478 foreach (Chara chara in p.detail.charas)
2479 {
2480 if (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed)
2481 {
2482 if (cancelAI && EClass.pc.ai is GoalManualMove)
2483 {
2484 EClass.pc.ai.Cancel();
2485 }
2486 return true;
2487 }
2488 }
2489 }
2490 }
2491 return false;
2492 }
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 2371 of file Chara.cs.

2372 {
2373 if (!IsPCPartyMinion)
2374 {
2375 return false;
2376 }
2377 foreach (Quest item in EClass.game.quests.list)
2378 {
2379 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2380 {
2381 return true;
2382 }
2383 }
2384 return false;
2385 }
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 6515 of file Chara.cs.

6516 {
6517 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6518 {
6520 {
6521 return true;
6522 }
6523 }
6524 else if (IsHostile() && c.IsHostile())
6525 {
6526 return true;
6527 }
6528 return false;
6529 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6423 of file Chara.cs.

6424 {
6425 if (c == null)
6426 {
6427 return false;
6428 }
6429 if (base.IsPCFactionOrMinion)
6430 {
6431 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6432 {
6433 return true;
6434 }
6435 }
6436 else
6437 {
6439 {
6440 return true;
6441 }
6442 if (OriginalHostility >= Hostility.Friend)
6443 {
6444 if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
6445 {
6446 return true;
6447 }
6448 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6449 {
6450 return true;
6451 }
6452 }
6453 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6454 {
6455 return true;
6456 }
6457 }
6458 return false;
6459 }
bool IsCriminal
Definition: Player.cs:1334

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

6486 {
6487 return EClass.game.activeZone == currentZone;
6488 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6490 of file Chara.cs.

6490 : TraitSpot
6491 {
6492 foreach (T item in EClass._map.props.installed.traits.List<T>())
6493 {
6494 foreach (Point item2 in item.ListPoints())
6495 {
6496 if (pos.Equals(item2))
6497 {
6498 return true;
6499 }
6500 }
6501 }
6502 return false;
6503 }
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 6461 of file Chara.cs.

6462 {
6463 return hostility == Hostility.Neutral;
6464 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 8038 of file Chara.cs.

8039 {
8040 int num2 = ((!HasElement(1411)) ? 1 : 3);
8041 if (GetBurden(t, num) >= num2)
8042 {
8043 return false;
8044 }
8045 return true;
8046 }
int GetBurden(Card t=null, int num=-1)
Definition: Chara.cs:1794

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

5686 {
5688 {
5689 return;
5690 }
5691 if (t.IsPC)
5692 {
5694 }
5695 if (t.host != null)
5696 {
5697 return;
5698 }
5699 if (t == this)
5700 {
5701 if (!ignoreSelf)
5702 {
5703 Debug.Log(t.pos.GetNearestPoint());
5704 if (TryMove(t.pos.GetNearestPoint()) != MoveResult.Success)
5705 {
5707 }
5708 }
5709 return;
5710 }
5711 if (show)
5712 {
5713 Say("kick", this, t);
5714 }
5715 PlaySound("kick");
5716 if ((t.conSuspend == null || t.conSuspend.uidMachine != 0) && t.trait.CanBePushed && (!t.IsHostile() || EClass.rnd(2) == 0) && !t.noMove && !t.isRestrained)
5717 {
5718 t.MoveByForce(t.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), this, checkWall && !t.pos.IsBlocked);
5719 }
5720 if (t.conSleep != null)
5721 {
5722 t.conSleep.Kill();
5723 }
5724 if (IsPC && t.IsFriendOrAbove() && !t.IsPCFactionOrMinion && karmaLoss)
5725 {
5727 }
5728 t.PlayEffect("kick");
5729 }
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:5735
ConSuspend conSuspend
Definition: Chara.cs:104
MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2695
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 5677 of file Chara.cs.

5678 {
5679 foreach (Chara item in p.ListCharas())
5680 {
5681 Kick(item, ignoreSelf, karmaLoss: true, show: true, checkWall);
5682 }
5683 }
List< Chara > ListCharas()
Definition: Point.cs:1159

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

9643 {
9644 List<Element> list = new List<Element>();
9645 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
9646 {
9648 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
9649 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
9650 {
9651 list.Add(Element.Create(feat.id, num) as Feat);
9652 }
9653 }
9654 return list;
9655 }
int feat
Definition: Card.cs:374
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1100
Definition: FEAT.cs:284

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

8779 {
8780 listHobby.Clear();
8781 if (!useMemberType || memberType != FactionMemberType.Livestock)
8782 {
8783 if (_hobbies == null)
8784 {
8785 RerollHobby();
8786 }
8787 foreach (int hobby in _hobbies)
8788 {
8789 listHobby.Add(new Hobby
8790 {
8791 id = hobby
8792 });
8793 }
8794 }
8795 return listHobby;
8796 }

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

8752 {
8753 listHobby.Clear();
8754 if (useMemberType && memberType == FactionMemberType.Livestock)
8755 {
8756 listHobby.Add(new Hobby
8757 {
8758 id = 45
8759 });
8760 }
8761 else
8762 {
8763 if (_works == null)
8764 {
8765 RerollHobby();
8766 }
8767 foreach (int work in _works)
8768 {
8769 listHobby.Add(new Hobby
8770 {
8771 id = work
8772 });
8773 }
8774 }
8775 return listHobby;
8776 }

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

3510 {
3511 angle = Util.GetAngle(p.x - pos.x, p.z - pos.z);
3512 if (EClass._zone.IsRegion)
3513 {
3514 if (angle > 100f && angle < 170f)
3515 {
3516 base.dir = 2;
3517 }
3518 else if (angle > 170f && angle < 190f)
3519 {
3520 base.dir = 0;
3521 }
3522 else if (angle > 190f || (angle < -10f && angle > -100f))
3523 {
3524 base.dir = 3;
3525 }
3526 else
3527 {
3528 base.dir = 1;
3529 }
3530 angle -= 45f;
3531 }
3532 else if (angle > 170f && angle < 235f)
3533 {
3534 base.dir = 0;
3535 }
3536 else if (angle > 80f && angle < 145f)
3537 {
3538 base.dir = 1;
3539 }
3540 else if (angle > -100f && angle < -35f)
3541 {
3542 base.dir = 3;
3543 }
3544 else if (angle > -10f && angle < 55f)
3545 {
3546 base.dir = 2;
3547 }
3549 }

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2262 of file Chara.cs.

2263 {
2264 if (IsLocalChara && !base.IsUnique)
2265 {
2266 Debug.Log("Creating Replacement NPC for:" + this);
2268 }
2269 _MakeAlly();
2270 if (msg)
2271 {
2272 EClass.pc.Say("hire", this);
2273 EClass.Sound.Play("good");
2274 }
2275 EClass.pc.party.AddMemeber(this);
2276 if (EClass._zone.IsTown)
2277 {
2279 }
2280 }
Chara CreateReplacement()
Definition: Chara.cs:7872
void _MakeAlly()
Definition: Chara.cs:2282
virtual bool IsTown
Definition: Zone.cs:220
void RefreshListCitizen()
Definition: Zone.cs:3530

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

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

References DNA.GenerateGene().

Referenced by CoreDebug.UpdateInput().

◆ MakeGene()

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

Definition at line 8012 of file Chara.cs.

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

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

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

◆ MakeGrave()

void Chara.MakeGrave ( string  lastword)
inline

Definition at line 5135 of file Chara.cs.

5136 {
5137 if (!EClass._zone.IsRegion)
5138 {
5139 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
5140 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
5141 {
5142 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
5143 }
5144 Thing thing = ThingGen.Create(list.RandomItem());
5145 thing.MakeRefFrom(this);
5146 if (!lastword.IsEmpty())
5147 {
5148 thing.c_note = lastword;
5149 }
5150 thing.isModified = true;
5151 EClass._zone.AddCard(thing, pos).Install();
5152 }
5153 }
Card MakeRefFrom(string id)
Definition: Card.cs:5627

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

2317 {
2318 ReleaseMinion();
2319 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2320 this.hostility = hostility2;
2321 base.c_uidMaster = _master.uid;
2322 base.c_minionType = type;
2323 master = _master;
2324 Refresh();
2325 }
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 2256 of file Chara.cs.

2257 {
2258 _MakeAlly();
2259 EClass.pc.party.AddMemeber(this);
2260 }

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

7795 {
7796 if (c == this)
7797 {
7798 return;
7799 }
7800 if (IsPC)
7801 {
7802 c.ModAffinity(EClass.pc, a, show);
7803 }
7804 else
7805 {
7806 if (id == "keeper_garden")
7807 {
7808 return;
7809 }
7810 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
7811 if (IsPCFaction && homeBranch != null)
7812 {
7813 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
7814 }
7815 bool flag = a > 0;
7816 if (flag)
7817 {
7818 a = a * num / 100;
7819 if (affinity.GetLunchChance() > EClass.rnd(100) && GetInt(71) >= 0 && GetInt(71) < EClass.world.date.GetRaw())
7820 {
7821 SetInt(71, -1);
7822 }
7823 }
7824 if (show)
7825 {
7826 if (a == 0)
7827 {
7828 if (!showOnlyEmo)
7829 {
7830 Say("affinityNone", this, c);
7831 }
7832 }
7833 else
7834 {
7835 ShowEmo((!flag) ? Emo.angry : Emo.love);
7836 c.ShowEmo(flag ? Emo.love : Emo.sad);
7837 if (!showOnlyEmo)
7838 {
7839 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
7840 }
7841 }
7842 }
7843 if (c.IsPC)
7844 {
7845 a = affinity.Mod(a);
7846 }
7847 }
7848 }
int Mod(int a)
Definition: Affinity.cs:192
int GetLunchChance()
Definition: Affinity.cs:86
Stats hygiene
Definition: Chara.cs:1150
int GetRaw(int offsetHours=0)
Definition: Date.cs:322
int Evalue(int ele)
static int GetAffinityMod(int phase)
Definition: StatsHygiene.cs:19

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(), AI_Slaughter.Run(), and CoreDebug.UpdateInput().

◆ ModCorruption()

void Chara.ModCorruption ( int  a)
inline

Definition at line 9599 of file Chara.cs.

9600 {
9601 if (a > 0)
9602 {
9603 if (Evalue(962) >= 25 || (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0))
9604 {
9605 return;
9606 }
9607 int num = Evalue(412);
9608 if (num != 0)
9609 {
9610 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
9611 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
9612 }
9613 }
9614 if (a == 0)
9615 {
9616 return;
9617 }
9618 int num3 = (corruption + a) / 100 - corruption / 100;
9619 for (int i = 0; i < Mathf.Abs(num3); i++)
9620 {
9621 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
9622 {
9623 break;
9624 }
9625 }
9626 corruption += a;
9627 int num4 = 0;
9628 foreach (Element value in elements.dict.Values)
9629 {
9630 if (value.source.category == "ether")
9631 {
9632 num4 += value.Value;
9633 }
9634 }
9635 if (num4 > 0 && IsPC)
9636 {
9637 Tutorial.Reserve("ether");
9638 }
9639 corruption = num4 * 100 + corruption % 100;
9640 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9762
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 9556 of file Chara.cs.

9557 {
9558 if (!HasElement(450))
9559 {
9560 int height = bio.height;
9561 height = height * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9562 if (height < 1)
9563 {
9564 height = 1;
9565 }
9566 if (height != bio.height)
9567 {
9568 bio.height = height;
9569 Say((a > 0) ? "height_gain" : "height_lose", this);
9570 }
9571 }
9572 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 10015 of file Chara.cs.

10016 {
10017 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
10018 {
10019 return;
10020 }
10021 bool flag = HasElement(1215);
10022 if (tempElements == null)
10023 {
10025 tempElements.SetParent(this);
10026 }
10027 if (a > 0 && flag)
10028 {
10029 a = a * 150 / 100;
10030 }
10031 int num = elements.ValueWithoutLink(ele);
10032 int num2 = Mathf.Abs(num) + 100;
10033 int num3 = num2 / (flag ? 2 : 4);
10034 int num4 = -num - 100;
10035 int num5 = tempElements.Base(ele);
10036 int num6 = num5 + a;
10037 if (onlyRenew)
10038 {
10039 num3 = Mathf.Min(a, num3);
10040 num4 = Mathf.Max(a, -num2 / 3);
10041 }
10042 if (a > 0 && num6 > num3)
10043 {
10044 a = ((num3 > num5) ? (num3 - num5) : 0);
10045 }
10046 if (a < 0 && num6 < num4)
10047 {
10048 a = ((num4 < num5) ? (num4 - num5) : 0);
10049 }
10050 Element element = tempElements.ModBase(ele, a);
10051 if (element.vBase == 0)
10052 {
10053 tempElements.Remove(element.id);
10054 if (tempElements.dict.Count == 0)
10055 {
10056 tempElements = null;
10057 }
10058 }
10059 }
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 9574 of file Chara.cs.

9575 {
9576 if (HasElement(450) || a == 0)
9577 {
9578 return;
9579 }
9580 int weight = bio.weight;
9581 int height = bio.height;
9582 int num = height * height * 18 / 25000;
9583 int num2 = height * height * 24 / 10000;
9584 if (ignoreLimit || (weight > num && weight < num2))
9585 {
9586 weight = weight * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9587 if (weight < 1)
9588 {
9589 weight = 1;
9590 }
9591 if (weight != bio.weight)
9592 {
9593 bio.weight = weight;
9594 Say((a > 0) ? "weight_gain" : "weight_lose", this);
9595 }
9596 }
9597 }
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 2585 of file Chara.cs.

2586 {
2587 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2588 {
2589 ai.Current.TryCancel(c);
2590 }
2591 }
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:2719

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

3421 {
3422 MoveHome(EClass.game.world.FindZone(id), x, z);
3423 }
void MoveHome(string id, int x=-1, int z=-1)
Definition: Chara.cs:3420
new World world
Definition: Game.cs:173

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

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

◆ MoveHome() [2/2]

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

Definition at line 3425 of file Chara.cs.

3426 {
3427 if (isDead)
3428 {
3429 Revive();
3430 }
3431 else
3432 {
3433 Cure(CureType.Death);
3434 }
3435 CureCondition<ConSuspend>();
3436 if (IsPCParty)
3437 {
3439 }
3440 FactionBranch factionBranch = homeBranch;
3441 if (x == -1)
3442 {
3443 x = 50;
3444 }
3445 if (z == -1)
3446 {
3447 z = 50;
3448 }
3449 Point point = new Point(x, z);
3450 if (zone.IsActiveZone)
3451 {
3452 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3453 }
3454 zone.AddCard(this, point);
3455 SetHomeZone(zone);
3456 global.transition = new ZoneTransition
3457 {
3458 state = ZoneTransition.EnterState.Dead,
3459 x = point.x,
3460 z = point.z
3461 };
3462 orgPos = new Point(x, z);
3463 if (factionBranch != null)
3464 {
3466 factionBranch.policies.Validate();
3467 }
3468 }
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8817
Chara SetHomeZone(Zone zone)
Definition: Chara.cs:1425
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 2567 of file Chara.cs.

2568 {
2569 List<Point> list = new List<Point>();
2570 pos.ForeachNeighbor(delegate(Point p)
2571 {
2572 list.Add(p.Copy());
2573 });
2574 list.Shuffle();
2575 foreach (Point item in list)
2576 {
2577 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2578 {
2579 return true;
2580 }
2581 }
2582 return false;
2583 }
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1385

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

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2553 of file Chara.cs.

2554 {
2555 Point randomNeighbor = pos.GetRandomNeighbor();
2556 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2557 {
2558 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2559 {
2560 return false;
2561 }
2562 return TryMove(randomNeighbor) == MoveResult.Success;
2563 }
2564 return false;
2565 }
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool IsDeepWater
Definition: Point.cs:264

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

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

◆ MoveZone() [1/3]

◆ MoveZone() [2/3]

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

Definition at line 3308 of file Chara.cs.

3309 {
3310 if (z == currentZone)
3311 {
3312 return;
3313 }
3314 if (HasCondition<ConInvulnerable>())
3315 {
3316 RemoveCondition<ConInvulnerable>();
3317 }
3318 if (IsPC)
3319 {
3320 EClass.player.nextZone = z;
3322 {
3325 {
3326 if (EClass.player.returnInfo != null)
3327 {
3328 EClass.player.returnInfo.turns += 5;
3329 }
3331 {
3332 EClass.game.Save(isAutoSave: true);
3333 }
3334 }
3335 EClass.player.deathZoneMove = false;
3336 }
3338 if (currentZone.instance != null)
3339 {
3341 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3342 transition = new ZoneTransition
3343 {
3344 state = instance.ReturnState,
3345 x = instance.x,
3346 z = instance.z
3347 };
3348 instance.OnLeaveZone();
3349 Debug.Log(z);
3350 }
3351 EInput.Consume(consumeAxis: true);
3352 EClass.player.uidLastZone = currentZone.uid;
3354 {
3356 {
3357 Msg.Say("enterZone", z.Name);
3358 }
3359 else
3360 {
3361 if (z.IsRegion)
3362 {
3363 Msg.Say("leaveZone", currentZone.Name);
3364 }
3365 else if (z.id != currentZone.id)
3366 {
3367 Msg.Say("enterZone", z.Name);
3368 }
3369 EClass.player.lastZonePos = pos.Copy();
3370 }
3371 EClass.player.lastTransition = transition;
3372 }
3373 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3374 {
3376 }
3377 EClass.player.listSummon = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3378 foreach (Chara item2 in EClass.player.listSummon)
3379 {
3380 EClass._zone.RemoveCard(item2);
3381 }
3382 }
3383 if (party != null && party.leader == this)
3384 {
3385 foreach (Chara member in party.members)
3386 {
3387 if (member != this && !member.isDead && member.parent is Zone)
3388 {
3389 member.MoveZone(z);
3390 }
3391 }
3392 }
3393 if (global == null)
3394 {
3395 Debug.Log(base.Name);
3396 return;
3397 }
3398 transition.uidLastZone = currentZone?.uid ?? 0;
3399 global.transition = transition;
3400 if (z.IsActiveZone)
3401 {
3402 Point spawnPos = z.GetSpawnPos(this);
3403 global.transition = null;
3404 if (IsPC)
3405 {
3406 EClass.player.lastTransition = null;
3407 }
3408 z.AddCard(this, spawnPos);
3409 if (IsBranchMember())
3410 {
3412 }
3413 }
3414 else
3415 {
3416 z.AddCard(this);
3417 }
3418 }
MinionType c_minionType
Definition: Card.cs:988
bool IsBranchMember()
Definition: Chara.cs:6471
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2362
bool ignoreAutoSave
Definition: CoreDebug.cs:126
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:1024
RoomManager rooms
Definition: Map.cs:31
Chara leader
Definition: Party.cs:30
bool deathZoneMove
Definition: Player.cs:1166
List< Chara > listSummon
Definition: Player.cs:1218
ReturnInfo returnInfo
Definition: Player.cs:863
bool simulatingZone
Definition: Player.cs:1176
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 3300 of file Chara.cs.

3301 {
3303 {
3304 state = state
3305 });
3306 }

◆ MutateRandom()

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

Definition at line 9762 of file Chara.cs.

9763 {
9764 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
9765 {
9766 Say("resistMutation", this);
9767 return false;
9768 }
9769 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
9770 for (int i = 0; i < tries; i++)
9771 {
9772 SourceElement.Row row = ie.RandomItem();
9773 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
9774 {
9775 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
9776 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
9777 if (base.c_corruptionHistory.Count == 0)
9778 {
9779 base.c_corruptionHistory = null;
9780 }
9781 }
9782 Element element = elements.GetElement(row.id);
9783 int num = 1;
9784 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))
9785 {
9786 continue;
9787 }
9788 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
9789 {
9790 row = EClass.sources.elements.alias[row.aliasParent];
9791 element = elements.GetElement(row.id);
9792 }
9793 bool flag = row.tag.Contains("neg");
9794 if (vec > 0)
9795 {
9796 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
9797 {
9798 continue;
9799 }
9800 }
9801 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
9802 {
9803 continue;
9804 }
9805 bool flag2 = true;
9806 if (element != null)
9807 {
9808 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
9809 if (num > element.source.max)
9810 {
9811 num = element.source.max - 1;
9812 }
9813 flag = (flag && num > element.Value) || (!flag && num < element.Value);
9814 flag2 = num > element.Value;
9815 if (vec > 0 && !flag2)
9816 {
9817 continue;
9818 }
9819 }
9820 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
9821 SetFeat(row.id, num);
9822 if (flag2 && ether)
9823 {
9824 if (base.c_corruptionHistory == null)
9825 {
9826 base.c_corruptionHistory = new List<int>();
9827 }
9828 base.c_corruptionHistory.Add(row.id);
9829 if (IsPCFaction)
9830 {
9831 Element element2 = elements.GetElement(row.id);
9832 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
9833 }
9835 {
9836 EClass.player.flags.gotEtherDisease = true;
9837 Thing thing = ThingGen.Create("parchment");
9838 thing.SetStr(53, "letter_ether");
9839 Thing thing2 = ThingGen.Create("1165");
9840 thing2.SetBlessedState(BlessedState.Normal);
9841 Thing p = ThingGen.CreateParcel(null, thing2, thing);
9843 }
9844 }
9845 if (EClass.core.IsGameStarted && pos != null)
9846 {
9847 PlaySound(ether ? "mutation_ether" : "mutation");
9848 PlayEffect("mutation");
9850 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9851 }
9852 return true;
9853 }
9854 Say("nothingHappens");
9855 return false;
9856 }
void SetStr(int id, string value=null)
Definition: BaseCard.cs:63
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3825
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:464
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 9908 of file Chara.cs.

9909 {
9910 if (_historyFood != null)
9911 {
9912 while (_historyFood.Count > 5)
9913 {
9914 _historyFood.RemoveAt(_historyFood.Count - 1);
9915 }
9916 if (_historyFood[0].Count > 0)
9917 {
9918 _historyFood.Insert(0, new List<string>());
9919 }
9920 }
9921 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1439 of file Chara.cs.

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

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

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

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

8217 {
8218 Say("give_erohon", this);
8219 AddCondition<ConParalyze>(50, force: true);
8220 AddCondition<ConConfuse>(50, force: true);
8221 AddCondition<ConFear>(1000, force: true);
8222 ModAffinity(EClass.pc, 100);
8223 t.Destroy();
8224 Talk("pervert");
8225 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 8022 of file Chara.cs.

8023 {
8024 if (!isDead)
8025 {
8026 if (HasElement(1231))
8027 {
8028 Talk("insulted");
8029 AddCondition<ConEuphoric>(100 * Evalue(1231));
8030 }
8031 else if (EClass.rnd(20) == 0)
8032 {
8033 SetFeat(1231, 1, msg: true);
8034 }
8035 }
8036 }

References EClass.rnd().

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

◆ OnSerializing()

override void Chara.OnSerializing ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1310 of file Chara.cs.

1311 {
1312 if (enemy != null)
1313 {
1314 SetInt(55, enemy.uid);
1315 }
1316 _cints[0] = (int)_cbits1.Bits;
1317 List<BodySlot> slots = body.slots;
1318 rawSlots = new int[slots.Count];
1319 for (int i = 0; i < slots.Count; i++)
1320 {
1321 rawSlots[i] = slots[i].elementId;
1322 }
1323 }
List< BodySlot > slots
Definition: CharaBody.cs:8
int[] rawSlots
Definition: Chara.cs:73
BitArray32 _cbits1
Definition: Chara.cs:84
uint Bits
Definition: BitArray32.cs:6

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

◆ OnSleep() [1/2]

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

Definition at line 9530 of file Chara.cs.

9531 {
9532 if (days < 1)
9533 {
9534 days = 1;
9535 }
9536 int num = power * days;
9537 if (stamina.value < 0)
9538 {
9539 stamina.Set(1);
9540 }
9541 HealHP(num);
9542 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9543 mana.Mod(num);
9544 if (IsPCFaction)
9545 {
9546 hunger.Mod(20);
9547 }
9548 sleepiness.Set(0);
9549 if (!IsMinion)
9550 {
9551 interest = 100;
9552 }
9553 Cure(CureType.Sleep, power);
9554 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3933
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 9515 of file Chara.cs.

9516 {
9517 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9518 int num = bed?.Power ?? 20;
9519 if (traitPillow != null)
9520 {
9521 num += traitPillow.owner.Power / 2;
9522 }
9523 if (bed != null)
9524 {
9525 num += bed.Evalue(750) * 5;
9526 }
9527 OnSleep(num, days);
9528 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9515
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1128

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 2160 of file Chara.cs.

2161 {
2162 return s switch
2163 {
2164 "é ­" => 30,
2165 "首" => 31,
2166 "体" => 32,
2167 "背" => 33,
2168 "手" => 35,
2169 "指" => 36,
2170 "è…•" => 34,
2171 "è…°" => 37,
2172 "è¶³" => 39,
2173 _ => -1,
2174 };
2175 }

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 8992 of file Chara.cs.

8993 {
8994 Hobby hobby = new Hobby();
8995 hobby.id = session.id;
8996 WorkSummary workSummary = _workSummary;
8997 hobby.GetAI(this).OnPerformWork(IsRealTime);
8998 if (!isHobby)
8999 {
9000 workSummary.progress += EClass.rnd(5) + 5;
9001 }
9002 int num = PerformWork(hobby, 0, isHobby);
9003 int num2 = PerformWork(hobby, 1, isHobby);
9004 int num3 = PerformWork(hobby, 2, isHobby);
9005 int num4 = PerformWork(hobby, 3, isHobby);
9006 workSummary.money += num;
9007 workSummary.food += num2;
9008 workSummary.knowledge += num3;
9009 workSummary.material += num4;
9010 int PerformWork(Hobby work, int idx, bool isHobby)
9011 {
9012 if (idx >= work.source.resources.Length)
9013 {
9014 return 0;
9015 }
9016 int num5 = work.source.resources[idx];
9017 int num6 = num5;
9018 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
9019 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
9020 if (num6 > 0 && num5 <= 0)
9021 {
9022 num5 = 1;
9023 }
9024 return num5;
9025 }
9026 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:8992
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 4234 of file Chara.cs.

4235 {
4236 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4237 {
4239 return t;
4240 }
4241 if (t.parent == this)
4242 {
4243 return t;
4244 }
4245 t = TryPoisonPotion(t);
4246 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4247 if (!dest.IsValid)
4248 {
4249 if (t.parent != EClass._zone)
4250 {
4251 if (IsPC)
4252 {
4253 Say("backpack_full_drop", t);
4254 SE.Drop();
4255 }
4256 return EClass._zone.AddCard(t, pos).Thing;
4257 }
4258 if (IsPC)
4259 {
4260 Say("backpack_full", t);
4261 }
4262 return t;
4263 }
4264 if (dest.stack != null)
4265 {
4266 if (msg)
4267 {
4268 PlaySound("pick_thing");
4269 Say("pick_thing", this, t);
4270 }
4271 t.TryStackTo(dest.stack);
4272 return dest.stack;
4273 }
4274 TryAbsorbRod(t);
4275 if (msg)
4276 {
4277 PlaySound("pick_thing");
4278 Say("pick_thing", this, t);
4279 }
4281 return dest.container.AddThing(t, tryStack);
4282 }
bool isNew
Definition: Card.cs:482
bool TryStackTo(Thing to)
Definition: Card.cs:3327
string c_idRefCard
Definition: Card.cs:1737
void TryReservePickupTutorial(Thing t)
Definition: Chara.cs:4328
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4284
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4298
static void Collect(Thing t)
bool autoCollectCard
Definition: Game.cs:51
DestData GetDest(Thing t, bool tryStack=true)

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

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

◆ PickHeld()

void Chara.PickHeld ( bool  msg = false)
inline

Definition at line 4450 of file Chara.cs.

4451 {
4452 if (held == null)
4453 {
4454 return;
4455 }
4456 Card card = held;
4457 if (IsPC && held.invY == 1)
4458 {
4459 WidgetHotbar.dirtyCurrentItem = true;
4461 held = null;
4462 return;
4463 }
4464 if (held.isChara)
4465 {
4466 DropHeld();
4467 return;
4468 }
4470 {
4471 Say("canOnlyCarry", held);
4472 DropHeld();
4473 return;
4474 }
4475 bool flag = held != things.TryStack(held.Thing);
4476 if (!flag && things.IsOverflowing())
4477 {
4478 if (IsPC)
4479 {
4480 Say("backpack_full_drop", held);
4481 SE.Drop();
4482 }
4483 DropHeld();
4484 return;
4485 }
4486 if (msg)
4487 {
4488 PlaySound("pick_thing");
4489 Say("pick_held", this, card);
4490 if (IsPC && card.id == "statue_weird")
4491 {
4492 Say("statue_pick");
4493 }
4494 }
4495 if (IsPC)
4496 {
4497 WidgetHotbar.dirtyCurrentItem = true;
4498 if (!flag)
4499 {
4501 if (held.GetRootCard() != EClass.pc)
4502 {
4503 Pick(held.Thing, msg: false);
4504 }
4505 }
4506 }
4507 held = null;
4508 }
int invY
Definition: Card.cs:1943
bool IsHotItem
Definition: Card.cs:119
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4527
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 4214 of file Chara.cs.

4215 {
4216 if (num != 0)
4217 {
4218 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4219 }
4220 }

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

4223 {
4224 if (things.GetDest(t).IsValid)
4225 {
4226 Pick(t, msg);
4227 }
4228 else
4229 {
4230 EClass._zone.AddCard(t, p);
4231 }
4232 }

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

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1720 of file Chara.cs.

1721 {
1722 if (source == null)
1723 {
1724 Debug.LogError("source is null");
1725 SetSource();
1726 }
1727 if (ride != null && ride.source != null)
1728 {
1729 ride.Refresh(calledRecursive: true);
1730 }
1731 hasTelepathy = false;
1732 isWet = false;
1733 _isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
1735 base.isHidden = HasElement(415);
1736 foreach (Condition condition in conditions)
1737 {
1738 condition.OnRefresh();
1739 }
1740 if (isWet)
1741 {
1742 base.isHidden = false;
1743 }
1745 SetDirtySpeed();
1746 if (host != null && !calledRecursive && host.source != null)
1747 {
1748 host.Refresh(calledRecursive: true);
1749 }
1750 }
virtual void OnRefresh()
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1720
bool isWet
Definition: Chara.cs:142
override void SetSource()
Definition: Chara.cs:2049
bool IsUndead
Definition: Chara.cs:889
bool IsHorror
Definition: Chara.cs:913
bool IsMachine
Definition: Chara.cs:901

References _isLevitating, canSeeInvisible, conditions, Debug, Card.HasElement(), hasTelepathy, host, IsHorror, IsMachine, IsMultisize, IsUndead, 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 9972 of file Chara.cs.

9973 {
9974 if (faithElements != null)
9975 {
9977 }
9979 if (idFaith == "eyth" && !HasElement(1228))
9980 {
9981 return;
9982 }
9983 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
9984 if (row == null)
9985 {
9986 return;
9987 }
9989 if (!HasCondition<ConExcommunication>())
9990 {
9991 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
9992 if (row2 != null)
9993 {
9994 faithElements.SetBase(row2.id, 1);
9995 }
9996 int[] array = row.elements;
9997 int num = GetPietyValue() * (120 + Evalue(1407) * 15) / 100;
9998 for (int i = 0; i < array.Length; i += 2)
9999 {
10000 int num2 = array[i + 1] * num / 50;
10001 if (array[i] == 79)
10002 {
10003 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
10004 }
10005 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10006 {
10007 num2 = 20;
10008 }
10009 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
10010 }
10011 }
10013 }
string idFaith
Definition: Chara.cs:229
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:9963
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 1854 of file Chara.cs.

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

8818 {
8819 if (workElements != null)
8820 {
8822 }
8823 workElements = null;
8824 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
8825 {
8826 return;
8827 }
8828 foreach (Hobby item in ListHobbies())
8829 {
8830 TryAdd(item);
8831 }
8832 foreach (Hobby item2 in ListWorks())
8833 {
8834 TryAdd(item2);
8835 }
8836 if (workElements != null)
8837 {
8839 }
8840 void TryAdd(Hobby h)
8841 {
8842 if (!h.source.elements.IsEmpty())
8843 {
8844 if (workElements == null)
8845 {
8847 }
8848 for (int i = 0; i < h.source.elements.Length; i += 2)
8849 {
8850 int num = h.source.elements[i];
8851 int num2 = h.source.elements[i + 1];
8852 int num3 = 100;
8853 if (num != 2115 && num != 2207)
8854 {
8855 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
8856 if (num3 <= 0)
8857 {
8858 continue;
8859 }
8860 }
8861 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
8862 }
8863 }
8864 }
8865 }
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 2339 of file Chara.cs.

2340 {
2341 base.c_uidMaster = 0;
2342 master = null;
2343 enemy = null;
2344 foreach (Chara chara in EClass._map.charas)
2345 {
2346 if (chara.enemy == this)
2347 {
2348 chara.SetEnemy();
2349 chara.ai.Cancel();
2350 }
2351 }
2352 ai.Cancel();
2353 Refresh();
2354 }

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

9421 {
9422 for (int num = conditions.Count - 1; num >= 0; num--)
9423 {
9424 Condition condition = conditions[num];
9425 if (condition.Type == ConditionType.Stance)
9426 {
9427 condition.Kill();
9428 }
9429 }
9430 }

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

◆ RemoveCondition< T >()

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

Definition at line 9281 of file Chara.cs.

9281 : Condition
9282 {
9283 for (int num = conditions.Count - 1; num >= 0; num--)
9284 {
9285 if (conditions[num] is T)
9286 {
9287 conditions[num].Kill();
9288 break;
9289 }
9290 }
9291 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

Definition at line 1497 of file Chara.cs.

1498 {
1499 if (IsGlobal)
1500 {
1501 global = null;
1503 }
1504 }

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

2189 {
2190 if (body.slots.Count != 0)
2191 {
2192 BodySlot bodySlot = body.slots.LastItem();
2193 body.RemoveBodyPartAt(body.slots.Count - 1);
2194 if (msg)
2195 {
2196 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2197 PlaySound("offering");
2198 }
2199 }
2200 }
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 8237 of file Chara.cs.

8238 {
8239 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this)
8240 {
8241 return false;
8242 }
8243 if (host != null && host.isRestrained)
8244 {
8245 return false;
8246 }
8247 if (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion)
8248 {
8249 return false;
8250 }
8251 bool flag = false;
8252 foreach (Chara chara in EClass._map.charas)
8253 {
8254 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))
8255 {
8256 continue;
8257 }
8258 bool flag2 = chara.HasElement(1225);
8259 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
8260 {
8261 continue;
8262 }
8263 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
8264 int num2 = Dist(chara);
8265 if (num2 > 25)
8266 {
8267 continue;
8268 }
8269 if (num2 > num || !chara.CanSeeLos(pos, num2))
8270 {
8271 if (!flag2)
8272 {
8273 continue;
8274 }
8275 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
8276 if (!nearestPoint.IsValid)
8277 {
8278 continue;
8279 }
8280 chara.Teleport(nearestPoint);
8281 chara.AddCooldown(1225, 10);
8282 num2 = Dist(chara);
8283 Say("intercept_loyal", chara, this);
8284 chara.SetEnemy(attacker);
8285 attacker.SetEnemy(chara);
8286 if (num2 > num || !chara.CanSeeLos(pos, num2))
8287 {
8288 continue;
8289 }
8290 }
8291 if (!flag && !HasElement(1225))
8292 {
8293 Say("intercept", chara, this);
8294 if (EClass.rnd(10) == 0)
8295 {
8296 chara.Talk("intercept", base.NameSimple);
8297 }
8298 if (attacker.enemy == this)
8299 {
8300 attacker.SetEnemy(chara);
8301 }
8302 action(chara);
8303 flag = true;
8304 }
8305 }
8306 return flag;
8307 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5761
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8501
bool HasCooldown(int idEle)
Definition: Chara.cs:8519

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

8912 {
8913 if (_hobbies != null && _works != null)
8914 {
8915 _hobbies.Clear();
8916 _works.Clear();
8917 }
8918 else
8919 {
8920 _hobbies = new List<int>();
8921 _works = new List<int>();
8922 }
8923 if (source.hobbies.IsEmpty())
8924 {
8925 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
8926 }
8927 else
8928 {
8929 string[] hobbies = source.hobbies;
8930 foreach (string key in hobbies)
8931 {
8932 AddHobby(EClass.sources.hobbies.alias[key].id);
8933 }
8934 }
8935 if (source.works.IsEmpty())
8936 {
8937 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
8938 }
8939 else
8940 {
8941 string[] hobbies = source.works;
8942 foreach (string key2 in hobbies)
8943 {
8944 AddWork(EClass.sources.hobbies.alias[key2].id);
8945 }
8946 }
8948 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:8950
void AddWork(int id)
Definition: Chara.cs:8899
void AddHobby(int id)
Definition: Chara.cs:8887
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 2202 of file Chara.cs.

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

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8403 of file Chara.cs.

8404 {
8405 _ = base.c_upgrades;
8406 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9477 of file Chara.cs.

9478 {
9479 if (con.power > 0 && resistCon != null)
9480 {
9481 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9482 if (1000 < EClass.rnd(a))
9483 {
9484 con.power = 0;
9485 }
9486 else if (500 < EClass.rnd(a))
9487 {
9488 con.power /= 5;
9489 }
9490 else if (200 < EClass.rnd(a))
9491 {
9492 con.power /= 3;
9493 }
9494 else if (100 < EClass.rnd(a))
9495 {
9496 con.power /= 2;
9497 }
9498 }
9499 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4619 of file Chara.cs.

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

4898 {
4899 switch (id)
4900 {
4901 case "lomias":
4902 if (ShouldRestock("_meat"))
4903 {
4904 AddCard(ThingGen.Create("_meat").MakeRefFrom("begger"));
4905 }
4906 break;
4907 case "fiama":
4908 Restock("book_story", 1);
4909 break;
4910 case "rock_thrower":
4911 Restock("stone", 10 + EClass.rnd(10));
4912 break;
4913 case "giant":
4914 Restock("rock", 2 + EClass.rnd(10));
4915 break;
4916 case "farris":
4917 Restock("lute", 1);
4918 Restock("book_story_home", 1);
4919 break;
4920 case "begger":
4921 break;
4922 }
4923 void Restock(string id, int num)
4924 {
4925 if (ShouldRestock(id))
4926 {
4927 AddCard(ThingGen.Create(id).SetNum(num));
4928 }
4929 }
4930 bool ShouldRestock(string id)
4931 {
4932 return things.Find(id) == null;
4933 }
4934 }

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

◆ Revive()

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

Definition at line 5049 of file Chara.cs.

5050 {
5051 if (!isDead)
5052 {
5053 return;
5054 }
5055 isDead = false;
5056 base.hp = MaxHP / 3;
5057 mana.value = 0;
5058 stamina.value = 0;
5059 if (hunger.value > 30)
5060 {
5061 hunger.value = 30;
5062 }
5063 sleepiness.value = 0;
5065 RemoveCondition<StanceTaunt>();
5066 if (id == "keeper_garden")
5067 {
5068 SaiyanRevive();
5069 }
5070 if (IsPC)
5071 {
5073 {
5074 Msg.Say("noDeathPenalty2", this);
5075 }
5077 {
5078 Msg.Say("noDeathPenalty", this);
5079 }
5080 else
5081 {
5083 }
5084 List<Thing> dropList = new List<Thing>();
5085 EClass.pc.things.Foreach(delegate(Thing t)
5086 {
5088 {
5089 t.ignoreAutoPick = true;
5090 dropList.Add(t);
5091 }
5092 }, onlyAccessible: false);
5093 foreach (Thing item in dropList)
5094 {
5096 Msg.Say("backpack_full_drop", item);
5097 }
5098 EClass.player.preventDeathPenalty = false;
5099 }
5100 if (IsPCFaction && homeBranch != null)
5101 {
5102 homeBranch.Log("bRevive", this);
5103 }
5104 if (p != null)
5105 {
5106 if (!p.IsInBounds)
5107 {
5109 }
5110 EClass._zone.AddCard(this, p);
5111 if (msg)
5112 {
5113 SE.Play("revive");
5114 Msg.Say("revive", this);
5115 PlayEffect("revive");
5116 }
5117 SetCensored(enable: false);
5118 }
5119 }
void SetCensored(bool enable)
Definition: Card.cs:7604
Card parentCard
Definition: Card.cs:103
void SaiyanRevive()
Definition: Chara.cs:5121
void ApplyDeathPenalty()
Definition: Chara.cs:5155
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1164
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 3490 of file Chara.cs.

3491 {
3492 if (renderer.hasActor)
3493 {
3494 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3495 }
3496 else
3497 {
3498 base.dir = ((base.dir == 0) ? 1 : 0);
3499 }
3500 UpdateAngle();
3502 }

Referenced by AI_Dance.Run().

◆ SaiyanRevive()

void Chara.SaiyanRevive ( )
inline

Definition at line 5121 of file Chara.cs.

5122 {
5123 ModCorruption(-100000);
5124 if (base.LV < 10000000)
5125 {
5126 SetLv(base.LV * 10 + 9);
5127 }
5128 Refresh();
5129 base.hp = MaxHP;
5130 mana.value = mana.max;
5131 stamina.value = stamina.max;
5132 bossText = true;
5133 }
void ModCorruption(int a)
Definition: Chara.cs:9599

References Stats.max, and Refresh().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 8687 of file Chara.cs.

8688 {
8689 if (IsPC)
8690 {
8692 }
8693 if (ai.IsRunning)
8694 {
8695 if (ai == g && ai.IsNoGoal)
8696 {
8697 return g;
8698 }
8699 ai.Cancel();
8700 if (ai == g)
8701 {
8702 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
8703 return g;
8704 }
8705 }
8706 if (HasCondition<ConWait>())
8707 {
8708 RemoveCondition<ConWait>();
8709 }
8710 ai = g;
8711 ai.SetOwner(this);
8712 if (IsPC)
8713 {
8715 }
8716 return g;
8717 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:179
QueueManager queues
Definition: Player.cs:1206
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(), 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 8677 of file Chara.cs.

8678 {
8679 SetAI(new GoalCombat());
8680 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 8673 of file Chara.cs.

8674 {
8675 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3483 of file Chara.cs.

3484 {
3485 base.dir = d;
3486 UpdateAngle();
3488 }

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

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1845 of file Chara.cs.

1846 {
1847 dirtySpeed = true;
1848 if (host != null)
1849 {
1851 }
1852 }

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

6193 {
6194 enemy = c;
6195 if (c == null)
6196 {
6197 if (ai is GoalCombat)
6198 {
6199 ai.Cancel();
6200 }
6201 }
6202 else
6203 {
6204 calmCheckTurn = 10 + EClass.rnd(30);
6205 }
6206 return c;
6207 }

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

4937 {
4939 Rarity rarity = Rarity.Normal;
4940 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
4941 Rarity rarity2 = base.rarity;
4942 if (id == "big_sister")
4943 {
4944 num = (isOnCreate ? 8 : 4);
4945 }
4946 if (!isOnCreate && EClass.rnd(10) != 0)
4947 {
4948 num /= 2;
4949 }
4950 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
4951 {
4952 rarity = Rarity.Superior;
4953 }
4954 else if (rarity2 == Rarity.Legendary)
4955 {
4956 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
4957 }
4958 else if (rarity2 >= Rarity.Mythical)
4959 {
4960 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
4961 }
4962 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
4963 {
4964 rarity = Rarity.Legendary;
4965 }
4966 CardBlueprint.current.rarity = rarity;
4967 }
static void Set(CardBlueprint _bp=null)
static CardBlueprint CharaGenEQ
static bool isOnCreate
Definition: Chara.cs:182

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

◆ SetFaction()

Chara Chara.SetFaction ( Faction  f)
inline

Definition at line 1417 of file Chara.cs.

1418 {
1419 _faction = null;
1420 faction = f;
1422 return this;
1423 }
Faction _faction
Definition: Chara.cs:154
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 1705 of file Chara.cs.

1706 {
1707 faith = r;
1709 }

References faith, and RefreshFaithElement().

◆ SetFaith() [2/2]

void Chara.SetFaith ( string  id)
inline

Definition at line 1700 of file Chara.cs.

1701 {
1703 }
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 9657 of file Chara.cs.

9658 {
9659 Feat feat = elements.GetElement(id) as Feat;
9660 int num = 0;
9661 if (feat != null && feat.Value > 0)
9662 {
9663 if (value == feat.Value)
9664 {
9665 return;
9666 }
9667 num = feat.Value;
9668 feat.Apply(-feat.Value, elements);
9669 }
9670 if (value > 0)
9671 {
9672 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
9673 feat.Apply(feat.Value, elements);
9674 }
9675 else
9676 {
9677 elements.Remove(id);
9678 }
9680 {
9681 Refresh();
9683 }
9684 if (!msg)
9685 {
9686 return;
9687 }
9688 if (feat.source.textInc.IsEmpty())
9689 {
9690 PlaySound("ding_skill");
9692 Say("gainFeat", this, feat.FullName);
9693 }
9694 else
9695 {
9696 bool flag = value < num;
9697 if (feat.source.tag.Contains("neg"))
9698 {
9699 flag = !flag;
9700 }
9701 switch (id)
9702 {
9703 case 1270:
9704 if (!flag)
9705 {
9706 PlaySound("chime_angel");
9707 }
9708 break;
9709 case 1271:
9710 if (!flag)
9711 {
9712 PlaySound("chime_devil");
9713 }
9714 break;
9715 default:
9716 PlaySound("mutation");
9717 break;
9718 }
9720 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
9721 }
9723 }
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(), and CoreDebug.SetElement().

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1484 of file Chara.cs.

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

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

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

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

1426 {
1427 homeZone = zone;
1428 SetGlobal();
1429 return this;
1430 }

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

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

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

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

2062 {
2063 if (!id.StartsWith("ele"))
2064 {
2065 id = "ele" + id;
2066 }
2067 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
2068 }

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

9726 {
9727 SourceElement.Row row = EClass.sources.elements.map[idEle];
9729 Element element = elements.GetElement(idEle);
9730 Element element2 = elements.GetElement(row2.id);
9731 int num = element?.Value ?? 0;
9732 if (a < 0)
9733 {
9734 a = 0;
9735 }
9736 if (a > row.max)
9737 {
9738 a = row.max;
9739 }
9740 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
9741 if (a == 0 && (element == null || element.Value == 0))
9742 {
9744 return;
9745 }
9746 if (element != null && element.Value == a)
9747 {
9749 return;
9750 }
9751 if (element2 != null && element2.Value > 0)
9752 {
9753 SetFeat(element2.id, 0);
9754 }
9755 SetFeat(idEle, a);
9756 PlaySound("mutation");
9757 PlayEffect("mutation");
9759 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9760 }

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

8683 {
8684 return SetAI(_NoGoalPC);
8685 }
static NoGoal _NoGoalPC
Definition: Chara.cs:194

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6572 of file Chara.cs.

6573 {
6574 if (IsPCC)
6575 {
6576 PCC.Get(pccData).Build(state);
6577 }
6578 }

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

6621 {
6622 p.mat = base.material;
6623 p.matColor = base.colorInt;
6624 if (!renderer.usePass)
6625 {
6626 return;
6627 }
6628 if (renderer.replacer != null)
6629 {
6630 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6631 }
6632 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6633 {
6634 if (source._tiles_snow.Length > 1)
6635 {
6636 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6637 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6638 }
6639 else
6640 {
6641 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6642 }
6643 }
6644 else if (sourceCard._tiles.Length > 1)
6645 {
6646 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6647 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6648 }
6649 else
6650 {
6651 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6652 }
6653 p.dir = base.dir;
6654 }
override bool flipX
Definition: Chara.cs:545
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 7162 of file Chara.cs.

7163 {
7164 switch (m)
7165 {
7166 case UIList.SortMode.ByJob:
7167 sortVal = job._index * 10000 + sourceCard._index;
7168 break;
7169 case UIList.SortMode.ByRace:
7170 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
7171 break;
7172 case UIList.SortMode.ByFeat:
7173 sortVal = -GetTotalFeat();
7174 break;
7175 default:
7176 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7177 break;
7178 case UIList.SortMode.ByWorkk:
7179 break;
7180 }
7181 }
int sortVal
Definition: Card.cs:101
int GetTotalFeat()
Definition: Chara.cs:7955
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 2049 of file Chara.cs.

2050 {
2051 source = EClass.sources.charas.map.TryGetValue(id);
2052 if (source == null)
2053 {
2054 Debug.LogWarning("Chara " + id + " not found");
2055 id = "chicken";
2056 source = EClass.sources.charas.map[id];
2057 }
2058 path.walker = this;
2059 }

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2356 of file Chara.cs.

2357 {
2358 base.c_summonDuration = duration;
2359 base.isSummon = true;
2360 }

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

7473 {
7474 if (t.IsRangedWeapon && t.category.slot == 0)
7475 {
7476 if (!CanEquipRanged(t))
7477 {
7478 return false;
7479 }
7480 int num = 0;
7481 foreach (Thing thing in things)
7482 {
7483 if (thing.IsRangedWeapon)
7484 {
7485 if (thing.category.slot != 0 && thing.isEquipped)
7486 {
7487 return false;
7488 }
7489 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7490 {
7491 num = thing.GetEquipValue();
7492 }
7493 }
7494 }
7495 if (t.GetEquipValue() > num)
7496 {
7497 return true;
7498 }
7499 return false;
7500 }
7501 BodySlot bodySlot = body.GetSlot(t);
7502 if (bodySlot == null)
7503 {
7504 return false;
7505 }
7506 if (useFav)
7507 {
7508 switch (GetFavAttackStyle())
7509 {
7510 case AttackStyle.Default:
7511 case AttackStyle.TwoHand:
7512 if (t.IsMeleeWeapon)
7513 {
7514 bodySlot = body.slotMainHand;
7515 }
7516 else if (bodySlot.elementId == 35)
7517 {
7518 return false;
7519 }
7520 break;
7521 case AttackStyle.Shield:
7522 if (t.IsMeleeWeapon)
7523 {
7524 bodySlot = body.slotMainHand;
7525 }
7526 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7527 {
7528 return false;
7529 }
7530 break;
7531 case AttackStyle.TwoWield:
7532 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7533 {
7534 return false;
7535 }
7536 break;
7537 }
7538 }
7539 if (!body.IsEquippable(t, bodySlot, text: false))
7540 {
7541 return false;
7542 }
7543 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7544 {
7545 return false;
7546 }
7547 if (!base.IsPCFactionOrMinion)
7548 {
7549 int num2 = 0;
7550 foreach (Element value in t.elements.dict.Values)
7551 {
7552 if (value.Value <= 0)
7553 {
7554 int num3 = 100;
7555 switch (value.id)
7556 {
7557 case 418:
7558 num3 = 10;
7559 break;
7560 case 60:
7561 case 61:
7562 case 62:
7563 num3 = 200;
7564 break;
7565 case 962:
7566 num3 = 10000;
7567 break;
7568 }
7569 num2 += value.Value * num3 / 100;
7570 }
7571 }
7572 if (num2 < -40)
7573 {
7574 return false;
7575 }
7576 }
7577 if (t.HasTag(CTAG.gift))
7578 {
7579 return false;
7580 }
7581 return true;
7582 }
bool IsMeleeWeapon
Definition: Card.cs:2229
BlessedState blessedState
Definition: Card.cs:278
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:106
AttackStyle GetFavAttackStyle()
Definition: Chara.cs:4575

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

8310 {
8311 if (IsPCFaction)
8312 {
8313 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
8314 {
8315 return false;
8316 }
8317 if (t.trait.GetHealAction(this) != null)
8318 {
8319 return false;
8320 }
8321 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
8322 {
8323 return false;
8324 }
8325 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
8326 {
8327 return false;
8328 }
8329 }
8330 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed)
8331 {
8332 return false;
8333 }
8334 if (t.trait is TraitCurrency || t.trait is TraitTool)
8335 {
8336 return false;
8337 }
8338 switch (type)
8339 {
8340 case ClearInventoryType.SellAtTown:
8341 if (!t.isGifted && !t.isNPCProperty)
8342 {
8343 return false;
8344 }
8345 break;
8346 case ClearInventoryType.Purge:
8347 switch (t.category.id)
8348 {
8349 case "fish":
8350 if (EClass.rnd(3) == 0)
8351 {
8352 return true;
8353 }
8354 break;
8355 case "junk":
8356 case "garbage":
8357 if (EClass.rnd(3) != 0)
8358 {
8359 return true;
8360 }
8361 break;
8362 }
8363 if (t.id == "flyer")
8364 {
8365 return true;
8366 }
8367 if (!t.IsDecayed && EClass.rnd(3) == 0)
8368 {
8369 return false;
8370 }
8371 if (!things.IsFull() && t.IsRangedWeapon)
8372 {
8373 return false;
8374 }
8375 break;
8376 }
8377 return true;
8378 }
bool IsThrownWeapon
Definition: Card.cs:2233
bool IsFood
Definition: Card.cs:2163
bool isGifted
Definition: Card.cs:782
virtual Action GetHealAction(Chara c)
Definition: Trait.cs:600

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

6921 {
6922 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
6923 if (conSuspend != null && IsPCParty)
6924 {
6925 RemoveCondition<ConSuspend>();
6926 }
6927 if (LayerDrama.forceJump == null)
6928 {
6929 if (IsDeadOrSleeping)
6930 {
6931 ShowDialog("_chara", "sleep");
6932 return;
6933 }
6934 if (EClass.pc.isHidden && !CanSee(EClass.pc))
6935 {
6936 ShowDialog("_chara", "invisible");
6937 return;
6938 }
6940 {
6942 ShowDialog("_chara", "give_card");
6943 Thing thing = ThingGen.Create("figure");
6944 thing.MakeFigureFrom(id);
6945 EClass.player.DropReward(thing);
6946 thing = ThingGen.Create("figure3");
6947 thing.MakeFigureFrom(id);
6948 EClass.player.DropReward(thing);
6949 return;
6950 }
6951 if (GetInt(71) == -2)
6952 {
6953 ShowDialog("_chara", "give_lunch");
6954 Thing t = CraftUtil.MakeLoveLunch(this);
6956 SetInt(71, EClass.world.date.GetRaw() + 43200);
6957 return;
6958 }
6959 if (base.isRestrained)
6960 {
6961 ShowDialog("_chara", "strain");
6962 return;
6963 }
6964 if (IsEscorted())
6965 {
6966 ShowDialog("_chara", "escort");
6967 return;
6968 }
6969 if (EClass._zone is Zone_Music)
6970 {
6971 ShowDialog("_chara", "party");
6972 return;
6973 }
6974 if (EClass.game.quests.OnShowDialog(this))
6975 {
6976 return;
6977 }
6978 switch (id)
6979 {
6980 case "loytel":
6981 {
6983 {
6984 EClass.game.quests.Get("pre_debt_runaway").Complete();
6985 EClass.player.flags.loytelEscaped = false;
6986 EClass.game.quests.Add("debt", "loytel");
6987 ShowDialog("loytel", "loytelEscaped");
6988 return;
6989 }
6990 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
6991 if (questDebt != null && questDebt.paid)
6992 {
6993 questDebt.stage++;
6994 if (questDebt.stage > 7)
6995 {
6996 questDebt.stage = 7;
6997 }
6998 ShowDialog("loytel", "debt" + questDebt.stage);
6999 return;
7000 }
7001 break;
7002 }
7003 case "farris":
7004 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3" || EClass.game.IsSurvival)
7005 {
7006 ShowDialog("farris");
7007 return;
7008 }
7009 switch (EClass.game.quests.GetPhase<QuestExploration>())
7010 {
7011 case -1:
7012 ShowDialog("farris", "nymelle_noQuest");
7013 break;
7014 case 0:
7015 ShowDialog("farris", "nymelle_first");
7016 break;
7017 case 1:
7018 ShowDialog("farris", "home_first");
7019 break;
7020 default:
7021 ShowDialog("farris");
7022 break;
7023 }
7024 return;
7025 case "ashland":
7026 ShowDialog("ashland");
7027 return;
7028 case "fiama":
7029 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv && EClass.game.quests.GetPhase<QuestExploration>() == 3)
7030 {
7031 SoundManager.ForceBGM();
7032 LayerDrama.ActivateMain("mono", "nymelle_crystal");
7033 }
7035 {
7037 {
7038 EClass.player.flags.fiamaFirstDream = true;
7039 ShowDialog("fiama", "firstDream");
7040 }
7042 {
7043 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
7044 {
7045 EClass.player.flags.fiamaStoryBookGiven = true;
7046 EClass.player.DropReward(ThingGen.Create("book_story"));
7047 });
7048 }
7049 else
7050 {
7051 ShowDialog("fiama");
7052 }
7053 }
7054 else
7055 {
7056 ShowDialog("fiama");
7057 }
7058 return;
7059 case "big_sister":
7061 {
7062 ShowDialog("big_sister", "little_saved");
7063 EClass.player.flags.little_saved = false;
7064 return;
7065 }
7067 {
7068 ShowDialog("big_sister", "little_dead");
7069 EClass.player.flags.little_killed = false;
7070 return;
7071 }
7072 break;
7073 }
7074 if (trait is TraitGuildDoorman)
7075 {
7076 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
7077 ShowDialog("guild_doorman", "main", tag);
7078 return;
7079 }
7080 if (trait is TraitGuildClerk)
7081 {
7082 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
7083 ShowDialog("guild_clerk", "main", tag2);
7084 return;
7085 }
7086 }
7087 bool flag = true;
7088 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
7089 {
7090 flag = false;
7091 }
7092 if (flag && File.Exists(CorePath.DramaData + id + ".xlsx"))
7093 {
7094 ShowDialog(id);
7095 }
7096 else
7097 {
7098 ShowDialog("_chara");
7099 }
7100 }
bool CanGiveCard()
Definition: Affinity.cs:63
void MakeFigureFrom(string id)
Definition: Card.cs:5622
void ShowDialog()
Definition: Chara.cs:6920
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:122
bool IsSurvival
Definition: Game.cs:272
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:476
int storyFiama
Definition: Player.cs:620
bool little_saved
Definition: Player.cs:440
bool fiamaStoryBookGiven
Definition: Player.cs:296
bool fiamaFirstDream
Definition: Player.cs:308
bool little_killed
Definition: Player.cs:452
CodexManager codex
Definition: Player.cs:1112
bool EnableDreamStory
Definition: Player.cs:1265
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2527
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 7102 of file Chara.cs.

7103 {
7104 return _ShowDialog(book, null, step, tag);
7105 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:7107

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

9502 {
9503 RemoveCondition<ConAwakening>();
9504 AddCondition(Condition.Create(100, delegate(ConSleep con)
9505 {
9506 con.pcSleep = 15;
9507 con.pcBed = bed;
9508 con.pcPillow = pillow;
9509 con.pickup = pickup;
9510 con.posBed = posBed;
9511 con.posPillow = posPillow;
9512 }), force: true);
9513 }

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

7946 {
7947 Say("abCatSniff", this, c);
7948 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
7949 c.ShowEmo(Emo.angry);
7950 ShowEmo(Emo.love);
7951 Talk("sniff");
7952 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
7953 }

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

4511 {
4512 return held.Split(a);
4513 }

References Card.Split().

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

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1828 of file Chara.cs.

1829 {
1830 bool flag = EClass._map.FindThing((Thing t) => t.IsInstalled && t.pos.Equals(EClass.pc.pos) && t.trait is TraitStairsUp) != null;
1831 Say(flag ? "dmgBurdenStairs" : "dmgBurdenFallDown", this);
1832 int num = MaxHP;
1833 if (Evalue(1421) > 0)
1834 {
1835 num = mana.max;
1836 }
1837 int num2 = (num * (base.ChildrenWeight * 100 / WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
1838 if (base.hp <= 0)
1839 {
1840 num2 *= 2;
1841 }
1842 DamageHP(num2, flag ? AttackSource.BurdenStairs : AttackSource.BurdenFallDown);
1843 }
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 3856 of file Chara.cs.

3857 {
3858 if (host != null)
3859 {
3860 host.SyncRide();
3861 }
3862 if (ride != null)
3863 {
3864 SyncRide(ride);
3865 }
3866 if (parasite != null)
3867 {
3869 }
3870 }

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

3873 {
3874 if (!c.pos.Equals(pos))
3875 {
3876 if (!pos.IsValid)
3877 {
3878 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
3879 pos = new Point();
3880 }
3881 EClass._map.MoveCard(pos, c);
3882 }
3883 }

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

◆ TalkTopic()

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

Definition at line 6849 of file Chara.cs.

6850 {
6851 if (host == null && !IsInActiveZone)
6852 {
6853 return null;
6854 }
6855 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
6856 {
6857 return null;
6858 }
6859 if (IsPCParty)
6860 {
6861 int num = EClass.pc.party.members.Count - 1;
6862 switch (topic)
6863 {
6864 case "calm":
6865 if (EClass.rnd(num * 5) != 0)
6866 {
6867 return null;
6868 }
6869 break;
6870 case "aggro":
6871 if (EClass.rnd(num * 10) != 0)
6872 {
6873 return null;
6874 }
6875 break;
6876 case "kill":
6877 if (EClass.rnd(num * 3) != 0)
6878 {
6879 return null;
6880 }
6881 break;
6882 case "fov":
6883 return null;
6884 }
6885 }
6886 string topicText = GetTopicText(topic);
6887 if (topicText.IsEmpty())
6888 {
6889 return null;
6890 }
6891 string text = "_bracketTalk".lang();
6892 bool flag = topicText.StartsWith("*");
6893 bool flag2 = topicText.StartsWith("(");
6894 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
6895 topicText = ApplyTone(topicText);
6896 topicText = topicText.Replace("~", "*");
6897 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
6898 Msg.Say(topicText.Replace("&", ""));
6899 if (topic == "dead")
6900 {
6901 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
6902 }
6903 else if (flag || flag3 || flag2)
6904 {
6905 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
6906 }
6907 return topicText;
6908 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:6673
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:6752
string GetTopicText(string topic="calm")
Definition: Chara.cs:6816
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 3885 of file Chara.cs.

3886 {
3887 SyncRide();
3888 combatCount--;
3889 ignoreSPAbsorb = false;
3890 if (IsPC)
3891 {
3892 if (hasMovedThisTurn)
3893 {
3894 pos.Things.ForeachReverse(delegate(Thing t)
3895 {
3897 {
3898 AI_Goto aI_Goto = ai.Current as AI_Goto;
3899 if ((aI_Goto == null && !(ai is GoalManualMove)) || (aI_Goto != null && !aI_Goto.dest.Equals(pos)))
3900 {
3901 return;
3902 }
3903 }
3904 t.trait.OnStepped(this);
3905 });
3906 if (isDead)
3907 {
3908 return;
3909 }
3910 hasMovedThisTurn = false;
3912 {
3913 EClass.player.haltMove = false;
3914 ActionMode.Adv.TryCancelInteraction(sound: false);
3915 EInput.Consume(1);
3916 return;
3917 }
3918 if (EClass._zone.IsRegion)
3919 {
3921 {
3922 foreach (Chara member in EClass.pc.party.members)
3923 {
3924 if (member.hunger.value > 65)
3925 {
3926 member.InstantEat(null, sound: false);
3927 }
3928 }
3929 }
3930 Chara chara = null;
3932 if (cell2 != null && (cell2.zone == null || (cell2.zone is Zone_Field && !cell2.zone.IsPCFaction)))
3933 {
3934 foreach (Chara chara2 in EClass._map.charas)
3935 {
3936 if (!chara2.IsPCFactionOrMinion && !chara2.IsGlobal && chara2.pos.Equals(EClass.pc.pos))
3937 {
3938 chara = chara2;
3939 break;
3940 }
3941 }
3942 }
3943 if (chara != null)
3944 {
3946 {
3947 EClass.player.safeTravel = 5 + EClass.rnd(5);
3948 }
3949 EClass._zone.RemoveCard(chara);
3950 Msg.Say("encounter");
3951 EClass.player.EnterLocalZone(encounter: true, chara);
3952 }
3953 else if (EClass.player.safeTravel <= 0)
3954 {
3955 if (cell2 != null && cell2.zone == null && !EClass.debug.ignoreEncounter)
3956 {
3958 if (!tileInfo.shore)
3959 {
3960 bool num = EClass.pc.HasCondition<ConWardMonster>();
3961 bool flag = EClass.pc.HasCondition<ConDrawMonster>();
3962 bool flag2 = EClass.game.quests.Get<QuestEscort>() != null;
3963 int num2 = (tileInfo.isRoad ? 22 : 12);
3964 if (flag2)
3965 {
3966 num2 = (tileInfo.isRoad ? 16 : 10);
3967 }
3968 if (num)
3969 {
3970 num2 *= (flag2 ? 2 : 20);
3971 }
3972 if (flag)
3973 {
3974 num2 /= 2;
3975 }
3976 if (EClass.rnd(num2) == 0)
3977 {
3978 Msg.Say("encounter");
3979 if (!flag)
3980 {
3981 EClass.player.safeTravel = 5 + EClass.rnd(5);
3982 }
3983 EClass.player.EnterLocalZone(encounter: true);
3984 }
3985 }
3986 }
3987 }
3988 else
3989 {
3991 }
3992 }
3993 }
3994 EClass.player.pickupDelay = 0f;
3995 if (EClass.player.returnInfo != null)
3996 {
3998 if (EClass.player.returnInfo.turns <= 0)
3999 {
4001 {
4002 EClass.player.returnInfo = null;
4004 }
4005 else
4006 {
4008 {
4009 int uidDest = EClass.player.returnInfo.uidDest;
4010 Zone zone = null;
4011 if (uidDest != 0)
4012 {
4013 zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
4014 }
4015 if (zone == null || zone.destryoed)
4016 {
4017 zone = EClass.world.region;
4018 }
4020 {
4021 Msg.Say("returnFail");
4022 }
4023 else
4024 {
4025 Msg.Say("returnComplete");
4026 EClass.player.uidLastTravelZone = 0;
4028 EClass.player.lastZonePos = null;
4029 }
4030 EClass.player.returnInfo = null;
4031 return;
4032 }
4033 EClass.player.returnInfo = null;
4034 Msg.Say("returnOverweight");
4035 }
4036 }
4037 }
4038 if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
4039 {
4041 return;
4042 }
4045 {
4046 RecipeUpdater.dirty = true;
4047 }
4049 }
4050 else
4051 {
4052 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (float)EClass.pc.Speed / (float)Speed);
4053 hasMovedThisTurn = false;
4054 }
4057 {
4058 return;
4059 }
4061 if (host != null && !consumeTurn)
4062 {
4063 if (host.ride == this && ((host.hasMovedThisTurn && IsInCombat) || (enemy != null && turn % 3 != 0)))
4064 {
4065 consumeTurn = true;
4066 }
4067 if (host.parasite == this && enemy != null && EClass.rnd(10) > EClass.rnd(host.Evalue(227) + 10))
4068 {
4069 if (Dist(enemy) < 3 && EClass.rnd(2) == 0)
4070 {
4071 Say("parasite_fail", this, host);
4072 if (EClass.rnd(2) == 0 && GetInt(106) == 0)
4073 {
4074 Talk("parasite_fail");
4075 }
4076 }
4077 consumeTurn = true;
4078 }
4079 }
4080 if (consumeTurn)
4081 {
4082 if (IsPC)
4083 {
4085 }
4086 }
4087 else
4088 {
4089 if (base.isRestrained)
4090 {
4091 TryUnrestrain();
4092 }
4093 if (enemy != null)
4094 {
4096 {
4097 enemy = null;
4098 }
4099 else if (!IsPC && (ai.CancelOnAggro || !ai.IsRunning))
4100 {
4101 SetAIAggro();
4102 }
4103 }
4104 if (HasNoGoal || !ai.IsRunning)
4105 {
4106 ChooseNewGoal();
4107 }
4108 ai.Tick();
4109 }
4110 Cell cell = base.Cell;
4112 {
4113 AddCondition<ConWet>(50);
4114 if (pos.IsHotSpring)
4115 {
4116 hygiene.Mod(2);
4117 }
4118 }
4119 if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode)
4120 {
4121 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
4122 }
4123 CellEffect e;
4124 if (cell.effect != null)
4125 {
4126 e = cell.effect;
4127 switch (e.id)
4128 {
4129 case 1:
4130 case 2:
4131 case 4:
4132 if (IsLevitating)
4133 {
4134 Say("levitating");
4135 break;
4136 }
4137 AddCondition<ConWet>(50);
4138 ProcEffect();
4139 break;
4140 case 3:
4141 PlaySound("fire_step");
4142 AddCondition<ConBurning>(30);
4143 break;
4144 case 5:
4145 if (!isWet)
4146 {
4147 PlaySound("bubble");
4148 AddCondition<ConWet>(30);
4149 ProcEffect();
4150 }
4151 break;
4152 case 6:
4153 if (hasMovedThisTurn)
4154 {
4155 Say("abMistOfDarkness_step", this);
4156 }
4157 break;
4158 }
4159 }
4160 if (IsPC)
4161 {
4162 if (EClass.player.currentHotItem.Thing != null)
4163 {
4165 }
4167 }
4168 void ClearEffect()
4169 {
4170 EClass._map.SetLiquid(cell.x, cell.z, 0, 0);
4171 }
4172 void ProcEffect()
4173 {
4174 if (e.idEffect != 0)
4175 {
4176 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
4177 {
4178 aliasEle = EClass.sources.elements.map[e.idEle].alias,
4179 n1 = e.n1
4180 });
4181 ClearEffect();
4182 }
4183 }
4184 }
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:6986
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:7430
int Speed
Definition: Chara.cs:1081
static bool consumeTurn
Definition: Chara.cs:178
void SetAIAggro()
Definition: Chara.cs:8677
bool ignoreSPAbsorb
Definition: Chara.cs:146
void ChooseNewGoal()
Definition: Chara.cs:8558
bool WillConsumeTurn()
Definition: Chara.cs:3628
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:1168
float baseActTime
Definition: Player.cs:1196
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1926
HotItem currentHotItem
Definition: Player.cs:1097
int safeTravel
Definition: Player.cs:917
int eloY
Definition: Point.cs:81
int eloX
Definition: Point.cs:79
bool IsHotSpring
Definition: Point.cs:363
bool destryoed
Definition: Spatial.cs:45
virtual void OnTickHeld()
Definition: Trait.cs:1047
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 3640 of file Chara.cs.

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

8540 {
8541 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8542 {
8543 if (_cooldowns[num] % 1000 == 1)
8544 {
8545 _cooldowns.RemoveAt(num);
8546 }
8547 else
8548 {
8549 _cooldowns[num]--;
8550 }
8551 }
8552 if (_cooldowns.Count == 0)
8553 {
8554 _cooldowns = null;
8555 }
8556 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 8959 of file Chara.cs.

8960 {
8962 if (span != TimeTable.Span.Work && span != 0)
8963 {
8964 return;
8965 }
8966 WorkSummary workSummary = GetWorkSummary();
8967 if (span == TimeTable.Span.Work)
8968 {
8969 if (workSummary.work != null)
8970 {
8971 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
8972 }
8973 }
8974 else if (workSummary.hobbies.Count > 0)
8975 {
8976 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
8977 }
8978 }
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 1170 of file Chara.cs.

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

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

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

◆ TryAbsorbRod()

void Chara.TryAbsorbRod ( Thing  t)
inline

Definition at line 4298 of file Chara.cs.

4299 {
4300 if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
4301 {
4302 return;
4303 }
4304 Say("absorbRod", this, t);
4305 TraitRod rod = t.trait as TraitRod;
4306 bool flag = false;
4307 if (rod.source != null)
4308 {
4309 using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
4310 if (enumerator.MoveNext())
4311 {
4312 SourceElement.Row current = enumerator.Current;
4313 if (IsPC)
4314 {
4315 GainAbility(current.id, t.c_charges * 100, t);
4316 flag = true;
4317 }
4318 }
4319 }
4320 if (!flag)
4321 {
4322 mana.Mod(-50 * t.c_charges);
4323 }
4324 t.c_charges = 0;
4326 }
int c_charges
Definition: Card.cs:1269
void GainAbility(int ele, int mtp=100, Thing origin=null)
Definition: Chara.cs:9858

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

7211 {
7212 if (!IsPCFaction && !IsGuest())
7213 {
7214 return null;
7215 }
7216 foreach (Card item in EClass._map.props.installed.all)
7217 {
7218 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7219 {
7220 traitBed.AddHolder(this);
7221 Msg.Say("claimBed", this);
7222 return traitBed;
7223 }
7224 }
7225 return null;
7226 }
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 5521 of file Chara.cs.

5522 {
5524 {
5525 return;
5526 }
5527 int num = 0;
5528 bool flag = false;
5529 bool flag2 = false;
5530 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5531 TreasureType type = TreasureType.BossQuest;
5532 if (EClass._zone.Boss == this)
5533 {
5534 type = TreasureType.BossNefia;
5535 num = 2 + EClass.rnd(2);
5536 flag = (flag2 = true);
5537 EClass._zone.Boss = null;
5538 Msg.Say("boss_win", EClass._zone.Name);
5540 {
5541 Msg.Say("boss_win_void", EClass._zone.Name);
5542 EClass.player.flags.KilledBossInVoid = true;
5543 }
5544 if (EClass._zone.IsNefia)
5545 {
5548 SE.Play("Jingle/fanfare2");
5549 EClass._zone.SetBGM(114, refresh: true, 3f);
5550 }
5553 }
5554 switch (id)
5555 {
5556 case "vernis_boss":
5557 num = 5;
5558 flag = (flag2 = true);
5559 EClass.Sound.StopBGM(3f);
5560 EClass._zone.SetBGM(1, refresh: false);
5561 if (EClass.game.quests.GetPhase<QuestVernis>() == 8)
5562 {
5563 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5564 }
5565 break;
5566 case "lurie_boss":
5567 if (!(EClass._zone is Zone_Exile))
5568 {
5569 num = 5;
5570 flag = (flag2 = true);
5571 EClass._zone.SetBGM(120, refresh: true, 3f);
5573 {
5574 EClass.game.quests.Get<QuestNegotiationDarkness>().ChangePhase(4);
5575 EClass.player.flags.killedDuponne = true;
5576 }
5577 }
5578 break;
5579 case "ungaga_pap":
5580 num = 5;
5581 flag = (flag2 = true);
5583 {
5584 EClass._zone.SetBGM(46, refresh: true, 3f);
5585 }
5586 break;
5587 case "melilith_boss":
5588 num = 5;
5589 flag = (flag2 = true);
5590 EClass.Sound.StopBGM(3f);
5591 EClass._zone.SetBGM(1, refresh: false);
5592 break;
5593 case "doga":
5594 {
5595 QuestCurry questCurry = EClass.game.quests.Get<QuestCurry>();
5596 if (questCurry != null)
5597 {
5598 num = 5;
5599 flag = (flag2 = true);
5600 EClass.Sound.StopBGM(3f);
5601 EClass._zone.SetBGM(1, refresh: false);
5602 questCurry.NextPhase();
5603 }
5604 break;
5605 }
5606 case "fairy_raina":
5607 case "fairy_poina":
5608 {
5609 bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
5610 QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
5611 if (num2 && questNasu != null && questNasu.phase <= 1)
5612 {
5613 if (questNasu.phase == 0)
5614 {
5615 questNasu.NextPhase();
5616 }
5617 num = 5;
5618 flag = (flag2 = true);
5619 EClass.Sound.StopBGM(3f);
5620 EClass._zone.SetBGM(1, refresh: false);
5621 EClass.player.DropReward(ThingGen.Create("backpack_holding"));
5622 questNasu.NextPhase();
5623 }
5624 break;
5625 }
5626 case "isygarad":
5627 {
5628 num = 5;
5629 flag = (flag2 = true);
5630 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5631 if (questExploration != null)
5632 {
5633 SE.Play("kill_boss");
5634 questExploration.ChangePhase(3);
5635 EClass.Sound.StopBGM(3f);
5636 EClass._zone.SetBGM(1, refresh: false);
5637 }
5638 break;
5639 }
5640 case "swordkeeper":
5641 num = 10;
5642 flag = true;
5643 SE.Play("kill_boss");
5644 SoundManager.ForceBGM();
5645 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5646 break;
5647 }
5648 if (flag)
5649 {
5650 SE.Play("kill_boss");
5651 }
5652 if (num != 0)
5653 {
5655 {
5656 EClass.player.stats.deepest = EClass._zone.DangerLv;
5657 Msg.Say("update_deepest", EClass.player.stats.deepest.ToString() ?? "");
5658 }
5660 {
5661 EClass.player.stats.deepestVoid = -EClass._zone.lv;
5662 Msg.Say("update_deepest_void", EClass.player.stats.deepestVoid.ToString() ?? "");
5663 }
5664 EClass.player.willAutoSave = true;
5665 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5666 point.SetBlock();
5667 point.SetObj();
5668 EClass._zone.AddCard(thing, point).Install();
5669 ThingGen.TryLickChest(thing);
5670 }
5671 if (flag2)
5672 {
5674 }
5675 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:416
int deepest
Definition: Player.cs:111
long nefiaBeaten
Definition: Player.cs:133
int deepestVoid
Definition: Player.cs:114
void ModFame(int a)
Definition: Player.cs:2074
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:916
void SetBlock(int idMat=0, int idBlock=0)
Definition: Point.cs:906
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:2917
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 4515 of file Chara.cs.

4516 {
4517 if (held != null && held.trait.CanOnlyCarry)
4518 {
4519 DropHeld();
4520 }
4521 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4522 {
4523 DropThing(item);
4524 }
4525 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4547

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

◆ TryEquip()

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

Definition at line 7584 of file Chara.cs.

7585 {
7586 if (!ShouldEquip(t, useFav))
7587 {
7588 return false;
7589 }
7590 if (t.category.slot == 0)
7591 {
7592 return false;
7593 }
7594 if (useFav)
7595 {
7596 BodySlot slot = body.GetSlot(t);
7597 switch (GetFavAttackStyle())
7598 {
7599 case AttackStyle.Default:
7600 case AttackStyle.TwoHand:
7601 if (t.IsMeleeWeapon)
7602 {
7603 slot = body.slotMainHand;
7604 }
7605 break;
7606 case AttackStyle.Shield:
7607 if (t.IsMeleeWeapon)
7608 {
7609 slot = body.slotMainHand;
7610 }
7611 break;
7612 }
7613 body.Equip(t, slot);
7614 }
7615 else
7616 {
7617 body.Equip(t);
7618 }
7619 Say("equip", this, t);
7620 return true;
7621 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7472

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

7705 {
7706 if (IsPC)
7707 {
7709 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
7710 {
7711 ranged = thing;
7712 return true;
7713 }
7714 return false;
7715 }
7716 if (ranged != null && ranged.parent == this)
7717 {
7718 return true;
7719 }
7721 return ranged != null;
7722 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:7689

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

7629 {
7630 Thing dest = null;
7631 if (IsPC)
7632 {
7634 {
7635 return FindThrowable(hotbar: true);
7636 }
7637 return null;
7638 }
7639 things.Foreach(delegate(Thing t)
7640 {
7641 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7642 {
7643 dest = t;
7644 }
7645 });
7646 return dest;
7647 Thing FindThrowable(bool hotbar)
7648 {
7649 things.Foreach(delegate(Thing t)
7650 {
7651 if (dest == null)
7652 {
7653 if (t.IsHotItem)
7654 {
7655 if (!hotbar)
7656 {
7657 return;
7658 }
7659 }
7660 else if (hotbar)
7661 {
7662 return;
7663 }
7664 if (t.HasTag(CTAG.throwWeapon))
7665 {
7666 dest = t;
7667 }
7668 }
7669 });
7670 return dest;
7671 }
7672 }

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

4377 {
4378 if (held == t)
4379 {
4380 return true;
4381 }
4382 if (t.isDestroyed || t.Num <= 0)
4383 {
4384 return false;
4385 }
4386 if (!CanPick(t))
4387 {
4388 if (t.parent == null)
4389 {
4390 EClass._zone.AddCard(t, pos);
4391 }
4392 return false;
4393 }
4394 HoldCard(t, num);
4395 return true;
4396 }
bool CanPick(Card c)
Definition: Chara.cs:4196
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4398

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

7851 {
7852 int num = Evalue(289);
7853 if (num == 0)
7854 {
7855 return false;
7856 }
7857 int lV = t.LV;
7858 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
7859 {
7860 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
7861 int num2 = 50;
7862 if (lV > num)
7863 {
7864 num2 += (lV - num) * 10;
7865 }
7866 elements.ModExp(289, Mathf.Min(num2, 1000));
7867 return true;
7868 }
7869 return false;
7870 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:2059

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

2696 {
2697 foreach (Condition condition in conditions)
2698 {
2699 if (!condition.TryMove(newPoint))
2700 {
2701 return MoveResult.Fail;
2702 }
2703 }
2704 if (base.isRestrained)
2705 {
2706 if (!IsPC)
2707 {
2708 return MoveResult.Fail;
2709 }
2710 base.isRestrained = false;
2711 }
2712 if (!CanMoveTo(newPoint, allowDestroyPath))
2713 {
2714 return MoveResult.Fail;
2715 }
2716 return _Move(newPoint);
2717 }
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 2655 of file Chara.cs.

2656 {
2658 {
2659 return MoveResult.Fail;
2660 }
2661 Point point = p.Copy();
2662 int num = p.x - pos.x;
2663 int num2 = p.z - pos.z;
2664 if (num > 1)
2665 {
2666 num = 1;
2667 }
2668 else if (num < -1)
2669 {
2670 num = -1;
2671 }
2672 if (num2 > 1)
2673 {
2674 num2 = 1;
2675 }
2676 else if (num2 < -1)
2677 {
2678 num2 = -1;
2679 }
2680 if (num == 0 && num2 == 0)
2681 {
2682 num = EClass.rnd(3) - 1;
2683 num2 = EClass.rnd(3) - 1;
2684 }
2685 point.Set(pos);
2686 point.x -= num;
2687 point.z -= num2;
2688 if (point.IsValid && !point.HasChara)
2689 {
2690 return TryMove(point, allowDestroyPath: false);
2691 }
2692 return MoveResult.Fail;
2693 }
bool TooHeavyToMove()
Definition: Player.cs:2538

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

2594 {
2595 if (p.Equals(pos))
2596 {
2597 return MoveResult.Success;
2598 }
2600 {
2601 return MoveResult.Fail;
2602 }
2603 bool flag = true;
2604 Point point = null;
2605 _sharedPos.Set(p);
2606 if (CanDestroyPath())
2607 {
2609 {
2610 return MoveResult.Success;
2611 }
2612 Debug.Log(CanMoveTo(pos));
2614 }
2615 int num = pos.Distance(p);
2616 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2617 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2618 {
2619 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2620 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2621 {
2622 return MoveResult.Success;
2623 }
2624 }
2625 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2626 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2627 {
2628 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2629 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2630 {
2631 return MoveResult.Success;
2632 }
2633 }
2634 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2635 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2636 {
2637 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2638 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2639 {
2640 return MoveResult.Success;
2641 }
2642 }
2643 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2644 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2645 {
2646 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2647 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2648 {
2649 return MoveResult.Success;
2650 }
2651 }
2652 return MoveResult.Fail;
2653 }
static Point _sharedPos
Definition: Chara.cs:172
void RequestPathImmediate(PathProgress progress)
Definition: PathManager.cs:41
List< PathFinderNode > nodes
Definition: PathProgress.cs:16
Point GetPointTowards(Point dest)
Definition: Point.cs:789

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

9433 {
9434 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9435 {
9436 return false;
9437 }
9438 if (TC.hp > (long)TC.MaxHP * (long)Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) / 100)
9439 {
9440 return false;
9441 }
9442 if (TC.HasElement(427))
9443 {
9444 return false;
9445 }
9446 if (TC.IsPC && EClass.player.invlunerable)
9447 {
9448 return false;
9449 }
9450 PlaySound("hit_finish");
9451 Say("finish");
9452 Say("finish2", this, TC);
9453 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9454 return false;
9455 }
@ harvest
bool invlunerable
Definition: Player.cs:1170
Definition: TC.cs:4

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

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 9882 of file Chara.cs.

9883 {
9884 if (IsPCParty)
9885 {
9886 foreach (Chara member in EClass.pc.party.members)
9887 {
9888 if (member.HasElement(1641) && EClass.rnd(3) != 0)
9889 {
9890 Msg.Say("curse_nullify", member);
9891 return true;
9892 }
9893 }
9894 }
9895 else if (HasElement(1641) && EClass.rnd(3) != 0)
9896 {
9897 Say("curse_nullify", this);
9898 return true;
9899 }
9900 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
9901 {
9902 Say("curse_nullify", this);
9903 return true;
9904 }
9905 return false;
9906 }

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

◆ TryPickGroundItem()

void Chara.TryPickGroundItem ( )
inline

Definition at line 4352 of file Chara.cs.

4353 {
4354 foreach (Card item in pos.ListCards())
4355 {
4356 if ((IsPC || !(EClass.pc.ai is AI_UseCrafter aI_UseCrafter) || !aI_UseCrafter.ings.Contains(item)) && item.isThing && item.placeState == PlaceState.roaming && CanPick(item))
4357 {
4358 Thing thing = Pick(item.Thing);
4359 if (thing != null && !IsPC)
4360 {
4361 thing.isNPCProperty = true;
4362 }
4363 break;
4364 }
4365 }
4366 }

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4284 of file Chara.cs.

4285 {
4286 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4287 {
4288 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)
4289 .id;
4290 Say("poisonDrip", this);
4291 int num = t.Num;
4292 t.Destroy();
4293 t = ThingGen.Create(text).SetNum(num);
4294 }
4295 return t;
4296 }
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 3192 of file Chara.cs.

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

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

4369 {
4370 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4371 {
4372 EClass._zone.AddCard(t, pos);
4373 }
4374 }
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 7261 of file Chara.cs.

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

7229 {
7230 if (GetInt(113) != 0)
7231 {
7232 return;
7233 }
7234 _ListItems.Clear();
7235 Thing bestRangedWeapon = GetBestRangedWeapon();
7236 foreach (Thing thing in things)
7237 {
7238 if (!thing.IsAmmo)
7239 {
7240 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
7241 {
7242 _ListItems.Add(thing);
7243 }
7244 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
7245 {
7246 _ListItems.Add(thing);
7247 }
7248 }
7249 }
7250 if (_ListItems.Count == 0)
7251 {
7252 return;
7253 }
7254 List<Thing> containers2 = containers.ToList();
7255 foreach (Thing listItem in _ListItems)
7256 {
7257 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
7258 }
7259 }
void Add(Act a, string s="")
Definition: ActPlan.cs:11
static List< Thing > _ListItems
Definition: Chara.cs:188

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

4329 {
4330 if (t.id == "axe")
4331 {
4332 Tutorial.Reserve("tool");
4333 }
4334 if (t.category.id == "mushroom")
4335 {
4336 Tutorial.Reserve("food");
4337 }
4338 if (t.category.id == "herb")
4339 {
4340 Tutorial.Reserve("herb");
4341 }
4342 if (t.id == "pasture")
4343 {
4344 Tutorial.Reserve("pasture");
4345 }
4346 if (t.id == "log")
4347 {
4348 Tutorial.Reserve("process");
4349 }
4350 }

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4609 of file Chara.cs.

4610 {
4611 isOnCreate = onCreate;
4612 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4613 {
4614 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4615 }
4616 RestockInventory(onCreate);
4617 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:4897
void RestockEquip(bool onCreate)
Definition: Chara.cs:4619

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

6210 {
6211 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))
6212 {
6213 SetEnemy(c);
6214 }
6215 }

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

7267 {
7269 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7266

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

7272 {
7273 if (base.isSummon || (memberType == FactionMemberType.Livestock && homeBranch != null && !homeBranch.policies.IsActive(2715)))
7274 {
7275 return;
7276 }
7277 int num = 2;
7278 int num2 = 2;
7279 bool flag = GetInt(113) == 0;
7280 int num3 = 2;
7281 int num4 = 2;
7282 int num5 = 2;
7284 {
7285 num4 = 0;
7286 num5 = 0;
7287 }
7288 foreach (Thing thing3 in things)
7289 {
7290 if (CanEat(thing3, shouldEat))
7291 {
7292 num -= thing3.Num;
7293 }
7294 if (thing3.trait.GetHealAction(this) != null)
7295 {
7296 num2 -= thing3.Num;
7297 }
7298 if (thing3.id == "polish_powder")
7299 {
7300 num3 -= thing3.Num;
7301 }
7302 if (thing3.trait is TraitBlanketColdproof)
7303 {
7304 num4 -= thing3.Num;
7305 }
7306 if (thing3.trait is TraitBlanketFireproof)
7307 {
7308 num5 -= thing3.Num;
7309 }
7310 }
7311 _ListItems.Clear();
7312 foreach (Thing container in containers)
7313 {
7314 if (!container.IsSharedContainer)
7315 {
7316 continue;
7317 }
7318 foreach (Thing thing4 in container.things)
7319 {
7320 if (!thing4.c_isImportant && thing4.IsIdentified)
7321 {
7322 if (num3 > 0 && thing4.id == "polish_powder")
7323 {
7324 _ListItems.Add(thing4);
7325 num3 -= thing4.Num;
7326 }
7327 else if (num4 > 0 && !HasElement(1236) && thing4.trait is TraitBlanketColdproof)
7328 {
7329 _ListItems.Add(thing4);
7330 num4 -= thing4.Num;
7331 }
7332 else if (num5 > 0 && thing4.trait is TraitBlanketFireproof)
7333 {
7334 _ListItems.Add(thing4);
7335 num5 -= thing4.Num;
7336 }
7337 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant)
7338 {
7339 _ListItems.Add(thing4);
7340 num -= thing4.Num;
7341 }
7342 else if (num2 > 0 && thing4.trait.GetHealAction(this) != null)
7343 {
7344 _ListItems.Add(thing4);
7345 num2 -= thing4.Num;
7346 }
7347 else if (flag && thing4.IsEquipmentOrRanged && !thing4.HasTag(CTAG.gift) && ShouldEquip(thing4, useFav: true))
7348 {
7349 _ListItems.Add(thing4);
7350 }
7351 }
7352 }
7353 }
7354 if (_ListItems.Count == 0)
7355 {
7356 return;
7357 }
7358 _ListItems.ForeachReverse(delegate(Thing t)
7359 {
7360 if (t.IsEquipmentOrRanged)
7361 {
7362 bool flag3 = false;
7363 int slot = t.category.slot;
7364 int equipValue = t.GetEquipValue();
7365 foreach (Thing listItem in _ListItems)
7366 {
7367 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
7368 {
7369 flag3 = true;
7370 break;
7371 }
7372 }
7373 if (flag3)
7374 {
7375 _ListItems.Remove(t);
7376 }
7377 }
7378 });
7379 bool flag2 = false;
7380 foreach (Thing listItem2 in _ListItems)
7381 {
7382 Thing thing = listItem2;
7383 if (things.IsFull(thing))
7384 {
7385 break;
7386 }
7387 Thing thing2 = listItem2.parent as Thing;
7388 if (thing.Num > 2)
7389 {
7390 thing = thing.Split(2);
7391 }
7392 if (msg)
7393 {
7394 Say("takeSharedItem", this, thing, thing2.GetName(NameStyle.Full));
7395 }
7396 AddCard(thing);
7397 if (ShouldEquip(thing, useFav: true) && thing.category.slot != 0)
7398 {
7399 TryEquip(thing, useFav: true);
7400 flag2 = true;
7401 }
7402 }
7403 if (flag2 && flag)
7404 {
7405 TryPutSharedItems(containers);
7406 }
7407 }
bool IsIdentified
Definition: Card.cs:2365
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 8408 of file Chara.cs.

8409 {
8410 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
8411 {
8412 return;
8413 }
8414 for (int i = 0; i < 100; i++)
8415 {
8416 if (base.feat == 0)
8417 {
8418 break;
8419 }
8420 if (base.c_upgrades == null)
8421 {
8422 base.c_upgrades = new CharaUpgrade();
8423 }
8424 if (base.c_upgrades.halt)
8425 {
8426 break;
8427 }
8428 Rand.SetSeed(base.uid + base.c_upgrades.count);
8429 int num = EClass.rnd(100);
8430 int num2 = 0;
8431 int num3 = 1;
8432 int num4 = 0;
8433 bool flag = false;
8434 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
8435 List<Element> list = ListAvailabeFeats(pet: true);
8436 if (num >= 90 && list.Count > 0)
8437 {
8438 Element element = list.RandomItem();
8439 num2 = element.id;
8440 num4 = element.CostLearn;
8441 }
8442 else if (num >= 60 && ie.Any())
8443 {
8444 num2 = ie.RandomItem().id;
8445 num4 = 3;
8446 }
8447 else
8448 {
8449 num2 = Element.List_MainAttributesMajor.RandomItem();
8450 num4 = 1;
8451 num3 = 2;
8452 flag = true;
8453 }
8454 Rand.SetSeed();
8455 if (num4 > base.feat)
8456 {
8457 break;
8458 }
8459 base.feat -= num4;
8460 base.c_upgrades.count++;
8461 base.c_upgrades.spent += num4;
8462 bool flag2 = false;
8463 if (flag)
8464 {
8465 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8466 {
8467 if (item.idEle == num2)
8468 {
8469 item.value += num3;
8470 item.cost += num4;
8471 flag2 = true;
8472 break;
8473 }
8474 }
8475 }
8476 if (!flag2)
8477 {
8478 base.c_upgrades.items.Add(new CharaUpgrade.Item
8479 {
8480 idEle = num2,
8481 value = num3,
8482 cost = num4
8483 });
8484 }
8485 SourceElement.Row row = EClass.sources.elements.map[num2];
8486 if (row.category == "feat")
8487 {
8488 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8489 }
8490 else if (elements.ValueWithoutLink(row.id) == 0)
8491 {
8492 elements.Learn(row.id);
8493 }
8494 else
8495 {
8496 elements.ModBase(num2, num3);
8497 }
8498 }
8499 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:9642
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 7733 of file Chara.cs.

7734 {
7735 if (t.id == "338")
7736 {
7737 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
7738 if (thing != null)
7739 {
7740 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
7741 SE.Change();
7742 t.trait.OnBlend(thing, this);
7743 return true;
7744 }
7745 return false;
7746 }
7747 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
7748 {
7749 return false;
7750 }
7751 if (t.id == "cigar")
7752 {
7753 (t.trait as TraitItemProc).OnUse(this);
7754 return true;
7755 }
7756 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
7757 {
7759 {
7760 target = t
7761 });
7762 return true;
7763 }
7764 if (t.trait.CanDrink(this))
7765 {
7766 Drink(t);
7767 return true;
7768 }
7769 if (t.trait.CanRead(this))
7770 {
7772 {
7773 target = t
7774 });
7775 return true;
7776 }
7777 if (base.hp < MaxHP * 90 / 100)
7778 {
7779 Action healAction = t.trait.GetHealAction(this);
7780 if (healAction != null)
7781 {
7782 healAction();
7783 return true;
7784 }
7785 }
7786 return false;
7787 }
bool isAcidproof
Definition: Card.cs:686
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8719
virtual bool CanRead(Chara c)
Definition: Trait.cs:966
virtual bool CanDrink(Chara c)
Definition: Trait.cs:984
virtual void OnBlend(Thing t, Chara c)
Definition: Trait.cs:610

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

8981 {
8982 if (EClass.world.date.IsExpired(GetInt(51)))
8983 {
8984 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
8985 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
8986 homeBranch.expeditions.Add(expedition);
8987 return true;
8988 }
8989 return false;
8990 }
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 3551 of file Chara.cs.

3552 {
3553 if (IsPCC)
3554 {
3555 if (base.dir == 0)
3556 {
3557 angle = 225f;
3558 }
3559 else if (base.dir == 1)
3560 {
3561 angle = 135f;
3562 }
3563 else if (base.dir == 2)
3564 {
3565 angle = 45f;
3566 }
3567 else if (base.dir == 3)
3568 {
3569 angle = -45f;
3570 }
3571 }
3572 else if (base.dir == 0)
3573 {
3574 angle = 165f;
3575 }
3576 else if (base.dir == 1)
3577 {
3578 angle = 300f;
3579 }
3580 else if (base.dir == 2)
3581 {
3582 angle = 0f;
3583 }
3584 else if (base.dir == 3)
3585 {
3586 angle = 120f;
3587 }
3588 }

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3612 of file Chara.cs.

3613 {
3614 int num = 4;
3615 for (int i = -num; i < num + 1; i++)
3616 {
3617 for (int j = -num; j < num + 1; j++)
3618 {
3619 shared.Set(pos.x + i, pos.z + j);
3620 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3621 {
3622 _ = 1;
3623 }
3624 }
3625 }
3626 }
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 5736 of file Chara.cs.

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

9029 {
9030 _goalWork.FindWork(this, setAI: false);
9032 }
static GoalHobby _goalHobby
Definition: Chara.cs:206
static GoalWork _goalWork
Definition: Chara.cs:204
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 5182 of file Chara.cs.

5183 {
5184 base.c_vomit++;
5185 Say("vomit", this);
5186 PlaySound("vomit");
5187 if (!EClass._zone.IsRegion)
5188 {
5189 Thing thing = ThingGen.Create("731");
5191 {
5192 thing.MakeRefFrom(this);
5193 }
5194 EClass._zone.AddCard(thing, pos);
5195 }
5196 if (HasCondition<ConAnorexia>())
5197 {
5198 ModExp(70, -50);
5199 ModExp(71, -75);
5200 ModExp(77, -100);
5201 }
5202 else if (base.c_vomit > 10)
5203 {
5204 AddCondition<ConAnorexia>();
5205 }
5206 AddCondition<ConDim>();
5207 if (HasCondition<ConAnorexia>())
5208 {
5209 ModWeight(-1 * (1 + EClass.rnd(5)));
5210 }
5211 if (hunger.GetPhase() >= 4)
5212 {
5213 DamageHP(9999L, AttackSource.Hunger);
5214 }
5215 hunger.Mod(30);
5216 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:9574

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

3629 {
3630 for (int num = conditions.Count - 1; num >= 0; num--)
3631 {
3632 if (conditions[num].ConsumeTurn)
3633 {
3634 return true;
3635 }
3636 }
3637 return false;
3638 }

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

7153 {
7154 n.Clear();
7155 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
7156 SetImage(uIItem.image2);
7157 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
7158 n.AddText("");
7159 n.Build();
7160 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:5995
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 202 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 154 of file Chara.cs.

Referenced by SetFaction().

◆ _goalHobby

GoalHobby Chara._goalHobby = new GoalHobby()
staticprivate

Definition at line 206 of file Chara.cs.

◆ _goalWork

GoalWork Chara._goalWork = new GoalWork()
staticprivate

Definition at line 204 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 160 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 192 of file Chara.cs.

◆ _listFavFood

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

Definition at line 190 of file Chara.cs.

◆ _ListItems

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

Definition at line 188 of file Chara.cs.

◆ _NoGoalPC

NoGoal Chara._NoGoalPC = new NoGoal()
static

Definition at line 194 of file Chara.cs.

◆ _NoGoalRepeat

NoGoal Chara._NoGoalRepeat = new NoGoal()
static

Definition at line 196 of file Chara.cs.

Referenced by ActPlan.Item.Perform().

◆ _pts

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

Definition at line 184 of file Chara.cs.

◆ _race

SourceRace.Row Chara._race

Definition at line 158 of file Chara.cs.

Referenced by ChangeRace(), and OnCreate().

◆ _sharedPos

Point Chara._sharedPos = new Point()
staticprivate

Definition at line 172 of file Chara.cs.

Referenced by TryMoveTowards().

◆ _Speed

long Chara._Speed
private

Definition at line 170 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 162 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 176 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 178 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 168 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 198 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 174 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 182 of file Chara.cs.

◆ isParalyzed

bool Chara.isParalyzed

Definition at line 132 of file Chara.cs.

Referenced by Point.ListWitnesses().

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

Referenced by OnCreate().

◆ ListAdvRace

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

Definition at line 164 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 180 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 212 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 152 of file Chara.cs.

Referenced by LayerEditSkin.RefreshImage().

◆ stealthSeen

int Chara.stealthSeen

Definition at line 186 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 300 of file Chara.cs.

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

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

◆ _alias

string Chara._alias
getset

Definition at line 216 of file Chara.cs.

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

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

◆ _idTimeTable

int Chara._idTimeTable
getset

Definition at line 338 of file Chara.cs.

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

Referenced by OnCreate().

◆ _maxStamina

int Chara._maxStamina
getset

Definition at line 362 of file Chara.cs.

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

Referenced by CalculateMaxStamina().

◆ ability

◆ actorPrefab

override string Chara.actorPrefab
get

Definition at line 516 of file Chara.cs.

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

◆ affinity

◆ Aka

◆ AliasMaterialOnCreate

override string Chara.AliasMaterialOnCreate
get

Definition at line 556 of file Chara.cs.

◆ baseWorkElements

ElementContainer Chara.baseWorkElements
get

Definition at line 1108 of file Chara.cs.

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

◆ bladder

Stats Chara.bladder
get

Definition at line 1148 of file Chara.cs.

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

◆ burden

◆ CanGainConResist

bool Chara.CanGainConResist
get

Definition at line 1158 of file Chara.cs.

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

◆ CanOpenDoor

bool Chara.CanOpenDoor
get

Definition at line 816 of file Chara.cs.

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

◆ CanWitness

bool Chara.CanWitness
get

Definition at line 1000 of file Chara.cs.

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

Referenced by Point.ListWitnesses().

◆ corruption

int Chara.corruption
getset

Definition at line 374 of file Chara.cs.

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

Referenced by CanDuplicate().

◆ CurrentGeneSlot

int Chara.CurrentGeneSlot
get

Definition at line 1068 of file Chara.cs.

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

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

◆ CurrentSpan

TimeTable.Span Chara.CurrentSpan
get

Definition at line 834 of file Chara.cs.

Referenced by ConSleep.Tick().

◆ currentZone

Zone Chara.currentZone
getset

Definition at line 252 of file Chara.cs.

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

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

◆ depression

Stats Chara.depression
get

Definition at line 1146 of file Chara.cs.

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

◆ DestDist

int Chara.DestDist
get

Definition at line 996 of file Chara.cs.

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

◆ DV

override int Chara.DV
get

Definition at line 726 of file Chara.cs.

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

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

◆ faction

Faction Chara.faction
getset

Definition at line 424 of file Chara.cs.

425 {
426 get
427 {
428 return _faction ?? (_faction = EClass.game.factions.dictAll.TryGetValue(idFaction));
429 }
430 set
431 {
432 idFaction = value?.uid;
433 }
434 }
string idFaction
Definition: Chara.cs:241
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(), 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 544 of file Chara.cs.

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

Referenced by CharaActor.RefreshSprite().

◆ goalListType

GoalListType Chara.goalListType
getset

Definition at line 276 of file Chara.cs.

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

◆ HasHost

override bool Chara.HasHost
get

Definition at line 686 of file Chara.cs.

Referenced by ActEffect.Proc().

◆ HasNoGoal

◆ homeBranch

◆ homeZone

◆ hostility

◆ hunger

◆ hygiene

Stats Chara.hygiene
get

Definition at line 1150 of file Chara.cs.

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

◆ idFaction

string Chara.idFaction
getset

Definition at line 240 of file Chara.cs.

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

◆ idFaith

string Chara.idFaith
getset

Definition at line 228 of file Chara.cs.

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

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

◆ IDPCCBodySet

string Chara.IDPCCBodySet
get

Definition at line 488 of file Chara.cs.

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

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

◆ idTimeTable

string Chara.idTimeTable
get

Definition at line 466 of file Chara.cs.

Referenced by LayerQuestBoard.RefreshHire().

◆ interest

int Chara.interest
getset

Definition at line 314 of file Chara.cs.

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

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

◆ IsAdventurer

bool Chara.IsAdventurer
get

Definition at line 1038 of file Chara.cs.

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

◆ isAlawysVisible

bool Chara.isAlawysVisible
getset

Definition at line 398 of file Chara.cs.

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

◆ IsAliveInCurrentZone

◆ IsAnimal

bool Chara.IsAnimal
get

Definition at line 864 of file Chara.cs.

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

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

◆ IsCat

bool Chara.IsCat
get

Definition at line 984 of file Chara.cs.

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

Referenced by Affinity.OnGift(), AI_Eat.Run(), and AI_Idle.Run().

◆ isChara

override bool Chara.isChara
get

Definition at line 684 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 960 of file Chara.cs.

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

◆ IsEyth

bool Chara.IsEyth
get

Definition at line 1050 of file Chara.cs.

Referenced by TraitAltar.OnOffer().

◆ IsFairy

bool Chara.IsFairy
get

Definition at line 936 of file Chara.cs.

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

Referenced by Faction.IsWearingPanty().

◆ IsFish

bool Chara.IsFish
get

Definition at line 924 of file Chara.cs.

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

◆ IsGlobal

◆ IsGod

bool Chara.IsGod
get

Definition at line 948 of file Chara.cs.

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

◆ IsHorror

bool Chara.IsHorror
get

Definition at line 912 of file Chara.cs.

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

Referenced by Refresh().

◆ IsHuman

bool Chara.IsHuman
get

Definition at line 876 of file Chara.cs.

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

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

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

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

◆ IsIdle

bool Chara.IsIdle
get

Definition at line 850 of file Chara.cs.

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

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

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

◆ IsLocalChara

bool Chara.IsLocalChara
get

Definition at line 838 of file Chara.cs.

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

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

◆ IsMachine

bool Chara.IsMachine
get

Definition at line 900 of file Chara.cs.

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

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

◆ IsMaid

bool Chara.IsMaid
get

Definition at line 1024 of file Chara.cs.

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

Referenced by FactionBranch.GetMaid().

◆ IsMinion

override bool Chara.IsMinion
get

Definition at line 624 of file Chara.cs.

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

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

◆ IsMofuable

bool Chara.IsMofuable
get

Definition at line 1096 of file Chara.cs.

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

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

◆ IsMoving

override bool Chara.IsMoving
get

Definition at line 606 of file Chara.cs.

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

◆ IsMultisize

◆ IsPC

override bool Chara.IsPC
get

Definition at line 610 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(), 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(), GoalCombat.TryUseAbility(), CharaBody.Unequip(), CharaBody.UnqeuipIfTooHeavy(), and CharaRenderer.UpdatePosition().

◆ IsPCC

◆ IsPCFaction

override bool Chara.IsPCFaction
get

Definition at line 668 of file Chara.cs.

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

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

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

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

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

Referenced by ActPlan._Update(), Zone.AbandonZone(), Zone.AddGlobalCharasOnActivate(), Faction.AddReserve(), GameDate.AdvanceHour(), FactionBranch.AutoClean(), CanReplace(), Player.CanSee(), TraitSalesTag.CanTagSale(), Cuddle(), FactionBranch.DailyOutcome(), Die(), DoHostileAction(), AI_Fuck.Finish(), FactionBranch.GenerateGarbage(), DramaCustomSequence.GetListGuide(), FactionBranch.GetProductBonus(), IsHostile(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), FactionBranch.OnAfterSimulate(), ZoneEventDefenseGame.OnCharaDie(), BaseListPeople.OnClick(), Zone_CursedManor.OnGenerateMap(), ListPeopleExpedition.OnList(), TraitBaseSpellbook.OnRead(), 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 636 of file Chara.cs.

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

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

◆ IsPlant

bool Chara.IsPlant
get

Definition at line 972 of file Chara.cs.

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

Referenced by GoalCombat.Run().

◆ IsPrisoner

bool Chara.IsPrisoner
get

Definition at line 1036 of file Chara.cs.

◆ isSynced

override bool Chara.isSynced
get

◆ isThing

override bool Chara.isThing
get

Definition at line 682 of file Chara.cs.

◆ IsUndead

bool Chara.IsUndead
get

Definition at line 888 of file Chara.cs.

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

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

◆ IsWealthy

bool Chara.IsWealthy
get

Definition at line 1052 of file Chara.cs.

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

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

◆ job

◆ knowFav

bool Chara.knowFav
getset

Definition at line 410 of file Chara.cs.

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

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

◆ MainElement

Element Chara.MainElement
get

Definition at line 714 of file Chara.cs.

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

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

Referenced by ActEffect.Proc().

◆ OriginalHostility

Hostility Chara.OriginalHostility
get

Definition at line 468 of file Chara.cs.

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

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

785 {
786 get
787 {
788 if (spriteReplacer != null)
789 {
791 }
792 if (base.idSkin > 0)
793 {
794 switch (sourceCard.tiles.TryGet(base.idSkin))
795 {
796 case 2319:
797 case 2619:
798 case 2621:
799 case 2623:
800 case 2625:
802 case 2320:
803 case 2611:
804 case 2620:
805 case 2622:
806 case 2624:
807 case 2626:
808 case 2828:
810 }
811 }
812 return sourceCard.pref;
813 }
814 }
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 CharaRenderer.Draw(), BaseTileMap.DrawTile(), and LayerEditSkin.OnClickEdit().

◆ PrefIndex

override int Chara.PrefIndex
get

Definition at line 528 of file Chara.cs.

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

◆ PV

override int Chara.PV
get

Definition at line 755 of file Chara.cs.

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

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

◆ race

◆ SAN

◆ SelfWeight

override int Chara.SelfWeight
get

Definition at line 710 of file Chara.cs.

◆ sleepiness

Stats Chara.sleepiness
get

◆ sourceCard

override CardRow Chara.sourceCard
get

◆ sourceRenderCard

override CardRow Chara.sourceRenderCard
get

Definition at line 450 of file Chara.cs.

451 {
452 get
453 {
454 if (pccData != null && !(source.renderData is RenderDataPcc))
455 {
457 }
458 return source;
459 }
460 }
static Row rowDefaultPCC
Definition: SourceChara.cs:138

◆ Speed

int Chara.Speed
get

Definition at line 1080 of file Chara.cs.

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

Referenced by GameUpdater.ConditionUpdater.FixedUpdate().

◆ stamina

◆ tactics

Tactics Chara.tactics
get

Definition at line 832 of file Chara.cs.

◆ trait

◆ uidEditor

int Chara.uidEditor
getset

Definition at line 350 of file Chara.cs.

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

Referenced by SerializedCards.Add().

◆ WeightLimit

override int Chara.WeightLimit
get

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