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

Public Member Functions

override string ToString ()
 
bool IsCriticallyWounded (bool includeRide=false)
 
bool HasHigherGround (Card c)
 
bool CanSeeSimple (Point p)
 
bool CanSee (Card c)
 
bool CanSeeLos (Card c, int dist=-1)
 
bool CanSeeLos (Point p, int dist=-1)
 
bool HasAccess (Card c)
 
bool HasAccess (Point p)
 
bool CanSleep ()
 
override string GetName (NameStyle style, int num=-1)
 
override void ChangeRarity (Rarity r)
 
void SetFaction (Faction f)
 
void SetHomeZone (Zone zone)
 
void OnBanish ()
 
Chara SetGlobal (Zone _home, int x, int z)
 
Chara SetGlobal ()
 
void RemoveGlobal ()
 
override void OnBeforeCreate ()
 
override void OnCreate (int genLv)
 
Chara ScaleByPrincipal ()
 
void SetFaith (string id)
 
void SetFaith (Religion r)
 
void HealAll ()
 
void Refresh (bool calledRecursive=false)
 
Chara Duplicate ()
 
int GetBurden (Card t=null, int num=-1)
 
void CalcBurden ()
 
void Stumble (int mtp=100)
 
void SetDirtySpeed ()
 
void RefreshSpeed (Element.BonusInfo info=null)
 
void CalculateMaxStamina ()
 
override void ApplyEditorTags (EditorTag tag)
 
override void SetSource ()
 
void SetMainElement (string id, int v=0, bool elemental=false)
 
void SetMainElement (int id, int v=0, bool elemental=false)
 
void ApplyJob (bool remove=false)
 
void ChangeJob (string idNew)
 
void AddRandomBodyPart (bool msg=false)
 
void RemoveLastBodyPart (bool msg=false)
 
void ResetBody ()
 
void ApplyRace (bool remove=false)
 
void ChangeRace (string idNew)
 
void MakePartyMemeber ()
 
void MakeAlly (bool msg=true)
 
void _MakeAlly ()
 
bool CanBeTempAlly (Chara c)
 
void MakeMinion (Chara _master, MinionType type=MinionType.Default)
 
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 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)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true)
 
bool UseAbility (string idAct, Card tc=null, Point pos=null, bool pt=false)
 
bool UseAbility (Act a, Card tc=null, Point pos=null, bool pt=false)
 
int EvalueRiding ()
 
int CalcCastingChance (Element e, int num=1)
 
void DoAI (int wait, Action onPerform)
 
void Cuddle (Chara c, bool headpat=false)
 
Chara SetEnemy (Chara c=null)
 
void TrySetEnemy (Chara c)
 
void DoHostileAction (Card _tg, bool immediate=false)
 
void CallHelp (Chara tg, bool fanatic=false)
 
bool FindNewEnemy ()
 
bool FindNearestNewEnemy ()
 
bool IsHostile ()
 
bool IsHostile (Chara c)
 
bool IsNeutral ()
 
bool IsNeutralOrAbove ()
 
bool IsBranchMember ()
 
bool IsHomeMember ()
 
bool IsInHomeZone ()
 
bool IsInSpot< T > ()
 
bool IsGuest ()
 
bool IsFriendOrAbove ()
 
bool IsFriendOrAbove (Chara c)
 
override CardRenderer _CreateRenderer ()
 
void SetPCCState (PCCState state)
 
override Sprite GetSprite (int dir=0)
 
void SetTempHand (int right=0, int left=0)
 
override SubPassData GetSubPassData ()
 
override void SetRenderParam (RenderParam p)
 
override string GetHoverText ()
 
override string GetHoverText2 ()
 
string GetTopicText (string topic="calm")
 
string TalkTopic (string topic="calm")
 
override Sprite GetImageSprite ()
 
void ChangeMemberType (FactionMemberType type)
 
void ShowDialog ()
 
LayerDrama ShowDialog (string book, string step="main", string tag="")
 
Point GetDestination ()
 
int GetHireCost ()
 
int GetHappiness ()
 
string GetTextHappiness ()
 
string GetActionText ()
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
void ClearBed (Map map=null)
 
TraitBed FindBed ()
 
TraitBed TryAssignBed ()
 
void TryPutSharedItems (IEnumerable< Thing > containers, bool msg=true)
 
void TryPutSharedItems (bool msg=true)
 
void TryTakeSharedItems (bool msg=true)
 
void TryTakeSharedItems (IEnumerable< Thing > containers, bool msg=true, bool shouldEat=true)
 
Thing FindBestFoodToEat ()
 
void InstantEat (Thing t=null, bool sound=true)
 
bool CanEat (Thing t, bool shouldEat=false)
 
bool ShouldEquip (Thing t, bool useFav=false)
 
bool TryEquip (Thing t, bool useFav=false)
 
bool CanEquipRanged (Thing t)
 
Thing TryGetThrowable ()
 
Thing FindAmmo (Thing weapon)
 
Thing GetBestRangedWeapon ()
 
bool TryEquipRanged ()
 
override int GetArmorSkill ()
 
bool TryUse (Thing t)
 
Room FindRoom ()
 
void ModAffinity (Chara c, int a, bool show=true, bool showOnlyEmo=false)
 
bool TryIdentify (Thing t, int count=1, bool show=true)
 
Chara CreateReplacement ()
 
SourceThing.Row GetFavFood ()
 
SourceCategory.Row GetFavCat ()
 
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)
 
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)
 
void CureCondition< T > (int v=99999)
 
GetCondition< T > ()
 
void RemoveCondition< T > ()
 
void CureHost (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
void Cure (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
bool TryNeckHunt (Chara TC, int power, bool harvest=false)
 
void AddResistCon (Condition con)
 
void ResistCon (Condition con)
 
void Sleep (Thing bed=null, Thing pillow=null, bool pickup=false, ItemPosition posBed=null, ItemPosition posPillow=null)
 
void OnSleep (Thing bed=null, int days=1)
 
void OnSleep (int power, int days=1)
 
void ModHeight (int a)
 
void ModWeight (int a, bool ignoreLimit=false)
 
void ModCorruption (int a)
 
List< ElementListAvailabeFeats (bool pet=false, bool showAll=false)
 
void SetFeat (int id, int value=1, bool msg=false)
 
void SetMutation (int idEle, int a=0)
 
bool MutateRandom (int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
 
void GainAbility (int ele, int mtp=100)
 
bool TryNullifyCurse ()
 
void OnAdvanceDay ()
 
void AddFoodHistory (Thing food)
 
int CountNumEaten (Thing food)
 
int GetPietyValue ()
 
void RefreshFaithElement ()
 
void ModTempElement (int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
 
void DamageTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void DamageTempElement (int ele, int p, bool onlyRenew=false)
 
void EnhanceTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void EnhanceTempElement (int ele, int p, bool onlyRenew=false)
 
void DiminishTempElements (int a=1)
 
void CureTempElements (int p, bool body, bool mind)
 
void ClearTempElements ()
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (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 int ApplyProtection (int dmg, int mod=100)
 
void DamageHP (int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
 
void DamageHP (int dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
 
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)
 
void MakeRefFrom (string id)
 
void MakeRefFrom (Card c1, Card c2=null)
 
Thing MakeEgg (bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
 
Thing MakeMilk (bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
 
Thing GiveBirth (Thing t, bool effect)
 
Card SetHidden (bool hide=true)
 
virtual MoveResult _Move (Point p, MoveType type=MoveType.Walk)
 
void MoveImmediate (Point p, bool focus=true, bool cancelAI=true)
 
void Teleport (Point point, bool silent=false, bool force=false)
 
virtual void OnLand ()
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, int req=1)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
void RefreshColor ()
 
ref Color GetRandomColor ()
 
virtual Sprite GetSprite (int dir=0)
 
virtual Sprite GetImageSprite ()
 
void SetImage (Image image, int dir, int idSkin=0)
 
virtual void SetImage (Image image)
 
void ShowEmo (Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
 
void PlaySoundHold (bool spatial=true)
 
void PlaySoundDrop (bool spatial=true)
 
void PlaySoundImpact (bool spatial=true)
 
void PlaySoundDead (bool spatial=true)
 
SoundSource PlaySound (string id, float v=1f, bool spatial=true)
 
void KillAnime ()
 
void PlayAnime (AnimeID id, bool force=false)
 
void PlayAnime (AnimeID id, Point dest, bool force=false)
 
void PlayAnimeLoot ()
 
Effect PlayEffect (string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
 
void PlayEffect (int ele, bool useRenderPos=true, float range=0f)
 
virtual void SetDir (int d)
 
void SetRandomDir ()
 
virtual void LookAt (Card c)
 
virtual void LookAt (Point p)
 
virtual void Rotate (bool reverse=false)
 
void ChangeAltitude (int a)
 
virtual SubPassData GetSubPassData ()
 
void SetFreePos (Point point)
 
void RenderMarker (Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
 
void RecalculateFOV ()
 
bool HasLight ()
 
float GetLightPower ()
 
int GetSightRadius ()
 
int GetLightRadius ()
 
void CalculateFOV ()
 
void SetRandomLightColors ()
 
Fov CreateFov ()
 
void ClearFOV ()
 
virtual void OnSimulateHour (VirtualDate date)
 
void DecayNatural (int hour=1)
 
void CheckJustCooked ()
 
void Decay (int a=10)
 
bool HasTalk (string idTopic)
 
void Talk (string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
 
void TalkRaw (string text, string ref1=null, string ref2=null, bool forceSync=false)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

Public Attributes

int contribution
 
Point orgPos
 
Quest quest
 
Chara ride
 
Chara parasite
 
Chara host
 
ElementContainer tempElements
 
ElementContainer faithElements
 
ElementContainer workElements
 
Party party
 
FactionMemberType memberType
 
List< int > _hobbies
 
List< int > _works
 
WorkSummary _workSummary
 
List< int > _cooldowns
 
List< int > _listAbility
 
List< List< string > > _historyFood
 
PCCData pccData
 
Card held
 
int[] rawSlots
 
GlobalData global
 
string[] _strs = new string[5]
 
int[] _cints = new int[30]
 
BitArray32 _cbits1
 
Chara enemy
 
Chara master
 
Point lastPos = new Point()
 
PathProgress path = new PathProgress()
 
CharaBody body = new CharaBody()
 
CharaAbility _ability
 
Thing ranged
 
Thing nextUse
 
ConSleep conSleep
 
ConSuspend conSuspend
 
Emo2 emoIcon
 
int happiness
 
int turnLastSeen = -100
 
int idleActTimer
 
int combatCount
 
int calmCheckTurn
 
int sharedCheckTurn
 
float idleTimer
 
bool isBerserk
 
bool isDrunk
 
bool isConfused
 
bool isFainted
 
bool isBlind
 
bool isParalyzed
 
bool _isLevitating
 
bool isCreated
 
bool canSeeInvisible
 
bool hasTelepathy
 
bool isWet
 
bool bossText
 
bool ignoreSPAbsorb
 
bool wasInWater
 
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
 
- 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]
 
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 refVal [get, set]
 
int decay [get, set]
 
int altitude [get, set]
 
int hp [get, set]
 
float fx [get, set]
 
float fy [get, set]
 
BlessedState blessedState [get, set]
 
PlaceState _placeState [get, set]
 
int rarityLv [get, set]
 
Rarity rarity [get, set]
 
int encLV [get, set]
 
int posInvX [get, set]
 
int posInvY [get, set]
 
int idSkin [get, set]
 
int feat [get, set]
 
int LV [get, set]
 
int exp [get, set]
 
int tier [get, set]
 
int version [get, set]
 
bool isCensored [get, set]
 
bool isDeconstructing [get, set]
 
bool isDyed [get, set]
 
bool isModified [get, set]
 
bool isNew [get, set]
 
bool isPlayerCreation [get, set]
 
bool ignoreAutoPick [get, set]
 
bool freePos [get, set]
 
bool isHidden [get, set]
 
bool isOn [get, set]
 
bool isNPCProperty [get, set]
 
bool isRestrained [get, set]
 
bool isRoofItem [get, set]
 
bool isMasked [get, set]
 
bool disableAutoToggle [get, set]
 
bool isImported [get, set]
 
bool autoRefuel [get, set]
 
bool ignoreStackHeight [get, set]
 
bool isFloating [get, set]
 
bool isWeightChanged [get, set]
 
bool isFireproof [get, set]
 
bool isAcidproof [get, set]
 
bool isReplica [get, set]
 
bool isSummon [get, set]
 
bool isElemental [get, set]
 
bool isBroken [get, set]
 
bool isSubsetCard [get, set]
 
bool noSnow [get, set]
 
bool noMove [get, set]
 
bool isGifted [get, set]
 
bool isCrafted [get, set]
 
bool isLostProperty [get, set]
 
bool noShadow [get, set]
 
bool noSell [get, set]
 
bool isLeashed [get, set]
 
bool isStolen [get, set]
 
bool isSale [get, set]
 
bool isCopy [get, set]
 
bool isRestocking [get, set]
 
bool hasSpawned [get, set]
 
bool isBackerContent [get]
 
SourceBacker.Row sourceBacker [get]
 
BedType c_bedType [get, set]
 
int c_equippedSlot [get, set]
 
int c_lockLv [get, set]
 
Hostility c_originalHostility [get, set]
 
MinionType c_minionType [get, set]
 
int c_vomit [get, set]
 
bool c_wasInPcParty [get, set]
 
bool c_isImportant [get, set]
 
bool c_lockedHard [get, set]
 
bool c_revealLock [get, set]
 
bool c_isTrained [get, set]
 
bool c_isPrayed [get, set]
 
bool c_isDisableStockUse [get, set]
 
int c_lightColor [get, set]
 
Color LightColor [get]
 
int c_uidZone [get, set]
 
int c_uidRefCard [get, set]
 
int c_priceFix [get, set]
 
int c_priceAdd [get, set]
 
int c_priceCopy [get, set]
 
int c_fixedValue [get, set]
 
int c_dyeMat [get, set]
 
VisitorState visitorState [get, set]
 
RescueState c_rescueState [get, set]
 
BossType c_bossType [get, set]
 
int c_dateStockExpire [get, set]
 
int c_dateDeathLock [get, set]
 
int c_IDTState [get, set]
 
int c_charges [get, set]
 
int c_bill [get, set]
 
int c_invest [get, set]
 
int c_seed [get, set]
 
int c_allowance [get, set]
 
int c_fur [get, set]
 
int c_dateCooked [get, set]
 
int c_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
 
int _Speed
 
bool hasMovedThisTurn
 

Static Private Attributes

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

Additional Inherited Members

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

6335 {
6336 CardRenderer cardRenderer = renderer;
6337 CharaRenderer charaRenderer = new CharaRenderer();
6338 if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
6339 {
6340 base.idSkin = source.skinAntiSpider;
6341 }
6342 if (host != null)
6343 {
6344 charaRenderer.pccData = PCCData.Create("ride");
6345 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6346 charaRenderer.pccData.SetPart("body", "ride", idPart);
6347 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6348 }
6349 else
6350 {
6351 foreach (Condition condition in conditions)
6352 {
6353 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6354 if (rendererReplacer != null)
6355 {
6356 charaRenderer.replacer = rendererReplacer;
6357 charaRenderer.data = rendererReplacer.data;
6358 break;
6359 }
6360 }
6361 if (charaRenderer.replacer == null)
6362 {
6363 charaRenderer.pccData = pccData;
6364 }
6365 }
6366 renderer = charaRenderer;
6367 renderer.SetOwner(this);
6368 if (cardRenderer != null)
6369 {
6370 renderer.SetFirst(first: false, cardRenderer.position);
6371 }
6372 return charaRenderer;
6373 }
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:59
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:602
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(), ActRide.Unride(), and CoreDebug.UpdateInput().

◆ _MakeAlly()

void Chara._MakeAlly ( )
inline

Definition at line 2243 of file Chara.cs.

2244 {
2245 if (EClass.pc.homeBranch != null)
2246 {
2248 }
2249 else
2250 {
2251 SetGlobal();
2253 }
2254 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2255 this.hostility = hostility2;
2256 orgPos = null;
2257 base.c_summonDuration = 0;
2258 base.isSummon = false;
2259 ReleaseMinion();
2260 SetInt(32);
2261 Refresh();
2262 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void SetFaction(Faction f)
Definition: Chara.cs:1401
void ReleaseMinion()
Definition: Chara.cs:2300
Point orgPos
Definition: Chara.cs:21
FactionBranch homeBranch
Definition: Chara.cs:1052
Chara SetGlobal()
Definition: Chara.cs:1459
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 2680 of file Chara.cs.

2681 {
2682 if (isDead)
2683 {
2684 return MoveResult.Fail;
2685 }
2686 if (IsPC)
2687 {
2688 float num = EClass.setting.defaultActPace;
2689 switch (burden.GetPhase())
2690 {
2691 case 3:
2692 num *= 1.5f;
2693 break;
2694 case 4:
2695 num *= 2f;
2696 break;
2697 }
2699 {
2700 int num2 = 30;
2701 if (!EClass.pc.HasElement(408))
2702 {
2704 {
2705 case Weather.Condition.Rain:
2706 num2 += 5;
2707 break;
2708 case Weather.Condition.RainHeavy:
2709 num2 += 10;
2710 num *= 1.5f;
2711 break;
2712 case Weather.Condition.Snow:
2713 num2 += 10;
2714 break;
2715 case Weather.Condition.SnowHeavy:
2716 num2 += 15;
2717 num *= 1.5f;
2718 break;
2719 }
2720 }
2721 if (newPoint.matFloor.id == 48)
2722 {
2723 num2 += 20;
2724 num *= 1.8f;
2725 }
2726 num2 = num2 * 100 / (100 + EvalueMax(240, -20) + EvalueMax(407, -5) * 5);
2727 EClass.world.date.AdvanceMin(num2 * 6);
2728 EClass.player.lastZonePos = null;
2730 int num3 = base.hp;
2731 for (int i = 0; i < num2 * 4; i++)
2732 {
2733 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2734 {
2735 if (!m.isDead)
2736 {
2737 m.TickConditions();
2738 }
2739 });
2740 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2741 {
2742 EClass.player.regionMoveWarned = true;
2743 Msg.Say("regionAbortMove");
2744 EInput.Consume(consumeAxis: true);
2745 SetAI(new NoGoal());
2746 return MoveResult.Fail;
2747 }
2748 }
2749 if (newPoint.cell.CanSuffocate())
2750 {
2751 AddCondition<ConSuffocation>((EClass.pc.Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2752 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2753 if (num4 >= 2)
2754 {
2755 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2756 }
2757 if (!isDead && !HasElement(429))
2758 {
2759 ModExp(200, 1 + num4 * 12);
2760 }
2761 }
2762 EClass.player.regionMoveWarned = false;
2763 if (isDead)
2764 {
2765 return MoveResult.Fail;
2766 }
2767 }
2768 if (num > EClass.setting.defaultActPace * 3f)
2769 {
2770 num = EClass.setting.defaultActPace * 3f;
2771 }
2772 actTime = num;
2773 }
2774 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2775 {
2776 ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2777 if (ride != null)
2778 {
2779 ride.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2780 }
2781 if (parasite != null)
2782 {
2783 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : 5);
2784 }
2785 }
2786 Chara chara = ((ride == null) ? this : ride);
2787 if (!EClass._zone.IsRegion || chara.IsPC)
2788 {
2789 bool flag = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2790 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2791 {
2792 flag = true;
2793 }
2794 if (flag && newPoint.Distance(pos) <= 1)
2795 {
2796 Point randomNeighbor = pos.GetRandomNeighbor();
2797 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2798 {
2799 newPoint = randomNeighbor;
2800 if (isDrunk)
2801 {
2802 Talk("drunk");
2803 }
2804 }
2805 }
2806 }
2807 if (newPoint.x != pos.x || newPoint.z != pos.z)
2808 {
2809 LookAt(newPoint);
2810 }
2811 CellEffect effect = base.Cell.effect;
2812 if (effect != null && effect.id == 7)
2813 {
2814 CellEffect effect2 = base.Cell.effect;
2815 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2816 {
2817 Say("abWeb_caught", this);
2818 PlaySound("web");
2819 effect2.power = effect2.power * 3 / 4;
2820 renderer.PlayAnime(AnimeID.Shiver);
2821 return MoveResult.Fail;
2822 }
2823 Say("abWeb_pass", this);
2824 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2825 }
2826 if (IsPC)
2827 {
2828 if (EClass._zone.IsRegion)
2829 {
2831 }
2832 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2833 {
2835 }
2836 }
2837 if (newPoint.cell.hasDoor)
2838 {
2839 foreach (Thing thing in pos.Things)
2840 {
2841 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2842 {
2843 if (base.INT < 10)
2844 {
2845 return MoveResult.Fail;
2846 }
2847 traitDoor.TryOpenLock(this);
2848 return MoveResult.Door;
2849 }
2850 }
2851 }
2852 Cell cell = newPoint.cell;
2853 Cell cell2 = pos.cell;
2854 bool flag2 = cell.HasLiquid && !IsLevitating;
2855 bool hasBridge = cell.HasBridge;
2856 bool hasRamp = cell.HasRamp;
2857 bool flag3 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2858 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2859 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2860 bool flag4 = cell.IsTopWater && !cell.isFloating;
2861 if (!EClass._zone.IsRegion)
2862 {
2863 if (cell.hasDoorBoat)
2864 {
2865 tileRow = FLOOR.sourceWood;
2866 row = MATERIAL.sourceOak;
2867 flag4 = false;
2868 }
2869 else if (flag3 && !tileRow.ignoreSnow)
2870 {
2871 if (tileRow.tileType.IsWater)
2872 {
2873 tileRow = FLOOR.sourceIce;
2874 row = MATERIAL.sourceIce;
2875 }
2876 else
2877 {
2878 tileRow = FLOOR.sourceSnow;
2879 row = MATERIAL.sourceSnow;
2880 }
2881 flag4 = false;
2882 }
2883 }
2884 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
2885 {
2886 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
2887 }
2888 if (isSynced)
2889 {
2890 string text = ((flag2 || flag4) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
2891 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
2892 {
2893 text = cell.matObj.soundFoot;
2894 }
2895 if (IsPC)
2896 {
2897 foreach (Thing thing2 in newPoint.Things)
2898 {
2899 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
2900 {
2901 text = thing2.material.soundFoot;
2902 }
2903 }
2904 }
2905 if (!text.IsEmpty())
2906 {
2907 SoundManager.altLastData = IsPC;
2908 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
2909 }
2910 if (!flag4)
2911 {
2913 PCOrbit pcOrbit = EClass.screen.pcOrbit;
2914 bool flag5 = scene.actionMode.gameSpeed > 1f;
2915 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
2916 scene.psFoot.startColor = row.matColor;
2917 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag5) ? 1 : 2));
2918 if (flag5 && IsPC)
2919 {
2920 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
2921 scene.psSmoke.Emit(pcOrbit.emitSmoke);
2922 }
2923 }
2924 if (flag2 || flag4)
2925 {
2926 Effect.Get("ripple").Play(0.4f * actTime * EClass.scene.actionMode.gameSpeed, newPoint);
2927 }
2928 }
2929 lastPos.Set(pos);
2930 if (type != MoveType.Force)
2931 {
2932 if (newPoint.HasChara && ai.Current.PushChara)
2933 {
2934 TryPush(newPoint);
2935 }
2936 if (newPoint.HasChara && newPoint.Charas.Count == 1)
2937 {
2938 Chara chara2 = newPoint.Charas[0];
2939 if (CanReplace(chara2))
2940 {
2941 chara2.MoveByForce(lastPos, this);
2942 if (chara.IsPC)
2943 {
2944 Say("replace_pc", chara, chara2);
2945 }
2946 }
2947 }
2948 }
2949 if (cell.hasDoor)
2950 {
2951 foreach (Thing thing3 in newPoint.Things)
2952 {
2953 if (thing3.trait is TraitDoor traitDoor2)
2954 {
2955 traitDoor2.TryOpen(this);
2956 }
2957 }
2958 }
2959 EClass._zone.map.MoveCard(newPoint, this);
2960 SyncRide();
2962 {
2963 foreach (Chara member in EClass.pc.party.members)
2964 {
2965 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
2966 {
2967 member.TryMoveTowards(EClass.pc.pos);
2968 }
2969 }
2970 }
2972 {
2974 }
2975 if (IsPC)
2976 {
2977 PlaySound("Footstep/Extra/pcfootstep");
2978 if (pos.HasThing)
2979 {
2980 foreach (Card item in pos.ListCards())
2981 {
2982 if (!item.isThing || item.placeState != 0 || item.ignoreAutoPick)
2983 {
2984 continue;
2985 }
2987 {
2989 ContainerFlag containerFlag = item.category.GetRoot().id.ToEnum<ContainerFlag>();
2990 if (containerFlag == ContainerFlag.none)
2991 {
2992 containerFlag = ContainerFlag.other;
2993 }
2994 if ((dataPick.noRotten && item.IsDecayed) || (dataPick.onlyRottable && item.trait.Decay == 0))
2995 {
2996 continue;
2997 }
2998 if (dataPick.userFilter)
2999 {
3000 switch (dataPick.IsFilterPass(item.GetName(NameStyle.Full, 1)))
3001 {
3002 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
3003 Pick(item.Thing);
3004 continue;
3005 case Window.SaveData.FilterResult.Block:
3006 continue;
3007 }
3008 }
3009 if (dataPick.advDistribution)
3010 {
3011 foreach (int cat in dataPick.cats)
3012 {
3013 if (item.category.uid == cat)
3014 {
3015 Pick(item.Thing);
3016 }
3017 }
3018 }
3019 else if (!dataPick.flag.HasFlag(containerFlag))
3020 {
3021 Pick(item.Thing);
3022 }
3023 }
3024 else
3025 {
3026 Pick(item.Thing);
3027 }
3028 }
3029 }
3030 if (EClass._zone.IsRegion)
3031 {
3033 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
3034 {
3035 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() ?? "");
3036 }
3037 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
3038 {
3040 Msg.Say(Lang.GetList("walk_snow").RandomItem());
3041 }
3042 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
3043 {
3045 Msg.Say(Lang.GetList("walk_storm").RandomItem());
3046 }
3047 }
3049 }
3050 if (IsPCC)
3051 {
3052 int num5 = Mathf.Abs(cell2.topHeight - cell.topHeight);
3053 if ((num5 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
3054 {
3055 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num5 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
3056 }
3057 else
3058 {
3059 float surfaceHeight = cell2.GetSurfaceHeight();
3060 float surfaceHeight2 = cell.GetSurfaceHeight();
3061 num5 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3062 if (num5 >= 15)
3063 {
3064 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num5 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
3065 }
3066 }
3067 }
3068 lastPos.Things.ForeachReverse(delegate(Thing t)
3069 {
3070 t.trait.OnSteppedOut(this);
3071 });
3072 if (!IsPC)
3073 {
3074 pos.Things.ForeachReverse(delegate(Thing t)
3075 {
3076 t.trait.OnStepped(this);
3077 });
3078 }
3079 if (CanDestroyPath())
3080 {
3082 }
3083 if (IsPC)
3084 {
3085 if (renderer.anime == null && renderer.replacer != null)
3086 {
3088 }
3090 {
3091 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
3092 {
3093 EClass.player.flags.isShoesOff = false;
3094 EClass.pc.Say("shoes_on", EClass.pc);
3095 EClass.pc.SetPCCState(PCCState.Normal);
3096 }
3097 }
3098 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
3099 {
3100 EClass.player.flags.isShoesOff = true;
3101 EClass.pc.Say("shoes_off", EClass.pc);
3102 EClass.pc.SetPCCState(PCCState.ShoesOff);
3103 }
3104 }
3105 hasMovedThisTurn = true;
3106 return MoveResult.Success;
3107 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
ContainerFlag
Definition: ContainerFlag.cs:5
NameStyle
Definition: NameStyle.cs:2
AIAct Current
Definition: AIAct.cs:103
virtual bool PushChara
Definition: AIAct.cs:82
static void Search(Chara c, bool manual=false)
Definition: ActWait.cs:43
virtual float gameSpeed
Definition: ActionMode.cs:119
virtual bool isPCC
Definition: CardActor.cs:39
void PlayAnime(AnimeID id, bool force)
TransAnime anime
Definition: CardRenderer.cs:23
virtual void NextFrame()
CardActor actor
Definition: CardRenderer.cs:11
Definition: Card.cs:11
int EvalueMax(int ele, int min=0)
Definition: Card.cs:2547
void DamageHP(int dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:3955
bool HasElement(int ele, int req=1)
Definition: Card.cs:5638
SourceMaterial.Row material
Definition: Card.cs:2013
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:5852
int c_lockLv
Definition: Card.cs:938
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6402
Point pos
Definition: Card.cs:57
Trait trait
Definition: Card.cs:51
MoveType
Definition: Card.cs:20
MoveResult
Definition: Card.cs:13
bool IsInstalled
Definition: Card.cs:2343
int Evalue(int ele)
Definition: Card.cs:2533
int Dist(Card c)
Definition: Card.cs:7315
void ModExp(string alias, int a)
Definition: Card.cs:2610
bool isLeashed
Definition: Card.cs:828
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6499
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:3601
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:2348
bool IsInCombat
Definition: Chara.cs:862
bool HasCondition(string alias)
Definition: Chara.cs:8976
AIAct SetAI(AIAct g)
Definition: Chara.cs:8449
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:2361
void DestroyPath(Point pos)
Definition: Chara.cs:3109
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:3220
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2546
Stats burden
Definition: Chara.cs:1126
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2554
void SyncRide()
Definition: Chara.cs:3817
bool isDead
Definition: Chara.cs:387
override void LookAt(Card c)
Definition: Chara.cs:3465
bool isConfused
Definition: Chara.cs:126
override bool IsPCC
Definition: Chara.cs:680
void TryPush(Point point)
Definition: Chara.cs:3153
void SetPCCState(PCCState state)
Definition: Chara.cs:6375
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:338
int distanceTravel
Definition: Player.cs:816
Flags flags
Definition: Player.cs:1014
Window.SaveData dataPick
Definition: Player.cs:954
bool regionMoveWarned
Definition: Player.cs:1077
Definition: Point.cs:9
SourceMaterial.Row matFloor
Definition: Point.cs:57
SourceBlock.Row sourceBlock
Definition: Point.cs:63
List< Card > ListCards(bool includeMasked=false)
Definition: Point.cs:1035
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:973
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:491
virtual bool IsRegion
Definition: Spatial.cs:503
virtual string Name
Definition: Spatial.cs:497
SourceZone.Row source
Definition: Spatial.cs:441
List< Spatial > children
Definition: Spatial.cs:37
override int GetPhase()
Definition: Stats.cs:117
Definition: Thing.cs:8
override SourcePref Pref
Definition: Thing.cs:50
bool ignoreSnow
Definition: TileRow.cs:6
string soundFoot
Definition: TileRow.cs:14
virtual bool IsWater
Definition: TileType.cs:163
virtual void OnSteppedOut(Chara c)
Definition: Trait.cs:1071
virtual bool IsChangeFloorHeight
Definition: Trait.cs:73
virtual void OnStepped(Chara c)
Definition: Trait.cs:1067
Card owner
Definition: Trait.cs:27
Definition: Util.cs:10
static float GetAngle(Vector3 self, Vector3 target)
Definition: Util.cs:121
Condition
Definition: Weather.cs:16
Condition CurrentCondition
Definition: Weather.cs:79
FilterResult IsFilterPass(string text)
Definition: Window.cs:498
ContainerFlag flag
Definition: Window.cs:267
HashSet< int > cats
Definition: Window.cs:119
bool userFilter
Definition: Window.cs:132
bool noRotten
Definition: Window.cs:439
bool advDistribution
Definition: Window.cs:427
Definition: Window.cs:13
GameDate date
Definition: World.cs:6
Weather weather
Definition: World.cs:12
virtual bool PetFollow
Definition: Zone.cs:282
override int DangerLv
Definition: Zone.cs:107
bool IsPCFaction
Definition: Zone.cs:470
virtual bool KeepAllyDistance
Definition: Zone.cs:297
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 6910 of file Chara.cs.

6911 {
6912 EClass.Sound.Play("pop_drama");
6913 if (book == "_chara" && IsPC)
6914 {
6915 step = "pc";
6916 }
6917 return LayerDrama.Activate(book, sheet, step, this, null, tag);
6918 }
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 8824 of file Chara.cs.

8825 {
8826 c.owner = this;
8827 if (!(c is ConBurning))
8828 {
8829 if (c is ConBleed && ResistLv(964) >= 3)
8830 {
8831 return null;
8832 }
8833 }
8834 else if (ResistLv(950) >= 3)
8835 {
8836 return null;
8837 }
8839 {
8840 if (c.GainResistFactor >= 400)
8841 {
8842 c.power /= 2;
8843 }
8844 ResistCon(c);
8845 if (c.power <= 0)
8846 {
8847 return null;
8848 }
8849 }
8850 if (!force)
8851 {
8852 if (c.source.negate.Length != 0)
8853 {
8854 string[] negate = c.source.negate;
8855 foreach (string text in negate)
8856 {
8857 if (HasElement(text))
8858 {
8859 return null;
8860 }
8861 }
8862 }
8863 Element defenseAttribute = c.GetDefenseAttribute(this);
8864 if (defenseAttribute != null)
8865 {
8866 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
8867 }
8868 if (c.source.resistance.Length != 0)
8869 {
8870 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
8871 if (num > 0)
8872 {
8873 c.power /= num * num + 1;
8874 if (c.power <= 40)
8875 {
8876 return null;
8877 }
8878 }
8879 }
8880 c.power = c.EvaluatePower(c.power);
8881 if (c.power <= 0)
8882 {
8883 return null;
8884 }
8885 }
8886 for (int j = 0; j < conditions.Count; j++)
8887 {
8888 if (conditions[j].id != c.id)
8889 {
8890 continue;
8891 }
8892 if (c.Type == ConditionType.Stance || c.IsToggle)
8893 {
8894 conditions[j].Kill();
8895 return null;
8896 }
8897 if (conditions[j].CanStack(c))
8898 {
8899 if (conditions[j].WillOverride)
8900 {
8901 conditions[j].Kill(silent: true);
8902 continue;
8903 }
8904 if (CanGainConResist)
8905 {
8906 AddResistCon(c);
8907 }
8908 conditions[j].OnStacked(c.power);
8909 conditions[j].OnStartOrStack();
8910 conditions[j].PlayEffect();
8911 }
8912 if (!conditions[j].AllowMultipleInstance)
8913 {
8914 return null;
8915 }
8916 }
8917 foreach (Condition condition in conditions)
8918 {
8919 if (condition.TryNullify(c))
8920 {
8921 return null;
8922 }
8923 }
8924 int num2 = c.EvaluateTurn(c.power);
8925 if (num2 == 0)
8926 {
8927 return null;
8928 }
8929 c.value = num2;
8930 conditions.Add(c);
8931 if (CanGainConResist)
8932 {
8933 AddResistCon(c);
8934 }
8935 c.SetOwner(this);
8936 c.Start();
8937 SetDirtySpeed();
8938 if (c.ShouldRefresh)
8939 {
8940 Refresh();
8941 }
8942 if (c.CancelAI)
8943 {
8944 ai.Cancel();
8945 }
8946 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
8947 {
8949 }
8950 if (c.SyncRide && (ride != null || parasite != null))
8951 {
8952 if (ride != null)
8953 {
8955 }
8956 if (parasite != null)
8957 {
8959 }
8960 }
8961 return c;
8962 }
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:552
int ResistLv(int res)
Definition: Card.cs:5633
void SetDirtySpeed()
Definition: Chara.cs:1806
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:8819
bool CanGainConResist
Definition: Chara.cs:1143
void AddResistCon(Condition con)
Definition: Chara.cs:9181
void ResistCon(Condition con)
Definition: Chara.cs:9201
static Condition Create(string alias, int power=100, Action< Condition > onCreate=null)
Definition: Condition.cs:46
static SourceManager sources
Definition: EClass.cs:42
int Value
Definition: ELEMENT.cs:290
void EndTurn(bool consume=true)
Definition: Player.cs:1984
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 8814 of file Chara.cs.

8814 : Condition
8815 {
8816 return AddCondition(typeof(T).Name, p, force);
8817 }
string Name
Definition: Card.cs:2099

◆ AddCooldown()

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

Definition at line 8268 of file Chara.cs.

8269 {
8270 if (_cooldowns == null)
8271 {
8272 _cooldowns = new List<int>();
8273 }
8274 if (turns != 0)
8275 {
8276 _cooldowns.Add(idEle * 1000 + turns);
8277 return;
8278 }
8279 SourceElement.Row row = EClass.sources.elements.map[idEle];
8280 if (row.cooldown > 0)
8281 {
8282 _cooldowns.Add(idEle * 1000 + row.cooldown);
8283 }
8284 }
List< int > _cooldowns
Definition: Chara.cs:58

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

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

◆ AddFoodHistory()

void Chara.AddFoodHistory ( Thing  food)
inline

Definition at line 9622 of file Chara.cs.

9623 {
9624 if (!IsPCFaction || !IsGlobal)
9625 {
9626 _historyFood = null;
9627 return;
9628 }
9629 if (_historyFood == null)
9630 {
9631 _historyFood = new List<List<string>>
9632 {
9633 new List<string>()
9634 };
9635 }
9636 if (_historyFood[0].Count < 5)
9637 {
9638 _historyFood[0].Add(food.id);
9639 }
9640 }
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 8649 of file Chara.cs.

8650 {
8651 foreach (int hobby in _hobbies)
8652 {
8653 if (hobby == id)
8654 {
8655 return;
8656 }
8657 }
8658 _hobbies.Add(id);
8659 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2138 of file Chara.cs.

2139 {
2140 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2141 body.AddBodyPart(ele);
2142 if (msg)
2143 {
2144 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
2145 PlaySound("offering");
2146 }
2147 }
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:261
CharaBody body
Definition: Chara.cs:94
static SourceElement.Row Get(int id)
Definition: ELEMENT.cs:399

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

Referenced by Feat.Apply().

◆ AddResistCon()

void Chara.AddResistCon ( Condition  con)
inline

Definition at line 9181 of file Chara.cs.

9182 {
9183 if (con.power > 0 && con.GainResistFactor > 0)
9184 {
9185 int key = con.id;
9186 if (resistCon == null)
9187 {
9188 resistCon = new Dictionary<int, int>();
9189 }
9190 if (resistCon.ContainsKey(key))
9191 {
9192 resistCon[key] += con.power * con.GainResistFactor / 100;
9193 }
9194 else
9195 {
9196 resistCon[key] = con.power * con.GainResistFactor / 100;
9197 }
9198 }
9199 }
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 8661 of file Chara.cs.

8662 {
8663 foreach (int work in _works)
8664 {
8665 if (work == id)
8666 {
8667 return;
8668 }
8669 }
8670 _works.Add(id);
8671 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5010 of file Chara.cs.

5011 {
5012 if (!IsPC)
5013 {
5014 return;
5015 }
5016 int currency = GetCurrency();
5017 if (currency > 0)
5018 {
5019 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
5020 if (num <= 0)
5021 {
5022 num = 1;
5023 }
5024 Msg.Say("panaltyMoney", this, Lang._currency(num));
5025 ModCurrency(-num);
5027 }
5028 foreach (Element value in EClass.pc.elements.dict.Values)
5029 {
5030 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
5031 {
5032 EClass.pc.elements.ModExp(value.id, -500f);
5033 }
5034 }
5035 }
@ currency
ElementContainerCard elements
Definition: Card.cs:39
int GetCurrency(string id="money")
Definition: Card.cs:3867
void ModCurrency(int a, string id="money")
Definition: Card.cs:3853
void ModExp(int ele, float a, bool chain=false)
Dictionary< int, Element > dict
int id
Definition: ELEMENT.cs:248
bool IsMainAttribute
Definition: ELEMENT.cs:381
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:162
static Thing CreateCurrency(int a, string id="money")
Definition: ThingGen.cs:37
Card AddCard(Card t, Point point)
Definition: Zone.cs:1937

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

1974 {
1975 switch (tag)
1976 {
1977 case EditorTag.HostilityNeutral:
1978 {
1979 Hostility hostility2 = (base.c_originalHostility = Hostility.Neutral);
1980 this.hostility = hostility2;
1981 break;
1982 }
1983 case EditorTag.HostilityEnemy:
1984 {
1985 Hostility hostility2 = (base.c_originalHostility = Hostility.Enemy);
1986 this.hostility = hostility2;
1987 break;
1988 }
1989 case EditorTag.HostilityFriend:
1990 {
1991 Hostility hostility2 = (base.c_originalHostility = Hostility.Friend);
1992 this.hostility = hostility2;
1993 break;
1994 }
1995 case EditorTag.Male:
1996 bio.SetGender(2);
1997 base.c_idPortrait = Portrait.GetRandomPortrait(2, GetIdPortraitCat());
1998 break;
1999 case EditorTag.Female:
2000 bio.SetGender(1);
2001 base.c_idPortrait = Portrait.GetRandomPortrait(1, GetIdPortraitCat());
2002 break;
2003 case EditorTag.baby:
2004 SetFeat(1232);
2005 break;
2006 }
2007 base.ApplyEditorTags(tag);
2008 }
EditorTag
Definition: EditorTag.cs:2
void SetGender(int g)
Definition: Biography.cs:469
Biography bio
Definition: Card.cs:42
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:9377
string GetIdPortraitCat()
Definition: Chara.cs:7748
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 2100 of file Chara.cs.

2101 {
2102 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
2103 if (IsPCC)
2104 {
2105 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
2106 }
2107 }
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 2186 of file Chara.cs.

2187 {
2188 string[] array = race.figure.Split('|');
2189 foreach (string s in array)
2190 {
2191 int num = ParseBodySlot(s);
2192 if (num != -1)
2193 {
2194 if (remove)
2195 {
2196 body.RemoveBodyPart(num);
2197 }
2198 else
2199 {
2200 body.AddBodyPart(num);
2201 }
2202 }
2203 }
2205 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV, remove, applyFeat: true);
2206 }
void RefreshBodyParts()
Definition: CharaBody.cs:287
void RemoveBodyPart(int ele)
Definition: CharaBody.cs:316
int ParseBodySlot(string s)
Definition: Chara.cs:2121

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

1775 {
1776 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1777 if (num < 0)
1778 {
1779 num = 1000;
1780 }
1782 {
1783 num = 0;
1784 }
1785 burden.Set(num);
1786 SetDirtySpeed();
1787 }
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 5868 of file Chara.cs.

5869 {
5870 if (!(e is Spell))
5871 {
5872 return 100;
5873 }
5874 if (!IsPC)
5875 {
5876 int num2 = 95;
5877 if (host != null)
5878 {
5879 if (host.ride == this)
5880 {
5881 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
5882 }
5883 if (host.parasite == this)
5884 {
5885 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
5886 }
5887 }
5888 return num2;
5889 }
5890 int num3 = Evalue(304);
5891 if (!IsPCFaction)
5892 {
5893 num3 = Mathf.Max(num3, base.LV + 5);
5894 }
5895 int num4 = 0;
5896 int num5 = 0;
5897 bool num6 = GetArmorSkill() == 122;
5898 AttackStyle attackStyle = body.GetAttackStyle();
5899 if (num6)
5900 {
5901 num4 = 20 - Evalue(122) / 5;
5902 num5 += 10 - Evalue(1654) * 4;
5903 }
5904 else
5905 {
5906 num4 = 10 - Evalue(120) / 5;
5907 }
5908 if (num4 < 5)
5909 {
5910 num4 = 5;
5911 }
5912 if (ride != null)
5913 {
5914 num4 += 5;
5915 }
5916 if (parasite != null)
5917 {
5918 num4 += 10;
5919 }
5920 if (attackStyle == AttackStyle.TwoWield)
5921 {
5922 num4 += 5;
5923 }
5924 if (attackStyle == AttackStyle.Shield)
5925 {
5926 num4 += 5;
5927 num5 += 10 - Evalue(1654) * 4;
5928 }
5929 if (isConfused)
5930 {
5931 num4 += 10000;
5932 }
5933 if (HasCondition<ConDim>())
5934 {
5935 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
5936 }
5937 if (num > 1)
5938 {
5939 num4 += 5 * num;
5940 }
5941 if (num5 < 0)
5942 {
5943 num5 = 0;
5944 }
5945 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
5946 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:433
override int GetArmorSkill()
Definition: Chara.cs:7497
int EvalueRiding()
Definition: Chara.cs:5859
SourceElement.Row source
Definition: ELEMENT.cs:271
Definition: SPELL.cs:527

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

Referenced by Element._WriteNote().

◆ CalculateMaxStamina()

void Chara.CalculateMaxStamina ( )
inline

Definition at line 1954 of file Chara.cs.

1955 {
1956 int num = base.END;
1957 int num2 = 0;
1958 foreach (Element value in elements.dict.Values)
1959 {
1960 if (value.source.category == "skill")
1961 {
1962 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
1963 }
1964 }
1965 num2 = EClass.curve(num, 30, 10, 60);
1966 if (num2 < 10)
1967 {
1968 num2 = 10;
1969 }
1970 _maxStamina = num2 + 15;
1971 }
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:292
int vBase
Definition: ELEMENT.cs:250

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

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

◆ CallHelp()

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

Definition at line 6130 of file Chara.cs.

6131 {
6132 foreach (Chara chara in EClass._map.charas)
6133 {
6134 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6135 {
6136 chara.GoHostile(tg);
6137 }
6138 }
6139 }
Hostility OriginalHostility
Definition: Chara.cs:469
void GoHostile(Card _tg)
Definition: Chara.cs:6024
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 7836 of file Chara.cs.

7837 {
7838 if (things.IsFull())
7839 {
7840 return false;
7841 }
7842 if (t.c_isImportant)
7843 {
7844 return false;
7845 }
7846 if (t.id == "1084")
7847 {
7848 return true;
7849 }
7850 if (t.trait is TraitBookSecret)
7851 {
7852 return true;
7853 }
7854 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
7855 {
7856 return false;
7857 }
7858 return true;
7859 }
Rarity
Definition: Rarity.cs:2
string id
Definition: Card.cs:33
Rarity rarity
Definition: Card.cs:300
bool c_isImportant
Definition: Card.cs:998
ThingContainer things
Definition: Card.cs:36
bool IsContainer
Definition: Card.cs:2051
bool IsFull(int y=0)
virtual bool CanExtendBuild
Definition: Trait.cs:168
virtual bool CanBeDestroyed
Definition: Trait.cs:292
virtual bool CanOnlyCarry
Definition: Trait.cs:290

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

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

◆ CanAcceptItem()

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

Definition at line 7815 of file Chara.cs.

7816 {
7817 if (EClass.debug.enable)
7818 {
7819 return true;
7820 }
7821 if (!IsValidGiftWeight(t, num))
7822 {
7823 return false;
7824 }
7825 if (t.c_isImportant)
7826 {
7827 return false;
7828 }
7829 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
7830 {
7831 return false;
7832 }
7833 return true;
7834 }
SourceCategory.Row category
Definition: Card.cs:2011
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:7805
bool enable
Definition: CoreDebug.cs:286

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

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

◆ CanAutoPick()

bool Chara.CanAutoPick ( Card  c)
inline

Definition at line 4144 of file Chara.cs.

4145 {
4146 return true;
4147 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2264 of file Chara.cs.

2265 {
2266 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2267 {
2268 return false;
2269 }
2270 if (HasElement(1222))
2271 {
2272 return false;
2273 }
2274 return true;
2275 }
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:3575

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

2349 {
2350 if (!IsMultisize)
2351 {
2352 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2353 {
2354 return !(EClass._zone is Zone_Town);
2355 }
2356 return false;
2357 }
2358 return true;
2359 }

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

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

◆ CanEat()

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

Definition at line 7258 of file Chara.cs.

7259 {
7260 if (t.IsDecayed && !HasElement(480))
7261 {
7262 return false;
7263 }
7264 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7265 {
7266 return false;
7267 }
7268 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7269 {
7270 return t.trait.CanEat(this);
7271 }
7272 return false;
7273 }
CTAG
Definition: CTAG.cs:2
bool IsNegativeGift
Definition: Card.cs:2358
bool IsDecayed
Definition: Card.cs:2249
bool HasTag(CTAG tag)
Definition: Card.cs:2557
bool isEquipped
Definition: Thing.cs:17
virtual bool CanEat(Chara c)
Definition: Trait.cs:969

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

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

◆ CanEquipRanged()

bool Chara.CanEquipRanged ( Thing  t)
inline

Definition at line 7396 of file Chara.cs.

7397 {
7398 return !body.IsTooHeavyToEquip(t);
7399 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:156

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 7736 of file Chara.cs.

7737 {
7738 foreach (ActList.Item item in ability.list.items)
7739 {
7740 if (item.act.id == 6630)
7741 {
7742 return true;
7743 }
7744 }
7745 return false;
7746 }
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 2455 of file Chara.cs.

2456 {
2457 return CanInteractTo(c.pos);
2458 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2455

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

2461 {
2462 if (!p.IsValid)
2463 {
2464 return false;
2465 }
2466 if (EClass._map.cells[p.x, p.z].blocked)
2467 {
2468 return true;
2469 }
2470 if (!IsMultisize)
2471 {
2472 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2473 if (EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2474 {
2475 return false;
2476 }
2477 if (p.x != pos.x && p.z != pos.z)
2478 {
2479 Cell[,] cells = EClass._map.cells;
2480 int x = p.x;
2481 int z = pos.z;
2482 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2483 if (cells[pos.x, pos.z].weights[num2] == 0)
2484 {
2485 return false;
2486 }
2487 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2488 if (cells[p.x, p.z].weights[num2] == 0)
2489 {
2490 return false;
2491 }
2492 x = pos.x;
2493 z = p.z;
2494 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2495 if (cells[pos.x, pos.z].weights[num2] == 0)
2496 {
2497 return false;
2498 }
2499 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2500 if (cells[p.x, p.z].weights[num2] == 0)
2501 {
2502 return false;
2503 }
2504 }
2505 }
2506 return true;
2507 }
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 4139 of file Chara.cs.

4140 {
4141 return true;
4142 }

◆ CanMoveTo()

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

Definition at line 2361 of file Chara.cs.

2362 {
2363 if (!p.IsValid)
2364 {
2365 return false;
2366 }
2367 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2368 if (allowDestroyPath && CanDestroyPath())
2369 {
2370 if (!p.IsInBounds)
2371 {
2372 return false;
2373 }
2374 }
2375 else
2376 {
2377 if (EClass._map.cells[p.x, p.z].blocked || EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2378 {
2379 return false;
2380 }
2381 if (p.x != pos.x && p.z != pos.z)
2382 {
2383 Cell[,] cells = EClass._map.cells;
2384 int x = p.x;
2385 int z = pos.z;
2386 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2387 if (cells[pos.x, pos.z].weights[num2] == 0)
2388 {
2389 return false;
2390 }
2391 if (cells[x, z].blocked)
2392 {
2393 return false;
2394 }
2395 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2396 if (cells[p.x, p.z].weights[num2] == 0)
2397 {
2398 return false;
2399 }
2400 x = pos.x;
2401 z = p.z;
2402 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2403 if (cells[pos.x, pos.z].weights[num2] == 0)
2404 {
2405 return false;
2406 }
2407 if (cells[x, z].blocked)
2408 {
2409 return false;
2410 }
2411 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2412 if (cells[p.x, p.z].weights[num2] == 0)
2413 {
2414 return false;
2415 }
2416 }
2417 }
2418 if (IsPC)
2419 {
2420 if (IsEnemyOnPath(p))
2421 {
2422 return false;
2423 }
2424 }
2425 else if (p.HasChara && !IsMultisize && !CanReplace(p.FirstChara))
2426 {
2427 return false;
2428 }
2429 return true;
2430 }
bool IsEnemyOnPath(Point p, bool cancelAI=true)
Definition: Chara.cs:2432
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 4149 of file Chara.cs.

4150 {
4151 if (c.isDestroyed)
4152 {
4153 return false;
4154 }
4155 Card rootCard = c.GetRootCard();
4156 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
4157 {
4158 return false;
4159 }
4160 if (rootCard != this && things.IsFull(c.Thing))
4161 {
4162 return false;
4163 }
4164 return true;
4165 }
bool isDestroyed
Definition: Card.cs:73
bool ExistsOnMap
Definition: Card.cs:2047
virtual Thing Thing
Definition: Card.cs:2020
Card GetRootCard()
Definition: Card.cs:3324

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

3221 {
3223 {
3224 return false;
3225 }
3226 if (IsPC)
3227 {
3228 return true;
3229 }
3230 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3231 {
3232 return false;
3233 }
3234 if (!IsHostile(c))
3235 {
3236 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3237 {
3238 return true;
3239 }
3240 if (DestDist < c.DestDist)
3241 {
3242 return true;
3243 }
3244 if (IsPCParty && !c.IsPCParty)
3245 {
3246 return true;
3247 }
3248 if (IsPCFaction && !c.IsPCParty)
3249 {
3250 return true;
3251 }
3252 }
3253 return false;
3254 }
bool IsPCFactionOrMinion
Definition: Card.cs:2234
bool isSummon
Definition: Card.cs:696
int c_uidMaster
Definition: Card.cs:1423
bool noMove
Definition: Card.cs:756
new TraitChara trait
Definition: Chara.cs:501
override bool IsPCParty
Definition: Chara.cs:613
int DestDist
Definition: Chara.cs:984
bool IsHostile()
Definition: Chara.cs:6225
bool IsEscorted()
Definition: Chara.cs:2332
bool Equals(int _x, int _z)
Definition: Point.cs:944
virtual bool CanBePushed
Definition: TraitChara.cs:125

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

4897 {
4898 return EClass.world.date.IsExpired(base.c_dateDeathLock);
4899 }
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 1200 of file Chara.cs.

1201 {
1202 if (c == this)
1203 {
1204 return true;
1205 }
1206 if (!c.pos.IsValid)
1207 {
1208 return false;
1209 }
1210 if (c.isChara)
1211 {
1213 {
1214 return true;
1215 }
1216 if (c.isHidden && c != this && !canSeeInvisible)
1217 {
1218 return false;
1219 }
1220 }
1221 if (IsPC)
1222 {
1223 if (fov != null)
1224 {
1225 return fov.lastPoints.ContainsKey(c.pos.index);
1226 }
1227 return false;
1228 }
1229 return true;
1230 }
virtual Chara Chara
Definition: Card.cs:2032
Fov fov
Definition: Card.cs:55
virtual bool isChara
Definition: Card.cs:2045
bool isHidden
Definition: Card.cs:516
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(), 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 1241 of file Chara.cs.

1242 {
1243 if (dist == -1)
1244 {
1245 dist = pos.Distance(p);
1246 }
1247 if (dist > GetSightRadius())
1248 {
1249 return false;
1250 }
1251 if (IsPC)
1252 {
1253 if (fov != null)
1254 {
1255 return fov.lastPoints.ContainsKey(p.index);
1256 }
1257 return false;
1258 }
1259 return Los.IsVisible(pos, p);
1260 }
int GetSightRadius()
Definition: Card.cs:6097
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 1183 of file Chara.cs.

1184 {
1185 if (!p.IsValid || p.IsHidden)
1186 {
1187 return false;
1188 }
1189 if (IsPC)
1190 {
1191 if (fov != null)
1192 {
1193 return fov.lastPoints.ContainsKey(p.index);
1194 }
1195 return false;
1196 }
1197 return true;
1198 }
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 1281 of file Chara.cs.

1282 {
1283 if (EClass._zone.events.GetEvent<ZoneEventQuest>() != null)
1284 {
1285 return false;
1286 }
1287 if (!EClass.debug.godMode && sleepiness.GetPhase() == 0)
1288 {
1289 return stamina.GetPhase() <= 1;
1290 }
1291 return true;
1292 }
Stats sleepiness
Definition: Chara.cs:1138
Stats stamina
Definition: Chara.cs:1128
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 2109 of file Chara.cs.

2110 {
2111 ApplyJob(remove: true);
2112 base.c_idJob = idNew;
2113 _job = null;
2114 ApplyJob();
2115 if (IsPCC)
2116 {
2117 PCC.Get(pccData).Build();
2118 }
2119 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:2100
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 6718 of file Chara.cs.

6719 {
6720 memberType = type;
6721 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2208 of file Chara.cs.

2209 {
2210 ApplyRace(remove: true);
2211 base.c_idRace = idNew;
2212 _race = null;
2213 ApplyRace();
2214 ChangeMaterial(race.material);
2215 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2186
SourceRace.Row _race
Definition: Chara.cs:158

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

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

◆ ChangeRarity()

override void Chara.ChangeRarity ( Rarity  r)
inlinevirtual

Reimplemented from Card.

Definition at line 1388 of file Chara.cs.

1389 {
1390 if (r != base.rarity)
1391 {
1392 base.rarity = r;
1393 if (renderer != null && renderer.isSynced)
1394 {
1396 }
1397 base.hp = MaxHP;
1398 }
1399 }
void RefreshExtra()

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

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8320 of file Chara.cs.

8321 {
8322 if (IsPC && EClass.AdvMode)
8323 {
8324 SetNoGoal();
8325 return;
8326 }
8327 if (IsPCParty || base.noMove)
8328 {
8329 SetAI(new GoalIdle());
8330 return;
8331 }
8332 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8333 {
8334 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8335 if (goalFromTimeTable != null)
8336 {
8337 SetAI(goalFromTimeTable);
8338 if (goalFromTimeTable is GoalWork)
8339 {
8340 goalFromTimeTable.Tick();
8341 }
8342 return;
8343 }
8344 }
8345 if (goalList.index == -2)
8346 {
8348 }
8349 SetAI(goalList.Next());
8350 }
Status Tick()
Definition: AIAct.cs:352
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8352
GoalListType goalListType
Definition: Chara.cs:277
AIAct SetNoGoal()
Definition: Chara.cs:8444
bool IsHomeMember()
Definition: Chara.cs:6283
bool IsGuest()
Definition: Chara.cs:6308
GoalList goalList
Definition: Chara.cs:198
bool IsInHomeZone()
Definition: Chara.cs:6288
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 6986 of file Chara.cs.

6987 {
6988 if (map == null)
6989 {
6990 map = EClass._map;
6991 }
6992 foreach (Card item in map.props.installed.all)
6993 {
6994 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
6995 {
6996 traitBed.RemoveHolder(this);
6997 }
6998 }
6999 }
PropsManager props
Definition: Map.cs:91
PropsInstalled installed
Definition: PropsManager.cs:8
PropSet all
Definition: Props.cs:8
bool IsHolder(Chara c)
Definition: TraitBed.cs:129

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

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

◆ ClearInventory()

void Chara.ClearInventory ( ClearInventoryType  type)
inline

Definition at line 8147 of file Chara.cs.

8148 {
8149 int num = 0;
8150 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8151 {
8152 Thing thing = things[num2];
8153 if (ShouldThrowAway(thing, type))
8154 {
8155 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8156 thing.Destroy();
8157 }
8158 }
8159 if (num > 0)
8160 {
8161 ModCurrency(num);
8162 if (type == ClearInventoryType.SellAtTown)
8163 {
8164 Msg.Say("party_sell", this, num.ToString() ?? "");
8165 PlaySound("pay");
8166 }
8167 }
8168 }
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:6951
void Destroy()
Definition: Card.cs:4850
int Num
Definition: Card.cs:156
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:8076

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

9837 {
9838 if (tempElements != null)
9839 {
9841 tempElements = null;
9842 }
9843 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 9642 of file Chara.cs.

9643 {
9644 if (_historyFood == null)
9645 {
9646 return -1;
9647 }
9648 int num = 0;
9649 foreach (List<string> item in _historyFood)
9650 {
9651 foreach (string item2 in item)
9652 {
9653 if (item2 == food.id)
9654 {
9655 num++;
9656 }
9657 }
9658 }
9659 return num;
9660 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 7639 of file Chara.cs.

7640 {
7641 Chara chara = CharaGen.Create(id);
7642 chara.c_originalHostility = base.c_originalHostility;
7643 if (chara.c_originalHostility != 0)
7644 {
7645 chara.hostility = chara.c_originalHostility;
7646 }
7647 if (orgPos != null)
7648 {
7649 chara.orgPos = orgPos.Copy();
7650 }
7651 chara.pos = pos.Copy();
7652 chara.isImported = true;
7653 chara.c_editorTags = base.c_editorTags;
7654 chara.c_editorTraitVal = base.c_editorTraitVal;
7655 chara.c_idTrait = base.c_idTrait;
7656 chara.homeZone = homeZone;
7657 return chara;
7658 }
Hostility c_originalHostility
Definition: Card.cs:950
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 5960 of file Chara.cs.

5961 {
5962 Talk("goodBoy");
5963 Say(headpat ? "headpat" : "cuddle", this, c);
5964 c.ShowEmo(Emo.love);
5965 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
5966 {
5967 c.MakeEgg();
5968 }
5969 if (headpat && this != c)
5970 {
5971 if (c.interest > 0)
5972 {
5973 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
5974 c.interest -= 20 + EClass.rnd(10);
5975 }
5977 {
5978 foreach (Chara member in party.members)
5979 {
5980 if (!member.IsPC && CanSeeLos(member))
5981 {
5982 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
5983 }
5984 }
5985 }
5986 }
5987 if (c.Evalue(1221) > 0)
5988 {
5989 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
5990 if (c.id == "hedgehog_ether")
5991 {
5992 ele = 922;
5993 }
5994 Say("reflect_thorne", c, this);
5995 DamageHP(10, ele, Power, AttackSource.Condition);
5996 }
5997 }
Emo
Definition: Emo.cs:2
virtual int Power
Definition: Card.cs:2257
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:5820
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5475
Element MainElement
Definition: Chara.cs:715
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:7567
int interest
Definition: Chara.cs:315
Religion faith
Definition: Chara.cs:437
static Element Void
Definition: ELEMENT.cs:236
ReligionManager religions
Definition: Game.cs:158
ReligionMoonShadow MoonShadow

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

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

◆ Cure()

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

Definition at line 9055 of file Chara.cs.

9056 {
9057 bool flag = state == BlessedState.Blessed;
9058 switch (type)
9059 {
9060 case CureType.Heal:
9061 case CureType.Prayer:
9062 CureCondition<ConFear>();
9063 CureCondition<ConBlind>(2 * p / 100 + 5);
9064 CureCondition<ConPoison>(5 * p / 100 + 5);
9065 CureCondition<ConConfuse>(10 * p / 100 + 10);
9066 CureCondition<ConDim>(p / 100 + 5);
9067 CureCondition<ConBleed>(2 * p / 100 + 10);
9068 if (flag)
9069 {
9070 SAN.Mod(-15);
9071 }
9072 break;
9073 case CureType.CureBody:
9074 CureCondition<ConBlind>(5 * p / 100 + 15);
9075 CureCondition<ConPoison>(10 * p / 100 + 15);
9076 CureCondition<ConBleed>(5 * p / 100 + 20);
9077 CureTempElements(p, body: true, mind: false);
9078 break;
9079 case CureType.CureMind:
9080 CureCondition<ConFear>();
9081 CureCondition<ConDim>(3 * p / 100 + 10);
9082 CureTempElements(p, body: false, mind: true);
9083 break;
9084 case CureType.Sleep:
9085 {
9086 for (int num2 = conditions.Count - 1; num2 >= 0; num2--)
9087 {
9088 Condition condition2 = conditions[num2];
9089 if (!(condition2 is ConSleep) && !(condition2 is ConFaint))
9090 {
9091 if (condition2.isPerfume)
9092 {
9093 condition2.Mod(-1, force: true);
9094 }
9095 else if (condition2.Type == ConditionType.Bad || condition2.Type == ConditionType.Debuff)
9096 {
9097 condition2.Kill();
9098 }
9099 }
9100 }
9101 CureCondition<ConWait>();
9102 CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
9103 bool flag2 = HasCondition<ConAnorexia>();
9104 base.c_vomit -= (flag2 ? 3 : 2) * p / 100;
9105 if (base.c_vomit < 0)
9106 {
9107 base.c_vomit = 0;
9108 if (flag2)
9109 {
9110 RemoveCondition<ConAnorexia>();
9111 }
9112 }
9113 break;
9114 }
9115 case CureType.HealComplete:
9116 case CureType.Death:
9117 case CureType.Jure:
9118 case CureType.Boss:
9119 {
9120 CureTempElements(p * 100, body: true, mind: true);
9121 for (int num = conditions.Count - 1; num >= 0; num--)
9122 {
9123 Condition condition = conditions[num];
9124 if (!(condition is ConAnorexia) || type == CureType.Death)
9125 {
9126 if (condition.Type == ConditionType.Bad || condition.Type == ConditionType.Debuff || condition.Type == ConditionType.Disease)
9127 {
9128 condition.Kill();
9129 }
9130 else if (type == CureType.Death && condition.isPerfume)
9131 {
9132 condition.Kill();
9133 }
9134 }
9135 }
9136 CureCondition<ConWait>();
9137 CureCondition<ConSleep>();
9138 if (type == CureType.Death || type == CureType.Boss)
9139 {
9140 SAN.Mod(-20);
9141 RemoveCondition<ConBrightnessOfLife>();
9142 }
9143 if (type == CureType.Jure)
9144 {
9145 SAN.Mod(-999);
9146 if (HasElement(1206))
9147 {
9148 SetFeat(1206, 0, msg: true);
9149 }
9150 }
9151 break;
9152 }
9153 }
9154 }
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:9806
Stats SAN
Definition: Chara.cs:1140
void Kill(bool silent=false)
Definition: Condition.cs:91
virtual void Mod(int a)
Definition: Stats.cs:135

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

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

◆ CureCondition< T >()

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

Definition at line 9005 of file Chara.cs.

9005 : Condition
9006 {
9007 T condition = GetCondition<T>();
9008 if (condition != null)
9009 {
9010 condition.value -= v;
9011 if (condition.value <= 0)
9012 {
9013 condition.Kill();
9014 }
9015 }
9016 }
T GetCondition< T >()
Definition: Chara.cs:9018

◆ CureHost()

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

Definition at line 9042 of file Chara.cs.

9043 {
9044 if (parasite != null)
9045 {
9046 parasite.Cure(type, p, state);
9047 }
9048 if (ride != null)
9049 {
9050 ride.Cure(type, p, state);
9051 }
9052 Cure(type, p, state);
9053 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9055

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 9806 of file Chara.cs.

9807 {
9808 if (tempElements != null)
9809 {
9810 if (body)
9811 {
9813 }
9814 if (mind)
9815 {
9817 }
9818 }
9819 void Cure(int[] eles)
9820 {
9821 foreach (int ele in eles)
9822 {
9823 if (tempElements == null)
9824 {
9825 break;
9826 }
9827 Element element = tempElements.GetElement(ele);
9828 if (element != null && element.vBase < 0)
9829 {
9830 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
9831 }
9832 }
9833 }
9834 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:9714
Element GetElement(string alias)
static int[] List_Body
Definition: ELEMENT.cs:242
static int[] List_Mind
Definition: ELEMENT.cs:244

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

◆ DamageTempElement()

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

Definition at line 9772 of file Chara.cs.

9773 {
9774 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
9775 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 9760 of file Chara.cs.

9761 {
9762 if (body)
9763 {
9764 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
9765 }
9766 if (mind)
9767 {
9768 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
9769 }
9770 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:9772

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3109 of file Chara.cs.

3110 {
3111 bool broke = false;
3112 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
3113 {
3114 if (_p.IsValid)
3115 {
3116 if (_p.HasBlock)
3117 {
3118 EClass._map.MineBlock(_p, recoverBlock: false, this);
3119 if (_p.HasObj)
3120 {
3121 EClass._map.MineObj(_p, null, this);
3122 }
3123 broke = true;
3124 }
3125 if (_p.HasObj && _p.IsBlocked)
3126 {
3127 EClass._map.MineObj(_p, null, this);
3128 broke = true;
3129 }
3130 _p.Things.ForeachReverse(delegate(Thing t)
3131 {
3132 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
3133 {
3134 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3135 {
3136 t.Destroy();
3137 }
3138 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
3139 {
3140 t.SetPlaceState(PlaceState.roaming);
3141 }
3142 }
3143 });
3144 }
3145 });
3146 if (broke)
3147 {
3148 Msg.Say("stomp");
3149 Shaker.ShakeCam("stomp");
3150 }
3151 }
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool IsUnique
Definition: Card.cs:2053
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
Definition: Point.cs:1369
bool IsBlocked
Definition: Point.cs:351
Definition: Shaker.cs:5
static void ShakeCam(string id="default", float magnitude=1f)
Definition: Shaker.cs:25
virtual bool IsBlockPath
Definition: Trait.cs:53
virtual bool IsDoor
Definition: Trait.cs:57

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

Referenced by _Move().

◆ Die()

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

Reimplemented from Card.

Definition at line 5073 of file Chara.cs.

5074 {
5075 combatCount = 0;
5076 if (isDead || host != null)
5077 {
5078 return;
5079 }
5080 bool isInActiveZone = IsInActiveZone;
5081 if (isInActiveZone)
5082 {
5083 if (IsPC)
5084 {
5086 }
5087 if (base.isSummon)
5088 {
5089 if (id == "tsunami")
5090 {
5091 pos.PlaySound("water");
5092 }
5093 else
5094 {
5095 Say("summon_vanish", this);
5096 pos.PlayEffect("vanish");
5097 pos.PlaySound("vanish");
5098 }
5099 Destroy();
5100 return;
5101 }
5102 if (attackSource == AttackSource.DeathSentense)
5103 {
5104 if (trait is TraitLittleOne)
5105 {
5106 MakeEgg();
5107 if (IsPCFaction)
5108 {
5110 }
5111 }
5112 PlayEffect("revive");
5113 PlaySound("chime_angel");
5114 }
5115 else
5116 {
5117 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
5118 .Emit(50);
5119 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
5120 PlaySound(base.material.GetSoundDead(source));
5121 }
5124 ClearFOV();
5125 }
5126 string text = "";
5127 "dead_in".langGame(EClass._zone.Name);
5128 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
5129 if (LangGame.Has("dead_" + attackSource))
5130 {
5131 text = "dead_" + attackSource;
5132 }
5133 else
5134 {
5135 if (e != Element.Void && e != null)
5136 {
5137 text = "dead_" + e.source.alias;
5138 }
5139 if (text == "" || !LangGame.Has(text))
5140 {
5141 text = "dead";
5142 }
5143 }
5144 if (IsPC)
5145 {
5146 EClass._zone.isDeathLocation = true;
5147 string s = ((origin == null) ? text : "dead_by");
5149 if (attackSource == AttackSource.Wrath)
5150 {
5152 }
5153 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
5155 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
5156 {
5157 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
5158 }
5159 AI_PlayMusic.keepPlaying = false;
5160 }
5161 if (isInActiveZone)
5162 {
5163 if (attackSource == AttackSource.DeathSentense)
5164 {
5165 Msg.Say("goto_heaven", this);
5166 }
5167 else
5168 {
5169 if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5170 {
5171 Msg.Say(text, this, "", text2);
5172 }
5173 string text3 = TalkTopic("dead");
5174 if (!text3.IsEmpty())
5175 {
5176 text3 = text3.StripBrackets();
5177 }
5178 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5179 if (!IsPC && flag)
5180 {
5181 MakeGrave(text3);
5182 }
5183 Msg.SetColor();
5184 SpawnLoot(origin);
5185 }
5186 if (IsPC)
5187 {
5189 }
5190 }
5191 if (IsPCFaction)
5192 {
5193 if (homeBranch != null)
5194 {
5195 homeBranch.Log(text, this, "");
5196 }
5197 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5198 if (!IsPC)
5199 {
5200 if (EClass.player.stats.allyDeath == 0)
5201 {
5202 Tutorial.Reserve("death_pet");
5203 }
5205 }
5206 }
5207 if (id == "mandrake" || HasElement(488))
5208 {
5209 Say("a_scream", this);
5210 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5211 }
5212 daysStarved = 0;
5213 isDead = true;
5215 enemy = null;
5216 _cooldowns = null;
5217 base.isSale = false;
5218 SetInt(70);
5219 EClass._map.props.sales.Remove(this);
5220 Cure(CureType.Death);
5221 SetAI(new NoGoal());
5223 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5224 {
5225 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5226 }
5227 if (IsPC)
5228 {
5229 EClass.player.returnInfo = null;
5230 EClass.player.uidLastTravelZone = 0;
5231 foreach (Chara chara2 in EClass._map.charas)
5232 {
5233 if (chara2.IsHostile())
5234 {
5235 chara2.hostility = chara2.OriginalHostility;
5236 }
5237 if (chara2.enemy == EClass.pc)
5238 {
5239 chara2.enemy = null;
5240 }
5241 }
5242 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5243 {
5244 EClass.player.preventDeathPenalty = true;
5245 }
5246 }
5247 else
5248 {
5249 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5250 if (currentZone is Zone_LittleGarden && id == "littleOne")
5251 {
5252 flag2 = false;
5253 }
5254 if (flag2)
5255 {
5256 EClass._map.deadCharas.Add(this);
5257 }
5258 currentZone.RemoveCard(this);
5259 }
5260 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5261 {
5262 int a = -10;
5263 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5264 {
5265 a = -5;
5266 }
5267 ModAffinity(EClass.pc, a, show: false);
5268 string text4 = id;
5269 if (!(text4 == "quru"))
5270 {
5271 if (text4 == "corgon")
5272 {
5273 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5274 }
5275 }
5276 else
5277 {
5278 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5279 }
5280 }
5281 if (origin != null)
5282 {
5283 if (origin.IsPCParty || origin.IsPCPartyMinion)
5284 {
5285 int num = 0;
5286 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5287 {
5288 num = -5;
5289 }
5290 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5291 {
5292 EClass.pc.Say("killcat");
5293 num = -1;
5294 }
5295 if (EClass.pc.party.HasElement(1563) && num < 0)
5296 {
5297 num = num * 30 / 100;
5298 }
5299 if (num != 0)
5300 {
5301 EClass.player.ModKarma(num);
5302 }
5303 }
5304 if (origin == EClass.pc)
5305 {
5306 EClass.pc.faith.Revelation("kill", 10);
5307 }
5308 else if (origin.IsPCFaction)
5309 {
5310 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5311 origin.Chara.ShowEmo(Emo.love);
5312 }
5313 }
5314 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5315 {
5316 EClass.player.doneBackers.Add(base.sourceBacker.id);
5317 }
5318 if (base.IsPCFactionOrMinion)
5319 {
5321 {
5322 Msg.Say("abort_allyDead");
5323 }
5324 }
5326 {
5327 Msg.Say("abort_enemyDead");
5328 }
5329 if (IsPCParty && !IsPC)
5330 {
5332 base.c_wasInPcParty = true;
5333 EClass.pc.Say("allyDead");
5334 }
5335 switch (id)
5336 {
5337 case "littleOne":
5338 if (attackSource != AttackSource.DeathSentense && !IsPCFaction)
5339 {
5340 EClass.player.flags.little_killed = true;
5342 }
5343 break;
5344 case "big_daddy":
5345 if (!IsPCFaction)
5346 {
5347 Chara t2 = CharaGen.Create("littleOne");
5348 EClass._zone.AddCard(t2, pos.Copy());
5349 Msg.Say("little_pop");
5350 }
5351 break;
5352 case "shark_sister":
5353 if (!IsPCFaction)
5354 {
5355 Chara t = CharaGen.Create("sister_shark");
5356 EClass._zone.AddCard(t, pos.Copy());
5357 Msg.Say("shark_pop");
5358 }
5359 break;
5360 }
5361 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5362 {
5363 Chara chara = CharaGen.CreateFromFilter("c_plant", base.LV);
5364 EClass._zone.AddCard(chara, pos.Copy());
5365 if (chara.LV < base.LV)
5366 {
5367 chara.SetLv(base.LV);
5368 }
5369 chara.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5370 Msg.Say("plant_pop", this, chara);
5371 }
5373 }
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:411
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:2577
void AddBlood(int a=1, int id=-1)
Definition: Card.cs:5677
virtual bool IsPCParty
Definition: Card.cs:2111
Card SetLv(int a)
Definition: Card.cs:2858
ICardParent parent
Definition: Card.cs:53
virtual bool IsPCPartyMinion
Definition: Card.cs:2115
void ClearFOV()
Definition: Card.cs:6265
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:5886
virtual bool IsPCFaction
Definition: Card.cs:2231
void SpawnLoot(Card origin)
Definition: Card.cs:4890
int LV
Definition: Card.cs:372
virtual bool isSynced
Definition: Card.cs:2049
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:2277
string NameBraced
Definition: Chara.cs:512
void ClearTempElements()
Definition: Chara.cs:9836
string TalkTopic(string topic="calm")
Definition: Chara.cs:6652
void TryDropBossLoot()
Definition: Chara.cs:5375
bool IsLocalChara
Definition: Chara.cs:839
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:836
void TryDropCarryOnly()
Definition: Chara.cs:4468
void MakeGrave(string lastword)
Definition: Chara.cs:4990
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:125
ConfigAutoCombat autoCombat
Definition: Game.cs:93
CardManager cards
Definition: Game.cs:155
static bool Has(string id)
Definition: LangGame.cs:46
List< Chara > deadCharas
Definition: Map.cs:46
static ThirstPersonInfo thirdPerson1
Definition: Msg.cs:6
void RemoveMember(Chara c)
Definition: Party.cs:101
bool HasElement(int ele)
Definition: Party.cs:180
int allyDeath
Definition: Player.cs:108
void ModKarma(int a)
Definition: Player.cs:2408
Stats stats
Definition: Player.cs:936
int little_dead
Definition: Player.cs:849
HashSet< int > doneBackers
Definition: Player.cs:993
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2302
string deathMsg
Definition: Player.cs:1105
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1237
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:1232
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:1977
void ResetHostility()
Definition: Zone.cs:2638
ZoneInstance instance
Definition: Zone.cs:52

References EClass._map, EClass._zone, ConfigAutoCombat.abortOnAllyDead, ConfigAutoCombat.abortOnEnemyDead, Zone.AddCard(), Player.Stats.allyDeath, Game.Config.autoCombat, Game.cards, Card.Chara, Map.charas, EClass.Colors, Game.config, CharaGen.Create(), CharaGen.CreateFromFilter(), Map.deadCharas, Player.deathMsg, Debug, Player.doneBackers, enemy, Zone.events, faith, ThingContainer.Find(), CardManager.GlobalCharaList.Find(), EClass.game, Effect.Get(), CardManager.globalCharas, LangGame.Has(), Party.HasElement(), Zone.HasLaw, SourceRace.Row.id, Zone.instance, IsHostile(), IsPCParty, Card.IsUnique, 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, 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 9791 of file Chara.cs.

9792 {
9793 if (tempElements == null)
9794 {
9795 return;
9796 }
9797 foreach (Element item in tempElements.dict.Values.ToList())
9798 {
9799 if (item.vBase > 0)
9800 {
9801 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
9802 }
9803 }
9804 }

References ElementContainer.dict, and item.

◆ DoAI()

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

Definition at line 5948 of file Chara.cs.

5949 {
5950 SetAI(new DynamicAIAct("", delegate
5951 {
5952 onPerform();
5953 return true;
5954 })
5955 {
5956 wait = wait
5957 });
5958 }

◆ DoHostileAction()

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

Definition at line 6048 of file Chara.cs.

6049 {
6050 if (_tg == null || !_tg.isChara)
6051 {
6052 return;
6053 }
6054 Chara chara = _tg.Chara;
6055 if (chara.IsPC)
6056 {
6057 EClass.pc.combatCount = 10;
6058 }
6059 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
6060 {
6061 return;
6062 }
6063 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
6064 {
6065 chara.Say("frown", this, chara);
6066 }
6067 else
6068 {
6069 if (EClass._zone.IsRegion)
6070 {
6071 return;
6072 }
6073 if (IsPC)
6074 {
6075 if (chara.IsFriendOrAbove() && !immediate)
6076 {
6077 chara.Say("frown", this, chara);
6078 chara.ShowEmo(Emo.sad);
6079 chara.hostility = Hostility.Neutral;
6080 return;
6081 }
6082 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
6083 {
6084 bool flag = chara.id == "fanatic";
6085 if (EClass.rnd(4) == 0 || flag)
6086 {
6087 chara.Say("callHelp", chara);
6088 chara.CallHelp(this, flag);
6089 }
6090 }
6091 if (chara.hostility <= Hostility.Enemy)
6092 {
6093 foreach (Chara member in EClass.pc.party.members)
6094 {
6095 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
6096 {
6097 member.SetEnemy(chara);
6098 }
6099 }
6100 }
6101 }
6102 else if (chara.IsPC && hostility <= Hostility.Enemy)
6103 {
6104 foreach (Chara member2 in EClass.pc.party.members)
6105 {
6106 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
6107 {
6108 member2.SetEnemy(this);
6109 }
6110 }
6111 }
6112 if (chara.calmCheckTurn <= 0 || IsPC)
6113 {
6114 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
6115 }
6116 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
6117 {
6118 GoHostile(chara);
6119 chara.GoHostile(this);
6120 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
6121 {
6122 Thing t = ThingGen.Create("49");
6123 ActThrow.Throw(chara, pos, t);
6124 Act.TC = chara;
6125 }
6126 }
6127 }
6128 }
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
Definition: ActThrow.cs:93
override bool IsAliveInCurrentZone
Definition: Chara.cs:559
override bool IsPCPartyMinion
Definition: Chara.cs:637
int calmCheckTurn
Definition: Chara.cs:116
bool CanSee(Card c)
Definition: Chara.cs:1200
override bool IsPCFactionMinion
Definition: Chara.cs:653
bool IsFriendOrAbove()
Definition: Chara.cs:6313
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:5999
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:6130
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 ActMelee.Attack(), Point.CallGuard(), ActEffect.DamageEle(), DramaOutcome.fiama_starter_gift(), AI_Fuck.Finish(), ActRanged.Perform(), ActSummonGuard.Perform(), ActWater.Perform(), AI_AttackHome.Run(), AI_Idle.Run(), GoalSiege.Run(), and ActThrow.Throw().

◆ Drink()

void Chara.Drink ( Card  t)
inline

Definition at line 4885 of file Chara.cs.

4886 {
4887 Say("drink", this, t.Duplicate(1));
4888 Say("quaff");
4889 PlaySound("drink");
4890 hunger.Mod(-2);
4891 t.ModNum(-1);
4892 t.trait.OnDrink(this);
4893 _ = IsPC;
4894 }
Thing Duplicate(int num)
Definition: Card.cs:3342
void ModNum(int a, bool notify=true)
Definition: Card.cs:3413
Stats hunger
Definition: Chara.cs:1124
virtual void OnDrink(Chara c)
Definition: Trait.cs:983

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

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

◆ DropHeld()

Card Chara.DropHeld ( Point  dropPos = null)
inline

Definition at line 4480 of file Chara.cs.

4481 {
4482 if (held == null)
4483 {
4484 return null;
4485 }
4486 if (IsPC)
4487 {
4488 WidgetHotbar.dirtyCurrentItem = true;
4490 }
4491 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4492 card.OnLand();
4493 if (card.trait.CanOnlyCarry)
4494 {
4495 card.SetPlaceState(PlaceState.installed);
4496 }
4497 return card;
4498 }
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 4500 of file Chara.cs.

4501 {
4502 if (t.c_isImportant)
4503 {
4504 Msg.Say("markedImportant");
4505 return;
4506 }
4507 if (!t.trait.CanBeDropped)
4508 {
4509 Msg.Say("cantDrop", t);
4510 return;
4511 }
4512 if (t.trait is TraitAbility)
4513 {
4514 SE.Trash();
4515 t.Destroy();
4516 return;
4517 }
4518 Msg.Say("dropItem", t.Name);
4519 t.ignoreAutoPick = true;
4520 PlaySound("drop");
4521 EClass._zone.AddCard(t, pos);
4522 if (t.trait.CanOnlyCarry)
4523 {
4524 t.Install();
4525 }
4526 }
Card Install()
Definition: Card.cs:3633
virtual bool CanBeDropped
Definition: Trait.cs:298

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

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

◆ Duplicate()

Chara Chara.Duplicate ( )
inline

Definition at line 1731 of file Chara.cs.

1732 {
1733 Chara chara = CharaGen.Create(id);
1734 chara.mana.value = mana.value;
1735 chara.stamina.value = stamina.value;
1736 foreach (KeyValuePair<int, Element> item in elements.dict)
1737 {
1738 Element orCreateElement = chara.elements.GetOrCreateElement(item.Key);
1739 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.vSource;
1740 }
1741 chara.SetFaith(faith);
1742 chara.bio = IO.DeepCopy(bio);
1743 chara.LV = base.LV;
1744 chara.c_daysWithGod = base.c_daysWithGod;
1745 chara.RefreshFaithElement();
1746 chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
1747 chara.isCopy = true;
1748 if (HaveFur())
1749 {
1750 chara.c_fur = -1;
1751 }
1752 return chara;
1753 }
bool HaveFur()
Definition: Card.cs:7520
Stats mana
Definition: Chara.cs:1136
void RefreshFaithElement()
Definition: Chara.cs:9671
void SetFaith(string id)
Definition: Chara.cs:1679
Element GetOrCreateElement(Element ele)
int vSource
Definition: ELEMENT.cs:260
Definition: IO.cs:11
virtual int value
Definition: Stats.cs:56

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

Referenced by ActEffect.Proc().

◆ EnhanceTempElement()

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

Definition at line 9786 of file Chara.cs.

9787 {
9788 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
9789 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 9777 of file Chara.cs.

9778 {
9779 int[] array = (body ? Element.List_Body : Element.List_Mind);
9780 foreach (int ele in array)
9781 {
9782 EnhanceTempElement(ele, p, onlyRenew);
9783 }
9784 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:9786

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 4862 of file Chara.cs.

4863 {
4864 int slot = EClass.sources.categories.map[s].slot;
4865 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
4866 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
4867 {
4868 SetEQQuality();
4869 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
4870 AddThing(thing);
4871 if (bodySlot != null && !body.Equip(thing, bodySlot))
4872 {
4873 thing.Destroy();
4874 }
4875 }
4876 }
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3057
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:4809
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 4842 of file Chara.cs.

4843 {
4844 SetEQQuality();
4845 if (r != Rarity.Random)
4846 {
4847 CardBlueprint.current.rarity = r;
4848 }
4849 Thing thing = ThingGen.Create(s, mat, base.LV);
4850 if (body.GetSlot(thing, onlyEmpty: true) == null)
4851 {
4852 return thing;
4853 }
4854 AddThing(thing);
4855 if (!body.Equip(thing))
4856 {
4857 thing.Destroy();
4858 }
4859 return thing;
4860 }

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

4879 {
4880 SetEQQuality();
4881 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
4882 AddThing(t);
4883 }
Thing SetNum(int a)
Definition: Card.cs:3393

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 5859 of file Chara.cs.

5860 {
5861 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
5862 {
5863 return 25 + Evalue(226) * 125 / 100;
5864 }
5865 return Evalue(226);
5866 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3431 of file Chara.cs.

3432 {
3433 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3434 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3435 zone = zone ?? EClass.world.region;
3437 {
3438 state = ZoneTransition.EnterState.Fall,
3439 x = pos.x,
3440 z = pos.z
3441 });
3442 }
void MoveZone(string alias)
Definition: Chara.cs:3256
int lv
Definition: Spatial.cs:142
Zone FindZone(int lv)
Definition: Spatial.cs:716
Region region
Definition: World.cs:23
Definition: Zone.cs:12
Zone GetTopZone()
Definition: Zone.cs:1898

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

7448 {
7449 TraitToolRange ranged = weapon.trait as TraitToolRange;
7450 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7451 if (thing != null)
7452 {
7453 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7454 if (thing2 != null)
7455 {
7456 return thing2;
7457 }
7458 }
7459 return things.Find((Thing t) => ranged.IsAmmo(t));
7460 }
bool IsAmmo
Definition: Card.cs:2209
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 7001 of file Chara.cs.

7002 {
7003 foreach (Card item in EClass._map.props.installed.all)
7004 {
7005 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7006 {
7007 return traitBed;
7008 }
7009 }
7010 return null;
7011 }

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

7213 {
7214 Thing result = null;
7215 int num = -1;
7216 if (IsPC)
7217 {
7218 return null;
7219 }
7220 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7221 {
7222 int num2 = CountNumEaten(item);
7223 int num3 = 100 - num2;
7224 if (num3 > num)
7225 {
7226 result = item;
7227 num = num3;
7228 }
7229 }
7230 return result;
7231 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7258
int CountNumEaten(Thing food)
Definition: Chara.cs:9642
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 2323 of file Chara.cs.

2324 {
2325 if (IsMinion)
2326 {
2327 master = EClass._map.FindChara(base.c_uidMaster);
2328 }
2329 return master;
2330 }
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 6210 of file Chara.cs.

6211 {
6212 for (int i = 0; i < EClass._map.charas.Count; i++)
6213 {
6214 Chara chara = EClass._map.charas[i];
6215 if (chara != this && chara != enemy && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6216 {
6217 DoHostileAction(chara);
6218 enemy = chara;
6219 return true;
6220 }
6221 }
6222 return false;
6223 }
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6048

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

6142 {
6143 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
6144 {
6145 return false;
6146 }
6147 if (enemy != null && !enemy.IsAliveInCurrentZone)
6148 {
6149 enemy = null;
6150 }
6151 if (enemy != null)
6152 {
6153 return false;
6154 }
6155 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
6156 {
6157 return false;
6158 }
6159 bool flag = enemy != null || ai is GoalCombat;
6160 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6161 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
6162 bool flag3 = !IsPCParty;
6163 Chara chara = null;
6164 int num2 = 9999;
6165 for (int i = 0; i < EClass._map.charas.Count; i++)
6166 {
6167 Chara chara2 = EClass._map.charas[i];
6168 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2))
6169 {
6170 continue;
6171 }
6172 int num3 = Dist(chara2);
6173 int num4 = GetSightRadius() + (flag ? 1 : 0);
6174 if (num3 > num4)
6175 {
6176 continue;
6177 }
6178 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
6179 {
6180 if (this == pos.FirstChara)
6181 {
6182 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6183 }
6184 stealthSeen++;
6185 }
6186 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!IsPCFaction || EClass.pc.ai.ShouldAllyAttack(chara2)))
6187 {
6188 if (!IsPCParty)
6189 {
6190 DoHostileAction(chara2);
6191 enemy = chara2;
6192 return true;
6193 }
6194 if (num3 < num2)
6195 {
6196 num2 = num3;
6197 chara = chara2;
6198 }
6199 }
6200 }
6201 if (chara != null)
6202 {
6203 DoHostileAction(chara);
6204 enemy = chara;
6205 return true;
6206 }
6207 return false;
6208 }
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 7562 of file Chara.cs.

7563 {
7564 return FindBed()?.owner.pos.cell.room;
7565 }
TraitBed FindBed()
Definition: Chara.cs:7001

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

◆ GainAbility()

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

Definition at line 9561 of file Chara.cs.

9562 {
9563 Element orCreateElement = elements.GetOrCreateElement(ele);
9564 if (orCreateElement.ValueWithoutLink == 0)
9565 {
9566 elements.ModBase(orCreateElement.id, 1);
9567 }
9568 if (orCreateElement is Spell)
9569 {
9570 int num = mtp * orCreateElement.source.charge * (100 + Evalue(307) + (HasElement(307) ? 20 : 0)) / 100 / 100;
9571 if (orCreateElement.source.charge == 1)
9572 {
9573 num = 1;
9574 }
9575 orCreateElement.vPotential += Mathf.Max(1, num / 2 + EClass.rnd(num / 2 + 1));
9576 }
9577 Say("spell_gain", this, orCreateElement.Name);
9578 LayerAbility.SetDirty(orCreateElement);
9579 }
Element ModBase(int ele, int v)
virtual string Name
Definition: ELEMENT.cs:302
static void SetDirty(Element a)

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

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

◆ GetActionText()

string Chara.GetActionText ( )
inline

Definition at line 6945 of file Chara.cs.

6946 {
6947 string result = "?????";
6948 if (ai != null)
6949 {
6950 result = ai.GetCurrentActionText();
6951 }
6952 return result;
6953 }
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 7497 of file Chara.cs.

7498 {
7499 if (body.GetWeight(armorOnly: true) <= 30000)
7500 {
7501 return 120;
7502 }
7503 return 122;
7504 }
int GetWeight(bool armorOnly=false)
Definition: CharaBody.cs:390

References CharaBody.GetWeight().

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

◆ GetBestRangedWeapon()

Thing Chara.GetBestRangedWeapon ( )
inline

Definition at line 7462 of file Chara.cs.

7463 {
7464 Thing result = null;
7465 int num = 0;
7466 foreach (Thing thing in things)
7467 {
7468 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
7469 {
7470 num = thing.GetEquipValue();
7471 result = thing;
7472 }
7473 }
7474 return result;
7475 }
int GetEquipValue()
Definition: Card.cs:6852
bool IsRangedWeapon
Definition: Card.cs:2205
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7396

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 8993 of file Chara.cs.

8994 {
8995 for (int i = 0; i < conditions.Count; i++)
8996 {
8997 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
8998 {
8999 return conBuffStats.elements.GetElement(ele);
9000 }
9001 }
9002 return null;
9003 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 8988 of file Chara.cs.

8989 {
8990 return GetBuffStats(EClass.sources.elements.alias[alias].id);
8991 }
Element GetBuffStats(string alias)
Definition: Chara.cs:8988

References SourceManager.elements, and EClass.sources.

Referenced by GoalCombat.TryUseAbility().

◆ GetBurden()

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

Definition at line 1755 of file Chara.cs.

1756 {
1757 int num2 = (base.ChildrenWeight + ((t != null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 / WeightLimit;
1758 if (num2 < 0)
1759 {
1760 num2 = 1000;
1761 }
1763 {
1764 num2 = 0;
1765 }
1766 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
1767 if (num3 > 9)
1768 {
1769 num3 = 9;
1770 }
1771 return num3;
1772 }

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

◆ GetCondition< T >()

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

Definition at line 9018 of file Chara.cs.

9018 : Condition
9019 {
9020 for (int i = 0; i < conditions.Count; i++)
9021 {
9022 if (conditions[i] is T)
9023 {
9024 return conditions[i] as T;
9025 }
9026 }
9027 return null;
9028 }

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3551 of file Chara.cs.

3552 {
3553 Debug.Log(angle);
3554 if (!renderer.hasActor)
3555 {
3556 if (angle == 0f || angle == 45f || angle == 90f)
3557 {
3558 return 2;
3559 }
3560 if (angle == -135f || angle == 180f || angle == -90f)
3561 {
3562 return 1;
3563 }
3564 if (angle == 135f)
3565 {
3566 return 0;
3567 }
3568 return 3;
3569 }
3570 return renderer.actor.currentDir;
3571 }
virtual int currentDir
Definition: CardActor.cs:41
float angle
Definition: Card.cs:69

References Debug.

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

◆ GetDestination()

Point Chara.GetDestination ( )
inline

Definition at line 6920 of file Chara.cs.

6921 {
6922 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
6923 }
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 4553 of file Chara.cs.

4554 {
4555 if (elements.Value(122) > elements.Value(120))
4556 {
4557 return elements.GetElement(122);
4558 }
4559 return elements.GetElement(120);
4560 }
int Value(int ele)

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4528 of file Chara.cs.

4529 {
4530 int num = Evalue(131);
4531 int num2 = Evalue(130);
4532 int num3 = Evalue(123);
4533 if (num > num2 && num > num3)
4534 {
4535 return AttackStyle.TwoWield;
4536 }
4537 if (num2 > num && num2 > num3)
4538 {
4539 return AttackStyle.TwoHand;
4540 }
4541 if (num3 > num && num3 > num2)
4542 {
4543 return AttackStyle.Shield;
4544 }
4545 return AttackStyle.Default;
4546 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 7680 of file Chara.cs.

7681 {
7682 SourceCategory.Row r = null;
7683 if (_listFavCat.Count == 0)
7684 {
7685 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
7686 {
7687 if (row.gift > 0)
7688 {
7689 _listFavCat.Add(row);
7690 }
7691 }
7692 }
7693 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7694 {
7695 r = _listFavCat.RandomItem();
7696 });
7697 return r;
7698 }
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 7660 of file Chara.cs.

7661 {
7662 if (_listFavFood.Count == 0)
7663 {
7664 foreach (SourceThing.Row row in EClass.sources.things.rows)
7665 {
7666 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
7667 {
7668 _listFavFood.Add(row);
7669 }
7670 }
7671 }
7672 SourceThing.Row r = null;
7673 Rand.UseSeed(base.uid + EClass.game.seed, delegate
7674 {
7675 r = _listFavFood.RandomItem();
7676 });
7677 return r;
7678 }
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 4548 of file Chara.cs.

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

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

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

◆ GetFirstStep()

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

Definition at line 2509 of file Chara.cs.

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

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

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

◆ GetGoalFromTimeTable()

Goal Chara.GetGoalFromTimeTable ( int  hour)
inline

Definition at line 8352 of file Chara.cs.

8353 {
8354 if (IsPC)
8355 {
8356 return null;
8357 }
8358 switch (TimeTable.GetSpan(idTimeTable, hour))
8359 {
8360 case TimeTable.Span.Sleep:
8362 {
8363 return new GoalSleep();
8364 }
8365 break;
8366 case TimeTable.Span.Eat:
8367 return new GoalIdle();
8368 case TimeTable.Span.Work:
8369 if (IsGuest())
8370 {
8371 return new GoalIdle();
8372 }
8373 return GetGoalWork();
8374 case TimeTable.Span.Free:
8375 if (IsGuest())
8376 {
8377 return new GoalIdle();
8378 }
8379 return GetGoalHobby();
8380 }
8381 return null;
8382 }
Goal GetGoalWork()
Definition: Chara.cs:8384
Goal GetGoalHobby()
Definition: Chara.cs:8397
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 8397 of file Chara.cs.

8398 {
8399 if (IsPrisoner)
8400 {
8401 return new GoalIdle();
8402 }
8403 if (memberType == FactionMemberType.Livestock)
8404 {
8405 return new GoalGraze();
8406 }
8407 return new GoalHobby();
8408 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1024

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 8384 of file Chara.cs.

8385 {
8386 if (IsPrisoner)
8387 {
8388 return new GoalIdle();
8389 }
8390 if (memberType == FactionMemberType.Livestock)
8391 {
8392 return new GoalGraze();
8393 }
8394 return new GoalWork();
8395 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 6930 of file Chara.cs.

6931 {
6932 int num = 50;
6933 if (FindBed() != null)
6934 {
6935 num += 50;
6936 }
6937 return num;
6938 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 6925 of file Chara.cs.

6926 {
6927 return base.LV / 2 + 4;
6928 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6459 of file Chara.cs.

6460 {
6461 string text = base.Name;
6462 if (IsFriendOrAbove())
6463 {
6464 text = text.TagColor(EClass.Colors.colorFriend);
6465 }
6466 else if (IsHostile())
6467 {
6468 text = text.TagColor(EClass.Colors.colorHostile);
6469 }
6470 int num = 2;
6471 int lV = EClass.pc.LV;
6472 if (base.LV >= lV * 5)
6473 {
6474 num = 0;
6475 }
6476 else if (base.LV >= lV * 2)
6477 {
6478 num = 1;
6479 }
6480 else if (base.LV <= lV / 4)
6481 {
6482 num = 4;
6483 }
6484 else if (base.LV <= lV / 2)
6485 {
6486 num = 3;
6487 }
6488 string text2 = Lang.GetList("lvComparison")[num];
6489 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6490 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6491 s = (" (" + s.lang() + ") ").TagSize(14);
6492 s = "";
6493 if (memberType == FactionMemberType.Guest)
6494 {
6495 s += (" (" + "guest".lang() + ") ").TagSize(14);
6496 }
6497 else if (memberType == FactionMemberType.Livestock)
6498 {
6499 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6500 }
6501 if (!EClass.pc.IsMoving)
6502 {
6503 if (EClass.pc.HasHigherGround(this))
6504 {
6505 text2 += "lowerGround".lang();
6506 }
6507 else if (HasHigherGround(EClass.pc))
6508 {
6509 text2 += "higherGround".lang();
6510 }
6511 }
6512 if (Evalue(1232) > 0)
6513 {
6514 text2 = "milkBaby".lang().TagSize(14) + text2;
6515 }
6516 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6517 {
6518 text2 = "hasBounty".lang().TagSize(14) + text2;
6519 }
6520 if (EClass.pc.HasElement(481))
6521 {
6522 text2 += ("(" + faith.Name + ")").TagSize(14);
6523 }
6524 return text + text2 + s;
6525 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1172
override bool IsMoving
Definition: Chara.cs:606
bool IsNeutral()
Definition: Chara.cs:6264
Color colorHostile
Color colorFriend
Gradient gradientLVComparison
bool ShowBounty(Chara c)
Definition: GuildFighter.cs:39
bool HasBounty(Chara c)
Definition: GuildFighter.cs:44
Definition: Guild.cs:2
static GuildFighter Fighter
Definition: Guild.cs:23

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

Referenced by WidgetMouseover.Refresh().

◆ GetHoverText2()

override string Chara.GetHoverText2 ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6527 of file Chara.cs.

6528 {
6529 string text = "";
6530 if (knowFav)
6531 {
6532 text += Environment.NewLine;
6533 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
6534 }
6535 string text2 = "";
6537 {
6538 text2 += Environment.NewLine;
6539 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
6540 text2 += Environment.NewLine;
6541 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");
6542 text2 += Environment.NewLine;
6543 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
6544 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin;
6545 }
6547 {
6548 text2 += Environment.NewLine;
6549 text2 += "<size=14>";
6550 foreach (Hobby item in ListWorks())
6551 {
6552 text2 = text2 + item.Name + ", ";
6553 }
6554 foreach (Hobby item2 in ListHobbies())
6555 {
6556 text2 = text2 + item2.Name + ", ";
6557 }
6558 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
6559 }
6560 string text3 = "";
6561 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
6562 if (enumerable.Count() > 0)
6563 {
6564 text3 += Environment.NewLine;
6565 text3 += "<size=14>";
6566 int num = 0;
6567 foreach (BaseStats item3 in enumerable)
6568 {
6569 string text4 = item3.GetPhaseStr();
6570 if (text4.IsEmpty() || text4 == "#")
6571 {
6572 continue;
6573 }
6574 Color c = Color.white;
6575 switch (item3.source.group)
6576 {
6577 case "Bad":
6578 case "Debuff":
6579 case "Disease":
6581 break;
6582 case "Buff":
6584 break;
6585 }
6587 {
6588 text4 = text4 + "(" + item3.GetValue() + ")";
6589 if (resistCon != null && resistCon.ContainsKey(item3.id))
6590 {
6591 text4 = text4 + "{" + resistCon[item3.id] + "}";
6592 }
6593 }
6594 num++;
6595 text3 = text3 + text4.TagColor(c) + ", ";
6596 }
6597 if (num == 0)
6598 {
6599 text3 = "";
6600 }
6601 else
6602 {
6603 text = "";
6604 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
6605 }
6606 }
6608 {
6609 text3 += Environment.NewLine;
6610 foreach (ActList.Item item4 in ability.list.items)
6611 {
6612 text3 = text3 + item4.act.Name + ", ";
6613 }
6614 text3 = text3.TrimEnd(", ".ToCharArray());
6615 }
6616 return text + text2 + text3;
6617 }
override string ToString()
Definition: AIAct.cs:124
virtual string GetPhaseStr()
Definition: BaseStats.cs:47
virtual int GetValue()
Definition: BaseStats.cs:52
int idSkin
Definition: Card.cs:348
SourceCategory.Row GetFavCat()
Definition: Chara.cs:7680
bool knowFav
Definition: Chara.cs:411
override string GetName(NameStyle style, int num=-1)
Definition: Chara.cs:1339
override int DV
Definition: Chara.cs:727
List< Hobby > ListHobbies(bool useMemberType=true)
Definition: Chara.cs:8540
override int PV
Definition: Chara.cs:756
SourceThing.Row GetFavFood()
Definition: Chara.cs:7660
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:8513
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.idSkin, item, ActList.items, CharaAbility.list, EClass.pc, CoreDebug.showExtra, BaseStats.source, EClass.sources, SourceChara.Row.tactics, SourceManager.tactics, AIAct.ToString(), Card.trait, and Stats.value.

Referenced by WidgetMouseover.Refresh().

◆ GetIdPortrait()

string Chara.GetIdPortrait ( )
inline

Definition at line 7762 of file Chara.cs.

7763 {
7764 if (id == "olderyoungersister")
7765 {
7766 if (base.idSkin != 2)
7767 {
7768 return "UN_olderyoungersister";
7769 }
7770 return "UN_olderyoungersister_alt";
7771 }
7772 if (Portrait.allIds.Contains("UN_" + id + ".png"))
7773 {
7774 return "UN_" + id;
7775 }
7776 return base.c_idPortrait;
7777 }
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 7748 of file Chara.cs.

7749 {
7750 string text = race.id;
7751 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
7752 {
7753 return "foxfolk";
7754 }
7755 if (trait is TraitGuard)
7756 {
7757 return "guard";
7758 }
7759 return "";
7760 }

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

6714 {
6715 return GetSprite();
6716 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6383

◆ GetName()

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

Reimplemented from Card.

Definition at line 1339 of file Chara.cs.

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

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

Referenced by TraitStoryBookHome.OnRead().

◆ GetNearbyCatToSniff()

Chara Chara.GetNearbyCatToSniff ( )
inline

Definition at line 7700 of file Chara.cs.

7701 {
7702 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
7703 {
7704 if (enumerator.MoveNext())
7705 {
7706 return enumerator.Current;
7707 }
7708 }
7709 return null;
7710 }
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1204

References race.

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

◆ GetPietyValue()

int Chara.GetPietyValue ( )
inline

Definition at line 9662 of file Chara.cs.

9663 {
9664 if (base._IsPC)
9665 {
9666 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
9667 }
9668 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
9669 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 4901 of file Chara.cs.

4902 {
4903 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
4904 if (!IsPCFaction)
4905 {
4906 return;
4907 }
4909 {
4910 if (homeZone != null && EClass._zone != homeZone)
4911 {
4912 Msg.Say("returnHome", this, homeZone.Name);
4914 }
4915 }
4916 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
4917 {
4918 EClass.pc.party.AddMemeber(this, showMsg: true);
4919 }
4920 }
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 8491 of file Chara.cs.

8492 {
8493 BaseArea result = null;
8494 foreach (Hobby item in ListWorks())
8495 {
8496 AIWork aI = item.GetAI(this);
8497 if (aI.SetDestination())
8498 {
8499 if (aI.destArea != null)
8500 {
8501 result = aI.destArea;
8502 }
8503 else if (aI.destThing != null)
8504 {
8505 result = aI.destThing.pos.cell.room;
8506 }
8507 break;
8508 }
8509 }
8510 return result;
8511 }
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 6383 of file Chara.cs.

6384 {
6385 if (IsPCC)
6386 {
6387 PCC pCC = PCC.Get(pccData);
6388 pCC.Build();
6389 return pCC.variation.idle[0, 0];
6390 }
6391 if (spriteReplacer != null)
6392 {
6393 return spriteReplacer.data.GetSprite();
6394 }
6395 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);
6396 }
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 6407 of file Chara.cs.

6408 {
6409 if (IsPCC)
6410 {
6412 {
6414 }
6415 }
6416 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && GetBool(123))
6417 {
6418 return EClass.setting.pass.subDead;
6419 }
6420 return SubPassData.Default;
6421 }
bool GetBool(int id)
Definition: BaseCard.cs:15
ConSleep conSleep
Definition: Chara.cs:102
override bool IsDeadOrSleeping
Definition: Chara.cs:571
PassSetting pass
Definition: GameSetting.cs:303
bool altHeldPos
Definition: Player.cs:1073
static SubPassData Default
Definition: SubPassData.cs:7

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

◆ GetTextHappiness()

string Chara.GetTextHappiness ( )
inline

Definition at line 6940 of file Chara.cs.

6941 {
6942 return GetHappiness().ToString() ?? "";
6943 }
int GetHappiness()
Definition: Chara.cs:6930

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 8629 of file Chara.cs.

8630 {
8631 string text = (simple ? "" : ("hobby".lang() + ":"));
8632 foreach (Hobby item in ListHobbies())
8633 {
8634 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8635 }
8636 return text.TrimEnd(',');
8637 }

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 8639 of file Chara.cs.

8640 {
8641 string text = (simple ? "" : ("work".lang() + ":"));
8642 foreach (Hobby item in ListWorks())
8643 {
8644 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
8645 }
8646 return text.TrimEnd(',');
8647 }

References item.

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

◆ GetTopicText()

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

Definition at line 6619 of file Chara.cs.

6620 {
6621 string key = source.idText.IsEmpty(id);
6622 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
6623 {
6624 key = "littleOne2";
6625 }
6626 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
6627 if (row == null)
6628 {
6629 return null;
6630 }
6631 string text = row.GetText(topic, returnNull: true);
6632 if (text.IsEmpty())
6633 {
6634 return null;
6635 }
6636 if (text.StartsWith("@"))
6637 {
6638 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
6639 if (row == null)
6640 {
6641 return null;
6642 }
6643 text = row.GetText(topic, returnNull: true);
6644 if (text.IsEmpty())
6645 {
6646 return null;
6647 }
6648 }
6649 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
6650 }
SourceCharaText charaText

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 7722 of file Chara.cs.

7723 {
7724 int num = 0;
7725 if (base.c_upgrades != null)
7726 {
7727 num += base.c_upgrades.spent;
7728 }
7729 if (base.c_genes != null)
7730 {
7731 num += base.c_genes.GetTotalCost();
7732 }
7733 return num + base.feat;
7734 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 8560 of file Chara.cs.

8561 {
8562 foreach (Hobby item in ListWorks())
8563 {
8564 if (item.source.alias == id)
8565 {
8566 return item;
8567 }
8568 }
8569 foreach (Hobby item2 in ListHobbies())
8570 {
8571 if (item2.source.alias == id)
8572 {
8573 return item2;
8574 }
8575 }
8576 return null;
8577 }
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 8712 of file Chara.cs.

8713 {
8714 if (_workSummary == null)
8715 {
8716 _workSummary = new WorkSummary();
8717 }
8718 return _workSummary;
8719 }
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 7861 of file Chara.cs.

7862 {
7863 if (c.IsHostile() || c.IsDeadOrSleeping)
7864 {
7865 Msg.Say("affinityNone", c, this);
7866 return;
7867 }
7868 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
7869 {
7870 bool num = t.blessedState == BlessedState.Doomed;
7871 int num2 = 200 + t.LV * 3;
7872 if (t.rarity == Rarity.Legendary)
7873 {
7874 num2 *= 3;
7875 }
7876 if (t.rarity >= Rarity.Mythical)
7877 {
7878 num2 *= 5;
7879 }
7880 if (num)
7881 {
7882 num2 *= 2;
7883 }
7884 EClass.pc.PlayEffect("identify");
7885 EClass.pc.PlaySound("identify");
7886 c.PlayEffect("mutation");
7887 c.Say("draw_curse", c, t);
7888 t.Destroy();
7889 List<Element> list = new List<Element>();
7890 foreach (Element value in EClass.pc.elements.dict.Values)
7891 {
7892 if (value is Spell)
7893 {
7894 list.Add(value);
7895 }
7896 }
7897 if (list.Count == 0)
7898 {
7900 return;
7901 }
7902 Element element = list.RandomItem();
7903 EClass.pc.ModExp(element.id, num2);
7904 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
7905 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
7906 return;
7907 }
7908 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
7909 {
7910 GiveLovePotion(c, t);
7911 return;
7912 }
7913 if (t.trait is TraitErohon && c.id == t.c_idRefName)
7914 {
7915 c.OnGiveErohon(t);
7916 return;
7917 }
7918 if (t.trait is TraitTicketMassage)
7919 {
7920 t.ModNum(-1);
7921 c.Talk("ticket");
7922 switch (t.id)
7923 {
7924 case "ticket_massage":
7925 c.ModAffinity(EClass.pc, 10);
7927 {
7928 target = c
7929 });
7930 break;
7931 case "ticket_armpillow":
7932 c.ModAffinity(EClass.pc, 20);
7933 EClass.pc.AddCondition<ConSleep>(300, force: true);
7934 c.SetAI(new AI_ArmPillow
7935 {
7936 target = EClass.pc
7937 });
7938 break;
7939 case "ticket_champagne":
7940 c.ModAffinity(EClass.pc, 10);
7942 break;
7943 }
7944 return;
7945 }
7946 if (t.id == "flyer")
7947 {
7948 stamina.Mod(-1);
7949 if (c.things.Find((Thing a) => a.id == "flyer") != null)
7950 {
7951 c.Talk("flyer_miss");
7952 DoHostileAction(c);
7953 return;
7954 }
7955 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
7956 {
7957 Msg.Say("affinityNone", c, this);
7958 t.Destroy();
7959 elements.ModExp(291, 10f);
7960 return;
7961 }
7962 elements.ModExp(291, 50f);
7963 }
7964 if (t.id == "statue_weird")
7965 {
7966 EClass.pc.Say("statue_sell");
7967 }
7968 t.isGifted = true;
7969 c.nextUse = c.affinity.OnGift(t);
7970 if (!t.isDestroyed)
7971 {
7972 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
7973 {
7974 q.OnGiveItem(c, t);
7975 });
7976 if (c.TryEquip(t))
7977 {
7978 c.nextUse = null;
7979 }
7980 }
7981 }
Thing OnGift(Thing t)
Definition: Affinity.cs:129
int ExpToNext
Definition: Card.cs:1970
bool isCopy
Definition: Card.cs:864
bool IsCursed
Definition: Card.cs:2217
int CHA
Definition: Card.cs:2309
bool IsEquipmentOrRanged
Definition: Card.cs:2180
void SayNothingHappans()
Definition: Card.cs:6494
string c_idRefName
Definition: Card.cs:1615
void AddExp(int a)
Definition: Card.cs:2903
void GiveLovePotion(Chara c, Thing t)
Definition: Chara.cs:7994
Affinity affinity
Definition: Chara.cs:312
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7357
void OnGiveErohon(Thing t)
Definition: Chara.cs:7983
QuestManager quests
Definition: Game.cs:179
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
virtual void OnGiveItem(Chara c, Thing t)
Definition: Quest.cs:531

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

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

◆ GiveLovePotion()

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

Definition at line 7994 of file Chara.cs.

7995 {
7996 c.Say("give_love", c, t);
7997 c.PlaySound(t.material.GetSoundDead());
7998 c.ShowEmo(Emo.angry);
7999 c.ModAffinity(EClass.pc, -20, show: false);
8000 c.Talk("pervert");
8001 t.Destroy();
8002 }

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

6025 {
6026 if (enemy == null && !IsPC)
6027 {
6028 if (GetInt(106) == 0)
6029 {
6030 TalkTopic("aggro");
6031 }
6032 if (OriginalHostility != Hostility.Enemy)
6033 {
6034 ShowEmo(Emo.angry);
6035 }
6036 SetEnemy(_tg.Chara);
6037 }
6039 {
6040 if (hostility >= Hostility.Neutral)
6041 {
6042 Say("angry", this);
6043 }
6044 hostility = Hostility.Enemy;
6045 }
6046 }
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual bool IsPCFactionMinion
Definition: Card.cs:2117

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

1263 {
1264 return HasAccess(c.pos);
1265 }
bool HasAccess(Card c)
Definition: Chara.cs:1262

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

1268 {
1269 if (!EClass._zone.IsPCFaction || p.cell.room == null || IsPC)
1270 {
1271 return true;
1272 }
1273 return p.cell.room.data.accessType switch
1274 {
1275 BaseArea.AccessType.Resident => memberType == FactionMemberType.Default,
1276 BaseArea.AccessType.Private => false,
1277 _ => true,
1278 };
1279 }

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

8965 {
8966 for (int i = 0; i < conditions.Count; i++)
8967 {
8968 if (conditions[i] is T)
8969 {
8970 return true;
8971 }
8972 }
8973 return false;
8974 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8286 of file Chara.cs.

8287 {
8288 if (_cooldowns != null)
8289 {
8290 for (int i = 0; i < _cooldowns.Count; i++)
8291 {
8292 if (_cooldowns[i] / 1000 == idEle)
8293 {
8294 return true;
8295 }
8296 }
8297 }
8298 return false;
8299 }

Referenced by RequestProtection().

◆ HasHigherGround()

bool Chara.HasHigherGround ( Card  c)
inline

Definition at line 1172 of file Chara.cs.

1173 {
1174 if (c == null)
1175 {
1176 return false;
1177 }
1178 float num = renderer.position.y - pos.Position(0).y + (_isLevitating ? 0.4f : 0f);
1179 float num2 = c.renderer.position.y - c.pos.Position(0).y + ((c.isChara && c.Chara._isLevitating) ? 0.4f : 0f);
1180 return num > num2 + 0.1f;
1181 }
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 8410 of file Chara.cs.

8411 {
8412 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
8413 listHobby.Clear();
8414 if (_works == null || _hobbies == null)
8415 {
8416 RerollHobby();
8417 }
8418 foreach (int work in _works)
8419 {
8420 if (work == num)
8421 {
8422 return true;
8423 }
8424 }
8425 foreach (int hobby in _hobbies)
8426 {
8427 if (hobby == num)
8428 {
8429 return true;
8430 }
8431 }
8432 return false;
8433 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:8673
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2288 of file Chara.cs.

2289 {
2290 foreach (Chara chara in EClass._map.charas)
2291 {
2292 if (chara.c_uidMaster == base.uid)
2293 {
2294 return true;
2295 }
2296 }
2297 return false;
2298 }

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

Referenced by ActEffect.ProcAt().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1690 of file Chara.cs.

1691 {
1692 Cure(CureType.Death);
1693 base.hp = MaxHP;
1694 mana.value = mana.max;
1695 stamina.value = stamina.max;
1696 Refresh();
1697 }
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 4351 of file Chara.cs.

4352 {
4353 if (held == t || t.isDestroyed || t.Num <= 0)
4354 {
4355 return;
4356 }
4357 if (IsPC && t.isNPCProperty)
4358 {
4359 t.isNPCProperty = false;
4361 pos.TryWitnessCrime(this);
4362 }
4363 PickHeld();
4364 if (t.isChara)
4365 {
4367 {
4368 t.ShowEmo(Emo.love);
4369 }
4370 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4371 }
4372 else
4373 {
4374 if (num == -1 || num > t.Num)
4375 {
4376 num = t.Num;
4377 }
4378 if (num < t.Num)
4379 {
4380 t = t.Split(num);
4381 }
4382 }
4383 if (t.GetRootCard() != this)
4384 {
4385 t = Pick(t.Thing, msg: false, tryStack: false);
4386 if (t.GetRootCard() != this)
4387 {
4388 return;
4389 }
4390 }
4391 held = t;
4392 if (held.GetLightRadius() > 0)
4393 {
4395 }
4396 if (IsPC)
4397 {
4399 WidgetHotbar.dirtyCurrentItem = true;
4400 }
4401 }
Thing Split(int a)
Definition: Card.cs:3382
bool isNPCProperty
Definition: Card.cs:540
void RecalculateFOV()
Definition: Card.cs:6064
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2089
int GetLightRadius()
Definition: Card.cs:6106
void PickHeld(bool msg=false)
Definition: Chara.cs:4403
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 8796 of file Chara.cs.

8797 {
8798 if (!onDeserialize)
8799 {
8800 _cints[10] = 20;
8801 _cints[11] = 70;
8802 _cints[13] = 70;
8803 _cints[14] = 70;
8804 _cints[15] = 70;
8805 _cints[17] = 0;
8806 _cints[18] = 0;
8807 }
8808 foreach (Condition condition in conditions)
8809 {
8810 condition.SetOwner(this, onDeserialize);
8811 }
8812 }
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 7233 of file Chara.cs.

7234 {
7235 if (t == null)
7236 {
7237 t = FindBestFoodToEat();
7238 }
7239 if (t == null)
7240 {
7241 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7242 }
7243 if (t == null)
7244 {
7245 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7246 }
7247 if (t != null)
7248 {
7249 Say("eat_start", this, t.Duplicate(1));
7250 if (sound)
7251 {
7252 PlaySound("eat");
7253 }
7254 FoodEffect.Proc(this, t);
7255 }
7256 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7212
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(), Tick(), and CoreDebug.UpdateInput().

◆ IsBranchMember()

bool Chara.IsBranchMember ( )
inline

Definition at line 6274 of file Chara.cs.

6275 {
6276 if (faction == EClass.Home)
6277 {
6278 return homeZone == EClass.game.activeZone;
6279 }
6280 return false;
6281 }
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 1159 of file Chara.cs.

1160 {
1161 if (host == null || includeRide)
1162 {
1163 if (Evalue(1421) <= 0)
1164 {
1165 return base.hp < MaxHP / 5;
1166 }
1167 return base.hp + mana.value < (MaxHP + mana.max) / 5;
1168 }
1169 return false;
1170 }

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

2433 {
2434 if (!currentZone.IsRegion && p.IsValid)
2435 {
2436 CellDetail detail = p.detail;
2437 if (detail != null && detail.charas.Count > 0)
2438 {
2439 foreach (Chara chara in p.detail.charas)
2440 {
2441 if (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed)
2442 {
2443 if (cancelAI && EClass.pc.ai is GoalManualMove)
2444 {
2445 EClass.pc.ai.Cancel();
2446 }
2447 return true;
2448 }
2449 }
2450 }
2451 }
2452 return false;
2453 }
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 2332 of file Chara.cs.

2333 {
2334 if (!IsPCPartyMinion)
2335 {
2336 return false;
2337 }
2338 foreach (Quest item in EClass.game.quests.list)
2339 {
2340 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2341 {
2342 return true;
2343 }
2344 }
2345 return false;
2346 }
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 6318 of file Chara.cs.

6319 {
6320 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6321 {
6323 {
6324 return true;
6325 }
6326 }
6327 else if (IsHostile() && c.IsHostile())
6328 {
6329 return true;
6330 }
6331 return false;
6332 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6230 of file Chara.cs.

6231 {
6232 if (c == null)
6233 {
6234 return false;
6235 }
6236 if (base.IsPCFactionOrMinion)
6237 {
6238 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6239 {
6240 return true;
6241 }
6242 }
6243 else
6244 {
6246 {
6247 return true;
6248 }
6249 if (OriginalHostility >= Hostility.Friend)
6250 {
6251 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6252 {
6253 return true;
6254 }
6255 }
6256 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6257 {
6258 return true;
6259 }
6260 }
6261 return false;
6262 }
bool IsCriminal
Definition: Player.cs:1257

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

◆ IsInHomeZone()

bool Chara.IsInHomeZone ( )
inline

Definition at line 6288 of file Chara.cs.

6289 {
6290 return EClass.game.activeZone == currentZone;
6291 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6293 of file Chara.cs.

6293 : TraitSpot
6294 {
6295 foreach (T item in EClass._map.props.installed.traits.List<T>())
6296 {
6297 foreach (Point item2 in item.ListPoints())
6298 {
6299 if (pos.Equals(item2))
6300 {
6301 return true;
6302 }
6303 }
6304 }
6305 return false;
6306 }
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 6264 of file Chara.cs.

6265 {
6266 return hostility == Hostility.Neutral;
6267 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 7805 of file Chara.cs.

7806 {
7807 int num2 = ((!HasElement(1411)) ? 1 : 3);
7808 if (GetBurden(t, num) >= num2)
7809 {
7810 return false;
7811 }
7812 return true;
7813 }
int GetBurden(Card t=null, int num=-1)
Definition: Chara.cs:1755

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

◆ Kick() [1/2]

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

Definition at line 5492 of file Chara.cs.

5493 {
5495 {
5496 return;
5497 }
5498 if (t.IsPC)
5499 {
5501 }
5502 if (t.host != null)
5503 {
5504 return;
5505 }
5506 if (t == this)
5507 {
5508 if (!ignoreSelf)
5509 {
5510 Debug.Log(t.pos.GetNearestPoint());
5511 if (TryMove(t.pos.GetNearestPoint()) != MoveResult.Success)
5512 {
5514 }
5515 }
5516 return;
5517 }
5518 if (show)
5519 {
5520 Say("kick", this, t);
5521 }
5522 PlaySound("kick");
5523 if ((t.conSuspend == null || t.conSuspend.uidMachine != 0) && t.trait.CanBePushed && (!t.IsHostile() || EClass.rnd(2) == 0) && !t.noMove && !t.isRestrained)
5524 {
5525 t.MoveByForce(t.pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true), this, !t.pos.IsBlocked);
5526 }
5527 if (t.conSleep != null)
5528 {
5529 t.conSleep.Kill();
5530 }
5531 if (IsPC && t.IsFriendOrAbove() && !t.IsPCFactionOrMinion && karmaLoss)
5532 {
5534 }
5535 t.PlayEffect("kick");
5536 }
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:5551
ConSuspend conSuspend
Definition: Chara.cs:104
MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2656
int uidMachine
Definition: ConSuspend.cs:6

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

◆ Kick() [2/2]

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

Definition at line 5484 of file Chara.cs.

5485 {
5486 foreach (Chara item in p.ListCharas())
5487 {
5488 Kick(item, ignoreSelf);
5489 }
5490 }
List< Chara > ListCharas()
Definition: Point.cs:1155

References item, and Kick.

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

◆ ListAvailabeFeats()

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

Definition at line 9362 of file Chara.cs.

9363 {
9364 List<Element> list = new List<Element>();
9365 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
9366 {
9368 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
9369 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
9370 {
9371 list.Add(Element.Create(feat.id, num) as Feat);
9372 }
9373 }
9374 return list;
9375 }
int feat
Definition: Card.cs:360
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1097
Definition: FEAT.cs:261

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

8541 {
8542 listHobby.Clear();
8543 if (!useMemberType || memberType != FactionMemberType.Livestock)
8544 {
8545 if (_hobbies == null)
8546 {
8547 RerollHobby();
8548 }
8549 foreach (int hobby in _hobbies)
8550 {
8551 listHobby.Add(new Hobby
8552 {
8553 id = hobby
8554 });
8555 }
8556 }
8557 return listHobby;
8558 }

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

8514 {
8515 listHobby.Clear();
8516 if (useMemberType && memberType == FactionMemberType.Livestock)
8517 {
8518 listHobby.Add(new Hobby
8519 {
8520 id = 45
8521 });
8522 }
8523 else
8524 {
8525 if (_works == null)
8526 {
8527 RerollHobby();
8528 }
8529 foreach (int work in _works)
8530 {
8531 listHobby.Add(new Hobby
8532 {
8533 id = work
8534 });
8535 }
8536 }
8537 return listHobby;
8538 }

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

3471 {
3472 angle = Util.GetAngle(p.x - pos.x, p.z - pos.z);
3473 if (EClass._zone.IsRegion)
3474 {
3475 if (angle > 100f && angle < 170f)
3476 {
3477 base.dir = 2;
3478 }
3479 else if (angle > 170f && angle < 190f)
3480 {
3481 base.dir = 0;
3482 }
3483 else if (angle > 190f || (angle < -10f && angle > -100f))
3484 {
3485 base.dir = 3;
3486 }
3487 else
3488 {
3489 base.dir = 1;
3490 }
3491 angle -= 45f;
3492 }
3493 else if (angle > 170f && angle < 235f)
3494 {
3495 base.dir = 0;
3496 }
3497 else if (angle > 80f && angle < 145f)
3498 {
3499 base.dir = 1;
3500 }
3501 else if (angle > -100f && angle < -35f)
3502 {
3503 base.dir = 3;
3504 }
3505 else if (angle > -10f && angle < 55f)
3506 {
3507 base.dir = 2;
3508 }
3510 }

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2223 of file Chara.cs.

2224 {
2225 if (IsLocalChara && !base.IsUnique)
2226 {
2227 Debug.Log("Creating Replacement NPC for:" + this);
2229 }
2230 _MakeAlly();
2231 if (msg)
2232 {
2233 EClass.pc.Say("hire", this);
2234 EClass.Sound.Play("good");
2235 }
2236 EClass.pc.party.AddMemeber(this);
2237 if (EClass._zone.IsTown)
2238 {
2240 }
2241 }
Chara CreateReplacement()
Definition: Chara.cs:7639
void _MakeAlly()
Definition: Chara.cs:2243
virtual bool IsTown
Definition: Zone.cs:220
void RefreshListCitizen()
Definition: Zone.cs:3440

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(), ActRide.Ride(), DramaOutcome.sister_friend(), ActThrow.Throw(), and Religion.TryGetGift().

◆ MakeBraineCell()

Thing Chara.MakeBraineCell ( )
inline

Definition at line 7784 of file Chara.cs.

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

References DNA.GenerateGene().

Referenced by CoreDebug.UpdateInput().

◆ MakeGene()

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

Definition at line 7779 of file Chara.cs.

7780 {
7781 return DNA.GenerateGene(this, type);
7782 }

References DNA.GenerateGene().

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

◆ MakeGrave()

void Chara.MakeGrave ( string  lastword)
inline

Definition at line 4990 of file Chara.cs.

4991 {
4992 if (!EClass._zone.IsRegion)
4993 {
4994 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
4995 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
4996 {
4997 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
4998 }
4999 Thing thing = ThingGen.Create(list.RandomItem());
5000 thing.MakeRefFrom(this);
5001 if (!lastword.IsEmpty())
5002 {
5003 thing.c_note = lastword;
5004 }
5005 thing.isModified = true;
5006 EClass._zone.AddCard(thing, pos).Install();
5007 }
5008 }
void MakeRefFrom(string id)
Definition: Card.cs:5458

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

2278 {
2279 ReleaseMinion();
2280 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2281 this.hostility = hostility2;
2282 base.c_uidMaster = _master.uid;
2283 base.c_minionType = type;
2284 master = _master;
2285 Refresh();
2286 }
int uid
Definition: Card.cs:120

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

2218 {
2219 _MakeAlly();
2220 EClass.pc.party.AddMemeber(this);
2221 }

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

7568 {
7569 if (c == this)
7570 {
7571 return;
7572 }
7573 if (IsPC)
7574 {
7575 c.ModAffinity(EClass.pc, a, show);
7576 return;
7577 }
7578 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
7579 if (IsPCFaction && homeBranch != null)
7580 {
7581 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
7582 }
7583 bool flag = a > 0;
7584 if (flag)
7585 {
7586 a = a * num / 100;
7587 if (affinity.GetLunchChance() > EClass.rnd(100) && GetInt(71) >= 0 && GetInt(71) < EClass.world.date.GetRaw())
7588 {
7589 SetInt(71, -1);
7590 }
7591 }
7592 if (show)
7593 {
7594 if (a == 0)
7595 {
7596 if (!showOnlyEmo)
7597 {
7598 Say("affinityNone", this, c);
7599 }
7600 }
7601 else
7602 {
7603 ShowEmo((!flag) ? Emo.angry : Emo.love);
7604 c.ShowEmo(flag ? Emo.love : Emo.sad);
7605 if (!showOnlyEmo)
7606 {
7607 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
7608 }
7609 }
7610 }
7611 if (c.IsPC)
7612 {
7613 a = affinity.Mod(a);
7614 }
7615 }
int Mod(int a)
Definition: Affinity.cs:188
int GetLunchChance()
Definition: Affinity.cs:86
Stats hygiene
Definition: Chara.cs:1134
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(), 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 9319 of file Chara.cs.

9320 {
9321 if (a > 0)
9322 {
9323 if (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0)
9324 {
9325 return;
9326 }
9327 int num = Evalue(412);
9328 if (num != 0)
9329 {
9330 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
9331 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
9332 }
9333 }
9334 if (a == 0)
9335 {
9336 return;
9337 }
9338 int num3 = (corruption + a) / 100 - corruption / 100;
9339 for (int i = 0; i < Mathf.Abs(num3); i++)
9340 {
9341 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
9342 {
9343 break;
9344 }
9345 }
9346 corruption += a;
9347 int num4 = 0;
9348 foreach (Element value in elements.dict.Values)
9349 {
9350 if (value.source.category == "ether")
9351 {
9352 num4 += value.Value;
9353 }
9354 }
9355 if (num4 > 0 && IsPC)
9356 {
9357 Tutorial.Reserve("ether");
9358 }
9359 corruption = num4 * 100 + corruption % 100;
9360 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9465
int corruption
Definition: Chara.cs:375
static float rndf(float a)
Definition: EClass.cs:92

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

Referenced by CoreDebug.Fix_EtherDisease().

◆ ModHeight()

void Chara.ModHeight ( int  a)
inline

Definition at line 9276 of file Chara.cs.

9277 {
9278 if (!HasElement(450))
9279 {
9280 int height = bio.height;
9281 height = height * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9282 if (height < 1)
9283 {
9284 height = 1;
9285 }
9286 if (height != bio.height)
9287 {
9288 bio.height = height;
9289 Say((a > 0) ? "height_gain" : "height_lose", this);
9290 }
9291 }
9292 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 9714 of file Chara.cs.

9715 {
9716 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
9717 {
9718 return;
9719 }
9720 bool flag = HasElement(1215);
9721 if (tempElements == null)
9722 {
9724 tempElements.SetParent(this);
9725 }
9726 if (a > 0 && flag)
9727 {
9728 a = a * 150 / 100;
9729 }
9730 int num = elements.ValueWithoutLink(ele);
9731 int num2 = Mathf.Abs(num) + 100;
9732 int num3 = num2 / (flag ? 2 : 4);
9733 int num4 = -num - 100;
9734 int num5 = tempElements.Base(ele);
9735 int num6 = num5 + a;
9736 if (onlyRenew)
9737 {
9738 num3 = Mathf.Min(a, num3);
9739 num4 = Mathf.Max(a, -num2 / 3);
9740 }
9741 if (a > 0 && num6 > num3)
9742 {
9743 a = ((num3 > num5) ? (num3 - num5) : 0);
9744 }
9745 if (a < 0 && num6 < num4)
9746 {
9747 a = ((num4 < num5) ? (num4 - num5) : 0);
9748 }
9749 Element element = tempElements.ModBase(ele, a);
9750 if (element.vBase == 0)
9751 {
9752 tempElements.Remove(element.id);
9753 if (tempElements.dict.Count == 0)
9754 {
9755 tempElements = null;
9756 }
9757 }
9758 }
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 9294 of file Chara.cs.

9295 {
9296 if (HasElement(450) || a == 0)
9297 {
9298 return;
9299 }
9300 int weight = bio.weight;
9301 int height = bio.height;
9302 int num = height * height * 18 / 25000;
9303 int num2 = height * height * 24 / 10000;
9304 if (ignoreLimit || (weight > num && weight < num2))
9305 {
9306 weight = weight * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9307 if (weight < 1)
9308 {
9309 weight = 1;
9310 }
9311 if (weight != bio.weight)
9312 {
9313 bio.weight = weight;
9314 Say((a > 0) ? "weight_gain" : "weight_lose", this);
9315 }
9316 }
9317 }
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 2546 of file Chara.cs.

2547 {
2548 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2549 {
2550 ai.Current.TryCancel(c);
2551 }
2552 }
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:2680

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

3382 {
3383 MoveHome(EClass.game.world.FindZone(id), x, z);
3384 }
void MoveHome(string id, int x=-1, int z=-1)
Definition: Chara.cs:3381
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 3386 of file Chara.cs.

3387 {
3388 if (isDead)
3389 {
3390 Revive();
3391 }
3392 else
3393 {
3394 Cure(CureType.Death);
3395 }
3396 CureCondition<ConSuspend>();
3397 if (IsPCParty)
3398 {
3400 }
3401 FactionBranch factionBranch = homeBranch;
3402 if (x == -1)
3403 {
3404 x = 50;
3405 }
3406 if (z == -1)
3407 {
3408 z = 50;
3409 }
3410 Point point = new Point(x, z);
3411 if (zone.IsActiveZone)
3412 {
3413 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3414 }
3415 zone.AddCard(this, point);
3416 SetHomeZone(zone);
3417 global.transition = new ZoneTransition
3418 {
3419 state = ZoneTransition.EnterState.Dead,
3420 x = point.x,
3421 z = point.z
3422 };
3423 orgPos = new Point(x, z);
3424 if (factionBranch != null)
3425 {
3427 factionBranch.policies.Validate();
3428 }
3429 }
void SetHomeZone(Zone zone)
Definition: Chara.cs:1408
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:8579
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 2528 of file Chara.cs.

2529 {
2530 List<Point> list = new List<Point>();
2531 pos.ForeachNeighbor(delegate(Point p)
2532 {
2533 list.Add(p.Copy());
2534 });
2535 list.Shuffle();
2536 foreach (Point item in list)
2537 {
2538 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2539 {
2540 return true;
2541 }
2542 }
2543 return false;
2544 }
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1381

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

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2514 of file Chara.cs.

2515 {
2516 Point randomNeighbor = pos.GetRandomNeighbor();
2517 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2518 {
2519 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2520 {
2521 return false;
2522 }
2523 return TryMove(randomNeighbor) == MoveResult.Success;
2524 }
2525 return false;
2526 }
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 3269 of file Chara.cs.

3270 {
3271 if (z == currentZone)
3272 {
3273 return;
3274 }
3275 if (HasCondition<ConInvulnerable>())
3276 {
3277 RemoveCondition<ConInvulnerable>();
3278 }
3279 if (IsPC)
3280 {
3281 EClass.player.nextZone = z;
3283 {
3286 {
3287 if (EClass.player.returnInfo != null)
3288 {
3289 EClass.player.returnInfo.turns += 5;
3290 }
3292 {
3293 EClass.game.Save(isAutoSave: true);
3294 }
3295 }
3296 EClass.player.deathZoneMove = false;
3297 }
3299 if (currentZone.instance != null)
3300 {
3302 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3303 transition = new ZoneTransition
3304 {
3305 state = instance.ReturnState,
3306 x = instance.x,
3307 z = instance.z
3308 };
3309 instance.OnLeaveZone();
3310 Debug.Log(z);
3311 }
3312 EInput.Consume(consumeAxis: true);
3313 EClass.player.uidLastZone = currentZone.uid;
3315 {
3317 {
3318 Msg.Say("enterZone", z.Name);
3319 }
3320 else
3321 {
3322 if (z.IsRegion)
3323 {
3324 Msg.Say("leaveZone", currentZone.Name);
3325 }
3326 else if (z.id != currentZone.id)
3327 {
3328 Msg.Say("enterZone", z.Name);
3329 }
3330 EClass.player.lastZonePos = pos.Copy();
3331 }
3332 EClass.player.lastTransition = transition;
3333 }
3334 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3335 {
3337 }
3338 EClass.player.listSummon = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3339 foreach (Chara item2 in EClass.player.listSummon)
3340 {
3341 EClass._zone.RemoveCard(item2);
3342 }
3343 }
3344 if (party != null && party.leader == this)
3345 {
3346 foreach (Chara member in party.members)
3347 {
3348 if (member != this && !member.isDead && member.parent is Zone)
3349 {
3350 member.MoveZone(z);
3351 }
3352 }
3353 }
3354 if (global == null)
3355 {
3356 Debug.Log(base.Name);
3357 return;
3358 }
3359 transition.uidLastZone = currentZone?.uid ?? 0;
3360 global.transition = transition;
3361 if (z.IsActiveZone)
3362 {
3363 Point spawnPos = z.GetSpawnPos(this);
3364 global.transition = null;
3365 if (IsPC)
3366 {
3367 EClass.player.lastTransition = null;
3368 }
3369 z.AddCard(this, spawnPos);
3370 if (IsBranchMember())
3371 {
3373 }
3374 }
3375 else
3376 {
3377 z.AddCard(this);
3378 }
3379 }
MinionType c_minionType
Definition: Card.cs:962
bool IsBranchMember()
Definition: Chara.cs:6274
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2323
bool ignoreAutoSave
Definition: CoreDebug.cs:126
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:1008
RoomManager rooms
Definition: Map.cs:31
Chara leader
Definition: Party.cs:30
bool deathZoneMove
Definition: Player.cs:1089
List< Chara > listSummon
Definition: Player.cs:1141
ReturnInfo returnInfo
Definition: Player.cs:789
bool simulatingZone
Definition: Player.cs:1099
void AssignCharas()
Definition: RoomManager.cs:39
int uid
Definition: Spatial.cs:70
string id
Definition: Spatial.cs:13
virtual ZoneTransition.EnterState ReturnState
Definition: ZoneInstance.cs:26
virtual void OnLeaveZone()
Definition: ZoneInstance.cs:36
virtual bool WillAutoSave
Definition: Zone.cs:258
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
Definition: Zone.cs:1323

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

3262 {
3264 {
3265 state = state
3266 });
3267 }

◆ MutateRandom()

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

Definition at line 9465 of file Chara.cs.

9466 {
9467 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
9468 {
9469 Say("resistMutation", this);
9470 return false;
9471 }
9472 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
9473 for (int i = 0; i < tries; i++)
9474 {
9475 SourceElement.Row row = ie.RandomItem();
9476 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
9477 {
9478 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
9479 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
9480 if (base.c_corruptionHistory.Count == 0)
9481 {
9482 base.c_corruptionHistory = null;
9483 }
9484 }
9485 Element element = elements.GetElement(row.id);
9486 int num = 1;
9487 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))
9488 {
9489 continue;
9490 }
9491 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
9492 {
9493 row = EClass.sources.elements.alias[row.aliasParent];
9494 element = elements.GetElement(row.id);
9495 }
9496 bool flag = row.tag.Contains("neg");
9497 if (vec > 0)
9498 {
9499 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
9500 {
9501 continue;
9502 }
9503 }
9504 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
9505 {
9506 continue;
9507 }
9508 bool flag2 = true;
9509 if (element != null)
9510 {
9511 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
9512 if (num > element.source.max)
9513 {
9514 num = element.source.max - 1;
9515 }
9516 flag = (flag && num > element.Value) || (!flag && num < element.Value);
9517 flag2 = num > element.Value;
9518 if (vec > 0 && !flag2)
9519 {
9520 continue;
9521 }
9522 }
9523 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
9524 SetFeat(row.id, num);
9525 if (flag2 && ether)
9526 {
9527 if (base.c_corruptionHistory == null)
9528 {
9529 base.c_corruptionHistory = new List<int>();
9530 }
9531 base.c_corruptionHistory.Add(row.id);
9532 if (IsPCFaction)
9533 {
9534 Element element2 = elements.GetElement(row.id);
9535 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
9536 }
9538 {
9539 EClass.player.flags.gotEtherDisease = true;
9540 Thing thing = ThingGen.Create("parchment");
9541 thing.SetStr(53, "letter_ether");
9542 Thing thing2 = ThingGen.Create("1165");
9543 thing2.SetBlessedState(BlessedState.Normal);
9544 Thing p = ThingGen.CreateParcel(null, thing2, thing);
9546 }
9547 }
9548 if (EClass.core.IsGameStarted && pos != null)
9549 {
9550 PlaySound(ether ? "mutation_ether" : "mutation");
9551 PlayEffect("mutation");
9553 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9554 }
9555 return true;
9556 }
9557 Say("nothingHappens");
9558 return false;
9559 }
void SetStr(int id, string value=null)
Definition: BaseCard.cs:63
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3787
bool IsGameStarted
Definition: Core.cs:84
bool Has(int ele)
Color MutateBad
Definition: MsgColors.cs:21
Color MutateGood
Definition: MsgColors.cs:19
bool gotEtherDisease
Definition: Player.cs:458
static Thing CreateParcel(string idLang=null, params Thing[] things)
Definition: ThingGen.cs:42
void SendPackage(Thing p)
Definition: World.cs:68

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

◆ OnAdvanceDay()

void Chara.OnAdvanceDay ( )
inline

Definition at line 9607 of file Chara.cs.

9608 {
9609 if (_historyFood != null)
9610 {
9611 while (_historyFood.Count > 5)
9612 {
9613 _historyFood.RemoveAt(_historyFood.Count - 1);
9614 }
9615 if (_historyFood[0].Count > 0)
9616 {
9617 _historyFood.Insert(0, new List<string>());
9618 }
9619 }
9620 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1414 of file Chara.cs.

1415 {
1416 if (!IsGlobal)
1417 {
1418 return;
1419 }
1420 memberType = FactionMemberType.Default;
1421 foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)).ToList())
1422 {
1424 }
1425 UniqueData uniqueData = base.c_uniqueData;
1426 if (uniqueData != null)
1427 {
1428 Debug.Log(uniqueData.uidZone + "/" + EClass.game.spatials.map.ContainsKey(uniqueData.uidZone) + "/" + uniqueData.x + "/" + uniqueData.y);
1429 }
1430 if (uniqueData != null && EClass.game.spatials.map.ContainsKey(uniqueData.uidZone))
1431 {
1432 MoveHome(EClass.game.spatials.map[uniqueData.uidZone] as Zone, uniqueData.x, uniqueData.y);
1433 return;
1434 }
1435 Zone z = EClass.game.spatials.Find("somewhere");
1436 if (trait is TraitAdventurer)
1437 {
1438 z = EClass.world.region.ListTowns().RandomItem();
1439 SetHomeZone(z);
1440 }
1441 MoveZone(z, ZoneTransition.EnterState.RandomVisit);
1442 }
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
Definition: Chara.cs:4167
List< Zone > ListTowns()
Definition: Region.cs:267
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 1481 of file Chara.cs.

1482 {
1483 if (source.job == "*r")
1484 {
1485 base.c_idJob = EClass.sources.jobs.rows.Where((SourceJob.Row j) => j.playable < 4).RandomItem().id;
1486 }
1487 if (bp.idJob != null)
1488 {
1489 base.c_idJob = bp.idJob;
1490 }
1491 if (bp.idRace != null)
1492 {
1493 base.c_idRace = bp.idRace;
1494 }
1495 }
CardBlueprint bp
Definition: Card.cs:75
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 1497 of file Chara.cs.

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

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

◆ OnDeserialized()

override void Chara.OnDeserialized ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1309 of file Chara.cs.

1310 {
1311 isCreated = true;
1312 _cbits1.Bits = (uint)_cints[0];
1313 InitStats(onDeserialize: true);
1314 body.SetOwner(this, deserialized: true);
1315 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV);
1316 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV);
1317 if (global != null && global.goal != null)
1318 {
1319 global.goal.SetOwner(this);
1320 }
1321 if (IsPCC)
1322 {
1323 pccData.state = (base.isCensored ? PCCState.Naked : PCCState.Normal);
1324 }
1325 if (tempElements != null)
1326 {
1327 tempElements.SetParent(this);
1328 }
1329 UpdateAngle();
1331 Refresh();
1332 if (source.tag.Contains("boss"))
1333 {
1334 bossText = true;
1335 }
1336 sharedCheckTurn = EClass.rnd(200);
1337 }
int sharedCheckTurn
Definition: Chara.cs:118
void UpdateAngle()
Definition: Chara.cs:3512
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 7983 of file Chara.cs.

7984 {
7985 Say("give_erohon", this);
7986 AddCondition<ConParalyze>(50, force: true);
7987 AddCondition<ConConfuse>(50, force: true);
7988 AddCondition<ConFear>(1000, force: true);
7989 ModAffinity(EClass.pc, 100);
7990 t.Destroy();
7991 Talk("pervert");
7992 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 7789 of file Chara.cs.

7790 {
7791 if (!isDead)
7792 {
7793 if (HasElement(1231))
7794 {
7795 Talk("insulted");
7796 AddCondition<ConEuphoric>(100 * Evalue(1231));
7797 }
7798 else if (EClass.rnd(20) == 0)
7799 {
7800 SetFeat(1231, 1, msg: true);
7801 }
7802 }
7803 }

References EClass.rnd().

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

◆ OnSerializing()

override void Chara.OnSerializing ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1294 of file Chara.cs.

1295 {
1296 if (enemy != null)
1297 {
1298 SetInt(55, enemy.uid);
1299 }
1300 _cints[0] = (int)_cbits1.Bits;
1301 List<BodySlot> slots = body.slots;
1302 rawSlots = new int[slots.Count];
1303 for (int i = 0; i < slots.Count; i++)
1304 {
1305 rawSlots[i] = slots[i].elementId;
1306 }
1307 }
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 9250 of file Chara.cs.

9251 {
9252 if (days < 1)
9253 {
9254 days = 1;
9255 }
9256 int num = power * days;
9257 if (stamina.value < 0)
9258 {
9259 stamina.Set(1);
9260 }
9261 HealHP(num);
9262 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9263 mana.Mod(num);
9264 if (IsPCFaction)
9265 {
9266 hunger.Mod(20);
9267 }
9268 sleepiness.Set(0);
9269 if (!IsMinion)
9270 {
9271 interest = 100;
9272 }
9273 Cure(CureType.Sleep, power);
9274 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:3895
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 9235 of file Chara.cs.

9236 {
9237 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9238 int num = bed?.Power ?? 20;
9239 if (traitPillow != null)
9240 {
9241 num += traitPillow.owner.Power / 2;
9242 }
9243 if (bed != null)
9244 {
9245 num += bed.Evalue(750) * 5;
9246 }
9247 OnSleep(num, days);
9248 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9235
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1124

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 2121 of file Chara.cs.

2122 {
2123 return s switch
2124 {
2125 "é ­" => 30,
2126 "首" => 31,
2127 "体" => 32,
2128 "背" => 33,
2129 "手" => 35,
2130 "指" => 36,
2131 "è…•" => 34,
2132 "è…°" => 37,
2133 "è¶³" => 39,
2134 _ => -1,
2135 };
2136 }

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 8754 of file Chara.cs.

8755 {
8756 Hobby hobby = new Hobby();
8757 hobby.id = session.id;
8758 WorkSummary workSummary = _workSummary;
8759 hobby.GetAI(this).OnPerformWork(IsRealTime);
8760 if (!isHobby)
8761 {
8762 workSummary.progress += EClass.rnd(5) + 5;
8763 }
8764 int num = PerformWork(hobby, 0, isHobby);
8765 int num2 = PerformWork(hobby, 1, isHobby);
8766 int num3 = PerformWork(hobby, 2, isHobby);
8767 int num4 = PerformWork(hobby, 3, isHobby);
8768 workSummary.money += num;
8769 workSummary.food += num2;
8770 workSummary.knowledge += num3;
8771 workSummary.material += num4;
8772 int PerformWork(Hobby work, int idx, bool isHobby)
8773 {
8774 if (idx >= work.source.resources.Length)
8775 {
8776 return 0;
8777 }
8778 int num5 = work.source.resources[idx];
8779 int num6 = num5;
8780 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
8781 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
8782 if (num6 > 0 && num5 <= 0)
8783 {
8784 num5 = 1;
8785 }
8786 return num5;
8787 }
8788 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:8754
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 4187 of file Chara.cs.

4188 {
4189 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4190 {
4192 return t;
4193 }
4194 if (t.parent == this)
4195 {
4196 return t;
4197 }
4198 t = TryPoisonPotion(t);
4199 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4200 if (!dest.IsValid)
4201 {
4202 if (t.parent != EClass._zone)
4203 {
4204 if (IsPC)
4205 {
4206 Say("backpack_full_drop", t);
4207 SE.Drop();
4208 }
4209 return EClass._zone.AddCard(t, pos).Thing;
4210 }
4211 if (IsPC)
4212 {
4213 Say("backpack_full", t);
4214 }
4215 return t;
4216 }
4217 if (dest.stack != null)
4218 {
4219 if (msg)
4220 {
4221 PlaySound("pick_thing");
4222 Say("pick_thing", this, t);
4223 }
4224 t.TryStackTo(dest.stack);
4225 return dest.stack;
4226 }
4227 TryAbsorbRod(t);
4228 if (msg)
4229 {
4230 PlaySound("pick_thing");
4231 Say("pick_thing", this, t);
4232 }
4234 return dest.container.AddThing(t, tryStack);
4235 }
bool isNew
Definition: Card.cs:468
bool TryStackTo(Thing to)
Definition: Card.cs:3295
string c_idRefCard
Definition: Card.cs:1711
void TryReservePickupTutorial(Thing t)
Definition: Chara.cs:4281
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4237
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4251
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 4403 of file Chara.cs.

4404 {
4405 if (held == null)
4406 {
4407 return;
4408 }
4409 Card card = held;
4410 if (IsPC && held.invY == 1)
4411 {
4412 WidgetHotbar.dirtyCurrentItem = true;
4414 held = null;
4415 return;
4416 }
4417 if (held.isChara)
4418 {
4419 DropHeld();
4420 return;
4421 }
4423 {
4424 Say("canOnlyCarry", held);
4425 DropHeld();
4426 return;
4427 }
4428 bool flag = held != things.TryStack(held.Thing);
4429 if (!flag && things.IsOverflowing())
4430 {
4431 if (IsPC)
4432 {
4433 Say("backpack_full_drop", held);
4434 SE.Drop();
4435 }
4436 DropHeld();
4437 return;
4438 }
4439 if (msg)
4440 {
4441 PlaySound("pick_thing");
4442 Say("pick_held", this, card);
4443 if (IsPC && card.id == "statue_weird")
4444 {
4445 Say("statue_pick");
4446 }
4447 }
4448 if (IsPC)
4449 {
4450 WidgetHotbar.dirtyCurrentItem = true;
4451 if (!flag)
4452 {
4454 if (held.GetRootCard() != EClass.pc)
4455 {
4456 Pick(held.Thing, msg: false);
4457 }
4458 }
4459 }
4460 held = null;
4461 }
int invY
Definition: Card.cs:1917
bool IsHotItem
Definition: Card.cs:117
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4480
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 4167 of file Chara.cs.

4168 {
4169 if (num != 0)
4170 {
4171 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4172 }
4173 }

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

4176 {
4177 if (things.GetDest(t).IsValid)
4178 {
4179 Pick(t, msg);
4180 }
4181 else
4182 {
4183 EClass._zone.AddCard(t, p);
4184 }
4185 }

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

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1699 of file Chara.cs.

1700 {
1701 if (source == null)
1702 {
1703 Debug.LogError("source is null");
1704 SetSource();
1705 }
1706 if (ride != null && ride.source != null)
1707 {
1708 ride.Refresh(calledRecursive: true);
1709 }
1710 hasTelepathy = false;
1711 isWet = false;
1712 _isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
1714 base.isHidden = HasElement(415);
1715 foreach (Condition condition in conditions)
1716 {
1717 condition.OnRefresh();
1718 }
1719 if (isWet)
1720 {
1721 base.isHidden = false;
1722 }
1724 SetDirtySpeed();
1725 if (host != null && !calledRecursive && host.source != null)
1726 {
1727 host.Refresh(calledRecursive: true);
1728 }
1729 }
virtual void OnRefresh()
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1699
bool isWet
Definition: Chara.cs:142
override void SetSource()
Definition: Chara.cs:2010
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, 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 9671 of file Chara.cs.

9672 {
9673 if (faithElements != null)
9674 {
9676 }
9678 if (idFaith == "eyth" && !HasElement(1228))
9679 {
9680 return;
9681 }
9682 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
9683 if (row == null)
9684 {
9685 return;
9686 }
9688 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
9689 if (row2 != null)
9690 {
9691 faithElements.SetBase(row2.id, 1);
9692 }
9693 if (!HasCondition<ConExcommunication>())
9694 {
9695 int[] array = row.elements;
9696 int num = GetPietyValue() * (120 + Evalue(1407) * 15) / 100;
9697 for (int i = 0; i < array.Length; i += 2)
9698 {
9699 int num2 = array[i + 1] * num / 50;
9700 if (array[i] == 79)
9701 {
9702 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
9703 }
9704 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
9705 {
9706 num2 = 20;
9707 }
9708 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
9709 }
9710 }
9712 }
string idFaith
Definition: Chara.cs:229
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:9662
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 1815 of file Chara.cs.

1816 {
1817 if (ride != null && !ride.IsDeadOrSleeping)
1818 {
1820 _Speed = ride._Speed;
1821 info?.AddText("rideSpeed".lang(_Speed.ToString() ?? ""));
1822 }
1823 else if (host != null)
1824 {
1825 if (host.ride == this)
1826 {
1827 _Speed = Evalue(79);
1828 _Speed = _Speed * 100 / Mathf.Clamp(100 + _Speed * ((!race.tag.Contains("noRide")) ? 1 : 5) - base.STR - host.EvalueRiding() * 2 - (race.tag.Contains("ride") ? 50 : 0), 100, 1000);
1829 }
1830 else
1831 {
1832 _Speed = (Evalue(79) + host.Evalue(79)) / 2;
1833 }
1834 }
1835 else
1836 {
1837 _Speed = Evalue(79) + Evalue(407) / 2;
1838 }
1839 if (body.GetSlot(37, onlyEmpty: false)?.thing != null && HasElement(1209) && !HasElement(419))
1840 {
1841 _Speed -= 25;
1842 info?.AddText(-25, EClass.sources.elements.map[1209].GetName());
1843 }
1844 if (parasite != null)
1845 {
1846 int speed = _Speed;
1847 _Speed = _Speed * 100 / Mathf.Clamp(120 + parasite.LV * 2 - base.STR - Evalue(227) * 2, 100, 1000);
1848 info?.AddText(_Speed - speed, "parasiteSpeed".lang());
1849 }
1850 if (_Speed < elements.ValueWithoutLink(79) / 3)
1851 {
1853 info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
1854 }
1855 int num = 100;
1856 if (EClass._zone.map != null && EClass._zone.IsUnderwater)
1857 {
1858 int num2 = Evalue(200);
1859 num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, 0, 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25);
1860 if (info != null && num != 100)
1861 {
1862 info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
1863 }
1864 }
1865 if (IsPCFaction)
1866 {
1867 switch (burden.GetPhase())
1868 {
1869 case 1:
1870 num -= 10;
1871 info?.AddFix(-10, burden.GetPhaseStr());
1872 break;
1873 case 2:
1874 num -= 20;
1875 info?.AddFix(-20, burden.GetPhaseStr());
1876 break;
1877 case 3:
1878 num -= 30;
1879 info?.AddFix(-30, burden.GetPhaseStr());
1880 break;
1881 case 4:
1882 num -= (IsPC ? 50 : 100);
1883 info?.AddFix(IsPC ? (-50) : (-100), burden.GetPhaseStr());
1884 break;
1885 }
1886 if (IsPC)
1887 {
1888 switch (stamina.GetPhase())
1889 {
1890 case 1:
1891 num -= 10;
1892 info?.AddFix(-10, stamina.GetPhaseStr());
1893 break;
1894 case 0:
1895 num -= 20;
1896 info?.AddFix(-20, stamina.GetPhaseStr());
1897 break;
1898 }
1899 switch (sleepiness.GetPhase())
1900 {
1901 case 2:
1902 num -= 10;
1903 info?.AddFix(-10, sleepiness.GetPhaseStr());
1904 break;
1905 case 3:
1906 num -= 20;
1907 info?.AddFix(-20, sleepiness.GetPhaseStr());
1908 break;
1909 }
1910 switch (hunger.GetPhase())
1911 {
1912 case 3:
1913 case 4:
1914 num -= 10;
1915 info?.AddFix(-10, hunger.GetPhaseStr());
1916 break;
1917 case 5:
1918 num -= 30;
1919 info?.AddFix(-30, hunger.GetPhaseStr());
1920 break;
1921 }
1922 num += EClass.player.lastEmptyAlly * Evalue(1646);
1923 info?.AddFix(EClass.player.lastEmptyAlly * Evalue(1646), EClass.sources.elements.map[1646].GetName());
1924 }
1926 {
1927 num += EClass.player.lastEmptyAlly * 10 - 10;
1928 info?.AddFix(EClass.player.lastEmptyAlly * 10 - 10, "exceedParty".lang());
1929 }
1930 }
1931 else if (base.LV >= 1000 && !EClass.game.principal.disableVoidBlessing && !base.IsPCFactionOrMinion)
1932 {
1933 num += EClass.curve((base.LV - 900) / 100 * 10, 500, 100);
1934 info?.AddFix(EClass.curve((base.LV - 900) / 100 * 10, 500, 100), "enemySpeedBuff".lang());
1935 }
1936 if (HasCondition<ConGravity>())
1937 {
1938 num -= 30;
1939 info?.AddFix(-30, GetCondition<ConGravity>().Name);
1940 }
1941 if (_Speed < 10)
1942 {
1943 _Speed = 10;
1944 }
1945 _Speed = _Speed * num / 100;
1946 if (_Speed < 10)
1947 {
1948 _Speed = 10;
1949 info?.AddText("minSpeed".lang(10.ToString() ?? ""));
1950 }
1951 dirtySpeed = false;
1952 }
Thing thing
Definition: BodySlot.cs:8
int _Speed
Definition: Chara.cs:170
override string ToString()
Definition: Chara.cs:1154
void RefreshSpeed(Element.BonusInfo info=null)
Definition: Chara.cs:1815
bool dirtySpeed
Definition: Chara.cs:168
void AddText(string text, FontColor col=FontColor.Warning)
Definition: ELEMENT.cs:109
void AddFix(int v, string text)
Definition: ELEMENT.cs:130
bool disableVoidBlessing
GamePrincipal principal
Definition: Game.cs:221
int lastEmptyAlly
Definition: Player.cs:1113
virtual bool IsUnderwater
Definition: Zone.cs:264

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

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

◆ RefreshWorkElements()

void Chara.RefreshWorkElements ( ElementContainer  parent = null)
inline

Definition at line 8579 of file Chara.cs.

8580 {
8581 if (workElements != null)
8582 {
8584 }
8585 workElements = null;
8586 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
8587 {
8588 return;
8589 }
8590 foreach (Hobby item in ListHobbies())
8591 {
8592 TryAdd(item);
8593 }
8594 foreach (Hobby item2 in ListWorks())
8595 {
8596 TryAdd(item2);
8597 }
8598 if (workElements != null)
8599 {
8601 }
8602 void TryAdd(Hobby h)
8603 {
8604 if (!h.source.elements.IsEmpty())
8605 {
8606 if (workElements == null)
8607 {
8609 }
8610 for (int i = 0; i < h.source.elements.Length; i += 2)
8611 {
8612 int num = h.source.elements[i];
8613 int num2 = h.source.elements[i + 1];
8614 int num3 = 100;
8615 if (num != 2115 && num != 2207)
8616 {
8617 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
8618 if (num3 <= 0)
8619 {
8620 continue;
8621 }
8622 }
8623 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
8624 }
8625 }
8626 }
8627 }
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 2300 of file Chara.cs.

2301 {
2302 base.c_uidMaster = 0;
2303 master = null;
2304 enemy = null;
2305 foreach (Chara chara in EClass._map.charas)
2306 {
2307 if (chara.enemy == this)
2308 {
2309 chara.SetEnemy();
2310 chara.ai.Cancel();
2311 }
2312 }
2313 ai.Cancel();
2314 Refresh();
2315 }

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

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

◆ RemoveCondition< T >()

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

Definition at line 9030 of file Chara.cs.

9030 : Condition
9031 {
9032 for (int num = conditions.Count - 1; num >= 0; num--)
9033 {
9034 if (conditions[num] is T)
9035 {
9036 conditions[num].Kill();
9037 break;
9038 }
9039 }
9040 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

Definition at line 1472 of file Chara.cs.

1473 {
1474 if (IsGlobal && !(trait is TraitUniqueChara) && !base.IsUnique && !EClass.game.cards.listAdv.Contains(this))
1475 {
1476 global = null;
1478 }
1479 }
List< Chara > listAdv
Definition: CardManager.cs:64

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

Referenced by FactionBranch.RemoveMemeber().

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 2149 of file Chara.cs.

2150 {
2151 if (body.slots.Count != 0)
2152 {
2153 BodySlot bodySlot = body.slots.LastItem();
2154 body.RemoveBodyPartAt(body.slots.Count - 1);
2155 if (msg)
2156 {
2157 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2158 PlaySound("offering");
2159 }
2160 }
2161 }
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 8004 of file Chara.cs.

8005 {
8006 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this)
8007 {
8008 return false;
8009 }
8010 if (host != null && host.isRestrained)
8011 {
8012 return false;
8013 }
8014 if (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion)
8015 {
8016 return false;
8017 }
8018 bool flag = false;
8019 foreach (Chara chara in EClass._map.charas)
8020 {
8021 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))
8022 {
8023 continue;
8024 }
8025 bool flag2 = chara.HasElement(1225);
8026 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
8027 {
8028 continue;
8029 }
8030 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
8031 int num2 = Dist(chara);
8032 if (num2 > 25)
8033 {
8034 continue;
8035 }
8036 if (num2 > num || !chara.CanSeeLos(pos, num2))
8037 {
8038 if (!flag2)
8039 {
8040 continue;
8041 }
8042 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
8043 if (!nearestPoint.IsValid)
8044 {
8045 continue;
8046 }
8047 chara.Teleport(nearestPoint);
8048 chara.AddCooldown(1225, 10);
8049 num2 = Dist(chara);
8050 Say("intercept_loyal", chara, this);
8051 chara.SetEnemy(attacker);
8052 attacker.SetEnemy(chara);
8053 if (num2 > num || !chara.CanSeeLos(pos, num2))
8054 {
8055 continue;
8056 }
8057 }
8058 if (!flag && !HasElement(1225))
8059 {
8060 Say("intercept", chara, this);
8061 if (EClass.rnd(10) == 0)
8062 {
8063 chara.Talk("intercept", base.NameSimple);
8064 }
8065 if (attacker.enemy == this)
8066 {
8067 attacker.SetEnemy(chara);
8068 }
8069 action(chara);
8070 flag = true;
8071 }
8072 }
8073 return flag;
8074 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5577
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8268
bool HasCooldown(int idEle)
Definition: Chara.cs:8286

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

8674 {
8675 if (_hobbies != null && _works != null)
8676 {
8677 _hobbies.Clear();
8678 _works.Clear();
8679 }
8680 else
8681 {
8682 _hobbies = new List<int>();
8683 _works = new List<int>();
8684 }
8685 if (source.hobbies.IsEmpty())
8686 {
8687 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
8688 }
8689 else
8690 {
8691 string[] hobbies = source.hobbies;
8692 foreach (string key in hobbies)
8693 {
8694 AddHobby(EClass.sources.hobbies.alias[key].id);
8695 }
8696 }
8697 if (source.works.IsEmpty())
8698 {
8699 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
8700 }
8701 else
8702 {
8703 string[] hobbies = source.works;
8704 foreach (string key2 in hobbies)
8705 {
8706 AddWork(EClass.sources.hobbies.alias[key2].id);
8707 }
8708 }
8710 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:8712
void AddWork(int id)
Definition: Chara.cs:8661
void AddHobby(int id)
Definition: Chara.cs:8649
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 2163 of file Chara.cs.

2164 {
2165 for (int num = body.slots.Count - 1; num >= 0; num--)
2166 {
2167 BodySlot bodySlot = body.slots[num];
2168 if (bodySlot.elementId == 45 || bodySlot.elementId == 40)
2169 {
2170 return;
2171 }
2172 body.RemoveBodyPart(num);
2173 }
2174 string[] array = race.figure.Split('|');
2175 foreach (string s in array)
2176 {
2177 int num2 = ParseBodySlot(s);
2178 if (num2 != -1)
2179 {
2180 body.AddBodyPart(num2);
2181 }
2182 }
2184 }

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8170 of file Chara.cs.

8171 {
8172 _ = base.c_upgrades;
8173 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9201 of file Chara.cs.

9202 {
9203 if (con.power > 0 && resistCon != null)
9204 {
9205 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9206 if (1000 < EClass.rnd(a))
9207 {
9208 con.power = 0;
9209 }
9210 else if (500 < EClass.rnd(a))
9211 {
9212 con.power /= 5;
9213 }
9214 else if (200 < EClass.rnd(a))
9215 {
9216 con.power /= 2;
9217 }
9218 }
9219 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4572 of file Chara.cs.

4573 {
4574 string equip = source.equip;
4575 if (equip.IsEmpty())
4576 {
4577 equip = job.equip;
4578 }
4579 if (equip == "none")
4580 {
4581 return;
4582 }
4583 switch (id)
4584 {
4585 case "kettle":
4586 case "quru":
4587 case "loytel":
4588 case "shojo":
4589 EQ_ID("staff_long", 1);
4590 EQ_CAT("head");
4591 EQ_CAT("torso");
4592 EQ_CAT("arm");
4593 return;
4594 case "adv_yukiimo":
4595 if (onCreate)
4596 {
4597 EQ_ID("tail_snowleopard");
4598 }
4599 break;
4600 case "adv_kiria":
4601 if (onCreate)
4602 {
4603 EQ_ID("sword_zephir");
4604 }
4605 break;
4606 case "adv_mesherada":
4607 if (onCreate)
4608 {
4609 EQ_ID("dagger_hathaway");
4610 }
4611 break;
4612 case "adv_verna":
4613 if (onCreate)
4614 {
4615 EQ_ID("staff_long", -1, Rarity.Legendary);
4616 }
4617 if (onCreate)
4618 {
4619 EQ_ID("cloak_wing", -1, Rarity.Mythical);
4620 }
4621 break;
4622 case "big_sister":
4623 if (onCreate)
4624 {
4625 EQ_ID("sword_muramasa");
4626 }
4627 break;
4628 case "adv_gaki":
4629 if (onCreate)
4630 {
4631 EQ_ID("dagger_gaki");
4632 }
4633 if (onCreate)
4634 {
4635 EQ_ID("dagger_ninto");
4636 }
4637 break;
4638 case "adv_ivory":
4639 EQ_ID("dagger", -1, Rarity.Legendary);
4640 AddThing("60");
4641 break;
4642 case "adv_wini":
4643 if (onCreate)
4644 {
4645 EQ_ID("staff_Cat", -1, Rarity.Mythical);
4646 }
4648 if (onCreate)
4649 {
4650 AddThing("1071");
4651 }
4652 break;
4653 case "seeker":
4654 if (onCreate)
4655 {
4656 EQ_ID("helm_seeker");
4657 }
4658 EQ_ID("robe_pope");
4659 EQ_ID("sword_katana");
4660 EQ_ID("staff");
4661 EQ_ID("sword_katana");
4662 if (onCreate)
4663 {
4664 EQ_ID("boots_seven");
4665 }
4666 if (onCreate)
4667 {
4668 for (int i = 0; i < 20; i++)
4669 {
4671 }
4672 EQ_Item("panty");
4673 AddThing("plat").SetNum(6);
4674 }
4675 break;
4676 case "ephrond":
4677 if (onCreate)
4678 {
4679 AddThing("guitar_efrond");
4680 }
4681 break;
4682 case "ashland":
4683 if (onCreate)
4684 {
4685 AddThing("guitar_ash");
4686 }
4687 break;
4688 case "swordkeeper":
4689 if (onCreate)
4690 {
4691 EQ_ID("EtherDagger");
4692 }
4693 break;
4694 }
4695 switch (equip)
4696 {
4697 case "archer":
4698 if (onCreate || !TryEquipRanged())
4699 {
4700 EQ_CAT((EClass.rnd(4) == 0) ? "crossbow" : "bow");
4701 }
4702 break;
4703 case "inquisitor":
4704 case "gunner":
4705 if (onCreate || !TryEquipRanged())
4706 {
4707 EQ_CAT("gun");
4708 }
4709 break;
4710 }
4711 int num = ((base.rarity >= Rarity.Mythical) ? (base.LV * 3) : ((base.rarity >= Rarity.Legendary) ? (base.LV * 2) : base.LV));
4712 if (trait is TraitAdventurer)
4713 {
4714 num *= 3;
4715 }
4716 if (race.id == "asura")
4717 {
4718 for (int j = 0; j < 4; j++)
4719 {
4720 EQ_CAT(job.weapon.RandomItem());
4721 }
4722 }
4723 for (int k = 0; k < ((!(race.id == "mutant")) ? 1 : (2 + base.LV / 30)); k++)
4724 {
4725 if (source.ContainsTag("boxer"))
4726 {
4727 EQ_CAT("martial");
4728 }
4729 else if (!job.weapon.IsEmpty())
4730 {
4731 if (race.id == "mutant" || (body.slotMainHand != null && body.slotMainHand.thing == null))
4732 {
4733 EQ_CAT(job.weapon.RandomItem());
4734 }
4735 if (race.id == "mutant" || (Evalue(131) > 0 && EClass.rnd(2) == 0))
4736 {
4737 EQ_CAT(job.weapon.RandomItem());
4738 }
4739 }
4740 EQ_CAT("torso");
4741 if (EClass.rnd(num) > 5)
4742 {
4743 EQ_CAT("arm");
4744 }
4745 if (EClass.rnd(num) > 10)
4746 {
4747 EQ_CAT("head");
4748 }
4749 if (EClass.rnd(num) > 15)
4750 {
4751 EQ_CAT("back");
4752 }
4753 if (EClass.rnd(num) > 20)
4754 {
4755 EQ_CAT("ring");
4756 }
4757 if (EClass.rnd(num) > 25)
4758 {
4759 EQ_CAT("amulet");
4760 }
4761 if (EClass.rnd(num) > 30)
4762 {
4763 EQ_CAT("foot");
4764 }
4765 if (EClass.rnd(num) > 35)
4766 {
4767 EQ_CAT("waist");
4768 }
4769 if (EClass.rnd(num) > 40)
4770 {
4771 EQ_CAT("ring");
4772 }
4773 }
4774 if (trait is TraitBard)
4775 {
4776 AddThing(ThingGen.Create("lute"));
4777 }
4778 }
Card AddCard(Card c)
Definition: Card.cs:3043
BodySlot slotMainHand
Definition: CharaBody.cs:10
void EQ_Item(string s, int num=1)
Definition: Chara.cs:4878
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
Definition: Chara.cs:4842
bool TryEquipRanged()
Definition: Chara.cs:7477
void EQ_CAT(string s)
Definition: Chara.cs:4862
static Thing CreateSpellbook(string alias, int num=1)
Definition: ThingGen.cs:151

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

Referenced by CoreDebug.QuickStart().

◆ RestockInventory()

void Chara.RestockInventory ( bool  onCreate)
inline

Definition at line 4780 of file Chara.cs.

4781 {
4782 switch (id)
4783 {
4784 case "fiama":
4785 Restock("book_story", 1);
4786 break;
4787 case "rock_thrower":
4788 Restock("stone", 10 + EClass.rnd(10));
4789 break;
4790 case "giant":
4791 Restock("rock", 2 + EClass.rnd(10));
4792 break;
4793 case "farris":
4794 Restock("lute", 1);
4795 Restock("book_story_home", 1);
4796 break;
4797 case "begger":
4798 break;
4799 }
4800 void Restock(string id, int num)
4801 {
4802 if (things.Find(id) == null)
4803 {
4804 AddCard(ThingGen.Create(id).SetNum(num));
4805 }
4806 }
4807 }

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

◆ Revive()

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

Definition at line 4922 of file Chara.cs.

4923 {
4924 if (!isDead)
4925 {
4926 return;
4927 }
4928 isDead = false;
4929 base.hp = MaxHP / 3;
4930 mana.value = 0;
4931 stamina.value = 0;
4932 if (hunger.value > 30)
4933 {
4934 hunger.value = 30;
4935 }
4936 sleepiness.value = 0;
4938 RemoveCondition<StanceTaunt>();
4939 if (IsPC)
4940 {
4942 {
4943 Msg.Say("noDeathPenalty2", this);
4944 }
4946 {
4947 Msg.Say("noDeathPenalty", this);
4948 }
4949 else
4950 {
4952 }
4953 List<Thing> dropList = new List<Thing>();
4954 EClass.pc.things.Foreach(delegate(Thing t)
4955 {
4957 {
4958 t.ignoreAutoPick = true;
4959 dropList.Add(t);
4960 }
4961 }, onlyAccessible: false);
4962 foreach (Thing item in dropList)
4963 {
4965 Msg.Say("backpack_full_drop", item);
4966 }
4967 EClass.player.preventDeathPenalty = false;
4968 }
4969 if (IsPCFaction && homeBranch != null)
4970 {
4971 homeBranch.Log("bRevive", this);
4972 }
4973 if (p != null)
4974 {
4975 if (!p.IsInBounds)
4976 {
4978 }
4979 EClass._zone.AddCard(this, p);
4980 if (msg)
4981 {
4982 SE.Play("revive");
4983 Msg.Say("revive", this);
4984 PlayEffect("revive");
4985 }
4986 SetCensored(enable: false);
4987 }
4988 }
void SetCensored(bool enable)
Definition: Card.cs:7364
Card parentCard
Definition: Card.cs:101
void ApplyDeathPenalty()
Definition: Chara.cs:5010
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1087
void Foreach(Action< Thing > action, bool onlyAccessible=true)
override int SelfWeight
Definition: Thing.cs: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 3451 of file Chara.cs.

3452 {
3453 if (renderer.hasActor)
3454 {
3455 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3456 }
3457 else
3458 {
3459 base.dir = ((base.dir == 0) ? 1 : 0);
3460 }
3461 UpdateAngle();
3463 }

Referenced by AI_Dance.Run().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

Definition at line 1668 of file Chara.cs.

1669 {
1671 {
1672 SetLv(base.LV + EClass._zone.DangerLvBoost);
1674 TryRestock(onCreate: true);
1675 }
1676 return this;
1677 }
virtual int DangerLvBoost
Definition: Spatial.cs:477
void DestroyAll(Func< Thing, bool > funcExclude=null)

References EClass._zone, Spatial.DangerLvBoost, ThingContainer.DestroyAll(), EClass.game, Game.principal, GamePrincipal.scaleQuest, Card.SetLv(), Card.things, and TryRestock().

Referenced by Zone_Nymelle.OnBeforeSimulate(), Zone_DungeonFairy.OnGenerateMap(), SerializedCards.Restore(), and CoreDebug.UpdateInput().

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 8449 of file Chara.cs.

8450 {
8451 if (IsPC)
8452 {
8454 }
8455 if (ai.IsRunning)
8456 {
8457 if (ai == g && ai.IsNoGoal)
8458 {
8459 return g;
8460 }
8461 ai.Cancel();
8462 if (ai == g)
8463 {
8464 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
8465 return g;
8466 }
8467 }
8468 if (HasCondition<ConWait>())
8469 {
8470 RemoveCondition<ConWait>();
8471 }
8472 ai = g;
8473 ai.SetOwner(this);
8474 if (IsPC)
8475 {
8477 }
8478 return g;
8479 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:179
QueueManager queues
Definition: Player.cs:1129
void OnSetGoal(AIAct newGoal)
Definition: QueueManager.cs:23

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

Referenced by _Move(), Zone.AddCard(), Thing.DoAct(), UIInventory.DoAct(), Player.EndTurn(), GiveGift(), TraitTrolley.OnActivateTrap(), BaseListPeople.OnClick(), LayerCraft.OnClickCraft(), OnCreate(), ZoneInstanceBout.OnLeaveZone(), 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 8439 of file Chara.cs.

8440 {
8441 SetAI(new GoalCombat());
8442 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 8435 of file Chara.cs.

8436 {
8437 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3444 of file Chara.cs.

3445 {
3446 base.dir = d;
3447 UpdateAngle();
3449 }

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

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1806 of file Chara.cs.

1807 {
1808 dirtySpeed = true;
1809 if (host != null)
1810 {
1812 }
1813 }

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

6000 {
6001 enemy = c;
6002 if (c == null)
6003 {
6004 if (ai is GoalCombat)
6005 {
6006 ai.Cancel();
6007 }
6008 }
6009 else
6010 {
6011 calmCheckTurn = 10 + EClass.rnd(30);
6012 }
6013 return c;
6014 }

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

4810 {
4812 Rarity rarity = Rarity.Normal;
4813 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
4814 Rarity rarity2 = base.rarity;
4815 if (id == "big_sister")
4816 {
4817 num = (isOnCreate ? 8 : 4);
4818 }
4819 if (!isOnCreate && EClass.rnd(10) != 0)
4820 {
4821 num /= 2;
4822 }
4823 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
4824 {
4825 rarity = Rarity.Superior;
4826 }
4827 else if (rarity2 == Rarity.Legendary)
4828 {
4829 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
4830 }
4831 else if (rarity2 >= Rarity.Mythical)
4832 {
4833 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
4834 }
4835 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
4836 {
4837 rarity = Rarity.Legendary;
4838 }
4839 CardBlueprint.current.rarity = rarity;
4840 }
static void Set(CardBlueprint _bp)
static CardBlueprint CharaGenEQ
static bool isOnCreate
Definition: Chara.cs:182

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

◆ SetFaction()

void Chara.SetFaction ( Faction  f)
inline

Definition at line 1401 of file Chara.cs.

1402 {
1403 _faction = null;
1404 faction = f;
1406 }
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 1684 of file Chara.cs.

1685 {
1686 faith = r;
1688 }

References faith, and RefreshFaithElement().

◆ SetFaith() [2/2]

void Chara.SetFaith ( string  id)
inline

Definition at line 1679 of file Chara.cs.

1680 {
1682 }
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 9377 of file Chara.cs.

9378 {
9379 Feat feat = elements.GetElement(id) as Feat;
9380 int num = 0;
9381 if (feat != null && feat.Value > 0)
9382 {
9383 if (value == feat.Value)
9384 {
9385 return;
9386 }
9387 num = feat.Value;
9388 feat.Apply(-feat.Value, elements);
9389 }
9390 if (value > 0)
9391 {
9392 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
9393 feat.Apply(feat.Value, elements);
9394 }
9395 else
9396 {
9397 elements.Remove(id);
9398 }
9400 {
9401 Refresh();
9403 }
9404 if (!msg)
9405 {
9406 return;
9407 }
9408 if (feat.source.textInc.IsEmpty())
9409 {
9410 PlaySound("ding_skill");
9412 Say("gainFeat", this, feat.FullName);
9413 }
9414 else
9415 {
9416 bool flag = value < num;
9417 if (feat.source.tag.Contains("neg"))
9418 {
9419 flag = !flag;
9420 }
9421 PlaySound("mutation");
9423 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
9424 }
9426 }
Color Negative
Definition: MsgColors.cs:15
Color Ding
Definition: MsgColors.cs:11

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

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

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1459 of file Chara.cs.

1460 {
1461 if (!IsGlobal)
1462 {
1464 global = new GlobalData();
1465 base.isSubsetCard = false;
1466 enemy = null;
1467 base.c_uidMaster = 0;
1468 }
1469 return this;
1470 }

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

1445 {
1446 SetGlobal();
1447 homeZone = _home;
1448 _home.AddCard(this, x, z);
1449 global.transition = new ZoneTransition
1450 {
1451 state = ZoneTransition.EnterState.Exact,
1452 x = x,
1453 z = z
1454 };
1455 orgPos = new Point(x, z);
1456 return this;
1457 }

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

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

◆ SetHomeZone()

void Chara.SetHomeZone ( Zone  zone)
inline

Definition at line 1408 of file Chara.cs.

1409 {
1410 homeZone = zone;
1411 SetGlobal();
1412 }

References homeZone, and SetGlobal().

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

◆ SetMainElement() [1/2]

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

Definition at line 2031 of file Chara.cs.

2032 {
2033 if (base.c_idMainElement != 0)
2034 {
2035 SetElements(base.c_idMainElement, remove: true);
2036 base.c_idMainElement = 0;
2037 }
2038 if (id != 0)
2039 {
2040 _ = EClass.sources.elements.map[id];
2041 SetElements(id, remove: false);
2042 base.c_idMainElement = id;
2043 if (elemental)
2044 {
2045 base.isElemental = true;
2046 _colorInt = 0;
2047 Color colorSprite = EClass.setting.elements[MainElement.source.alias].colorSprite;
2048 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);
2049 }
2050 _ability = null;
2051 }
2052 void SetElements(int idEle, bool remove)
2053 {
2054 elements.SetBase(idEle, (!remove) ? ((v == 0) ? 10 : v) : 0);
2055 elements.ModBase(EClass.sources.elements.alias[EClass.sources.elements.map[idEle].aliasRef].id, remove ? (-20) : 20);
2056 switch (idEle)
2057 {
2058 case 910:
2059 elements.ModBase(951, remove ? 10 : (-10));
2060 break;
2061 case 911:
2062 elements.ModBase(950, remove ? 10 : (-10));
2063 break;
2064 case 912:
2065 elements.ModBase(953, remove ? 10 : (-10));
2066 break;
2067 case 913:
2068 elements.ModBase(952, remove ? 10 : (-10));
2069 break;
2070 case 916:
2071 elements.ModBase(960, remove ? 10 : (-10));
2072 break;
2073 case 919:
2074 elements.ModBase(956, remove ? 10 : (-10));
2075 break;
2076 case 925:
2077 elements.ModBase(962, remove ? 10 : (-10));
2078 break;
2079 case 922:
2080 elements.ModBase(965, remove ? 10 : (-10));
2081 break;
2082 case 921:
2083 elements.ModBase(971, remove ? 10 : (-10));
2084 break;
2085 case 926:
2086 elements.ModBase(961, remove ? 10 : (-10));
2087 break;
2088 case 914:
2089 case 915:
2090 case 917:
2091 case 918:
2092 case 920:
2093 case 923:
2094 case 924:
2095 break;
2096 }
2097 }
2098 }
int _colorInt
Definition: Card.cs:65
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 2022 of file Chara.cs.

2023 {
2024 if (!id.StartsWith("ele"))
2025 {
2026 id = "ele" + id;
2027 }
2028 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
2029 }

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

9429 {
9430 SourceElement.Row row = EClass.sources.elements.map[idEle];
9432 Element element = elements.GetElement(idEle);
9433 Element element2 = elements.GetElement(row2.id);
9434 int num = element?.Value ?? 0;
9435 if (a < 0)
9436 {
9437 a = 0;
9438 }
9439 if (a > row.max)
9440 {
9441 a = row.max;
9442 }
9443 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
9444 if (a == 0 && (element == null || element.Value == 0))
9445 {
9447 return;
9448 }
9449 if (element != null && element.Value == a)
9450 {
9452 return;
9453 }
9454 if (element2 != null && element2.Value > 0)
9455 {
9456 SetFeat(element2.id, 0);
9457 }
9458 SetFeat(idEle, a);
9459 PlaySound("mutation");
9460 PlayEffect("mutation");
9462 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
9463 }

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

8445 {
8446 return SetAI(_NoGoalPC);
8447 }
static NoGoal _NoGoalPC
Definition: Chara.cs:194

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6375 of file Chara.cs.

6376 {
6377 if (IsPCC)
6378 {
6379 PCC.Get(pccData).Build(state);
6380 }
6381 }

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

6424 {
6425 p.mat = base.material;
6426 p.matColor = base.colorInt;
6427 if (!renderer.usePass)
6428 {
6429 return;
6430 }
6431 if (renderer.replacer != null)
6432 {
6433 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6434 }
6435 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6436 {
6437 if (source._tiles_snow.Length > 1)
6438 {
6439 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6440 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6441 }
6442 else
6443 {
6444 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6445 }
6446 }
6447 else if (sourceCard._tiles.Length > 1)
6448 {
6449 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6450 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6451 }
6452 else
6453 {
6454 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6455 }
6456 p.dir = base.dir;
6457 }
override bool flipX
Definition: Chara.cs:545
virtual bool IsSnowCovered
Definition: Spatial.cs:533

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

6966 {
6967 switch (m)
6968 {
6969 case UIList.SortMode.ByJob:
6970 sortVal = job._index * 10000 + sourceCard._index;
6971 break;
6972 case UIList.SortMode.ByRace:
6973 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
6974 break;
6975 case UIList.SortMode.ByFeat:
6976 sortVal = -GetTotalFeat();
6977 break;
6978 default:
6979 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
6980 break;
6981 case UIList.SortMode.ByWorkk:
6982 break;
6983 }
6984 }
int sortVal
Definition: Card.cs:99
int GetTotalFeat()
Definition: Chara.cs:7722
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 2010 of file Chara.cs.

2011 {
2012 source = EClass.sources.charas.map.TryGetValue(id);
2013 if (source == null)
2014 {
2015 Debug.LogWarning("Chara " + id + " not found");
2016 id = "chicken";
2017 source = EClass.sources.charas.map[id];
2018 }
2019 path.walker = this;
2020 }
SourceChara charas

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2317 of file Chara.cs.

2318 {
2319 base.c_summonDuration = duration;
2320 base.isSummon = true;
2321 }

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

7276 {
7277 if (t.IsRangedWeapon && t.category.slot == 0)
7278 {
7279 if (!CanEquipRanged(t))
7280 {
7281 return false;
7282 }
7283 int num = 0;
7284 foreach (Thing thing in things)
7285 {
7286 if (thing.IsRangedWeapon)
7287 {
7288 if (thing.category.slot != 0 && thing.isEquipped)
7289 {
7290 return false;
7291 }
7292 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7293 {
7294 num = thing.GetEquipValue();
7295 }
7296 }
7297 }
7298 if (t.GetEquipValue() > num)
7299 {
7300 return true;
7301 }
7302 return false;
7303 }
7304 BodySlot bodySlot = body.GetSlot(t);
7305 if (bodySlot == null)
7306 {
7307 return false;
7308 }
7309 if (useFav)
7310 {
7311 switch (GetFavAttackStyle())
7312 {
7313 case AttackStyle.Default:
7314 case AttackStyle.TwoHand:
7315 if (t.IsMeleeWeapon)
7316 {
7317 bodySlot = body.slotMainHand;
7318 }
7319 else if (bodySlot.elementId == 35)
7320 {
7321 return false;
7322 }
7323 break;
7324 case AttackStyle.Shield:
7325 if (t.IsMeleeWeapon)
7326 {
7327 bodySlot = body.slotMainHand;
7328 }
7329 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7330 {
7331 return false;
7332 }
7333 break;
7334 case AttackStyle.TwoWield:
7335 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7336 {
7337 return false;
7338 }
7339 break;
7340 }
7341 }
7342 if (!body.IsEquippable(t, bodySlot, text: false))
7343 {
7344 return false;
7345 }
7346 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7347 {
7348 return false;
7349 }
7350 if (t.HasTag(CTAG.gift))
7351 {
7352 return false;
7353 }
7354 return true;
7355 }
bool IsMeleeWeapon
Definition: Card.cs:2203
BlessedState blessedState
Definition: Card.cs:264
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:106
AttackStyle GetFavAttackStyle()
Definition: Chara.cs:4528

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

◆ ShouldThrowAway()

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

Definition at line 8076 of file Chara.cs.

8077 {
8078 if (IsPCFaction)
8079 {
8080 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
8081 {
8082 return false;
8083 }
8084 if (t.trait.GetHealAction(this) != null)
8085 {
8086 return false;
8087 }
8088 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
8089 {
8090 return false;
8091 }
8092 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
8093 {
8094 return false;
8095 }
8096 }
8097 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed)
8098 {
8099 return false;
8100 }
8101 if (t.trait is TraitCurrency || t.trait is TraitTool)
8102 {
8103 return false;
8104 }
8105 switch (type)
8106 {
8107 case ClearInventoryType.SellAtTown:
8108 if (!t.isGifted && !t.isNPCProperty)
8109 {
8110 return false;
8111 }
8112 break;
8113 case ClearInventoryType.Purge:
8114 switch (t.category.id)
8115 {
8116 case "fish":
8117 if (EClass.rnd(3) == 0)
8118 {
8119 return true;
8120 }
8121 break;
8122 case "junk":
8123 case "garbage":
8124 if (EClass.rnd(3) != 0)
8125 {
8126 return true;
8127 }
8128 break;
8129 }
8130 if (t.id == "flyer")
8131 {
8132 return true;
8133 }
8134 if (!t.IsDecayed && EClass.rnd(3) == 0)
8135 {
8136 return false;
8137 }
8138 if (!things.IsFull() && t.IsRangedWeapon)
8139 {
8140 return false;
8141 }
8142 break;
8143 }
8144 return true;
8145 }
bool IsThrownWeapon
Definition: Card.cs:2207
bool IsFood
Definition: Card.cs:2137
bool isGifted
Definition: Card.cs:768
virtual Action GetHealAction(Chara c)
Definition: Trait.cs:594

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

◆ ShowDialog() [1/2]

void Chara.ShowDialog ( )
inline

Definition at line 6723 of file Chara.cs.

6724 {
6725 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
6726 if (conSuspend != null && IsPCParty)
6727 {
6728 RemoveCondition<ConSuspend>();
6729 }
6730 if (LayerDrama.forceJump == null)
6731 {
6732 if (IsDeadOrSleeping)
6733 {
6734 ShowDialog("_chara", "sleep");
6735 return;
6736 }
6737 if (EClass.pc.isHidden && !CanSee(EClass.pc))
6738 {
6739 ShowDialog("_chara", "invisible");
6740 return;
6741 }
6743 {
6745 ShowDialog("_chara", "give_card");
6746 Thing thing = ThingGen.Create("figure");
6747 thing.MakeFigureFrom(id);
6748 EClass.player.DropReward(thing);
6749 thing = ThingGen.Create("figure3");
6750 thing.MakeFigureFrom(id);
6751 EClass.player.DropReward(thing);
6752 return;
6753 }
6754 if (GetInt(71) == -2)
6755 {
6756 ShowDialog("_chara", "give_lunch");
6757 Thing t = CraftUtil.MakeLoveLunch(this);
6759 SetInt(71, EClass.world.date.GetRaw() + 43200);
6760 return;
6761 }
6762 if (base.isRestrained)
6763 {
6764 ShowDialog("_chara", "strain");
6765 return;
6766 }
6767 if (IsEscorted())
6768 {
6769 ShowDialog("_chara", "escort");
6770 return;
6771 }
6772 if (EClass._zone is Zone_Music)
6773 {
6774 ShowDialog("_chara", "party");
6775 return;
6776 }
6777 if (EClass.game.quests.OnShowDialog(this))
6778 {
6779 return;
6780 }
6781 switch (id)
6782 {
6783 case "loytel":
6784 {
6786 {
6787 EClass.game.quests.Get("pre_debt_runaway").Complete();
6788 EClass.player.flags.loytelEscaped = false;
6789 EClass.game.quests.Add("debt", "loytel");
6790 ShowDialog("loytel", "loytelEscaped");
6791 return;
6792 }
6793 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
6794 if (questDebt != null && questDebt.paid)
6795 {
6796 questDebt.stage++;
6797 if (questDebt.stage > 7)
6798 {
6799 questDebt.stage = 7;
6800 }
6801 ShowDialog("loytel", "debt" + questDebt.stage);
6802 return;
6803 }
6804 break;
6805 }
6806 case "farris":
6807 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3" || EClass.game.IsSurvival)
6808 {
6809 ShowDialog("farris");
6810 return;
6811 }
6812 switch (EClass.game.quests.GetPhase<QuestExploration>())
6813 {
6814 case -1:
6815 ShowDialog("farris", "nymelle_noQuest");
6816 break;
6817 case 0:
6818 ShowDialog("farris", "nymelle_first");
6819 break;
6820 case 1:
6821 ShowDialog("farris", "home_first");
6822 break;
6823 default:
6824 ShowDialog("farris");
6825 break;
6826 }
6827 return;
6828 case "ashland":
6829 ShowDialog("ashland");
6830 return;
6831 case "fiama":
6832 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv && EClass.game.quests.GetPhase<QuestExploration>() == 3)
6833 {
6834 SoundManager.ForceBGM();
6835 LayerDrama.ActivateMain("mono", "nymelle_crystal");
6836 }
6838 {
6840 {
6841 EClass.player.flags.fiamaFirstDream = true;
6842 ShowDialog("fiama", "firstDream");
6843 }
6845 {
6846 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
6847 {
6848 EClass.player.flags.fiamaStoryBookGiven = true;
6849 EClass.player.DropReward(ThingGen.Create("book_story"));
6850 });
6851 }
6852 else
6853 {
6854 ShowDialog("fiama");
6855 }
6856 }
6857 else
6858 {
6859 ShowDialog("fiama");
6860 }
6861 return;
6862 case "big_sister":
6864 {
6865 ShowDialog("big_sister", "little_saved");
6866 EClass.player.flags.little_saved = false;
6867 return;
6868 }
6870 {
6871 ShowDialog("big_sister", "little_dead");
6872 EClass.player.flags.little_killed = false;
6873 return;
6874 }
6875 break;
6876 }
6877 if (trait is TraitGuildDoorman)
6878 {
6879 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
6880 ShowDialog("guild_doorman", "main", tag);
6881 return;
6882 }
6883 if (trait is TraitGuildClerk)
6884 {
6885 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
6886 ShowDialog("guild_clerk", "main", tag2);
6887 return;
6888 }
6889 }
6890 bool flag = true;
6891 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
6892 {
6893 flag = false;
6894 }
6895 if (flag && File.Exists(CorePath.DramaData + id + ".xlsx"))
6896 {
6897 ShowDialog(id);
6898 }
6899 else
6900 {
6901 ShowDialog("_chara");
6902 }
6903 }
bool CanGiveCard()
Definition: Affinity.cs:63
void MakeFigureFrom(string id)
Definition: Card.cs:5453
void ShowDialog()
Definition: Chara.cs:6723
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:470
int storyFiama
Definition: Player.cs:590
bool little_saved
Definition: Player.cs:434
bool fiamaStoryBookGiven
Definition: Player.cs:290
bool fiamaFirstDream
Definition: Player.cs:302
bool little_killed
Definition: Player.cs:446
CodexManager codex
Definition: Player.cs:1035
bool EnableDreamStory
Definition: Player.cs:1188
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2439
bool paid
Definition: QuestDebt.cs:10
int stage
Definition: QuestDebt.cs:13
bool OnShowDialog(Chara c)
Quest Add(string id, string idGlobalChara=null)
Definition: QuestManager.cs:29
Quest Get(string id)
void Complete()
Definition: Quest.cs:468
ReligionHealing Healing
bool IsCrystalLv
Definition: Zone_Nymelle.cs:25
virtual bool IsFestival
Definition: Zone.cs:206

References EClass._zone, LayerDrama.ActivateMain(), QuestManager.Add(), 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 6905 of file Chara.cs.

6906 {
6907 return _ShowDialog(book, null, step, tag);
6908 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:6910

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

9222 {
9223 RemoveCondition<ConAwakening>();
9224 AddCondition(Condition.Create(100, delegate(ConSleep con)
9225 {
9226 con.pcSleep = 15;
9227 con.pcBed = bed;
9228 con.pcPillow = pillow;
9229 con.pickup = pickup;
9230 con.posBed = posBed;
9231 con.posPillow = posPillow;
9232 }), force: true);
9233 }

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

7713 {
7714 Say("abCatSniff", this, c);
7715 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
7716 c.ShowEmo(Emo.angry);
7717 ShowEmo(Emo.love);
7718 Talk("sniff");
7719 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
7720 }

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

4464 {
4465 return held.Split(a);
4466 }

References Card.Split().

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

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1789 of file Chara.cs.

1790 {
1791 bool flag = EClass._map.FindThing((Thing t) => t.IsInstalled && t.pos.Equals(EClass.pc.pos) && t.trait is TraitStairsUp) != null;
1792 Say(flag ? "dmgBurdenStairs" : "dmgBurdenFallDown", this);
1793 int num = MaxHP;
1794 if (Evalue(1421) > 0)
1795 {
1796 num = mana.max;
1797 }
1798 int num2 = (num * (base.ChildrenWeight * 100 / WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
1799 if (base.hp <= 0)
1800 {
1801 num2 *= 2;
1802 }
1803 DamageHP(num2, flag ? AttackSource.BurdenStairs : AttackSource.BurdenFallDown);
1804 }
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 3817 of file Chara.cs.

3818 {
3819 if (host != null)
3820 {
3821 host.SyncRide();
3822 }
3823 if (ride != null)
3824 {
3825 SyncRide(ride);
3826 }
3827 if (parasite != null)
3828 {
3830 }
3831 }

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

3834 {
3835 if (!c.pos.Equals(pos))
3836 {
3837 if (!pos.IsValid)
3838 {
3839 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
3840 pos = new Point();
3841 }
3842 EClass._map.MoveCard(pos, c);
3843 }
3844 }

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

◆ TalkTopic()

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

Definition at line 6652 of file Chara.cs.

6653 {
6654 if (host == null && !IsInActiveZone)
6655 {
6656 return null;
6657 }
6658 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
6659 {
6660 return null;
6661 }
6662 if (IsPCParty)
6663 {
6664 int num = EClass.pc.party.members.Count - 1;
6665 switch (topic)
6666 {
6667 case "calm":
6668 if (EClass.rnd(num * 5) != 0)
6669 {
6670 return null;
6671 }
6672 break;
6673 case "aggro":
6674 if (EClass.rnd(num * 10) != 0)
6675 {
6676 return null;
6677 }
6678 break;
6679 case "kill":
6680 if (EClass.rnd(num * 3) != 0)
6681 {
6682 return null;
6683 }
6684 break;
6685 case "fov":
6686 return null;
6687 }
6688 }
6689 string topicText = GetTopicText(topic);
6690 if (topicText.IsEmpty())
6691 {
6692 return null;
6693 }
6694 string text = "_bracketTalk".lang();
6695 bool flag = topicText.StartsWith("*");
6696 bool flag2 = topicText.StartsWith("(");
6697 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
6698 topicText = ApplyTone(topicText);
6699 topicText = topicText.Replace("~", "*");
6700 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
6701 Msg.Say(topicText.Replace("&", ""));
6702 if (topic == "dead")
6703 {
6704 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
6705 }
6706 else if (flag || flag3 || flag2)
6707 {
6708 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
6709 }
6710 return topicText;
6711 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:6466
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:6545
string GetTopicText(string topic="calm")
Definition: Chara.cs:6619
static UI ui
Definition: EClass.cs:16
Color Thinking
Definition: MsgColors.cs:17
Color Talk
Definition: MsgColors.cs:7

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

Referenced by AI_Idle.Run().

◆ Tick()

override void Chara.Tick ( )
inlinevirtual

Reimplemented from Card.

Definition at line 3846 of file Chara.cs.

3847 {
3848 SyncRide();
3849 combatCount--;
3850 ignoreSPAbsorb = false;
3851 if (IsPC)
3852 {
3853 if (hasMovedThisTurn)
3854 {
3855 pos.Things.ForeachReverse(delegate(Thing t)
3856 {
3857 t.trait.OnStepped(this);
3858 });
3859 if (isDead)
3860 {
3861 return;
3862 }
3863 hasMovedThisTurn = false;
3865 {
3866 EClass.player.haltMove = false;
3867 ActionMode.Adv.TryCancelInteraction(sound: false);
3868 EInput.Consume(1);
3869 return;
3870 }
3871 if (EClass._zone.IsRegion)
3872 {
3874 {
3875 foreach (Chara member in EClass.pc.party.members)
3876 {
3877 if (member.hunger.value > 65)
3878 {
3879 member.InstantEat(null, sound: false);
3880 }
3881 }
3882 }
3883 Chara chara = null;
3885 if (cell2 != null && (cell2.zone == null || (cell2.zone is Zone_Field && !cell2.zone.IsPCFaction)))
3886 {
3887 foreach (Chara chara2 in EClass._map.charas)
3888 {
3889 if (!chara2.IsPCFactionOrMinion && !chara2.IsGlobal && chara2.pos.Equals(EClass.pc.pos))
3890 {
3891 chara = chara2;
3892 break;
3893 }
3894 }
3895 }
3896 if (chara != null)
3897 {
3899 {
3900 EClass.player.safeTravel = 5 + EClass.rnd(5);
3901 }
3902 EClass._zone.RemoveCard(chara);
3903 Msg.Say("encounter");
3904 EClass.player.EnterLocalZone(encounter: true, chara);
3905 }
3906 else if (EClass.player.safeTravel <= 0)
3907 {
3908 if (cell2 != null && cell2.zone == null && !EClass.debug.ignoreEncounter)
3909 {
3911 if (!tileInfo.shore)
3912 {
3913 bool num = EClass.pc.HasCondition<ConWardMonster>();
3914 bool flag = EClass.pc.HasCondition<ConDrawMonster>();
3915 bool flag2 = EClass.game.quests.Get<QuestEscort>() != null;
3916 int num2 = (tileInfo.isRoad ? 22 : 12);
3917 if (flag2)
3918 {
3919 num2 = (tileInfo.isRoad ? 16 : 10);
3920 }
3921 if (num)
3922 {
3923 num2 *= (flag2 ? 2 : 20);
3924 }
3925 if (flag)
3926 {
3927 num2 /= 2;
3928 }
3929 if (EClass.rnd(num2) == 0)
3930 {
3931 Msg.Say("encounter");
3932 if (!flag)
3933 {
3934 EClass.player.safeTravel = 5 + EClass.rnd(5);
3935 }
3936 EClass.player.EnterLocalZone(encounter: true);
3937 }
3938 }
3939 }
3940 }
3941 else
3942 {
3944 }
3945 }
3946 }
3947 EClass.player.pickupDelay = 0f;
3948 if (EClass.player.returnInfo != null)
3949 {
3951 if (EClass.player.returnInfo.turns <= 0)
3952 {
3954 {
3955 EClass.player.returnInfo = null;
3957 }
3958 else
3959 {
3961 {
3962 int uidDest = EClass.player.returnInfo.uidDest;
3963 Zone zone = null;
3964 if (uidDest != 0)
3965 {
3966 zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
3967 }
3968 if (zone == null || zone.destryoed)
3969 {
3970 zone = EClass.world.region;
3971 }
3973 {
3974 Msg.Say("returnFail");
3975 }
3976 else
3977 {
3978 Msg.Say("returnComplete");
3979 EClass.player.uidLastTravelZone = 0;
3981 EClass.player.lastZonePos = null;
3982 }
3983 EClass.player.returnInfo = null;
3984 return;
3985 }
3986 EClass.player.returnInfo = null;
3987 Msg.Say("returnOverweight");
3988 }
3989 }
3990 }
3991 if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
3992 {
3994 return;
3995 }
3998 {
3999 RecipeUpdater.dirty = true;
4000 }
4002 }
4003 else
4004 {
4005 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (float)EClass.pc.Speed / (float)Speed);
4006 hasMovedThisTurn = false;
4007 }
4010 {
4011 return;
4012 }
4014 if (host != null && !consumeTurn)
4015 {
4016 if (host.ride == this && ((host.hasMovedThisTurn && IsInCombat) || (enemy != null && turn % 3 != 0)))
4017 {
4018 consumeTurn = true;
4019 }
4020 if (host.parasite == this && enemy != null && EClass.rnd(10) > EClass.rnd(host.Evalue(227) + 10))
4021 {
4022 if (Dist(enemy) < 3 && EClass.rnd(2) == 0)
4023 {
4024 Say("parasite_fail", this, host);
4025 if (EClass.rnd(2) == 0 && GetInt(106) == 0)
4026 {
4027 Talk("parasite_fail");
4028 }
4029 }
4030 consumeTurn = true;
4031 }
4032 }
4033 if (consumeTurn)
4034 {
4035 if (IsPC)
4036 {
4038 }
4039 }
4040 else
4041 {
4042 if (base.isRestrained)
4043 {
4044 TryUnrestrain();
4045 }
4046 if (enemy != null)
4047 {
4049 {
4050 enemy = null;
4051 }
4052 else if (!IsPC && (ai.CancelOnAggro || !ai.IsRunning))
4053 {
4054 SetAIAggro();
4055 }
4056 }
4057 if (HasNoGoal || !ai.IsRunning)
4058 {
4059 ChooseNewGoal();
4060 }
4061 ai.Tick();
4062 }
4063 Cell cell = base.Cell;
4065 {
4066 AddCondition<ConWet>(50);
4067 if (pos.IsHotSpring)
4068 {
4069 hygiene.Mod(2);
4070 }
4071 }
4072 if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode)
4073 {
4074 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
4075 }
4076 CellEffect e;
4077 if (cell.effect != null)
4078 {
4079 e = cell.effect;
4080 switch (e.id)
4081 {
4082 case 1:
4083 case 2:
4084 case 4:
4085 if (IsLevitating)
4086 {
4087 Say("levitating");
4088 break;
4089 }
4090 AddCondition<ConWet>(50);
4091 ProcEffect();
4092 break;
4093 case 3:
4094 PlaySound("fire_step");
4095 AddCondition<ConBurning>(30);
4096 break;
4097 case 5:
4098 if (!isWet)
4099 {
4100 PlaySound("bubble");
4101 AddCondition<ConWet>(30);
4102 ProcEffect();
4103 }
4104 break;
4105 case 6:
4106 if (hasMovedThisTurn)
4107 {
4108 Say("abMistOfDarkness_step", this);
4109 }
4110 break;
4111 }
4112 }
4113 if (IsPC)
4114 {
4115 if (EClass.player.currentHotItem.Thing != null)
4116 {
4118 }
4120 }
4121 void ClearEffect()
4122 {
4123 EClass._map.SetLiquid(cell.x, cell.z, 0, 0);
4124 }
4125 void ProcEffect()
4126 {
4127 if (e.idEffect != 0)
4128 {
4129 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
4130 {
4131 aliasEle = EClass.sources.elements.map[e.idEle].alias,
4132 n1 = e.n1
4133 });
4134 ClearEffect();
4135 }
4136 }
4137 }
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:63
void TryUnrestrain(bool force=false, Chara c=null)
Definition: Card.cs:6779
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:7233
int Speed
Definition: Chara.cs:1069
static bool consumeTurn
Definition: Chara.cs:178
void SetAIAggro()
Definition: Chara.cs:8439
bool ignoreSPAbsorb
Definition: Chara.cs:146
void ChooseNewGoal()
Definition: Chara.cs:8320
bool WillConsumeTurn()
Definition: Chara.cs:3589
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:1091
float baseActTime
Definition: Player.cs:1119
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1849
HotItem currentHotItem
Definition: Player.cs:1020
int safeTravel
Definition: Player.cs:843
int eloY
Definition: Point.cs:81
int eloX
Definition: Point.cs:79
bool IsHotSpring
Definition: Point.cs:363
bool destryoed
Definition: Spatial.cs:45
virtual void OnTickHeld()
Definition: Trait.cs:1041
Definition: ActRef.cs:2

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

◆ TickConditions()

void Chara.TickConditions ( )
inline

Definition at line 3601 of file Chara.cs.

3602 {
3603 if (_cooldowns != null)
3604 {
3605 TickCooldown();
3606 }
3607 turn++;
3608 consumeTurn = false;
3609 preventRegen = false;
3610 emoIcon = Emo2.none;
3611 if (base.isSummon)
3612 {
3613 base.c_summonDuration--;
3614 if (base.c_summonDuration <= 0)
3615 {
3616 Die();
3617 return;
3618 }
3619 }
3621 {
3622 AddCondition<ConWet>(20);
3623 }
3624 switch (turn % 50)
3625 {
3626 case 0:
3627 happiness = (hunger.value + stamina.value + depression.value + bladder.value + hygiene.value) / 5;
3628 break;
3629 case 1:
3630 if (!IsPC || !EClass.debug.godMode)
3631 {
3632 if (EClass.rnd(2) == 0 && !HasCondition<ConAwakening>())
3633 {
3634 sleepiness.Mod(1);
3635 }
3636 if (EClass.rnd(3) == 0)
3637 {
3638 hunger.Mod(1);
3639 }
3640 if (IsPC && (sleepiness.GetPhase() != 0 || stamina.GetPhase() <= 1))
3641 {
3642 Tutorial.Play("sleep");
3643 }
3644 }
3645 break;
3646 case 2:
3647 if (parasite != null)
3648 {
3649 ModExp(227, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(227) - parasite.LV) * 25));
3650 }
3651 if (ride != null)
3652 {
3653 ModExp(226, (EClass._zone.IsRegion ? 5 : 40) * 100 / Mathf.Max(100, 100 + (elements.Base(226) - ride.LV) * 25));
3654 }
3655 break;
3656 case 3:
3657 {
3658 int phase = hygiene.GetPhase();
3659 int num = 0;
3660 num = ((!IsPC) ? ((phase > 3) ? 50 : 0) : ((phase > 3) ? 50 : 0));
3661 if (num > EClass.rnd(100))
3662 {
3663 hygiene.Mod(-1);
3664 }
3665 break;
3666 }
3667 }
3668 if (turn % 200 == 0)
3669 {
3671 }
3672 if (IsPCParty)
3673 {
3674 if (dirtyWeight)
3675 {
3676 CalcBurden();
3677 }
3678 int phase2 = burden.GetPhase();
3679 int phase3 = hunger.GetPhase();
3680 if (phase3 >= 4)
3681 {
3682 preventRegen = true;
3683 }
3684 if (EClass.rnd(EClass._zone.IsRegion ? 100 : 30) == 0 && phase2 >= 3)
3685 {
3686 Say("dmgBurden", this);
3687 DamageHP(MaxHP * (base.ChildrenWeight * 100 / WeightLimit) / 1000 + 1, AttackSource.Burden);
3688 if (isDead)
3689 {
3690 return;
3691 }
3692 }
3693 if (EClass.rnd(12) == 0)
3694 {
3695 if (IsPC)
3696 {
3697 if (phase2 > 0)
3698 {
3699 ModExp(207, 1 + phase2 * phase2);
3700 }
3701 }
3702 else
3703 {
3704 ModExp(207, 4);
3705 }
3706 }
3707 if (IsPC)
3708 {
3709 if (phase3 >= 5)
3710 {
3711 if (!(ai is AI_Eat) && EClass.rnd(5) == 0)
3712 {
3713 DamageHP(1 + EClass.rnd(2) + MaxHP / 50, AttackSource.Hunger);
3714 }
3715 if (!isDead && EClass.rnd(3) == 0)
3716 {
3717 stamina.Mod(-1);
3718 }
3719 }
3720 if (isDead)
3721 {
3722 return;
3723 }
3724 phase3 = stamina.GetPhase();
3725 if (phase3 <= 0)
3726 {
3727 preventRegen = true;
3728 }
3730 {
3731 if (EClass.rnd(100) == 0 && !isConfused)
3732 {
3733 Msg.Say("rain_confuse");
3734 AddCondition<ConConfuse>(500);
3735 }
3736 if (EClass.rnd(300) == 0 && !isBlind)
3737 {
3738 Msg.Say("rain_confuse");
3739 AddCondition<ConBlind>(200);
3740 }
3741 }
3742 if (turn % (200000 / Mathf.Max(100 + Evalue(409) * 10, 50)) == 0)
3743 {
3744 ModCorruption(1);
3745 }
3746 }
3747 }
3748 if (!IsPC)
3749 {
3750 int num2 = Evalue(409);
3751 if (num2 > 0 && turn % (200000 / Mathf.Max(100 + num2 * 10, 50)) == 0)
3752 {
3753 ModCorruption(1);
3754 }
3755 }
3756 for (int num3 = conditions.Count - 1; num3 >= 0; num3--)
3757 {
3758 if (num3 < conditions.Count)
3759 {
3760 Condition condition = conditions[num3];
3761 if (!condition.TimeBased)
3762 {
3763 condition.Tick();
3764 }
3765 if (!condition.IsKilled)
3766 {
3767 if (condition.ConsumeTurn)
3768 {
3769 consumeTurn = true;
3770 }
3771 if (condition.PreventRegen)
3772 {
3773 preventRegen = true;
3774 }
3775 if (condition.EmoIcon != 0 && condition.EmoIcon > emoIcon)
3776 {
3777 emoIcon = condition.EmoIcon;
3778 }
3779 }
3780 if (isDead)
3781 {
3782 return;
3783 }
3784 }
3785 }
3786 if (id == "tsunami")
3787 {
3788 if (elements.Base(79) < 30)
3789 {
3790 Die();
3791 return;
3792 }
3793 if (IsInCombat)
3794 {
3795 elements.SetTo(79, elements.Base(79) * 3 / 4);
3796 }
3797 }
3798 if (!preventRegen)
3799 {
3800 if (EClass.rnd(25) == 0 && base.hp < MaxHP)
3801 {
3802 HealHP(EClass.rnd(Evalue(300) / 3 + 1) + 1);
3803 elements.ModExp(300, 8f);
3804 }
3805 if (EClass.rnd(8) == 0 && mana.value < mana.max)
3806 {
3807 mana.Mod(EClass.rnd(Evalue(301) / 2 + 1) + 1);
3808 elements.ModExp(301, 8f);
3809 }
3810 if (EClass.rnd(20) == 0 && !IsPC && stamina.value < stamina.max)
3811 {
3812 stamina.Mod(EClass.rnd(5) + 1);
3813 }
3814 }
3815 }
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:83
bool HasRoof
Definition: Cell.cs:648
void TickCooldown()
Definition: Chara.cs:8301
void DiminishTempElements(int a=1)
Definition: Chara.cs:9791
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:5073
void ModCorruption(int a)
Definition: Chara.cs:9319
bool isBlind
Definition: Chara.cs:130
static bool preventRegen
Definition: Chara.cs:180
void CalcBurden()
Definition: Chara.cs:1774
virtual bool IsKilled
Definition: Condition.cs:7
override void Tick()
Definition: Condition.cs:70
void SetTo(int id, int v)
bool IsIndoor
Definition: Map.cs:131
static void Play(string idStep)
Definition: Tutorial.cs:7
bool IsRaining
Definition: Weather.cs:117

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

Referenced by _Move().

◆ TickCooldown()

void Chara.TickCooldown ( )
inline

Definition at line 8301 of file Chara.cs.

8302 {
8303 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8304 {
8305 if (_cooldowns[num] % 1000 == 1)
8306 {
8307 _cooldowns.RemoveAt(num);
8308 }
8309 else
8310 {
8311 _cooldowns[num]--;
8312 }
8313 }
8314 if (_cooldowns.Count == 0)
8315 {
8316 _cooldowns = null;
8317 }
8318 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 8721 of file Chara.cs.

8722 {
8724 if (span != TimeTable.Span.Work && span != 0)
8725 {
8726 return;
8727 }
8728 WorkSummary workSummary = GetWorkSummary();
8729 if (span == TimeTable.Span.Work)
8730 {
8731 if (workSummary.work != null)
8732 {
8733 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
8734 }
8735 }
8736 else if (workSummary.hobbies.Count > 0)
8737 {
8738 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
8739 }
8740 }
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 1154 of file Chara.cs.

1155 {
1156 return base.Name + "(" + ai?.ToString() + ")" + pos?.ToString() + "/" + base.ExistsOnMap + "/" + isDead;
1157 }
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 4251 of file Chara.cs.

4252 {
4253 if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
4254 {
4255 return;
4256 }
4257 Say("absorbRod", this, t);
4258 TraitRod rod = t.trait as TraitRod;
4259 bool flag = false;
4260 if (rod.source != null)
4261 {
4262 using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
4263 if (enumerator.MoveNext())
4264 {
4265 SourceElement.Row current = enumerator.Current;
4266 if (IsPC)
4267 {
4268 GainAbility(current.id, t.c_charges * 100);
4269 flag = true;
4270 }
4271 }
4272 }
4273 if (!flag)
4274 {
4275 mana.Mod(-50 * t.c_charges);
4276 }
4277 t.c_charges = 0;
4279 }
int c_charges
Definition: Card.cs:1243
void GainAbility(int ele, int mtp=100)
Definition: Chara.cs:9561

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

7014 {
7015 if (!IsPCFaction && !IsGuest())
7016 {
7017 return null;
7018 }
7019 foreach (Card item in EClass._map.props.installed.all)
7020 {
7021 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7022 {
7023 traitBed.AddHolder(this);
7024 Msg.Say("claimBed", this);
7025 return traitBed;
7026 }
7027 }
7028 return null;
7029 }
bool CanAssign(Chara c)
Definition: TraitBed.cs:154

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

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

◆ TryDropBossLoot()

void Chara.TryDropBossLoot ( )
inline

Definition at line 5375 of file Chara.cs.

5376 {
5378 {
5379 return;
5380 }
5381 int num = 0;
5382 bool flag = false;
5383 bool flag2 = false;
5384 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5385 TreasureType type = TreasureType.BossQuest;
5386 if (EClass._zone.Boss == this)
5387 {
5388 type = TreasureType.BossNefia;
5389 num = 2 + EClass.rnd(2);
5390 flag = (flag2 = true);
5391 EClass._zone.Boss = null;
5392 Msg.Say("boss_win", EClass._zone.Name);
5394 {
5395 Msg.Say("boss_win_void", EClass._zone.Name);
5396 EClass.player.flags.KilledBossInVoid = true;
5397 }
5398 if (EClass._zone.IsNefia)
5399 {
5402 EClass.Sound.StopBGM(2f);
5403 SE.Play("Jingle/fanfare2");
5404 EClass._zone.SetBGM(114);
5405 }
5408 }
5409 switch (id)
5410 {
5411 case "vernis_boss":
5412 num = 5;
5413 flag = (flag2 = true);
5414 EClass.Sound.StopBGM(3f);
5415 EClass._zone.SetBGM(1, refresh: false);
5416 if (EClass.game.quests.GetPhase<QuestVernis>() == 8)
5417 {
5418 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5419 }
5420 break;
5421 case "melilith_boss":
5422 num = 5;
5423 flag = (flag2 = true);
5424 EClass.Sound.StopBGM(3f);
5425 EClass._zone.SetBGM(1, refresh: false);
5426 break;
5427 case "fairy_raina":
5428 case "fairy_poina":
5429 {
5430 bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
5431 QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
5432 if (num2 && questNasu != null && questNasu.phase == 1)
5433 {
5434 num = 5;
5435 flag = (flag2 = true);
5436 EClass.Sound.StopBGM(3f);
5437 EClass._zone.SetBGM(1, refresh: false);
5438 EClass.player.DropReward(ThingGen.Create("backpack_holding"));
5439 questNasu.NextPhase();
5440 }
5441 break;
5442 }
5443 case "isygarad":
5444 {
5445 num = 5;
5446 flag = (flag2 = true);
5447 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5448 if (questExploration != null)
5449 {
5450 SE.Play("kill_boss");
5451 questExploration.ChangePhase(3);
5452 EClass.Sound.StopBGM(3f);
5453 EClass._zone.SetBGM(1, refresh: false);
5454 }
5455 break;
5456 }
5457 case "swordkeeper":
5458 num = 10;
5459 flag = true;
5460 SE.Play("kill_boss");
5461 SoundManager.ForceBGM();
5462 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5463 break;
5464 }
5465 if (flag)
5466 {
5467 SE.Play("kill_boss");
5468 }
5469 if (num != 0)
5470 {
5471 EClass.player.willAutoSave = true;
5472 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5473 point.SetBlock();
5474 point.SetObj();
5475 EClass._zone.AddCard(thing, point).Install();
5476 ThingGen.TryLickChest(thing);
5477 }
5478 if (flag2)
5479 {
5481 }
5482 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:410
long nefiaBeaten
Definition: Player.cs:127
void ModFame(int a)
Definition: Player.cs:1997
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:912
void SetBlock(int idMat=0, int idBlock=0)
Definition: Point.cs:902
int phase
Definition: Quest.cs:40
void NextPhase()
Definition: Quest.cs:567
void ChangePhase(int a)
Definition: Quest.cs:572
bool isConquered
Definition: Spatial.cs:382
static void TryLickChest(Thing chest)
Definition: ThingGen.cs:386
static Thing CreateTreasure(string id, int lv, TreasureType type=TreasureType.Map)
Definition: ThingGen.cs:233
static Thing CreateScroll(int ele, int num=1)
Definition: ThingGen.cs:178
void SetBGM(List< int > ids, bool refresh=true)
Definition: Zone.cs:2861
virtual bool IsNefia
Definition: Zone.cs:280
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.DropReward(), CoreDebug.enable, Map.FindChara(), Player.flags, EClass.game, QuestManager.Get(), Point.GetNearestPoint(), Zone.GetTopZone(), Card.Install(), Spatial.isConquered, Zone.IsNefia, Player.Flags.KilledBossInVoid, Player.ModFame(), Player.ModKarma(), Spatial.Name, Player.Stats.nefiaBeaten, 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 4468 of file Chara.cs.

4469 {
4470 if (held != null && held.trait.CanOnlyCarry)
4471 {
4472 DropHeld();
4473 }
4474 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4475 {
4476 DropThing(item);
4477 }
4478 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4500

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

◆ TryEquip()

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

Definition at line 7357 of file Chara.cs.

7358 {
7359 if (!ShouldEquip(t, useFav))
7360 {
7361 return false;
7362 }
7363 if (t.category.slot == 0)
7364 {
7365 return false;
7366 }
7367 if (useFav)
7368 {
7369 BodySlot slot = body.GetSlot(t);
7370 switch (GetFavAttackStyle())
7371 {
7372 case AttackStyle.Default:
7373 case AttackStyle.TwoHand:
7374 if (t.IsMeleeWeapon)
7375 {
7376 slot = body.slotMainHand;
7377 }
7378 break;
7379 case AttackStyle.Shield:
7380 if (t.IsMeleeWeapon)
7381 {
7382 slot = body.slotMainHand;
7383 }
7384 break;
7385 }
7386 body.Equip(t, slot);
7387 }
7388 else
7389 {
7390 body.Equip(t);
7391 }
7392 Say("equip", this, t);
7393 return true;
7394 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7275

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

7478 {
7479 if (IsPC)
7480 {
7482 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
7483 {
7484 ranged = thing;
7485 return true;
7486 }
7487 return false;
7488 }
7489 if (ranged != null && ranged.parent == this)
7490 {
7491 return true;
7492 }
7494 return ranged != null;
7495 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:7462

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

7402 {
7403 Thing dest = null;
7404 if (IsPC)
7405 {
7407 {
7408 return FindThrowable(hotbar: true);
7409 }
7410 return null;
7411 }
7412 things.Foreach(delegate(Thing t)
7413 {
7414 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7415 {
7416 dest = t;
7417 }
7418 });
7419 return dest;
7420 Thing FindThrowable(bool hotbar)
7421 {
7422 things.Foreach(delegate(Thing t)
7423 {
7424 if (dest == null)
7425 {
7426 if (t.IsHotItem)
7427 {
7428 if (!hotbar)
7429 {
7430 return;
7431 }
7432 }
7433 else if (hotbar)
7434 {
7435 return;
7436 }
7437 if (t.HasTag(CTAG.throwWeapon))
7438 {
7439 dest = t;
7440 }
7441 }
7442 });
7443 return dest;
7444 }
7445 }

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

4330 {
4331 if (held == t)
4332 {
4333 return true;
4334 }
4335 if (t.isDestroyed || t.Num <= 0)
4336 {
4337 return false;
4338 }
4339 if (!CanPick(t))
4340 {
4341 if (t.parent == null)
4342 {
4343 EClass._zone.AddCard(t, pos);
4344 }
4345 return false;
4346 }
4347 HoldCard(t, num);
4348 return true;
4349 }
bool CanPick(Card c)
Definition: Chara.cs:4149
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4351

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

7618 {
7619 int num = Evalue(289);
7620 if (num == 0)
7621 {
7622 return false;
7623 }
7624 int lV = t.LV;
7625 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
7626 {
7627 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
7628 int num2 = 50;
7629 if (lV > num)
7630 {
7631 num2 += (lV - num) * 10;
7632 }
7633 elements.ModExp(289, Mathf.Min(num2, 1000));
7634 return true;
7635 }
7636 return false;
7637 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:2025

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

2657 {
2658 foreach (Condition condition in conditions)
2659 {
2660 if (!condition.TryMove(newPoint))
2661 {
2662 return MoveResult.Fail;
2663 }
2664 }
2665 if (base.isRestrained)
2666 {
2667 if (!IsPC)
2668 {
2669 return MoveResult.Fail;
2670 }
2671 base.isRestrained = false;
2672 }
2673 if (!CanMoveTo(newPoint, allowDestroyPath))
2674 {
2675 return MoveResult.Fail;
2676 }
2677 return _Move(newPoint);
2678 }
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 2616 of file Chara.cs.

2617 {
2619 {
2620 return MoveResult.Fail;
2621 }
2622 Point point = p.Copy();
2623 int num = p.x - pos.x;
2624 int num2 = p.z - pos.z;
2625 if (num > 1)
2626 {
2627 num = 1;
2628 }
2629 else if (num < -1)
2630 {
2631 num = -1;
2632 }
2633 if (num2 > 1)
2634 {
2635 num2 = 1;
2636 }
2637 else if (num2 < -1)
2638 {
2639 num2 = -1;
2640 }
2641 if (num == 0 && num2 == 0)
2642 {
2643 num = EClass.rnd(3) - 1;
2644 num2 = EClass.rnd(3) - 1;
2645 }
2646 point.Set(pos);
2647 point.x -= num;
2648 point.z -= num2;
2649 if (point.IsValid && !point.HasChara)
2650 {
2651 return TryMove(point, allowDestroyPath: false);
2652 }
2653 return MoveResult.Fail;
2654 }
bool TooHeavyToMove()
Definition: Player.cs:2450

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

2555 {
2556 if (p.Equals(pos))
2557 {
2558 return MoveResult.Success;
2559 }
2561 {
2562 return MoveResult.Fail;
2563 }
2564 bool flag = true;
2565 Point point = null;
2566 _sharedPos.Set(p);
2567 if (CanDestroyPath())
2568 {
2570 {
2571 return MoveResult.Success;
2572 }
2573 Debug.Log(CanMoveTo(pos));
2575 }
2576 int num = pos.Distance(p);
2577 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2578 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2579 {
2580 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2581 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2582 {
2583 return MoveResult.Success;
2584 }
2585 }
2586 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2587 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2588 {
2589 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2590 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2591 {
2592 return MoveResult.Success;
2593 }
2594 }
2595 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2596 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2597 {
2598 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2599 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2600 {
2601 return MoveResult.Success;
2602 }
2603 }
2604 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2605 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2606 {
2607 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2608 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2609 {
2610 return MoveResult.Success;
2611 }
2612 }
2613 return MoveResult.Fail;
2614 }
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 9156 of file Chara.cs.

9157 {
9158 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9159 {
9160 return false;
9161 }
9162 if (TC.hp > TC.MaxHP * Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) / 100)
9163 {
9164 return false;
9165 }
9166 if (TC.HasElement(427))
9167 {
9168 return false;
9169 }
9170 if (TC.IsPC && EClass.player.invlunerable)
9171 {
9172 return false;
9173 }
9174 PlaySound("hit_finish");
9175 Say("finish");
9176 Say("finish2", this, TC);
9177 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9178 return false;
9179 }
@ harvest
bool invlunerable
Definition: Player.cs:1093
Definition: TC.cs:4

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

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 9581 of file Chara.cs.

9582 {
9583 if (IsPCParty)
9584 {
9585 foreach (Chara member in EClass.pc.party.members)
9586 {
9587 if (member.HasElement(1641) && EClass.rnd(3) != 0)
9588 {
9589 Msg.Say("curse_nullify", member);
9590 return true;
9591 }
9592 }
9593 }
9594 else if (HasElement(1641) && EClass.rnd(3) != 0)
9595 {
9596 Say("curse_nullify", this);
9597 return true;
9598 }
9599 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
9600 {
9601 Say("curse_nullify", this);
9602 return true;
9603 }
9604 return false;
9605 }

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

◆ TryPickGroundItem()

void Chara.TryPickGroundItem ( )
inline

Definition at line 4305 of file Chara.cs.

4306 {
4307 foreach (Card item in pos.ListCards())
4308 {
4309 if ((IsPC || !(EClass.pc.ai is AI_UseCrafter aI_UseCrafter) || !aI_UseCrafter.ings.Contains(item)) && item.isThing && item.placeState == PlaceState.roaming && CanPick(item))
4310 {
4311 Thing thing = Pick(item.Thing);
4312 if (thing != null && !IsPC)
4313 {
4314 thing.isNPCProperty = true;
4315 }
4316 break;
4317 }
4318 }
4319 }

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4237 of file Chara.cs.

4238 {
4239 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4240 {
4241 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)
4242 .id;
4243 Say("poisonDrip", this);
4244 int num = t.Num;
4245 t.Destroy();
4246 t = ThingGen.Create(text).SetNum(num);
4247 }
4248 return t;
4249 }
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 3153 of file Chara.cs.

3154 {
3155 List<Chara> list = point.ListCharas();
3156 if (list.Count == 0)
3157 {
3158 return;
3159 }
3160 list.Copy().ForeachReverse(delegate(Chara c)
3161 {
3162 if (!c.ai.IsMoveAI && !c.IsPC && c.trait.CanBePushed && c != this && !c.noMove && (!EClass._zone.IsRegion || c.IsPCFactionOrMinion))
3163 {
3164 List<Point> list2 = new List<Point>();
3165 for (int i = point.x - 1; i <= point.x + 1; i++)
3166 {
3167 for (int j = point.z - 1; j <= point.z + 1; j++)
3168 {
3169 if (i != point.x || j != point.z)
3170 {
3171 Point point2 = new Point(i, j);
3172 if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
3173 {
3174 list2.Add(point2);
3175 }
3176 }
3177 }
3178 }
3179 if (list2.Count > 0)
3180 {
3181 if (list2.Count > 1)
3182 {
3183 list2.ForeachReverse(delegate(Point p)
3184 {
3185 if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
3186 {
3187 list2.Remove(p);
3188 }
3189 });
3190 }
3191 Point newPoint = list2.RandomItem();
3192 if (IsPC)
3193 {
3194 Say("displace", this, c);
3195 PlaySound("push");
3196 }
3197 else if (c.isSynced)
3198 {
3199 c.PlayEffect("push");
3200 }
3201 c.MoveByForce(newPoint, this, checkWall: true);
3202 if (!c.IsPC && c.trait is TraitRogue && EClass.rnd(3) == 0 && GetCurrency() > 20 && !HasElement(426))
3203 {
3204 int num = EClass.rndHalf(10 + Mathf.Min(GetCurrency() / 100, 1000));
3205 c.Talk("pushed");
3206 Say("pushed_money", this, c);
3207 ModCurrency(-num);
3208 c.ModCurrency(num);
3209 c.PlaySound("steal_money");
3210 }
3211 else if (IsPC && !c.IsPCParty && !c.IsUnique && c.IsHumanSpeak && EClass.rnd(5) == 0)
3212 {
3213 c.Talk("pushed");
3214 }
3215 }
3216 }
3217 });
3218 }
bool IsMoveAI
Definition: AIAct.cs:55
bool IsHumanSpeak
Definition: Chara.cs:1001

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

4322 {
4323 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4324 {
4325 EClass._zone.AddCard(t, pos);
4326 }
4327 }
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2080

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

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

7032 {
7033 if (GetInt(113) != 0)
7034 {
7035 return;
7036 }
7037 _ListItems.Clear();
7038 Thing bestRangedWeapon = GetBestRangedWeapon();
7039 foreach (Thing thing in things)
7040 {
7041 if (!thing.IsAmmo)
7042 {
7043 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
7044 {
7045 _ListItems.Add(thing);
7046 }
7047 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
7048 {
7049 _ListItems.Add(thing);
7050 }
7051 }
7052 }
7053 if (_ListItems.Count == 0)
7054 {
7055 return;
7056 }
7057 List<Thing> containers2 = containers.ToList();
7058 foreach (Thing listItem in _ListItems)
7059 {
7060 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
7061 }
7062 }
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 4281 of file Chara.cs.

4282 {
4283 if (t.id == "axe")
4284 {
4285 Tutorial.Reserve("tool");
4286 }
4287 if (t.category.id == "mushroom")
4288 {
4289 Tutorial.Reserve("food");
4290 }
4291 if (t.category.id == "herb")
4292 {
4293 Tutorial.Reserve("herb");
4294 }
4295 if (t.id == "pasture")
4296 {
4297 Tutorial.Reserve("pasture");
4298 }
4299 if (t.id == "log")
4300 {
4301 Tutorial.Reserve("process");
4302 }
4303 }

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4562 of file Chara.cs.

4563 {
4564 isOnCreate = onCreate;
4565 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4566 {
4567 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4568 }
4569 RestockInventory(onCreate);
4570 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:4780
void RestockEquip(bool onCreate)
Definition: Chara.cs:4572

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

6017 {
6018 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))
6019 {
6020 SetEnemy(c);
6021 }
6022 }

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

7070 {
7072 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7069

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

7075 {
7076 if (base.isSummon || (memberType == FactionMemberType.Livestock && homeBranch != null && !homeBranch.policies.IsActive(2715)))
7077 {
7078 return;
7079 }
7080 int num = 2;
7081 int num2 = 2;
7082 bool flag = GetInt(113) == 0;
7083 int num3 = 2;
7084 int num4 = 2;
7085 int num5 = 2;
7087 {
7088 num4 = 0;
7089 num5 = 0;
7090 }
7091 foreach (Thing thing3 in things)
7092 {
7093 if (CanEat(thing3, shouldEat))
7094 {
7095 num -= thing3.Num;
7096 }
7097 if (thing3.trait.GetHealAction(this) != null)
7098 {
7099 num2 -= thing3.Num;
7100 }
7101 if (thing3.id == "polish_powder")
7102 {
7103 num3 -= thing3.Num;
7104 }
7105 if (thing3.trait is TraitBlanketColdproof)
7106 {
7107 num4 -= thing3.Num;
7108 }
7109 if (thing3.trait is TraitBlanketFireproof)
7110 {
7111 num5 -= thing3.Num;
7112 }
7113 }
7114 _ListItems.Clear();
7115 foreach (Thing container in containers)
7116 {
7117 if (!container.IsSharedContainer)
7118 {
7119 continue;
7120 }
7121 foreach (Thing thing4 in container.things)
7122 {
7123 if (!thing4.c_isImportant && thing4.IsIdentified)
7124 {
7125 if (num3 > 0 && thing4.id == "polish_powder")
7126 {
7127 _ListItems.Add(thing4);
7128 num3 -= thing4.Num;
7129 }
7130 else if (num4 > 0 && !HasElement(1236) && thing4.trait is TraitBlanketColdproof)
7131 {
7132 _ListItems.Add(thing4);
7133 num4 -= thing4.Num;
7134 }
7135 else if (num5 > 0 && thing4.trait is TraitBlanketFireproof)
7136 {
7137 _ListItems.Add(thing4);
7138 num5 -= thing4.Num;
7139 }
7140 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant)
7141 {
7142 _ListItems.Add(thing4);
7143 num -= thing4.Num;
7144 }
7145 else if (num2 > 0 && thing4.trait.GetHealAction(this) != null)
7146 {
7147 _ListItems.Add(thing4);
7148 num2 -= thing4.Num;
7149 }
7150 else if (flag && thing4.IsEquipmentOrRanged && !thing4.HasTag(CTAG.gift) && ShouldEquip(thing4, useFav: true))
7151 {
7152 _ListItems.Add(thing4);
7153 }
7154 }
7155 }
7156 }
7157 if (_ListItems.Count == 0)
7158 {
7159 return;
7160 }
7161 _ListItems.ForeachReverse(delegate(Thing t)
7162 {
7163 if (t.IsEquipmentOrRanged)
7164 {
7165 bool flag3 = false;
7166 int slot = t.category.slot;
7167 int equipValue = t.GetEquipValue();
7168 foreach (Thing listItem in _ListItems)
7169 {
7170 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
7171 {
7172 flag3 = true;
7173 break;
7174 }
7175 }
7176 if (flag3)
7177 {
7178 _ListItems.Remove(t);
7179 }
7180 }
7181 });
7182 bool flag2 = false;
7183 foreach (Thing listItem2 in _ListItems)
7184 {
7185 Thing thing = listItem2;
7186 if (things.IsFull(thing))
7187 {
7188 break;
7189 }
7190 Thing thing2 = listItem2.parent as Thing;
7191 if (thing.Num > 2)
7192 {
7193 thing = thing.Split(2);
7194 }
7195 if (msg)
7196 {
7197 Say("takeSharedItem", this, thing, thing2.GetName(NameStyle.Full));
7198 }
7199 AddCard(thing);
7200 if (ShouldEquip(thing, useFav: true) && thing.category.slot != 0)
7201 {
7202 TryEquip(thing, useFav: true);
7203 flag2 = true;
7204 }
7205 }
7206 if (flag2 && flag)
7207 {
7208 TryPutSharedItems(containers);
7209 }
7210 }
bool IsIdentified
Definition: Card.cs:2339
bool HasItemProtection
bool IsActive(int id, int days=-1)
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:518
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 8175 of file Chara.cs.

8176 {
8177 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
8178 {
8179 return;
8180 }
8181 for (int i = 0; i < 100; i++)
8182 {
8183 if (base.feat == 0)
8184 {
8185 break;
8186 }
8187 if (base.c_upgrades == null)
8188 {
8189 base.c_upgrades = new CharaUpgrade();
8190 }
8191 if (base.c_upgrades.halt)
8192 {
8193 break;
8194 }
8195 Rand.SetSeed(base.uid + base.c_upgrades.count);
8196 int num = EClass.rnd(100);
8197 int num2 = 0;
8198 int num3 = 1;
8199 int num4 = 0;
8200 bool flag = false;
8201 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
8202 List<Element> list = ListAvailabeFeats(pet: true);
8203 if (num >= 90 && list.Count > 0)
8204 {
8205 Element element = list.RandomItem();
8206 num2 = element.id;
8207 num4 = element.CostLearn;
8208 }
8209 else if (num >= 60 && ie.Any())
8210 {
8211 num2 = ie.RandomItem().id;
8212 num4 = 3;
8213 }
8214 else
8215 {
8216 num2 = Element.List_MainAttributesMajor.RandomItem();
8217 num4 = 1;
8218 num3 = 2;
8219 flag = true;
8220 }
8221 Rand.SetSeed();
8222 if (num4 > base.feat)
8223 {
8224 break;
8225 }
8226 base.feat -= num4;
8227 base.c_upgrades.count++;
8228 base.c_upgrades.spent += num4;
8229 bool flag2 = false;
8230 if (flag)
8231 {
8232 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8233 {
8234 if (item.idEle == num2)
8235 {
8236 item.value += num3;
8237 item.cost += num4;
8238 flag2 = true;
8239 break;
8240 }
8241 }
8242 }
8243 if (!flag2)
8244 {
8245 base.c_upgrades.items.Add(new CharaUpgrade.Item
8246 {
8247 idEle = num2,
8248 value = num3,
8249 cost = num4
8250 });
8251 }
8252 SourceElement.Row row = EClass.sources.elements.map[num2];
8253 if (row.category == "feat")
8254 {
8255 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8256 }
8257 else if (elements.ValueWithoutLink(row.id) == 0)
8258 {
8259 elements.Learn(row.id);
8260 }
8261 else
8262 {
8263 elements.ModBase(num2, num3);
8264 }
8265 }
8266 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:9362
void Learn(int ele, int v=1)
virtual int CostLearn
Definition: ELEMENT.cs:312
static int[] List_MainAttributesMajor
Definition: ELEMENT.cs:240
static void SetSeed(int a=-1)
Definition: Rand.cs:37

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

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

◆ TryUse()

bool Chara.TryUse ( Thing  t)
inline

Definition at line 7506 of file Chara.cs.

7507 {
7508 if (t.id == "338")
7509 {
7510 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
7511 if (thing != null)
7512 {
7513 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
7514 SE.Change();
7515 t.trait.OnBlend(thing, this);
7516 return true;
7517 }
7518 return false;
7519 }
7520 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
7521 {
7522 return false;
7523 }
7524 if (t.id == "cigar")
7525 {
7526 (t.trait as TraitItemProc).OnUse(this);
7527 return true;
7528 }
7529 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
7530 {
7532 {
7533 target = t
7534 });
7535 return true;
7536 }
7537 if (t.trait.CanDrink(this))
7538 {
7539 Drink(t);
7540 return true;
7541 }
7542 if (t.trait.CanRead(this))
7543 {
7545 {
7546 target = t
7547 });
7548 return true;
7549 }
7550 if (base.hp < MaxHP * 90 / 100)
7551 {
7552 Action healAction = t.trait.GetHealAction(this);
7553 if (healAction != null)
7554 {
7555 healAction();
7556 return true;
7557 }
7558 }
7559 return false;
7560 }
bool isAcidproof
Definition: Card.cs:672
void SetAIImmediate(AIAct g)
Definition: Chara.cs:8481
virtual bool CanRead(Chara c)
Definition: Trait.cs:960
virtual bool CanDrink(Chara c)
Definition: Trait.cs:978
virtual void OnBlend(Thing t, Chara c)
Definition: Trait.cs:604

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

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

◆ TryWorkOutside()

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

Definition at line 8742 of file Chara.cs.

8743 {
8744 if (EClass.world.date.IsExpired(GetInt(51)))
8745 {
8746 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
8747 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
8748 homeBranch.expeditions.Add(expedition);
8749 return true;
8750 }
8751 return false;
8752 }
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 3512 of file Chara.cs.

3513 {
3514 if (IsPCC)
3515 {
3516 if (base.dir == 0)
3517 {
3518 angle = 225f;
3519 }
3520 else if (base.dir == 1)
3521 {
3522 angle = 135f;
3523 }
3524 else if (base.dir == 2)
3525 {
3526 angle = 45f;
3527 }
3528 else if (base.dir == 3)
3529 {
3530 angle = -45f;
3531 }
3532 }
3533 else if (base.dir == 0)
3534 {
3535 angle = 165f;
3536 }
3537 else if (base.dir == 1)
3538 {
3539 angle = 300f;
3540 }
3541 else if (base.dir == 2)
3542 {
3543 angle = 0f;
3544 }
3545 else if (base.dir == 3)
3546 {
3547 angle = 120f;
3548 }
3549 }

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3573 of file Chara.cs.

3574 {
3575 int num = 4;
3576 for (int i = -num; i < num + 1; i++)
3577 {
3578 for (int j = -num; j < num + 1; j++)
3579 {
3580 shared.Set(pos.x + i, pos.z + j);
3581 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3582 {
3583 _ = 1;
3584 }
3585 }
3586 }
3587 }
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 5543 of file Chara.cs.

5544 {
5545 if (!IsPC && HasCooldown(a.id))
5546 {
5547 return false;
5548 }
5549 if (a.source.proc.TryGet(0) == "Heal" && HasElement(1422))
5550 {
5551 List<int> list = new List<int> { 8400, 8401, 8402, 8403, 8404, 8405 };
5552 int num = list.IndexOf(a.id);
5553 if (num != -1)
5554 {
5555 int num2 = list.TryGet(num + Evalue(1422));
5556 a = elements.GetElement(num2)?.act ?? ACT.Create(num2);
5557 }
5558 }
5559 int num3 = 1;
5560 Act.Cost cost = a.GetCost(this);
5561 a.GetPower(this);
5562 int i = 1;
5563 int num4 = 0;
5564 bool flag = a.IsTargetHostileParty();
5565 if (IsPC && HasCondition<StanceManaCost>())
5566 {
5567 num4 = Evalue(1657);
5568 }
5569 _pts.Clear();
5570 if (a.TargetType.ForceParty)
5571 {
5572 pt = true;
5573 }
5574 if (pt)
5575 {
5576 i = 0;
5577 if (flag)
5578 {
5579 ForeachEnemy(delegate
5580 {
5581 i++;
5582 });
5583 }
5584 else
5585 {
5586 ForeachParty(delegate
5587 {
5588 i++;
5589 });
5590 }
5591 }
5592 if (a is Spell && IsPC && a.vPotential < i)
5593 {
5594 i = 1;
5595 _pts.Clear();
5596 _pts.Add(this);
5597 pt = false;
5598 }
5599 int num5 = 100;
5600 if (!a.TargetType.ForceParty && i > 1)
5601 {
5602 num5 = (IsPC ? (i * 100) : (50 + i * 50));
5603 }
5604 int num6 = cost.cost * num5 / 100;
5605 if (cost.type == Act.CostType.MP && Evalue(483) > 0)
5606 {
5607 num6 = num6 * 100 / (100 + (int)Mathf.Sqrt(Evalue(483) * 10) * 3);
5608 }
5609 if (i == 0)
5610 {
5611 if (IsPC)
5612 {
5614 }
5615 return false;
5616 }
5617 if (!IsPC && cost.type == Act.CostType.MP && mana.value < 0 && (EClass.rnd(4) != 0 || IsPCFaction || (base.IsPowerful && mana.value < -20)))
5618 {
5619 return false;
5620 }
5621 if (IsPC)
5622 {
5623 if (!Dialog.warned && cost.type == Act.CostType.MP && cost.cost > 0 && mana.value < num6 && !EClass.debug.godMode)
5624 {
5625 ActPlan.warning = true;
5626 Dialog.TryWarnMana(delegate
5627 {
5628 if (UseAbility(a, tc, pos, pt))
5629 {
5631 }
5632 });
5633 return false;
5634 }
5635 EClass.ui.CloseLayers();
5636 }
5637 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))
5638 {
5639 Say("shakeHead", this);
5640 return true;
5641 }
5642 if (tc != null && tc != this)
5643 {
5644 LookAt(tc.pos);
5645 }
5646 if (pos != null && !base.pos.Equals(pos))
5647 {
5648 LookAt(pos);
5649 }
5650 if (a.CanRapidFire && HasElement(1648))
5651 {
5652 num3 = 1 + Evalue(1648);
5653 }
5654 if (IsPC && cost.cost > 0 && a.Value == 0)
5655 {
5657 return false;
5658 }
5659 if (a is Spell)
5660 {
5661 string s = (isConfused ? "_cast_confuse" : (HasCondition<ConDim>() ? "_cast_dim" : ""));
5662 if (!a.source.tag.Contains("useHand"))
5663 {
5664 Say(race.castStyle.IsEmpty("cast"), this, a.source.GetName().ToLower(), s.lang());
5665 }
5666 if (IsPC)
5667 {
5668 _ = (i + 1) / 2;
5669 if (a.vPotential < i)
5670 {
5671 Msg.Say("noSpellStock");
5672 EInput.Consume();
5673 return false;
5674 }
5675 if (num4 > 0 && a.vPotential >= i * 2)
5676 {
5677 a.vPotential -= i * 2;
5678 num6 = num6 * (100 - num4 * 20) / 100;
5679 }
5680 else
5681 {
5682 a.vPotential -= i;
5683 }
5685 }
5686 }
5687 else if (a.source.langAct.Length != 0 && tc != null)
5688 {
5689 string text = a.source.langAct[0];
5690 string text2 = ((a.source.langAct.Length >= 2) ? a.source.langAct[1] : "");
5691 if (text == "spell_hand")
5692 {
5693 string[] list2 = Lang.GetList("attack" + race.meleeStyle.IsEmpty("Touch"));
5694 string @ref = text2.lang(list2[4]);
5695 Say(tc.IsPCParty ? "cast_hand_ally" : "cast_hand", this, tc, @ref, tc.IsPCParty ? list2[1] : list2[2]);
5696 }
5697 else
5698 {
5699 Say(text, this, tc, text2.IsEmpty() ? "" : text2.lang());
5700 }
5701 if (a.source.id == 6630)
5702 {
5703 Talk("insult_" + (base.IsMale ? "m" : "f"));
5704 }
5705 }
5706 switch (cost.type)
5707 {
5708 case Act.CostType.MP:
5709 if (Evalue(1421) >= 2 && base.hp <= MaxHP / (9 - Evalue(1421) * 2))
5710 {
5711 num6 /= 2;
5712 }
5713 PlayEffect("cast");
5714 mana.Mod(-num6);
5715 if (isDead)
5716 {
5717 return true;
5718 }
5719 elements.ModExp(304, Mathf.Clamp(num6 * 2, 1, 200));
5720 break;
5721 case Act.CostType.SP:
5722 stamina.Mod(-num6);
5723 ignoreSPAbsorb = true;
5724 break;
5725 }
5726 if (a is Spell && GetCondition<ConSilence>() != null)
5727 {
5728 Say("cast_silence", this);
5729 return true;
5730 }
5731 if (isDead)
5732 {
5733 return true;
5734 }
5735 int spellExp = elements.GetSpellExp(this, a, num5);
5736 if (EClass.rnd(100) >= CalcCastingChance(a, i) && !EClass.debug.godMode)
5737 {
5738 Say("fizzle", this);
5739 PlayEffect("fizzle");
5740 PlaySound("fizzle");
5741 if (cost.cost > 0 && a.source.lvFactor > 0)
5742 {
5743 ModExp(a.id, spellExp / 5);
5744 }
5745 RemoveCondition<ConInvisibility>();
5746 return true;
5747 }
5748 bool flag2 = true;
5749 if (HasTalk("phrase_" + a.source.alias))
5750 {
5751 EClass.player.forceTalk = true;
5752 Talk("phrase_" + a.source.alias);
5753 }
5754 if (pt)
5755 {
5756 Act.forcePt = true;
5757 if (flag)
5758 {
5759 ForeachEnemy(delegate(Chara c)
5760 {
5761 a.Perform(this, c, c.pos);
5762 });
5763 }
5764 else
5765 {
5766 ForeachParty(delegate(Chara c)
5767 {
5768 a.Perform(this, c, c.pos);
5769 });
5770 }
5771 Act.forcePt = false;
5772 }
5773 else
5774 {
5775 for (int j = 0; j < num3; j++)
5776 {
5777 if (a.TargetType != TargetType.SelfParty && tc != null && !tc.IsAliveInCurrentZone)
5778 {
5779 break;
5780 }
5781 ActEffect.RapidCount = j;
5782 ActEffect.RapidDelay = a.RapidDelay;
5783 flag2 = a.Perform(this, tc, pos);
5784 }
5785 }
5786 if (flag2 && !isDead)
5787 {
5788 if (cost.cost > 0 && a.source.lvFactor > 0)
5789 {
5790 ModExp(a.id, spellExp);
5791 }
5792 if (a.source.alias.StartsWith("sword_"))
5793 {
5794 ModExp(101, 50);
5795 }
5796 }
5797 ActEffect.RapidCount = 0;
5798 if (!IsPC && a.source.cooldown > 0)
5799 {
5800 AddCooldown(a.id, a.source.cooldown);
5801 }
5802 if (flag2 && !a.source.tag.Contains("keepInvisi") && EClass.rnd(2) == 0)
5803 {
5804 RemoveCondition<ConInvisibility>();
5805 }
5806 return flag2;
5807 void ForeachEnemy(Action<Chara> action)
5808 {
5809 if (_pts.Count == 0)
5810 {
5811 for (int num10 = EClass._map.charas.Count - 1; num10 >= 0; num10--)
5812 {
5813 Chara chara3 = EClass._map.charas[num10];
5814 if (chara3 != this && CanSeeLos(chara3) && chara3.IsHostile(this))
5815 {
5816 _pts.Add(chara3);
5817 }
5818 }
5819 }
5820 for (int num11 = _pts.Count - 1; num11 >= 0; num11--)
5821 {
5822 action(_pts[num11]);
5823 }
5824 }
5825 void ForeachParty(Action<Chara> action)
5826 {
5827 if (_pts.Count == 0)
5828 {
5829 if (IsPCParty)
5830 {
5831 for (int num7 = EClass.pc.party.members.Count - 1; num7 >= 0; num7--)
5832 {
5833 Chara chara = EClass.pc.party.members[num7];
5834 if (chara == this || chara.host != null || CanSeeLos(chara))
5835 {
5836 _pts.Add(chara);
5837 }
5838 }
5839 }
5840 else
5841 {
5842 for (int num8 = EClass._map.charas.Count - 1; num8 >= 0; num8--)
5843 {
5844 Chara chara2 = EClass._map.charas[num8];
5845 if ((chara2 == this || (chara2.IsFriendOrAbove(this) && CanSeeLos(chara2))) && (chara2 == tc || _pts.Count < 3 || EClass.rnd(_pts.Count * _pts.Count) > 6))
5846 {
5847 _pts.Add(chara2);
5848 }
5849 }
5850 }
5851 }
5852 for (int num9 = _pts.Count - 1; num9 >= 0; num9--)
5853 {
5854 action(_pts[num9]);
5855 }
5856 }
5857 }
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:6397
bool UseAbility(string idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5538
static List< Chara > _pts
Definition: Chara.cs:184
int CalcCastingChance(Element e, int num=1)
Definition: Chara.cs:5868
Definition: Dialog.cs:7
static bool warned
Definition: Dialog.cs:49
static void TryWarnMana(Action action)
Definition: Dialog.cs:391
int GetSpellExp(Chara c, Element e, int costMod=100)
int vPotential
Definition: ELEMENT.cs:254
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1068
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1021
Act act
Definition: ELEMENT.cs:392
static 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 8790 of file Chara.cs.

8791 {
8792 _goalWork.FindWork(this, setAI: false);
8794 }
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 5037 of file Chara.cs.

5038 {
5039 base.c_vomit++;
5040 Say("vomit", this);
5041 PlaySound("vomit");
5042 if (!EClass._zone.IsRegion)
5043 {
5044 Thing thing = ThingGen.Create("731");
5046 {
5047 thing.MakeRefFrom(this);
5048 }
5049 EClass._zone.AddCard(thing, pos);
5050 }
5051 if (HasCondition<ConAnorexia>())
5052 {
5053 ModExp(70, -50);
5054 ModExp(71, -75);
5055 ModExp(77, -100);
5056 }
5057 else if (base.c_vomit > 10)
5058 {
5059 AddCondition<ConAnorexia>();
5060 }
5061 AddCondition<ConDim>();
5062 if (HasCondition<ConAnorexia>())
5063 {
5064 ModWeight(-1 * (1 + EClass.rnd(5)));
5065 }
5066 if (hunger.GetPhase() >= 4)
5067 {
5068 DamageHP(9999, AttackSource.Hunger);
5069 }
5070 hunger.Mod(30);
5071 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:9294

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

3590 {
3591 for (int num = conditions.Count - 1; num >= 0; num--)
3592 {
3593 if (conditions[num].ConsumeTurn)
3594 {
3595 return true;
3596 }
3597 }
3598 return false;
3599 }

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

6956 {
6957 n.Clear();
6958 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
6959 SetImage(uIItem.image2);
6960 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
6961 n.AddText("");
6962 n.Build();
6963 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:5803
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

Definition at line 58 of file Chara.cs.

◆ _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

int 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(), and Tick().

◆ hasTelepathy

bool Chara.hasTelepathy

◆ held

◆ host

◆ idleActTimer

int Chara.idleActTimer

Definition at line 112 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ idleTimer

float Chara.idleTimer

Definition at line 120 of file Chara.cs.

Referenced by CharaRenderer.UpdatePosition().

◆ IDTimeTable

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

Definition at line 15 of file Chara.cs.

◆ ignoreSPAbsorb

bool Chara.ignoreSPAbsorb

Definition at line 146 of file Chara.cs.

◆ isBerserk

bool Chara.isBerserk

◆ isBlind

◆ isConfused

◆ isCreated

bool Chara.isCreated

Definition at line 136 of file Chara.cs.

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

◆ isDrunk

bool Chara.isDrunk

Definition at line 124 of file Chara.cs.

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

◆ isFainted

bool Chara.isFainted

Definition at line 128 of file Chara.cs.

◆ isOnCreate

bool Chara.isOnCreate
static

Definition at line 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

Definition at line 142 of file Chara.cs.

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

◆ lastPos

Point Chara.lastPos = new Point()

Definition at line 90 of file Chara.cs.

Referenced by _Move().

◆ ListAdvJob

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

Definition at line 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(), 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(), and CoreDebug.UpdateInput().

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

1093 {
1094 get
1095 {
1096 if (_baseWorkElements == null)
1097 {
1099 foreach (Hobby item in ListHobbies())
1100 {
1101 Build(item);
1102 }
1103 foreach (Hobby item2 in ListWorks())
1104 {
1105 Build(item2);
1106 }
1107 }
1108 return _baseWorkElements;
1109 void Build(Hobby h)
1110 {
1111 if (!h.source.elements.IsEmpty())
1112 {
1113 for (int i = 0; i < h.source.elements.Length; i += 2)
1114 {
1115 int ele = h.source.elements[i];
1116 int v = h.source.elements[i + 1];
1117 _baseWorkElements.ModBase(ele, v);
1118 }
1119 }
1120 }
1121 }
1122 }
ElementContainer _baseWorkElements
Definition: Chara.cs:202

◆ bladder

Stats Chara.bladder
get

Definition at line 1132 of file Chara.cs.

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

◆ burden

◆ CanGainConResist

bool Chara.CanGainConResist
get

Definition at line 1142 of file Chara.cs.

1143 {
1144 get
1145 {
1146 if (base.rarity >= Rarity.Legendary)
1147 {
1148 return !IsPCFaction;
1149 }
1150 return false;
1151 }
1152 }

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

989 {
990 get
991 {
992 if (!IsHuman && !IsFairy && !IsGod)
993 {
994 return race.id == "mutant";
995 }
996 return true;
997 }
998 }
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 ActEffect.Proc().

◆ CurrentGeneSlot

int Chara.CurrentGeneSlot
get

Definition at line 1056 of file Chara.cs.

1057 {
1058 get
1059 {
1060 if (base.c_genes != null)
1061 {
1062 return base.c_genes.GetGeneSlot(this);
1063 }
1064 return 0;
1065 }
1066 }

Referenced by InvOwnerGene._OnProcess(), 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 1130 of file Chara.cs.

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

◆ DestDist

int Chara.DestDist
get

Definition at line 984 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(), 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 1134 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 1026 of file Chara.cs.

1027 {
1028 get
1029 {
1030 if (global != null && faction != EClass.pc.faction)
1031 {
1032 return IsPCC;
1033 }
1034 return false;
1035 }
1036 }

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

◆ 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

Definition at line 570 of file Chara.cs.

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

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

◆ IsDisabled

override bool Chara.IsDisabled
get

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

1001 {
1002 get
1003 {
1004 if (!IsHuman)
1005 {
1006 return race.tag.Contains("humanSpeak");
1007 }
1008 return true;
1009 }
1010 }

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

1013 {
1014 get
1015 {
1016 if (EClass.Branch != null)
1017 {
1018 return EClass.Branch.uidMaid == base.uid;
1019 }
1020 return false;
1021 }
1022 }

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

◆ IsMofuable

bool Chara.IsMofuable
get

Definition at line 1080 of file Chara.cs.

1081 {
1082 get
1083 {
1084 if (!race.tag.Contains("mofu"))
1085 {
1086 return HasElement(419);
1087 }
1088 return true;
1089 }
1090 }

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

override bool Chara.IsMultisize
get

◆ 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(), GetBurden(), Element.GetCost(), GetFirstStep(), TraitToolBrush.GetHeldEmo(), FactionBranch.GetResidentTax(), Zone.GetSpawnPos(), HasAccess(), TraitGamble.IdleUse(), Zone.IsCrime(), Party.IsCriticallyWounded(), CharaBody.IsEquippable(), Religion.JoinFaith(), Kick(), Religion.LeaveFaith(), Point.ListWitnesses(), AI_Fish.Makefish(), StatsMana.Mod(), StatsStamina.Mod(), ModAffinity(), TraitBasketGame.OnActivateTrap(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), BaseListPeople.OnClick(), WindowChara.OnClickPortrait(), TaskHarvest.OnCreateProgress(), TaskPlow.OnCreateProgress(), TraitFortuneCookie.OnEat(), AI_Fish.ProgressFish.OnProgress(), AI_Fish.ProgressFish.OnProgressComplete(), TaskDig.OnProgressComplete(), TaskMine.OnProgressComplete(), TraitBaseSpellbook.OnRead(), TraitBookSecret.OnRead(), TraitBookSkill.OnRead(), TraitDiary.OnRead(), TraitIndulgence.OnRead(), TraitScrollStatic.OnRead(), ConBlind.OnRemoved(), ConFaint.OnRemoved(), ConReload.OnRemoved(), AI_Read.OnSetOwner(), ConBlind.OnStart(), ConSuffocation.OnStart(), TraitCurrencyMedal.OnStepped(), TraitMiniPool.OnStepped(), TraitNewZone.OnStepped(), WindowChara.OnSwitchContent(), ActRanged.Perform(), ActWait.Perform(), ActZap.Perform(), AttackProcess.Perform(), ActEffect.Poison(), ActPray.Pray(), FoodEffect.Proc(), ActEffect.Proc(), InvOwner.Transaction.Process(), TraitBaseSpellbook.ReadFailEffect(), ButtonRoster.Refresh(), 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(), AI_Goto.TryGoTo(), GoalCombat.TryMove(), TryMove(), TryMoveFrom(), TryMoveTowards(), Trait.TryOpenLock(), LayerDragGrid.TryProc(), TraitBaseSpellbook.TryProgress(), TryPush(), ActRanged.TryReload(), TrySetEnemy(), TraitLeash.TrySetHeldAct(), TraitToolButcher.TrySetHeldAct(), GoalCombat.TryUseAbility(), CharaBody.Unequip(), CharaBody.UnqeuipIfTooHeavy(), CoreDebug.UpdateInput(), and CharaRenderer.UpdatePosition().

◆ IsPCC

◆ IsPCFaction

override bool Chara.IsPCFaction
get

Definition at line 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 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(), AI_Read.OnSetOwner(), FactionBranch.OnSimulateDay(), FactionBranch.OnSimulateHour(), TraitGeneMachine.OnUse(), ActWait.Perform(), ActWater.Perform(), ActZap.Perform(), AttackProcess.Perform(), AttackProcess.Prepare(), FoodEffect.Proc(), ActEffect.Proc(), ActEffect.ProcAt(), TCOrbitChara.RefreshAll(), Zone.RefreshCriminal(), FactionBranch.RefreshEfficiency(), UIHomeInfo.RefreshReport(), RefreshSpeed(), RequestProtection(), AI_Eat.Run(), AI_Fish.Run(), AI_Idle.Run(), AI_PlayMusic.Run(), GoalCombat.Run(), ItemGeneral.SetChara(), Zone.Simulate(), TraitSwitch.TryDisarmTrap(), TryPush(), TraitLeash.TrySetHeldAct(), GoalCombat.TryUseAbility(), CharaRenderer.UpdatePosition(), and TraitBed.ValidateOwners().

◆ IsPCPartyMinion

override bool Chara.IsPCPartyMinion
get

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

◆ isSynced

override bool Chara.isSynced
get

Definition at line 688 of file Chara.cs.

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

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

◆ isThing

override bool Chara.isThing
get

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

1041 {
1042 get
1043 {
1044 if (!source.works.Contains("Rich"))
1045 {
1046 return source.hobbies.Contains("Rich");
1047 }
1048 return true;
1049 }
1050 }

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.

◆ 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:324
SourcePref sonwputit1
Definition: CoreRef.cs:322
SourcePref replacer1
Definition: CoreRef.cs:328
PrefData prefs
Definition: CoreRef.cs:413
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 1068 of file Chara.cs.

1069 {
1070 get
1071 {
1072 if (dirtySpeed)
1073 {
1074 RefreshSpeed();
1075 }
1076 return _Speed;
1077 }
1078 }

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

◆ 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: