Elin Decompiled Documentation EA 23.284 Nightly 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)
 
Chara SetFaction (Faction f)
 
Chara SetHomeZone (Zone zone)
 
Chara SetHostility (Hostility h)
 
void OnBanish ()
 
Chara SetGlobal (Zone _home, int x, int z)
 
Chara SetGlobal ()
 
void RemoveGlobal ()
 
override void OnBeforeCreate ()
 
override void OnCreate (int genLv)
 
Chara ScaleByPrincipal ()
 
void SetFaith (string id)
 
void SetFaith (Religion r)
 
void HealAll ()
 
void Refresh (bool calledRecursive=false)
 
bool CanDuplicate ()
 
Chara Duplicate ()
 
int GetBurden (Card t=null, int num=-1)
 
void CalcBurden ()
 
void Stumble (int mtp=100)
 
void SetDirtySpeed ()
 
void RefreshSpeed (Element.BonusInfo info=null)
 
void CalculateMaxStamina ()
 
override void ApplyEditorTags (EditorTag tag)
 
override void SetSource ()
 
void SetMainElement (string id, int v=0, bool elemental=false)
 
void SetMainElement (int id, int v=0, bool elemental=false)
 
void ApplyJob (bool remove=false)
 
void ChangeJob (string idNew)
 
void AddRandomBodyPart (bool msg=false)
 
void RemoveLastBodyPart (bool msg=false)
 
void ResetBody ()
 
void ApplyRace (bool remove=false)
 
void ChangeRace (string idNew)
 
void MakePartyMemeber ()
 
void MakeAlly (bool msg=true)
 
void _MakeAlly ()
 
bool CanBeTempAlly (Chara c)
 
void Banish (Chara owner)
 
void MakeMinion (Chara _master, MinionType type=MinionType.Default)
 
void UnmakeMinion ()
 
void BanishAllMinions ()
 
bool HasMinion (string id)
 
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)
 
override 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 (Func< Card, bool > func=null)
 
void TryPutShared (Thing t, List< Thing > containers=null, bool dropIfFail=true)
 
bool TryHoldCard (Card t, int num=-1, bool pickHeld=false)
 
void HoldCard (Card t, int num=-1)
 
void PickHeld (bool msg=false)
 
Card SplitHeld (int a)
 
void TryDropCarryOnly ()
 
Card DropHeld (Point dropPos=null)
 
void DropThing (Thing t, int num=-1)
 
AttackStyle GetFavAttackStyle ()
 
Element GetFavWeaponSkill ()
 
Element GetFavArmorSkill ()
 
void TryRestock (bool onCreate)
 
void RestockEquip (bool onCreate)
 
void RestockInventory (bool onCreate)
 
Thing EQ_ID (string s, int mat=-1, Rarity r=Rarity.Random)
 
void EQ_CAT (string s)
 
void EQ_Item (string s, int num=1)
 
void Drink (Card t)
 
bool CanRevive ()
 
void GetRevived ()
 
void Revive (Point p=null, bool msg=false)
 
void SaiyanRevive ()
 
void MakeGrave (string lastword)
 
void ApplyDeathPenalty ()
 
void Vomit ()
 
override void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
 
void TryDropBossLoot ()
 
bool UseAbility (int idAct, Card tc=null, Point pos=null, bool pt=false)
 
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)
 
void Kiss (Chara c)
 
void Slap (Chara c, bool slapToDeath=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 ()
 
void Marry (Chara c)
 
void Divorce (Chara c)
 
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 skipImportantCheck=false)
 
bool CanAcceptGift (Chara c, Card t)
 
void GiveGift (Chara c, Thing t)
 
void OnGiveErohon (Thing t)
 
void GiveLovePotion (Chara c, Thing t)
 
bool RequestProtection (Chara attacker, Action< Chara > action)
 
bool ShouldThrowAway (Thing t, ClearInventoryType type)
 
void ClearInventory (ClearInventoryType type)
 
void ResetUpgrade ()
 
void TryUpgrade (bool msg=true)
 
bool CanBloom ()
 
void AddCooldown (int idEle, int turns=0)
 
void SetCooldown (int idEle, int turns=0)
 
bool HasCooldown (int idEle)
 
int GetCooldown (int idEle)
 
void TickCooldown ()
 
void ChooseNewGoal ()
 
Goal GetGoalFromTimeTable (int hour)
 
Goal GetGoalWork ()
 
Goal GetGoalHobby ()
 
bool HasHobbyOrWork (string alias)
 
void SetAIIdle ()
 
void SetAIAggro ()
 
AIAct SetNoGoal ()
 
AIAct SetAI (AIAct g)
 
void SetAIImmediate (AIAct g)
 
BaseArea GetRoomWork ()
 
List< HobbyListWorks (bool useMemberType=true)
 
List< HobbyListHobbies (bool useMemberType=true)
 
Hobby GetWork (string id)
 
void RefreshWorkElements (ElementContainer parent=null)
 
string GetTextHobby (bool simple=false)
 
string GetTextWork (bool simple=false)
 
void AddHobby (int id)
 
void AddWork (int id)
 
void RerollHobby (bool extraSlotChance=true)
 
WorkSummary GetWorkSummary ()
 
void TickWork (VirtualDate date)
 
bool TryWorkOutside (SourceHobby.Row sourceWork)
 
void PerformWork (WorkSession session, bool isHobby=false, bool IsRealTime=false)
 
void ValidateWorks ()
 
void InitStats (bool onDeserialize=false)
 
Condition AddCondition< T > (int p=100, bool force=false)
 
Condition AddCondition (string id, int p=100, bool force=false)
 
Condition AddCondition (Condition c, bool force=false)
 
override bool HasCondition< T > ()
 
bool HasCondition (string alias)
 
Element GetBuffStats (string alias)
 
Element GetBuffStats (int ele)
 
int CountDebuff ()
 
void CureCondition< T > (int v=99999)
 
override T GetCondition< T > ()
 
void RemoveCondition< T > ()
 
void CureHost (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
void Cure (CureType type, int p=100, BlessedState state=BlessedState.Normal)
 
void RemoveAllStances ()
 
bool TryNeckHunt (Chara TC, int power, bool harvest=false)
 
void AddResistCon (Condition con)
 
void ResistCon (Condition con)
 
void Sleep (Thing bed=null, Thing pillow=null, bool pickup=false, ItemPosition posBed=null, ItemPosition posPillow=null)
 
void OnSleep (Thing bed=null, int days=1)
 
void OnSleep (int power, int days=1, bool isSunLit=false)
 
void ModHeight (int a)
 
void ModWeight (int a, bool ignoreLimit=false)
 
void ModCorruption (int a)
 
List< ElementListAvailabeFeats (bool pet=false, bool showAll=false)
 
void SetFeat (int id, int value=1, bool msg=false)
 
void SetMutation (int idEle, int a=0)
 
bool MutateRandom (int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
 
void GainAbility (int ele, int mtp=100, Thing origin=null)
 
bool TryNullifyCurse ()
 
void OnAdvanceDay ()
 
void AddFoodHistory (Thing food)
 
int CountNumEaten (Thing food)
 
int GetPietyValue ()
 
void RefreshFaithElement ()
 
void ModTempElement (int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
 
void DamageTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void DamageTempElement (int ele, int p, bool onlyRenew=false)
 
void EnhanceTempElements (int p, bool body, bool mind, bool onlyRenew=false)
 
void EnhanceTempElement (int ele, int p, bool onlyRenew=false)
 
void DiminishTempElements (int a=1)
 
void CureTempElements (int p, bool body, bool mind)
 
void ClearTempElements ()
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (Recipe.Ingredient ing)
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
void ModExpParty (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, bool applyMod=true)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void PurgeEythArtifact ()
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (int a, HealSource origin=HealSource.None)
 
virtual void HealHP (int a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual long ApplyProtection (long dmg, int mod=100)
 
void DamageHP (long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
 
void DamageHP (long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
 
void ApplyElementEffect (Element e, int eleP, Card origin, bool checkHostileAct=false)
 
virtual void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
 
void Explode (Point p, Card origin)
 
void Deconstruct ()
 
void Destroy ()
 
void SpawnLoot (Card origin)
 
Thing TryMakeRandomItem (int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
 
Card MakeFoodFrom (string _id)
 
Card MakeFoodFrom (Card c)
 
void MakeFoodRef (Card c1, Card c2=null)
 
string TryGetFoodName (Card c)
 
string GetFoodName (string s)
 
void MakeFigureFrom (string id)
 
Card MakeRefFrom (string id)
 
void MakeRefFrom (Card c1, Card c2=null, bool simple=false)
 
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)
 
void HatchEgg ()
 
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 ()
 
MoveResult TryMoveFrom (Point p)
 
virtual MoveResult TryMove (Point newPoint, bool allowDestroyPath=true)
 
void Kick (Point p, bool ignoreSelf=false, bool checkWall=true)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, bool includeNagative=false)
 
bool HasElement (int ele, int req)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
void RefreshColor ()
 
ref Color GetRandomColor ()
 
virtual Sprite GetSprite (int dir=0)
 
virtual Sprite GetImageSprite ()
 
void SetImage (Image image, int dir, int idSkin=0)
 
virtual void SetImage (Image image)
 
void ShowEmo (Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
 
void PlaySoundHold (bool spatial=true)
 
void PlaySoundDrop (bool spatial=true)
 
void PlaySoundImpact (bool spatial=true)
 
void PlaySoundDead (bool spatial=true)
 
SoundSource PlaySound (string id, float v=1f, bool spatial=true)
 
void KillAnime ()
 
void PlayAnime (AnimeID id, bool force=false)
 
void PlayAnime (AnimeID id, Point dest, bool force=false)
 
void PlayAnimeLoot ()
 
Effect PlayEffect (string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
 
void PlayEffect (int ele, bool useRenderPos=true, float range=0f)
 
virtual void SetDir (int d)
 
void SetRandomDir ()
 
virtual void LookAt (Card c)
 
virtual void LookAt (Point p)
 
virtual void Rotate (bool reverse=false)
 
void ChangeAltitude (int a)
 
virtual SubPassData GetSubPassData ()
 
void SetFreePos (Point point)
 
void RenderMarker (Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
 
void RecalculateFOV ()
 
bool HasLight ()
 
float GetLightPower ()
 
int GetHearingRadius ()
 
int GetSightRadius ()
 
int GetLightRadius ()
 
void CalculateFOV ()
 
void SetRandomLightColors ()
 
Fov CreateFov ()
 
void ClearFOV ()
 
virtual void OnSimulateHour (VirtualDate date)
 
void DecayNatural (int hour=1)
 
void CheckJustCooked ()
 
void Decay (int a=10)
 
bool HasTalk (string idTopic)
 
void Talk (string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
 
void TalkRaw (string text, string ref1=null, string ref2=null, bool forceSync=false)
 
string StripTalkSpeiclaCharacters (string text)
 
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 > ()
 
virtual T GetCondition< 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
 
ConTransmuteMimic mimicry
 
Emo2 emoIcon
 
int happiness
 
int turnLastSeen = -100
 
int idleActTimer
 
int combatCount
 
int calmCheckTurn
 
int sharedCheckTurn
 
float idleTimer
 
bool isBerserk
 
bool isDrunk
 
bool isConfused
 
bool isFainted
 
bool isBlind
 
bool isParalyzed
 
bool _isLevitating
 
bool isCreated
 
bool canSeeInvisible
 
bool hasTelepathy
 
bool isWet
 
bool bossText
 
bool ignoreSPAbsorb
 
bool wasInWater
 
bool visibleWithTelepathy
 
bool isWeakToSunlight
 
SpriteReplacer spriteReplacer
 
SourceChara.Row source
 
SourceRace.Row _race
 
SourceJob.Row _job
 
Tactics _tactics
 
bool dirtySpeed = true
 
float actTime = 0.3f
 
int stealthSeen
 
GoalList goalList = new GoalList()
 
AIAct ai = new NoGoal()
 
ElementContainer _baseWorkElements
 
List< Conditionconditions = new List<Condition>()
 
Dictionary< int, int > resistCon
 
- Public Attributes inherited from Card
int[] _ints = new int[30]
 
string id = ""
 
ThingContainer things = new ThingContainer()
 
ElementContainerCard elements = new ElementContainerCard()
 
Biography bio
 
List< int > sockets
 
AIAct reservedAct
 
Props props
 
Trait trait
 
ICardParent parent
 
Fov fov
 
Point pos = new Point()
 
CardRenderer renderer
 
CardRow hat
 
int turn
 
int _colorInt
 
float roundTimer
 
float angle = 180f
 
float animeCounter
 
bool isDestroyed
 
CardBlueprint bp
 
BitArray32 _bits1
 
BitArray32 _bits2
 
PlaceState placeState
 
bool dirtyWeight = true
 
SourceMaterial.Row _material
 
Emo lastEmo
 
int sortVal
 
- Public Attributes inherited from BaseCard
Dictionary< int, object > mapObj = new Dictionary<int, object>()
 
Dictionary< int, int > mapInt = new Dictionary<int, int>()
 
Dictionary< int, string > mapStr = new Dictionary<int, string>()
 

Static Public Attributes

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

Protected Member Functions

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

Properties

string Aka [get]
 
string _alias [get, set]
 
string idFaith [get, set]
 
string idFaction [get, set]
 
Zone currentZone [get, set]
 
Zone homeZone [get, set]
 
GoalListType goalListType [get, set]
 
Hostility hostility [get, set]
 
int _affinity [get, set]
 
Affinity affinity [get]
 
int interest [get, set]
 
int daysStarved [get, set]
 
int _idTimeTable [get, set]
 
int uidEditor [get, set]
 
int _maxStamina [get, set]
 
int corruption [get, set]
 
bool isDead [get, set]
 
bool isAlawysVisible [get, set]
 
bool knowFav [get, set]
 
CharaAbility ability [get]
 
Faction faction [get, set]
 
Religion faith [get, set]
 
override CardRow sourceCard [get]
 
override CardRow sourceRenderCard [get]
 
SourceRace.Row race [get]
 
SourceJob.Row job [get]
 
string idTimeTable [get]
 
Hostility OriginalHostility [get]
 
string IDPCCBodySet [get]
 
new TraitChara trait [get, set]
 
string NameBraced [get]
 
string NameTitled [get]
 
override string actorPrefab [get]
 
override int PrefIndex [get]
 
override bool flipX [get]
 
override string AliasMaterialOnCreate [get]
 
override bool IsAliveInCurrentZone [get]
 
override bool IsDeadOrSleeping [get]
 
override bool IsDisabled [get]
 
bool IsLevitating [get]
 
bool IsMarried [get]
 
override bool IsMoving [get]
 
override bool IsGlobal [get]
 
override bool IsPC [get]
 
override bool IsPCParty [get]
 
override bool IsMinion [get]
 
override bool IsPCPartyMinion [get]
 
override bool IsPCFactionMinion [get]
 
override bool IsPCFaction [get]
 
override bool IsPCC [get]
 
override bool isThing [get]
 
override bool isChara [get]
 
override bool HasHost [get]
 
override bool isSynced [get]
 
override bool IsMultisize [get]
 
override int MaxHP [get]
 
override int WeightLimit [get]
 
override int SelfWeight [get]
 
int MaxSummon [get]
 
Element MainElement [get]
 
override int DV [get]
 
override int PV [get]
 
override SourcePref Pref [get]
 
bool CanOpenDoor [get]
 
Tactics tactics [get]
 
TimeTable.Span CurrentSpan [get]
 
bool IsInActiveZone [get]
 
bool IsLocalChara [get]
 
bool IsIdle [get]
 
bool IsInCombat [get]
 
bool IsAnimal [get]
 
bool IsHuman [get]
 
bool IsUndead [get]
 
bool IsMachine [get]
 
bool IsHorror [get]
 
bool IsFish [get]
 
bool IsFairy [get]
 
bool IsGod [get]
 
bool IsDragon [get]
 
bool IsPlant [get]
 
bool IsCat [get]
 
int DestDist [get]
 
bool HasNoGoal [get]
 
bool CanWitness [get]
 
bool IsHumanSpeak [get]
 
bool IsMaid [get]
 
bool IsPrisoner [get]
 
bool IsAdventurer [get]
 
bool IsEyth [get]
 
bool IsWealthy [get]
 
FactionBranch homeBranch [get]
 
int MaxGeneSlot [get]
 
int GeneCostMTP [get]
 
int CurrentGeneSlot [get]
 
int Speed [get]
 
bool IsMofuable [get]
 
ElementContainer baseWorkElements [get]
 
Stats hunger [get]
 
Stats burden [get]
 
Stats stamina [get]
 
Stats depression [get]
 
Stats bladder [get]
 
Stats hygiene [get]
 
Stats mana [get]
 
Stats sleepiness [get]
 
Stats SAN [get]
 
bool CanGainConResist [get]
 
- Properties inherited from Card
Card parentCard [get]
 
Thing parentThing [get]
 
int colorInt [get]
 
bool IsHotItem [get]
 
int uid [get, set]
 
int idMaterial [get, set]
 
int dir [get, set]
 
int Num [get, set]
 
int _x [get, set]
 
int _z [get, set]
 
int genLv [get, set]
 
int refVal [get, set]
 
int decay [get, set]
 
int altitude [get, set]
 
int hp [get, set]
 
float fx [get, set]
 
float fy [get, set]
 
BlessedState blessedState [get, set]
 
PlaceState _placeState [get, set]
 
int rarityLv [get, set]
 
Rarity rarity [get, set]
 
int encLV [get, set]
 
int posInvX [get, set]
 
int posInvY [get, set]
 
int idSkin [get, set]
 
int feat [get, set]
 
int LV [get, set]
 
int exp [get, set]
 
int tier [get, set]
 
int version [get, set]
 
bool isCensored [get, set]
 
bool isDeconstructing [get, set]
 
bool isDyed [get, set]
 
bool isModified [get, set]
 
bool isNew [get, set]
 
bool isPlayerCreation [get, set]
 
bool ignoreAutoPick [get, set]
 
bool freePos [get, set]
 
bool isHidden [get, set]
 
bool isOn [get, set]
 
bool isNPCProperty [get, set]
 
bool isRestrained [get, set]
 
bool isRoofItem [get, set]
 
bool isMasked [get, set]
 
bool disableAutoToggle [get, set]
 
bool isImported [get, set]
 
bool autoRefuel [get, set]
 
bool ignoreStackHeight [get, set]
 
bool isFloating [get, set]
 
bool isWeightChanged [get, set]
 
bool isFireproof [get, set]
 
bool isAcidproof [get, set]
 
bool isReplica [get, set]
 
bool isSummon [get, set]
 
bool isElemental [get, set]
 
bool isBroken [get, set]
 
bool isSubsetCard [get, set]
 
bool noSnow [get, set]
 
bool noMove [get, set]
 
bool isGifted [get, set]
 
bool isCrafted [get, set]
 
bool isLostProperty [get, set]
 
bool noShadow [get, set]
 
bool noSell [get, set]
 
bool isLeashed [get, set]
 
bool isStolen [get, set]
 
bool isSale [get, set]
 
bool isCopy [get, set]
 
bool isRestocking [get, set]
 
bool hasSpawned [get, set]
 
bool isScaled [get, set]
 
bool isFav [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_uidAttune [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]
 
LoveData c_love [get, set]
 
CharaGenes c_genes [get, set]
 
List< int > c_corruptionHistory [get, set]
 
ContainerUpgrade c_containerUpgrade [get, set]
 
DNA c_DNA [get, set]
 
CharaList c_charaList [get, set]
 
MixedFoodData c_mixedFoodData [get, set]
 
Thing c_bloodData [get, set]
 
byte[] c_textureData [get, set]
 
SourceMaterial.Row DyeMat [get]
 
int invX [get, set]
 
int invY [get, set]
 
CardRow refCard [get]
 
CardRow refCard2 [get]
 
int ExpToNext [get]
 
int DefaultLV [get]
 
int ChildrenWeight [get]
 
int ChildrenAndSelfWeight [get]
 
int ChildrenAndSelfWeightSingle [get]
 
virtual int SelfWeight [get]
 
virtual int WeightLimit [get]
 
SourceCategory.Row category [get]
 
SourceMaterial.Row material [get]
 
virtual string AliasMaterialOnCreate [get]
 
Cell Cell [get]
 
virtual Thing Thing [get]
 
virtual Chara Chara [get]
 
virtual bool isThing [get]
 
virtual bool isChara [get]
 
bool ExistsOnMap [get]
 
virtual bool isSynced [get]
 
bool IsContainer [get]
 
bool IsUnique [get]
 
bool IsPowerful [get]
 
bool IsImportant [get]
 
virtual SourcePref Pref [get]
 
virtual bool IsDeadOrSleeping [get]
 
virtual bool IsDisabled [get]
 
virtual bool IsMoving [get]
 
virtual bool flipX [get]
 
virtual bool IsAliveInCurrentZone [get]
 
virtual string actorPrefab [get]
 
virtual CardRow sourceCard [get]
 
virtual CardRow sourceRenderCard [get]
 
virtual RenderRow TileRow [get]
 
TileType TileType [get]
 
string Name [get]
 
string NameSimple [get]
 
string NameOne [get]
 
virtual bool IsPC [get]
 
bool _IsPC [get]
 
virtual bool IsPCC [get]
 
virtual bool IsPCParty [get]
 
virtual bool IsMinion [get]
 
virtual bool IsPCPartyMinion [get]
 
virtual bool IsPCFactionMinion [get]
 
virtual bool IsMultisize [get]
 
bool IsToolbelt [get]
 
bool IsLightsource [get]
 
bool IsEquipment [get]
 
bool IsFood [get]
 
bool IsInheritFoodTraits [get]
 
bool ShowFoodEnc [get]
 
bool IsWeapon [get]
 
bool IsEquipmentOrRanged [get]
 
bool IsEquipmentOrRangedOrAmmo [get]
 
bool IsMeleeWeapon [get]
 
bool IsRangedWeapon [get]
 
bool IsThrownWeapon [get]
 
bool IsAmmo [get]
 
bool IsAgent [get]
 
bool IsFurniture [get]
 
bool IsBlessed [get]
 
bool IsCursed [get]
 
bool IsRestrainedResident [get]
 
virtual bool IsPCFaction [get]
 
bool IsPCFactionOrMinion [get]
 
virtual bool IsGlobal [get]
 
virtual int MaxDecay [get]
 
bool IsDecayed [get]
 
bool IsRotting [get]
 
bool IsFresn [get]
 
virtual int MaxHP [get]
 
virtual int Power [get]
 
int FameLv [get]
 
virtual int[] Tiles [get]
 
virtual int PrefIndex [get]
 
bool IsVariation [get]
 
virtual int DV [get]
 
virtual int PV [get]
 
int HIT [get]
 
int DMG [get]
 
int STR [get]
 
int DEX [get]
 
int END [get]
 
int PER [get]
 
int LER [get]
 
int WIL [get]
 
int MAG [get]
 
int CHA [get]
 
int INT [get]
 
int LUC [get]
 
int W [get]
 
int H [get]
 
bool IsIdentified [get]
 
string TextRarity [get]
 
bool IsInstalled [get]
 
bool IsMale [get]
 
bool IsNegativeGift [get]
 
bool HasContainerSize [get]
 
Thing Tool [get]
 
virtual SourceMaterial.Row DefaultMaterial [get]
 
virtual bool HasHost [get]
 
int Quality [get]
 
int QualityLv [get]
 
LightData LightData [get]
 
CardRenderer HostRenderer [get]
 
bool ShouldShowMsg [get]
 
bool CanInspect [get]
 
string InspectName [get]
 
Point InspectPoint [get]
 
Vector3 InspectPosition [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 
- Properties inherited from IInspect
bool CanInspect [get]
 
string InspectName [get]
 
Point InspectPoint [get]
 
Vector3 InspectPosition [get]
 

Private Member Functions

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

Private Attributes

Faction _faction
 
long _Speed
 
bool hasMovedThisTurn
 

Static Private Attributes

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

Additional Inherited Members

- Public Types inherited from Card
enum  MoveResult { Fail , Success , Door , Event }
 
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 (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
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 6770 of file Chara.cs.

6771 {
6772 CardRenderer cardRenderer = renderer;
6773 CharaRenderer charaRenderer = new CharaRenderer();
6774 if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
6775 {
6776 base.idSkin = source.skinAntiSpider;
6777 }
6778 if (host != null)
6779 {
6780 charaRenderer.pccData = PCCData.Create("ride");
6781 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6782 charaRenderer.pccData.SetPart("body", "ride", idPart);
6783 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6784 }
6785 else
6786 {
6787 foreach (Condition condition in conditions)
6788 {
6789 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6790 if (rendererReplacer != null)
6791 {
6792 charaRenderer.replacer = rendererReplacer;
6793 charaRenderer.data = rendererReplacer.data;
6794 break;
6795 }
6796 }
6797 if (charaRenderer.replacer == null)
6798 {
6799 charaRenderer.pccData = pccData;
6800 }
6801 }
6802 renderer = charaRenderer;
6803 renderer.SetOwner(this);
6804 if (cardRenderer != null)
6805 {
6806 renderer.SetFirst(first: false, cardRenderer.position);
6807 }
6808 return charaRenderer;
6809 }
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:62
PCCData pccData
Chara host
Definition: Chara.cs:33
List< Condition > conditions
Definition: Chara.cs:213
SourceChara.Row source
Definition: Chara.cs:160
PCCData pccData
Definition: Chara.cs:67
new GameConfig game
Definition: CoreConfig.cs:609
PCCManager pccs
Definition: Core.cs:41
CoreConfig config
Definition: Core.cs:70
Definition: EClass.cs:6
static Core core
Definition: EClass.cs:7

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

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

◆ _MakeAlly()

void Chara._MakeAlly ( )
inline

Definition at line 2352 of file Chara.cs.

2353 {
2354 if (EClass.pc.homeBranch != null)
2355 {
2357 }
2358 else
2359 {
2360 SetGlobal();
2362 }
2363 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2364 this.hostility = hostility2;
2365 orgPos = null;
2366 base.c_summonDuration = 0;
2367 base.isSummon = false;
2368 UnmakeMinion();
2369 SetInt(32);
2370 Refresh();
2371 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void UnmakeMinion()
Definition: Chara.cs:2406
Chara SetFaction(Faction f)
Definition: Chara.cs:1453
Point orgPos
Definition: Chara.cs:21
FactionBranch homeBranch
Definition: Chara.cs:1080
Chara SetGlobal()
Definition: Chara.cs:1520
static Faction Home
Definition: EClass.cs:27
static Chara pc
Definition: EClass.cs:15
void AddMemeber(Chara c)

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

Referenced by MakeAlly(), and MakePartyMemeber().

◆ _Move()

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

Reimplemented from Card.

Definition at line 2774 of file Chara.cs.

2775 {
2776 if (isDead)
2777 {
2778 return MoveResult.Fail;
2779 }
2780 if (IsPC)
2781 {
2782 float num = EClass.setting.defaultActPace;
2783 switch (burden.GetPhase())
2784 {
2785 case 3:
2786 num *= 1.5f;
2787 break;
2788 case 4:
2789 num *= 2f;
2790 break;
2791 }
2793 {
2794 int num2 = 30;
2795 if (!EClass.pc.HasElement(408))
2796 {
2798 {
2799 case Weather.Condition.Rain:
2800 num2 += 5;
2801 break;
2802 case Weather.Condition.RainHeavy:
2803 num2 += 10;
2804 num *= 1.5f;
2805 break;
2806 case Weather.Condition.Snow:
2807 num2 += 10;
2808 break;
2809 case Weather.Condition.SnowHeavy:
2810 num2 += 15;
2811 num *= 1.5f;
2812 break;
2813 }
2814 }
2815 if (newPoint.matFloor.id == 48)
2816 {
2817 num2 += 20;
2818 num *= 1.8f;
2819 }
2820 num2 = num2 * 100 / (100 + EClass.sqrt(EvalueMax(240, -20) * 10) + EvalueMax(407, -5) * 5);
2821 EClass.world.date.AdvanceMin(num2 * 6);
2822 EClass.player.lastZonePos = null;
2824 int num3 = base.hp;
2825 for (int i = 0; i < num2 * 4; i++)
2826 {
2827 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2828 {
2829 if (!m.isDead)
2830 {
2831 m.TickConditions();
2832 }
2833 });
2834 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2835 {
2836 EClass.player.regionMoveWarned = true;
2837 Msg.Say("regionAbortMove");
2838 EInput.Consume(consumeAxis: true);
2839 SetAI(new NoGoal());
2840 return MoveResult.Fail;
2841 }
2842 }
2843 if (newPoint.cell.CanSuffocate())
2844 {
2845 bool flag = HasElement(1252);
2846 if (!flag)
2847 {
2848 AddCondition<ConSuffocation>((Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2849 }
2850 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2851 if (num4 >= 2)
2852 {
2853 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2854 }
2855 if (!isDead && !HasElement(429))
2856 {
2857 ModExp(200, ((!flag) ? 1 : 10) + num4 * 12);
2858 }
2859 }
2860 EClass.player.regionMoveWarned = false;
2861 if (isDead)
2862 {
2863 return MoveResult.Fail;
2864 }
2865 }
2866 if (num > EClass.setting.defaultActPace * 3f)
2867 {
2868 num = EClass.setting.defaultActPace * 3f;
2869 }
2870 actTime = num;
2871 }
2872 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2873 {
2874 int num5 = Mathf.Min(5 + EClass._zone.DangerLv / 10, 200);
2875 ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2876 if (ride != null)
2877 {
2878 ride.ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2879 }
2880 if (parasite != null)
2881 {
2882 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2883 }
2884 }
2885 Chara chara = ((ride == null) ? this : ride);
2886 if (!EClass._zone.IsRegion || chara.IsPC)
2887 {
2888 bool flag2 = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2889 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2890 {
2891 flag2 = true;
2892 }
2893 if (flag2 && newPoint.Distance(pos) <= 1)
2894 {
2895 Point randomNeighbor = pos.GetRandomNeighbor();
2896 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2897 {
2898 newPoint = randomNeighbor;
2899 if (isDrunk)
2900 {
2901 Talk("drunk");
2902 }
2903 }
2904 }
2905 }
2906 if (newPoint.x != pos.x || newPoint.z != pos.z)
2907 {
2908 LookAt(newPoint);
2909 }
2910 CellEffect effect = base.Cell.effect;
2911 if (effect != null && effect.id == 7)
2912 {
2913 CellEffect effect2 = base.Cell.effect;
2914 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2915 {
2916 Say("abWeb_caught", this);
2917 PlaySound("web");
2918 effect2.power = effect2.power * 3 / 4;
2919 renderer.PlayAnime(AnimeID.Shiver);
2920 return MoveResult.Fail;
2921 }
2922 Say("abWeb_pass", this);
2923 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2924 }
2925 if (IsPC)
2926 {
2927 EClass.player.renderExtraTime = 0f;
2928 if (EClass._zone.IsRegion)
2929 {
2931 }
2932 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2933 {
2934 EClass.player.renderExtraTime = actTime * EClass.setting.render.anime.diagonalSpeed;
2935 }
2936 }
2937 if (newPoint.HasChara)
2938 {
2939 foreach (Chara item in newPoint.ListCharas())
2940 {
2941 if (item.mimicry != null && item.IsHostile(this))
2942 {
2943 item.mimicry.RevealMimicry(this, surprise: true);
2944 return MoveResult.Event;
2945 }
2946 }
2947 }
2948 if (newPoint.cell.hasDoor)
2949 {
2950 foreach (Thing thing in pos.Things)
2951 {
2952 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2953 {
2954 if (base.INT < 10)
2955 {
2956 return MoveResult.Fail;
2957 }
2958 traitDoor.TryOpenLock(this);
2959 return MoveResult.Door;
2960 }
2961 }
2962 }
2963 Cell cell = newPoint.cell;
2964 Cell cell2 = pos.cell;
2965 bool flag3 = cell.HasLiquid && !IsLevitating;
2966 bool hasBridge = cell.HasBridge;
2967 bool hasRamp = cell.HasRamp;
2968 bool flag4 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2969 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2970 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2971 bool flag5 = cell.IsTopWater && !cell.isFloating;
2972 if (!EClass._zone.IsRegion)
2973 {
2974 if (cell.hasDoorBoat)
2975 {
2976 tileRow = FLOOR.sourceWood;
2977 row = MATERIAL.sourceOak;
2978 flag5 = false;
2979 }
2980 else if (flag4 && !tileRow.ignoreSnow)
2981 {
2982 if (tileRow.tileType.IsWater)
2983 {
2984 tileRow = FLOOR.sourceIce;
2985 row = MATERIAL.sourceIce;
2986 }
2987 else
2988 {
2989 tileRow = FLOOR.sourceSnow;
2990 row = MATERIAL.sourceSnow;
2991 }
2992 flag5 = false;
2993 }
2994 }
2995 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
2996 {
2997 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
2998 }
2999 if (isSynced)
3000 {
3001 string text = ((flag3 || flag5) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
3002 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
3003 {
3004 text = cell.matObj.soundFoot;
3005 }
3006 if (IsPC)
3007 {
3008 foreach (Thing thing2 in newPoint.Things)
3009 {
3010 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
3011 {
3012 text = thing2.material.soundFoot;
3013 }
3014 }
3015 }
3016 if (!text.IsEmpty())
3017 {
3018 SoundManager.altLastData = IsPC;
3019 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
3020 }
3021 if (!flag5)
3022 {
3024 PCOrbit pcOrbit = EClass.screen.pcOrbit;
3025 bool flag6 = scene.actionMode.gameSpeed > 1f;
3026 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
3027 scene.psFoot.startColor = row.matColor;
3028 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag6) ? 1 : 2));
3029 if (flag6 && IsPC)
3030 {
3031 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
3032 scene.psSmoke.Emit(pcOrbit.emitSmoke);
3033 }
3034 }
3035 if (flag3 || flag5)
3036 {
3037 Effect.Get("ripple").Play(newPoint);
3038 }
3039 }
3040 lastPos.Set(pos);
3041 if (type != MoveType.Force)
3042 {
3043 if (newPoint.HasChara && ai.Current.PushChara)
3044 {
3045 TryPush(newPoint);
3046 }
3047 if (newPoint.HasChara && newPoint.Charas.Count == 1)
3048 {
3049 Chara chara2 = newPoint.Charas[0];
3050 if (CanReplace(chara2))
3051 {
3052 chara2.MoveByForce(lastPos, this);
3053 if (chara.IsPC)
3054 {
3055 Say("replace_pc", chara, chara2);
3056 }
3057 }
3058 }
3059 }
3060 if (cell.hasDoor)
3061 {
3062 foreach (Thing thing3 in newPoint.Things)
3063 {
3064 if (thing3.trait is TraitDoor traitDoor2)
3065 {
3066 traitDoor2.TryOpen(this);
3067 }
3068 }
3069 }
3070 EClass._zone.map.MoveCard(newPoint, this);
3071 SyncRide();
3073 {
3074 foreach (Chara member in EClass.pc.party.members)
3075 {
3076 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
3077 {
3078 member.TryMoveTowards(EClass.pc.pos);
3079 }
3080 }
3081 }
3083 {
3085 }
3086 if (IsPC)
3087 {
3088 PlaySound("Footstep/Extra/pcfootstep");
3089 if (pos.HasThing)
3090 {
3091 foreach (Card item2 in pos.ListCards())
3092 {
3093 if (!item2.isThing || item2.placeState != 0 || item2.ignoreAutoPick)
3094 {
3095 continue;
3096 }
3098 {
3100 ContainerFlag containerFlag = item2.category.GetRoot().id.ToEnum<ContainerFlag>();
3101 if (containerFlag == ContainerFlag.none)
3102 {
3103 containerFlag = ContainerFlag.other;
3104 }
3105 if ((dataPick.noRotten && item2.IsDecayed) || (dataPick.onlyRottable && item2.trait.Decay == 0))
3106 {
3107 continue;
3108 }
3109 if (dataPick.userFilter)
3110 {
3111 switch (dataPick.IsFilterPass(item2.GetName(NameStyle.Full, 1)))
3112 {
3113 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
3114 Pick(item2.Thing);
3115 continue;
3116 case Window.SaveData.FilterResult.Block:
3117 continue;
3118 }
3119 }
3120 if (dataPick.advDistribution)
3121 {
3122 foreach (int cat in dataPick.cats)
3123 {
3124 if (item2.category.uid == cat)
3125 {
3126 Pick(item2.Thing);
3127 }
3128 }
3129 }
3130 else if (!dataPick.flag.HasFlag(containerFlag))
3131 {
3132 Pick(item2.Thing);
3133 }
3134 }
3135 else
3136 {
3137 Pick(item2.Thing);
3138 }
3139 }
3140 }
3141 if (EClass._zone.IsRegion)
3142 {
3144 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
3145 {
3146 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() ?? "");
3147 }
3148 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
3149 {
3151 Msg.Say(Lang.GetList("walk_snow").RandomItem());
3152 }
3153 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
3154 {
3156 Msg.Say(Lang.GetList("walk_storm").RandomItem());
3157 }
3158 }
3160 }
3161 if (IsPCC)
3162 {
3163 int num6 = Mathf.Abs(cell2.topHeight - cell.topHeight);
3164 if ((num6 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
3165 {
3166 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num6 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
3167 }
3168 else
3169 {
3170 float surfaceHeight = cell2.GetSurfaceHeight();
3171 float surfaceHeight2 = cell.GetSurfaceHeight();
3172 num6 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3173 if (num6 >= 15)
3174 {
3175 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num6 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
3176 }
3177 }
3178 }
3179 lastPos.Things.ForeachReverse(delegate(Thing t)
3180 {
3181 t.trait.OnSteppedOut(this);
3182 });
3183 if (!IsPC)
3184 {
3185 pos.Things.ForeachReverse(delegate(Thing t)
3186 {
3187 t.trait.OnStepped(this);
3188 });
3189 }
3190 if (CanDestroyPath())
3191 {
3193 }
3194 if (IsPC)
3195 {
3196 if (renderer.anime == null && renderer.replacer != null)
3197 {
3199 }
3201 {
3202 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
3203 {
3204 EClass.player.flags.isShoesOff = false;
3205 EClass.pc.Say("shoes_on", EClass.pc);
3206 EClass.pc.SetPCCState(PCCState.Normal);
3207 }
3208 }
3209 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
3210 {
3211 EClass.player.flags.isShoesOff = true;
3212 EClass.pc.Say("shoes_off", EClass.pc);
3213 EClass.pc.SetPCCState(PCCState.ShoesOff);
3214 }
3215 }
3216 bool flag7 = flag5 || EClass._zone.IsUnderwater;
3217 if (wasInWater != flag7)
3218 {
3219 wasInWater = flag7;
3220 RefreshSpeed();
3221 }
3222 hasMovedThisTurn = true;
3223 return MoveResult.Success;
3224 }
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:46
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
virtual string GetName(NameStyle style, int num=-1)
Definition: Card.cs:2655
bool IsDecayed
Definition: Card.cs:2327
virtual bool isThing
Definition: Card.cs:2119
int EvalueMax(int ele, int min=0)
Definition: Card.cs:2625
SourceMaterial.Row material
Definition: Card.cs:2089
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6371
int c_lockLv
Definition: Card.cs:977
bool ignoreAutoPick
Definition: Card.cs:507
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:6931
PlaceState placeState
Definition: Card.cs:84
Point pos
Definition: Card.cs:60
Trait trait
Definition: Card.cs:54
MoveType
Definition: Card.cs:21
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4145
MoveResult
Definition: Card.cs:13
bool IsInstalled
Definition: Card.cs:2421
virtual Thing Thing
Definition: Card.cs:2096
int Evalue(int ele)
Definition: Card.cs:2611
int Dist(Card c)
Definition: Card.cs:7895
void ModExp(string alias, int a)
Definition: Card.cs:2688
SourceCategory.Row category
Definition: Card.cs:2087
virtual RenderRow TileRow
Definition: Card.cs:2173
bool isLeashed
Definition: Card.cs:843
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6118
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7048
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:3728
bool wasInWater
Definition: Chara.cs:150
bool IsLevitating
Definition: Chara.cs:599
AIAct ai
Definition: Chara.cs:204
override bool IsPC
Definition: Chara.cs:626
bool isDrunk
Definition: Chara.cs:126
Party party
Definition: Chara.cs:43
bool CanDestroyPath()
Definition: Chara.cs:2482
bool IsInCombat
Definition: Chara.cs:878
bool HasCondition(string alias)
Definition: Chara.cs:9593
AIAct SetAI(AIAct g)
Definition: Chara.cs:9062
bool IsIdle
Definition: Chara.cs:867
override bool IsDisabled
Definition: Chara.cs:587
bool hasMovedThisTurn
Definition: Chara.cs:178
override bool isSynced
Definition: Chara.cs:705
bool CanMoveTo(Point p, bool allowDestroyPath=true)
Definition: Chara.cs:2495
void DestroyPath(Point pos)
Definition: Chara.cs:3226
override bool IsPCFaction
Definition: Chara.cs:685
float actTime
Definition: Chara.cs:180
override int MaxHP
Definition: Chara.cs:722
Zone currentZone
Definition: Chara.cs:257
bool CanReplace(Chara c)
Definition: Chara.cs:3337
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2680
Stats burden
Definition: Chara.cs:1170
Chara parasite
Definition: Chara.cs:30
Chara ride
Definition: Chara.cs:27
void RefreshSpeed(Element.BonusInfo info=null)
Definition: Chara.cs:1905
MoveResult TryMoveTowards(Point p)
Definition: Chara.cs:2688
void SyncRide()
Definition: Chara.cs:3996
bool isDead
Definition: Chara.cs:391
override void LookAt(Card c)
Definition: Chara.cs:3592
bool isConfused
Definition: Chara.cs:128
override bool IsPCC
Definition: Chara.cs:696
void TryPush(Point point)
Definition: Chara.cs:3270
void SetPCCState(PCCState state)
Definition: Chara.cs:6811
SourceRace.Row race
Definition: Chara.cs:466
bool allyKeepDistance
Definition: ConfigTactics.cs:6
static Game game
Definition: EClass.cs:9
static Scene scene
Definition: EClass.cs:31
static Zone _zone
Definition: EClass.cs:21
static World world
Definition: EClass.cs:41
static Map _map
Definition: EClass.cs:19
static int rnd(long a)
Definition: EClass.cs:59
static BaseGameScreen screen
Definition: EClass.cs:33
static int rndHalf(int a)
Definition: EClass.cs:97
static Player player
Definition: EClass.cs:13
static int sqrt(int a)
Definition: EClass.cs:88
static GameSetting setting
Definition: EClass.cs:35
Definition: EInput.cs:8
static void Consume(int _skipFrame)
Definition: EInput.cs:667
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:91
Config config
Definition: Game.cs:219
Definition: Lang.cs:7
static string[] GetList(string id)
Definition: Lang.cs:117
static SourceMaterial.Row sourceOak
Definition: MATERIAL.cs:47
static SourceMaterial.Row sourceSnow
Definition: MATERIAL.cs:41
static SourceMaterial.Row sourceIce
Definition: MATERIAL.cs:43
void MoveCard(Point p, Card t)
Definition: Map.cs:841
void SetFoormark(Point pos, int id, int angle, int offset=0)
Definition: Map.cs:2060
void SetEffect(int x, int z, CellEffect effect=null)
Definition: Map.cs:1508
Color Ono
Definition: MsgColors.cs:13
Definition: Msg.cs:5
static MsgColors colors
Definition: Msg.cs:20
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
static void SetColor()
Definition: Msg.cs:22
Definition: NoGoal.cs:4
int emitFoot
Definition: PCOrbit.cs:9
int emitSmoke
Definition: PCOrbit.cs:11
Vector3 smokePos
Definition: PCOrbit.cs:15
Vector3 footPos
Definition: PCOrbit.cs:13
List< Chara > members
Definition: Party.cs:19
bool isShoesOff
Definition: Player.cs:361
int distanceTravel
Definition: Player.cs:919
Flags flags
Definition: Player.cs:1120
Window.SaveData dataPick
Definition: Player.cs:1060
bool regionMoveWarned
Definition: Player.cs:1183
Definition: Point.cs:9
SourceMaterial.Row matFloor
Definition: Point.cs:57
SourceBlock.Row sourceBlock
Definition: Point.cs:63
List< Card > ListCards(bool includeMasked=false)
Definition: Point.cs:1051
Point Set(int _x, int _z)
Definition: Point.cs:503
List< Thing > Things
Definition: Point.cs:338
int x
Definition: Point.cs:36
int z
Definition: Point.cs:39
List< Chara > Charas
Definition: Point.cs:340
bool HasThing
Definition: Point.cs:251
List< Chara > ListCharas()
Definition: Point.cs:1171
SourceFloor.Row sourceFloor
Definition: Point.cs:65
bool HasObj
Definition: Point.cs:137
int Distance(Point p)
Definition: Point.cs:989
Cell cell
Definition: Point.cs:51
Point GetRandomNeighbor()
Definition: Point.cs:759
bool HasChara
Definition: Point.cs:238
TileType tileType
Definition: RenderRow.cs:77
Definition: Scene.cs:8
ParticleSystem psSmoke
Definition: Scene.cs:113
ParticleSystem psFoot
Definition: Scene.cs:111
EloMap elomap
Definition: Scene.cs:149
bool Surface
Definition: SourcePref.cs:330
virtual bool ShowDangerLv
Definition: Spatial.cs:503
virtual bool IsRegion
Definition: Spatial.cs:515
virtual string Name
Definition: Spatial.cs:509
SourceZone.Row source
Definition: Spatial.cs:453
List< Spatial > children
Definition: Spatial.cs:37
override int GetPhase()
Definition: Stats.cs:117
Definition: Thing.cs:8
override SourcePref Pref
Definition: Thing.cs:50
bool ignoreSnow
Definition: TileRow.cs:6
string soundFoot
Definition: TileRow.cs:14
virtual bool IsWater
Definition: TileType.cs:165
virtual void OnSteppedOut(Chara c)
Definition: Trait.cs:1106
virtual bool IsChangeFloorHeight
Definition: Trait.cs:74
virtual void OnStepped(Chara c)
Definition: Trait.cs:1102
Card owner
Definition: Trait.cs:28
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:289
override int DangerLv
Definition: Zone.cs:110
bool IsPCFaction
Definition: Zone.cs:475
virtual bool IsUnderwater
Definition: Zone.cs:271
virtual bool KeepAllyDistance
Definition: Zone.cs:304
virtual bool HiddenInRegionMap
Definition: Zone.cs:415
Map map
Definition: Zone.cs:63

References EClass._map, EClass._zone, 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(), Card.category, 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, Effect.Get(), EloMap.GetCell(), Lang.GetList(), Card.GetName(), 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, Card.ignoreAutoPick, TileRow.ignoreSnow, Trait.IsChangeFloorHeight, Cell.isClearSnow, isConfused, isDead, Card.IsDecayed, 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(), Card.isThing, Zone.IsUnderwater, TileType.IsWater, item, Zone.KeepAllyDistance, lastPos, Point.ListCards(), Point.ListCharas(), 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, Card.placeState, Effect.Play(), CardRenderer.PlayAnime(), EClass.player, Card.PlaySound(), Card.pos, CellEffect.power, Thing.Pref, Scene.psFoot, Scene.psSmoke, AIAct.PushChara, race, RefreshSpeed(), 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, EClass.sqrt(), SourcePref.Surface, SyncRide(), Game.Config.tactics, Card.Talk(), CoreConfig.test, Card.Thing, Point.Things, TickConditions(), Card.TileRow, RenderRow.tileType, Cell.topHeight, Card.trait, TryMoveTowards(), TryPush(), Window.SaveData.userFilter, Util, wasInWater, 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 7375 of file Chara.cs.

7376 {
7377 EClass.Sound.Play("pop_drama");
7378 if (book == "_chara" && IsPC)
7379 {
7380 step = "pc";
7381 }
7382 if (id == "lomias")
7383 {
7385 }
7386 return LayerDrama.Activate(book, sheet, step, this, null, tag);
7387 }
ID_Achievement
static SoundManager Sound
Definition: EClass.cs:47
static LayerDrama Activate(string book, string idSheet, string idStep, Chara target=null, Card ref1=null, string tag="")
Definition: LayerDrama.cs:66
Definition: Steam.cs:10
static void GetAchievement(ID_Achievement id)
Definition: Steam.cs:51

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

◆ AddCondition() [1/2]

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

Definition at line 9437 of file Chara.cs.

9438 {
9439 c.owner = this;
9440 if (!(c is ConBurning))
9441 {
9442 if (c is ConBleed && ResistLv(964) >= 3)
9443 {
9444 return null;
9445 }
9446 }
9447 else if (ResistLv(950) >= 3)
9448 {
9449 return null;
9450 }
9452 {
9453 if (c.GainResistFactor >= 400)
9454 {
9455 c.power /= 2;
9456 }
9457 ResistCon(c);
9458 if (c.power <= 0)
9459 {
9460 return null;
9461 }
9462 }
9463 if (!force)
9464 {
9465 if (c.source.negate.Length != 0)
9466 {
9467 string[] negate = c.source.negate;
9468 foreach (string text in negate)
9469 {
9470 if (HasElement(text))
9471 {
9472 return null;
9473 }
9474 }
9475 }
9476 Element defenseAttribute = c.GetDefenseAttribute(this);
9477 if (defenseAttribute != null)
9478 {
9479 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
9480 }
9481 if (c.source.resistance.Length != 0)
9482 {
9483 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
9484 if (num > 0)
9485 {
9486 c.power /= num * num + 1;
9487 if (c.power <= 40)
9488 {
9489 return null;
9490 }
9491 }
9492 }
9493 c.power = c.EvaluatePower(c.power);
9494 if (c.power <= 0)
9495 {
9496 return null;
9497 }
9498 }
9499 int num2 = c.EvaluateTurn(c.power);
9500 if (num2 == 0)
9501 {
9502 return null;
9503 }
9504 for (int j = 0; j < conditions.Count; j++)
9505 {
9506 if (conditions[j].id != c.id)
9507 {
9508 continue;
9509 }
9510 if (c.Type == ConditionType.Stance || c.IsToggle)
9511 {
9512 conditions[j].Kill();
9513 return null;
9514 }
9515 if (conditions[j].CanStack(c))
9516 {
9517 if (conditions[j].ShouldOverride(c))
9518 {
9519 if (conditions[j].IsOverrideConditionMet(c, num2))
9520 {
9521 conditions[j].Kill(silent: true);
9522 continue;
9523 }
9524 return null;
9525 }
9526 if (CanGainConResist)
9527 {
9528 AddResistCon(c);
9529 }
9530 conditions[j].OnStacked(c.power);
9531 conditions[j].OnStartOrStack();
9532 conditions[j].PlayEffect();
9533 }
9534 if (!conditions[j].AllowMultipleInstance)
9535 {
9536 return null;
9537 }
9538 }
9539 foreach (Condition condition in conditions)
9540 {
9541 if (condition.TryNullify(c))
9542 {
9543 return null;
9544 }
9545 }
9546 c.value = num2;
9547 conditions.Add(c);
9548 if (CanGainConResist)
9549 {
9550 AddResistCon(c);
9551 }
9552 c.SetOwner(this);
9553 c.Start();
9554 SetDirtySpeed();
9555 if (c.ShouldRefresh)
9556 {
9557 Refresh();
9558 }
9559 if (c.CancelAI)
9560 {
9561 ai.Cancel();
9562 }
9563 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
9564 {
9566 }
9567 if (c.SyncRide && (ride != null || parasite != null))
9568 {
9569 if (ride != null)
9570 {
9572 }
9573 if (parasite != null)
9574 {
9576 }
9577 }
9578 return c;
9579 }
ConditionType
Definition: ConditionType.cs:2
virtual Status Cancel()
Definition: AIAct.cs:305
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)
virtual void SetOwner(Chara _owner, bool onDeserialize=false)
virtual bool TryNullify(Condition c)
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:567
int ResistLv(int res)
Definition: Card.cs:6113
void SetDirtySpeed()
Definition: Chara.cs:1896
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9432
bool CanGainConResist
Definition: Chara.cs:1187
void AddResistCon(Condition con)
Definition: Chara.cs:9846
void ResistCon(Condition con)
Definition: Chara.cs:9866
static Condition Create(string alias, int power=100, Action< Condition > onCreate=null)
Definition: Condition.cs:46
static SourceManager sources
Definition: EClass.cs:43
int Value
Definition: ELEMENT.cs:297
void EndTurn(bool consume=true)
Definition: Player.cs:2109
SourceElement elements

References AddCondition(), AIAct.Cancel(), Condition.Create(), SourceManager.elements, Player.EndTurn(), BaseCondition.EvaluatePower(), BaseCondition.EvaluateTurn(), 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 9427 of file Chara.cs.

9427 : Condition
9428 {
9429 return AddCondition(typeof(T).Name, p, force);
9430 }
string Name
Definition: Card.cs:2177

◆ AddCooldown()

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

Definition at line 8843 of file Chara.cs.

8844 {
8845 if (_cooldowns == null)
8846 {
8847 _cooldowns = new List<int>();
8848 }
8849 if (turns != 0)
8850 {
8851 _cooldowns.Add(idEle * 1000 + turns);
8852 return;
8853 }
8854 SourceElement.Row row = EClass.sources.elements.map[idEle];
8855 if (row.cooldown > 0)
8856 {
8857 _cooldowns.Add(idEle * 1000 + row.cooldown);
8858 }
8859 }
List< int > _cooldowns
Definition: Chara.cs:58

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

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

◆ AddFoodHistory()

void Chara.AddFoodHistory ( Thing  food)
inline

Definition at line 10336 of file Chara.cs.

10337 {
10338 if (!IsPCFaction || !IsGlobal)
10339 {
10340 _historyFood = null;
10341 return;
10342 }
10343 if (_historyFood == null)
10344 {
10345 _historyFood = new List<List<string>>
10346 {
10347 new List<string>()
10348 };
10349 }
10350 if (_historyFood[0].Count < 5)
10351 {
10352 _historyFood[0].Add(food.id);
10353 }
10354 }
override bool IsGlobal
Definition: Chara.cs:624
List< List< string > > _historyFood
Definition: Chara.cs:64

References food.

Referenced by FoodEffect.Proc().

◆ AddHobby()

void Chara.AddHobby ( int  id)
inline

Definition at line 9262 of file Chara.cs.

9263 {
9264 foreach (int hobby in _hobbies)
9265 {
9266 if (hobby == id)
9267 {
9268 return;
9269 }
9270 }
9271 _hobbies.Add(id);
9272 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2236 of file Chara.cs.

2237 {
2238 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2239 body.AddBodyPart(ele);
2240 if (msg)
2241 {
2242 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
2243 PlaySound("offering");
2244 }
2245 }
void AddBodyPart(int ele, Thing thing=null)
Definition: CharaBody.cs:283
CharaBody body
Definition: Chara.cs:94
static SourceElement.Row Get(int id)
Definition: ELEMENT.cs:406

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

9847 {
9848 if (con.power > 0 && con.GainResistFactor > 0)
9849 {
9850 int key = con.id;
9851 if (resistCon == null)
9852 {
9853 resistCon = new Dictionary<int, int>();
9854 }
9855 if (resistCon.ContainsKey(key))
9856 {
9857 resistCon[key] += con.power * con.GainResistFactor / 100;
9858 }
9859 else
9860 {
9861 resistCon[key] = con.power * con.GainResistFactor / 100;
9862 }
9863 }
9864 }
Dictionary< int, int > resistCon
Definition: Chara.cs:216

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

◆ AddWork()

void Chara.AddWork ( int  id)
inline

Definition at line 9274 of file Chara.cs.

9275 {
9276 foreach (int work in _works)
9277 {
9278 if (work == id)
9279 {
9280 return;
9281 }
9282 }
9283 _works.Add(id);
9284 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5336 of file Chara.cs.

5337 {
5338 if (!IsPC)
5339 {
5340 return;
5341 }
5342 int currency = GetCurrency();
5343 if (currency > 0)
5344 {
5345 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
5346 if (num <= 0)
5347 {
5348 num = 1;
5349 }
5350 Msg.Say("panaltyMoney", this, Lang._currency(num));
5351 ModCurrency(-num);
5353 }
5354 foreach (Element value in EClass.pc.elements.dict.Values)
5355 {
5356 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
5357 {
5358 EClass.pc.elements.ModExp(value.id, -500f);
5359 }
5360 }
5361 }
@ currency
ElementContainerCard elements
Definition: Card.cs:42
int GetCurrency(string id="money")
Definition: Card.cs:4057
void ModCurrency(int a, string id="money")
Definition: Card.cs:4043
void ModExp(int ele, float a, bool chain=false)
Dictionary< int, Element > dict
int id
Definition: ELEMENT.cs:255
bool IsMainAttribute
Definition: ELEMENT.cs:388
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:165
static Thing CreateCurrency(int a, string id="money")
Definition: ThingGen.cs:37
Card AddCard(Card t, Point point)
Definition: Zone.cs:1994

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

2072 {
2073 switch (tag)
2074 {
2075 case EditorTag.HostilityNeutral:
2076 {
2077 Hostility hostility2 = (base.c_originalHostility = Hostility.Neutral);
2078 this.hostility = hostility2;
2079 break;
2080 }
2081 case EditorTag.HostilityEnemy:
2082 {
2083 Hostility hostility2 = (base.c_originalHostility = Hostility.Enemy);
2084 this.hostility = hostility2;
2085 break;
2086 }
2087 case EditorTag.HostilityFriend:
2088 {
2089 Hostility hostility2 = (base.c_originalHostility = Hostility.Friend);
2090 this.hostility = hostility2;
2091 break;
2092 }
2093 case EditorTag.Male:
2094 bio.SetGender(2);
2095 base.c_idPortrait = Portrait.GetRandomPortrait(2, GetIdPortraitCat());
2096 break;
2097 case EditorTag.Female:
2098 bio.SetGender(1);
2099 base.c_idPortrait = Portrait.GetRandomPortrait(1, GetIdPortraitCat());
2100 break;
2101 case EditorTag.baby:
2102 SetFeat(1232);
2103 break;
2104 }
2105 base.ApplyEditorTags(tag);
2106 }
EditorTag
Definition: EditorTag.cs:2
void SetGender(int g)
Definition: Biography.cs:473
Biography bio
Definition: Card.cs:45
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:10071
string GetIdPortraitCat()
Definition: Chara.cs:8306
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 2198 of file Chara.cs.

2199 {
2200 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
2201 if (IsPCC)
2202 {
2203 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
2204 }
2205 }
SourceValueType
SourceJob.Row job
Definition: Chara.cs:468
void ApplyElementMap(int uid, SourceValueType type, Dictionary< int, int > map, int lv, bool invert=false, bool applyFeat=false)
PCCUniformManager uniforms
Definition: Game.cs:195

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

2285 {
2286 string[] array = race.figure.Split('|');
2287 foreach (string s in array)
2288 {
2289 int num = ParseBodySlot(s);
2290 if (num != -1)
2291 {
2292 if (remove)
2293 {
2294 body.RemoveBodyPart(num);
2295 }
2296 else
2297 {
2298 body.AddBodyPart(num);
2299 }
2300 }
2301 }
2303 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV, remove, applyFeat: true);
2304 if (!remove)
2305 {
2306 if (race.id == "bike" && id != "bike_cub")
2307 {
2308 SetFeat(1423, (id == "chara" || id == "player") ? 10 : (1 + EClass.rnd(10)));
2309 }
2310 if (race.id == "horse" && EClass.rnd(5) == 0)
2311 {
2312 SetFeat(1423, 1 + EClass.rnd(5));
2313 }
2314 }
2315 }
void RefreshBodyParts()
Definition: CharaBody.cs:309
void RemoveBodyPart(int ele)
Definition: CharaBody.cs:338
int ParseBodySlot(string s)
Definition: Chara.cs:2219

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

Referenced by ChangeRace(), and OnCreate().

◆ Banish()

void Chara.Banish ( Chara  owner)
inline

Definition at line 2386 of file Chara.cs.

2387 {
2388 owner?.Say("summon_vanish", this);
2389 pos.PlayEffect("vanish");
2390 pos.PlaySound("vanish");
2391 pos.PlayEffect("teleport");
2392 Destroy();
2393 }
void Destroy()
Definition: Card.cs:5160
SoundSource PlaySound(string id, bool synced=true, float v=1f, bool spatial=true)
Definition: Point.cs:1253
Effect PlayEffect(string id)
Definition: Point.cs:1248

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

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

◆ BanishAllMinions()

void Chara.BanishAllMinions ( )
inline

Definition at line 2423 of file Chara.cs.

2424 {
2425 List<Chara> list = new List<Chara>();
2426 foreach (Chara chara in EClass._map.charas)
2427 {
2428 if (chara.IsMinion && chara.master == this)
2429 {
2430 list.Add(chara);
2431 }
2432 }
2433 foreach (Chara item in list)
2434 {
2435 item.Banish(this);
2436 }
2437 }
override bool IsMinion
Definition: Chara.cs:641
Chara master
Definition: Chara.cs:88
List< Chara > charas
Definition: Map.cs:81

References EClass._map, Map.charas, IsMinion, item, and master.

◆ CalcBurden()

void Chara.CalcBurden ( )
inline

Definition at line 1864 of file Chara.cs.

1865 {
1866 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1867 if (num < 0)
1868 {
1869 num = 1000;
1870 }
1872 {
1873 num = 0;
1874 }
1875 burden.Set(num);
1876 SetDirtySpeed();
1877 }
override int WeightLimit
Definition: Chara.cs:724
bool ignoreWeight
Definition: CoreDebug.cs:187
static CoreDebug debug
Definition: EClass.cs:49
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 6252 of file Chara.cs.

6253 {
6254 if (!(e is Spell))
6255 {
6256 return 100;
6257 }
6258 if (!IsPC)
6259 {
6260 int num2 = 95;
6261 if (host != null)
6262 {
6263 if (host.ride == this)
6264 {
6265 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
6266 }
6267 if (host.parasite == this)
6268 {
6269 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
6270 }
6271 }
6272 return num2;
6273 }
6274 int num3 = Evalue(304);
6275 if (!IsPCFaction)
6276 {
6277 num3 = Mathf.Max(num3, base.LV + 5);
6278 }
6279 int num4 = 0;
6280 int num5 = 0;
6281 bool num6 = GetArmorSkill() == 122;
6282 AttackStyle attackStyle = body.GetAttackStyle();
6283 if (num6)
6284 {
6285 num4 = 20 - Evalue(122) / 5;
6286 num5 += 10 - Evalue(1654) * 4;
6287 }
6288 else
6289 {
6290 num4 = 10 - Evalue(120) / 5;
6291 }
6292 if (num4 < 5)
6293 {
6294 num4 = 5;
6295 }
6296 if (ride != null)
6297 {
6298 num4 += 5;
6299 }
6300 if (parasite != null)
6301 {
6302 num4 += 10;
6303 }
6304 if (attackStyle == AttackStyle.TwoWield)
6305 {
6306 num4 += 5;
6307 }
6308 if (attackStyle == AttackStyle.Shield)
6309 {
6310 num4 += 10;
6311 num5 += 20 - Evalue(1654) * 8;
6312 }
6313 if (isConfused)
6314 {
6315 num4 += 10000;
6316 }
6317 if (HasCondition<ConDim>())
6318 {
6319 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
6320 }
6321 if (num > 1)
6322 {
6323 num4 += 5 * num;
6324 }
6325 if (num5 < 0)
6326 {
6327 num5 = 0;
6328 }
6329 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
6330 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:479
override int GetArmorSkill()
Definition: Chara.cs:8025
int EvalueRiding()
Definition: Chara.cs:6243
SourceElement.Row source
Definition: ELEMENT.cs:278
Definition: SPELL.cs:626

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

2053 {
2054 int num = base.END;
2055 int num2 = 0;
2056 foreach (Element value in elements.dict.Values)
2057 {
2058 if (value.source.category == "skill")
2059 {
2060 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
2061 }
2062 }
2063 num2 = EClass.curve(num, 30, 10, 60);
2064 if (num2 < 10)
2065 {
2066 num2 = 10;
2067 }
2068 _maxStamina = num2 + 15;
2069 }
int _maxStamina
Definition: Chara.cs:367
static int curve(long _a, int start, int step, int rate=75)
Definition: EClass.cs:69
int ValueWithoutLink
Definition: ELEMENT.cs:299
int vBase
Definition: ELEMENT.cs:257

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

6555 {
6556 foreach (Chara chara in EClass._map.charas)
6557 {
6558 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6559 {
6560 chara.GoHostile(tg);
6561 }
6562 }
6563 }
Hostility OriginalHostility
Definition: Chara.cs:473
void GoHostile(Card _tg)
Definition: Chara.cs:6448

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

8395 {
8396 if (things.IsFull())
8397 {
8398 return false;
8399 }
8400 if (t.c_isImportant)
8401 {
8402 return false;
8403 }
8404 if (t.id == "1084")
8405 {
8406 return true;
8407 }
8408 if (t.trait is TraitBookExp)
8409 {
8410 return true;
8411 }
8412 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
8413 {
8414 return false;
8415 }
8416 return true;
8417 }
Rarity
Definition: Rarity.cs:2
string id
Definition: Card.cs:36
Rarity rarity
Definition: Card.cs:315
bool c_isImportant
Definition: Card.cs:1037
ThingContainer things
Definition: Card.cs:39
bool IsContainer
Definition: Card.cs:2127
bool IsFull(int y=0)
virtual bool CanExtendBuild
Definition: Trait.cs:181
virtual bool CanBeDestroyed
Definition: Trait.cs:307
virtual bool CanOnlyCarry
Definition: Trait.cs:305

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,
bool  skipImportantCheck = false 
)
inline

Definition at line 8373 of file Chara.cs.

8374 {
8376 {
8377 return true;
8378 }
8379 if (!IsValidGiftWeight(t, num))
8380 {
8381 return false;
8382 }
8383 if (!skipImportantCheck && t.c_isImportant)
8384 {
8385 return false;
8386 }
8387 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
8388 {
8389 return false;
8390 }
8391 return true;
8392 }
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8363

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

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

◆ CanAutoPick()

bool Chara.CanAutoPick ( Card  c)
inline

Definition at line 4333 of file Chara.cs.

4334 {
4335 return true;
4336 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2373 of file Chara.cs.

2374 {
2375 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2376 {
2377 return false;
2378 }
2379 if (HasElement(1222))
2380 {
2381 return false;
2382 }
2383 return true;
2384 }
int MaxSummon
Definition: Chara.cs:728
override bool IsMultisize
Definition: Chara.cs:720
int CountMinions(Chara c)
Definition: Zone.cs:3777

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

Referenced by GoalCombat.Run().

◆ CanBloom()

bool Chara.CanBloom ( )
inline

Definition at line 8826 of file Chara.cs.

8827 {
8828 if (IsPC || base.isScaled || HasElement(1273))
8829 {
8830 return false;
8831 }
8832 if (!EClass.debug.godMode)
8833 {
8834 if (base.c_daysWithPC > 360)
8835 {
8836 return affinity.CanSleepBeside();
8837 }
8838 return false;
8839 }
8840 return true;
8841 }
bool CanSleepBeside()
Definition: Affinity.cs:79
Affinity affinity
Definition: Chara.cs:316
bool godMode
Definition: CoreDebug.cs:173

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

Referenced by WindowCharaMini.Refresh().

◆ CanDestroyPath()

bool Chara.CanDestroyPath ( )
inline

Definition at line 2482 of file Chara.cs.

2483 {
2484 if (!IsMultisize)
2485 {
2486 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2487 {
2488 return !(EClass._zone is Zone_Town);
2489 }
2490 return false;
2491 }
2492 return true;
2493 }

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

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

◆ CanDuplicate()

bool Chara.CanDuplicate ( )
inline

Definition at line 1792 of file Chara.cs.

1793 {
1794 if (EClass._zone.IsRegion || HasCondition<ConPoison>() || HasCondition<ConConfuse>() || HasCondition<ConDim>() || HasCondition<ConParalyze>() || HasCondition<ConSleep>() || HasCondition<ConBurning>() || HasCondition<ConFreeze>() || HasCondition<ConMiasma>() || corruption >= 100)
1795 {
1796 return false;
1797 }
1799 {
1800 return false;
1801 }
1802 string text = id;
1803 if (!(text == "mech_scarab"))
1804 {
1805 if (text == "spider_queen" && (pos.cell.light > 0 || pos.IsSunLit))
1806 {
1807 return false;
1808 }
1809 }
1810 else if (isSynced || pos.cell.light > 0 || (!EClass._map.IsIndoor && !pos.cell.HasRoof && !EClass.world.date.IsNight))
1811 {
1812 return false;
1813 }
1814 return true;
1815 }
byte light
Definition: Cell.cs:60
bool HasRoof
Definition: Cell.cs:648
int corruption
Definition: Chara.cs:379
int CurrentGeneSlot
Definition: Chara.cs:1097
bool IsNight
Definition: Date.cs:112
GamePrincipal principal
Definition: Game.cs:225
bool IsIndoor
Definition: Map.cs:131
bool IsSunLit
Definition: Point.cs:182

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

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

◆ CanEat()

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

Definition at line 7752 of file Chara.cs.

7753 {
7754 if (t.IsDecayed && !HasElement(480))
7755 {
7756 return false;
7757 }
7758 if (HasElement(1250) && !t.HasElement(710))
7759 {
7760 return false;
7761 }
7762 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7763 {
7764 return false;
7765 }
7766 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7767 {
7768 return t.trait.CanEat(this);
7769 }
7770 return false;
7771 }
CTAG
Definition: CTAG.cs:2
bool IsNegativeGift
Definition: Card.cs:2436
bool HasTag(CTAG tag)
Definition: Card.cs:2635
bool isEquipped
Definition: Thing.cs:17
virtual bool CanEat(Chara c)
Definition: Trait.cs:1004

References Card.c_isImportant, Trait.CanEat(), Card.HasElement(), 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 7924 of file Chara.cs.

7925 {
7926 return !body.IsTooHeavyToEquip(t);
7927 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 8294 of file Chara.cs.

8295 {
8296 foreach (ActList.Item item in ability.list.items)
8297 {
8298 if (item.act.id == 6630)
8299 {
8300 return true;
8301 }
8302 }
8303 return false;
8304 }
List< Item > items
Definition: ActList.cs:14
ActList list
Definition: CharaAbility.cs:12
CharaAbility ability
Definition: Chara.cs:426

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

◆ CanInteractTo() [1/2]

bool Chara.CanInteractTo ( Card  c)
inline

Definition at line 2589 of file Chara.cs.

2590 {
2591 return CanInteractTo(c.pos);
2592 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2589

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

2595 {
2596 if (!p.IsValid)
2597 {
2598 return false;
2599 }
2600 if (EClass._map.cells[p.x, p.z].blocked)
2601 {
2602 return true;
2603 }
2604 if (!IsMultisize)
2605 {
2606 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2607 if (EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2608 {
2609 return false;
2610 }
2611 if (p.x != pos.x && p.z != pos.z)
2612 {
2613 Cell[,] cells = EClass._map.cells;
2614 int x = p.x;
2615 int z = pos.z;
2616 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2617 if (cells[pos.x, pos.z].weights[num2] == 0)
2618 {
2619 return false;
2620 }
2621 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2622 if (cells[p.x, p.z].weights[num2] == 0)
2623 {
2624 return false;
2625 }
2626 x = pos.x;
2627 z = p.z;
2628 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2629 if (cells[pos.x, pos.z].weights[num2] == 0)
2630 {
2631 return false;
2632 }
2633 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2634 if (cells[p.x, p.z].weights[num2] == 0)
2635 {
2636 return false;
2637 }
2638 }
2639 }
2640 return true;
2641 }
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 4328 of file Chara.cs.

4329 {
4330 return true;
4331 }

Referenced by HotItemNoItem._TrySetAct().

◆ CanMoveTo()

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

Definition at line 2495 of file Chara.cs.

2496 {
2497 if (!p.IsValid)
2498 {
2499 return false;
2500 }
2501 int num = ((p.z >= pos.z) ? ((p.x > pos.x) ? 1 : ((p.z > pos.z) ? 2 : 3)) : 0);
2502 if (allowDestroyPath && CanDestroyPath())
2503 {
2504 if (!p.IsInBounds)
2505 {
2506 return false;
2507 }
2508 }
2509 else
2510 {
2511 if (EClass._map.cells[p.x, p.z].blocked || EClass._map.cells[pos.x, pos.z].weights[num] == 0)
2512 {
2513 return false;
2514 }
2515 if (p.x != pos.x && p.z != pos.z)
2516 {
2517 Cell[,] cells = EClass._map.cells;
2518 int x = p.x;
2519 int z = pos.z;
2520 int num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2521 if (cells[pos.x, pos.z].weights[num2] == 0)
2522 {
2523 return false;
2524 }
2525 if (cells[x, z].blocked)
2526 {
2527 return false;
2528 }
2529 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2530 if (cells[p.x, p.z].weights[num2] == 0)
2531 {
2532 return false;
2533 }
2534 x = pos.x;
2535 z = p.z;
2536 num2 = ((z >= pos.z) ? ((x > pos.x) ? 1 : ((z > pos.z) ? 2 : 3)) : 0);
2537 if (cells[pos.x, pos.z].weights[num2] == 0)
2538 {
2539 return false;
2540 }
2541 if (cells[x, z].blocked)
2542 {
2543 return false;
2544 }
2545 num2 = ((z >= p.z) ? ((x > p.x) ? 1 : ((z > p.z) ? 2 : 3)) : 0);
2546 if (cells[p.x, p.z].weights[num2] == 0)
2547 {
2548 return false;
2549 }
2550 }
2551 }
2552 if (IsPC)
2553 {
2554 if (IsEnemyOnPath(p))
2555 {
2556 return false;
2557 }
2558 }
2559 else if (p.HasChara && !IsMultisize && !CanReplace(p.FirstChara))
2560 {
2561 return false;
2562 }
2563 return true;
2564 }
bool IsEnemyOnPath(Point p, bool cancelAI=true)
Definition: Chara.cs:2566
Chara FirstChara
Definition: Point.cs:288
bool IsInBounds
Definition: Point.cs:104

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

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

◆ CanPick()

bool Chara.CanPick ( Card  c)
inline

Definition at line 4338 of file Chara.cs.

4339 {
4340 if (c.isDestroyed)
4341 {
4342 return false;
4343 }
4344 Card rootCard = c.GetRootCard();
4345 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
4346 {
4347 return false;
4348 }
4349 if (rootCard != this && things.IsFull(c.Thing))
4350 {
4351 return false;
4352 }
4353 return true;
4354 }
bool isDestroyed
Definition: Card.cs:76
bool ExistsOnMap
Definition: Card.cs:2123
Card GetRootCard()
Definition: Card.cs:3508

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

3338 {
3340 {
3341 return false;
3342 }
3343 if (IsPC)
3344 {
3345 return true;
3346 }
3347 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3348 {
3349 return false;
3350 }
3351 if (!IsHostile(c))
3352 {
3353 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3354 {
3355 return true;
3356 }
3357 if (DestDist < c.DestDist)
3358 {
3359 return true;
3360 }
3361 if (IsPCParty && !c.IsPCParty)
3362 {
3363 return true;
3364 }
3365 if (IsPCFaction && !c.IsPCParty)
3366 {
3367 return true;
3368 }
3369 }
3370 return false;
3371 }
bool IsPCFactionOrMinion
Definition: Card.cs:2312
bool isSummon
Definition: Card.cs:711
int c_uidMaster
Definition: Card.cs:1475
bool noMove
Definition: Card.cs:771
new TraitChara trait
Definition: Chara.cs:505
override bool IsPCParty
Definition: Chara.cs:629
int DestDist
Definition: Chara.cs:1012
bool IsHostile()
Definition: Chara.cs:6653
bool IsEscorted()
Definition: Chara.cs:2466
bool Equals(int _x, int _z)
Definition: Point.cs:960
virtual bool CanBePushed
Definition: TraitChara.cs:113

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

Referenced by _Move(), and CanMoveTo().

◆ CanRevive()

bool Chara.CanRevive ( )
inline

Definition at line 5204 of file Chara.cs.

5205 {
5206 return EClass.world.date.IsExpired(base.c_dateDeathLock);
5207 }
bool IsExpired(int time)
Definition: Date.cs:338

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

1245 {
1246 if (c == this)
1247 {
1248 return true;
1249 }
1250 if (!c.pos.IsValid)
1251 {
1252 return false;
1253 }
1254 if (c.isChara)
1255 {
1257 {
1258 return true;
1259 }
1260 if (c.isHidden && c != this && !canSeeInvisible)
1261 {
1262 return false;
1263 }
1264 }
1265 if (IsPC)
1266 {
1267 if (fov != null)
1268 {
1269 return fov.lastPoints.ContainsKey(c.pos.index);
1270 }
1271 return false;
1272 }
1273 return true;
1274 }
virtual Chara Chara
Definition: Card.cs:2108
Fov fov
Definition: Card.cs:58
virtual bool isChara
Definition: Card.cs:2121
bool isHidden
Definition: Card.cs:531
bool canSeeInvisible
Definition: Chara.cs:140
bool visibleWithTelepathy
Definition: Chara.cs:152
bool hasTelepathy
Definition: Chara.cs:142
Dictionary< int, byte > lastPoints
Definition: Fov.cs:36
int index
Definition: Point.cs:49

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

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

◆ CanSeeLos() [1/2]

◆ CanSeeLos() [2/2]

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

Definition at line 1285 of file Chara.cs.

1286 {
1287 if (dist == -1)
1288 {
1289 dist = pos.Distance(p);
1290 }
1291 if (dist > GetSightRadius())
1292 {
1293 return false;
1294 }
1295 if (IsPC)
1296 {
1297 if (fov != null)
1298 {
1299 return fov.lastPoints.ContainsKey(p.index);
1300 }
1301 return false;
1302 }
1303 return Los.IsVisible(pos, p);
1304 }
int GetSightRadius()
Definition: Card.cs:6625
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 1227 of file Chara.cs.

1228 {
1229 if (!p.IsValid || p.IsHidden)
1230 {
1231 return false;
1232 }
1233 if (IsPC)
1234 {
1235 if (fov != null)
1236 {
1237 return fov.lastPoints.ContainsKey(p.index);
1238 }
1239 return false;
1240 }
1241 return true;
1242 }
bool IsHidden
Definition: Point.cs:347

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

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

◆ CanSleep()

bool Chara.CanSleep ( )
inline

Definition at line 1325 of file Chara.cs.

1326 {
1327 if (EClass._zone.events.GetEvent<ZoneEventQuest>() != null)
1328 {
1329 return false;
1330 }
1331 if (!EClass.debug.godMode && sleepiness.GetPhase() == 0)
1332 {
1333 return stamina.GetPhase() <= 1;
1334 }
1335 return true;
1336 }
Stats sleepiness
Definition: Chara.cs:1182
Stats stamina
Definition: Chara.cs:1172
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 2207 of file Chara.cs.

2208 {
2209 ApplyJob(remove: true);
2210 base.c_idJob = idNew;
2211 _job = null;
2212 ApplyJob();
2213 if (IsPCC)
2214 {
2215 PCC.Get(pccData).Build();
2216 }
2217 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:2198
SourceJob.Row _job
Definition: Chara.cs:164

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

7173 {
7174 memberType = type;
7175 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2317 of file Chara.cs.

2318 {
2319 ApplyRace(remove: true);
2320 base.c_idRace = idNew;
2321 _race = null;
2322 ApplyRace();
2323 ChangeMaterial(source.defMat.IsEmpty(race.material));
2324 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2284
SourceRace.Row _race
Definition: Chara.cs:162

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

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

◆ ChangeRarity()

override void Chara.ChangeRarity ( Rarity  r)
inlinevirtual

Reimplemented from Card.

Definition at line 1440 of file Chara.cs.

1441 {
1442 if (r != base.rarity)
1443 {
1444 base.rarity = r;
1445 if (renderer != null && renderer.isSynced)
1446 {
1448 }
1449 base.hp = MaxHP;
1450 }
1451 }
void RefreshExtra()

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

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8933 of file Chara.cs.

8934 {
8935 if (IsPC && EClass.AdvMode)
8936 {
8937 SetNoGoal();
8938 return;
8939 }
8940 if (IsPCParty || base.noMove)
8941 {
8942 SetAI(new GoalIdle());
8943 return;
8944 }
8945 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8946 {
8947 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8948 if (goalFromTimeTable != null)
8949 {
8950 SetAI(goalFromTimeTable);
8951 if (goalFromTimeTable is GoalWork)
8952 {
8953 goalFromTimeTable.Tick();
8954 }
8955 return;
8956 }
8957 }
8958 if (goalList.index == -2)
8959 {
8961 }
8962 SetAI(goalList.Next());
8963 }
Status Tick()
Definition: AIAct.cs:366
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8965
GoalListType goalListType
Definition: Chara.cs:281
AIAct SetNoGoal()
Definition: Chara.cs:9057
bool IsHomeMember()
Definition: Chara.cs:6719
bool IsGuest()
Definition: Chara.cs:6744
GoalList goalList
Definition: Chara.cs:202
bool IsInHomeZone()
Definition: Chara.cs:6724
int hour
Definition: Date.cs:74
static bool AdvMode
Definition: EClass.cs:11
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 7459 of file Chara.cs.

7460 {
7461 if (map == null)
7462 {
7463 map = EClass._map;
7464 }
7465 foreach (Card item in map.props.installed.all)
7466 {
7467 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7468 {
7469 traitBed.RemoveHolder(this);
7470 }
7471 }
7472 }
PropsManager props
Definition: Map.cs:91
PropsInstalled installed
Definition: PropsManager.cs:8
PropSet all
Definition: Props.cs:8
bool IsHolder(Chara c)
Definition: TraitBed.cs:135

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

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

◆ ClearInventory()

void Chara.ClearInventory ( ClearInventoryType  type)
inline

Definition at line 8705 of file Chara.cs.

8706 {
8707 int num = 0;
8708 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8709 {
8710 Thing thing = things[num2];
8711 if (ShouldThrowAway(thing, type))
8712 {
8713 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8714 thing.Destroy();
8715 }
8716 }
8717 if (num > 0)
8718 {
8719 ModCurrency(num);
8720 if (type == ClearInventoryType.SellAtTown)
8721 {
8722 Msg.Say("party_sell", this, num.ToString() ?? "");
8723 PlaySound("pay");
8724 }
8725 }
8726 }
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:7500
int Num
Definition: Card.cs:159
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:8634

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

10551 {
10552 if (tempElements != null)
10553 {
10555 tempElements = null;
10556 }
10557 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountDebuff()

int Chara.CountDebuff ( )
inline

Definition at line 9622 of file Chara.cs.

9623 {
9624 int num = 0;
9625 foreach (Condition condition in conditions)
9626 {
9627 if (condition.Type == ConditionType.Debuff)
9628 {
9629 num++;
9630 }
9631 }
9632 return num;
9633 }

References BaseStats.Type.

Referenced by GoalCombat.TryUseAbility().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 10356 of file Chara.cs.

10357 {
10358 if (_historyFood == null)
10359 {
10360 return -1;
10361 }
10362 int num = 0;
10363 foreach (List<string> item in _historyFood)
10364 {
10365 foreach (string item2 in item)
10366 {
10367 if (item2 == food.id)
10368 {
10369 num++;
10370 }
10371 }
10372 }
10373 return num;
10374 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 8173 of file Chara.cs.

8174 {
8175 Chara chara = CharaGen.Create(id);
8176 chara.c_originalHostility = base.c_originalHostility;
8177 if (chara.c_originalHostility != 0)
8178 {
8179 chara.hostility = chara.c_originalHostility;
8180 }
8181 if (orgPos != null)
8182 {
8183 chara.orgPos = orgPos.Copy();
8184 }
8185 chara.pos = pos.Copy();
8186 chara.isImported = true;
8187 chara.c_editorTags = base.c_editorTags;
8188 chara.c_editorTraitVal = base.c_editorTraitVal;
8189 chara.c_idTrait = base.c_idTrait;
8190 chara.homeZone = homeZone;
8191 return chara;
8192 }
Hostility c_originalHostility
Definition: Card.cs:989
static Chara Create(string id, int lv=-1)
Definition: CharaGen.cs:17
Zone homeZone
Definition: Chara.cs:269
Point Copy()
Definition: Point.cs:491

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

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

◆ Cuddle()

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

Definition at line 6344 of file Chara.cs.

6345 {
6346 Talk("goodBoy");
6347 Say(headpat ? "headpat" : "cuddle", this, c);
6348 c.ShowEmo(Emo.love);
6349 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
6350 {
6351 c.MakeEgg();
6352 }
6353 if (headpat && this != c)
6354 {
6355 if (c.interest > 0)
6356 {
6357 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
6358 c.interest -= 20 + EClass.rnd(10);
6359 }
6361 {
6362 foreach (Chara member in party.members)
6363 {
6364 if (!member.IsPC && CanSeeLos(member))
6365 {
6366 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
6367 }
6368 }
6369 }
6370 }
6371 if (c.Evalue(1221) > 0)
6372 {
6373 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
6374 if (c.id == "hedgehog_ether")
6375 {
6376 ele = 922;
6377 }
6378 Say("reflect_thorne", this, c);
6379 DamageHP(10L, ele, Power, AttackSource.Condition);
6380 }
6381 }
Emo
Definition: Emo.cs:2
virtual int Power
Definition: Card.cs:2335
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6339
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5818
Element MainElement
Definition: Chara.cs:731
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:8095
int interest
Definition: Chara.cs:319
Religion faith
Definition: Chara.cs:441
static Element Void
Definition: ELEMENT.cs:243
ReligionManager religions
Definition: Game.cs:159
ReligionMoonShadow MoonShadow

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

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

◆ Cure()

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

Definition at line 9685 of file Chara.cs.

9686 {
9687 bool flag = state == BlessedState.Blessed;
9688 switch (type)
9689 {
9690 case CureType.Heal:
9691 case CureType.Prayer:
9692 CureCondition<ConFear>();
9693 CureCondition<ConBlind>(2 * p / 100 + 5);
9694 CureCondition<ConPoison>(5 * p / 100 + 5);
9695 CureCondition<ConConfuse>(10 * p / 100 + 10);
9696 CureCondition<ConDim>(p / 100 + 5);
9697 CureCondition<ConBleed>(2 * p / 100 + 10);
9698 if (flag)
9699 {
9700 SAN.Mod(-15);
9701 }
9702 break;
9703 case CureType.CureBody:
9704 CureCondition<ConBlind>(5 * p / 100 + 15);
9705 CureCondition<ConPoison>(10 * p / 100 + 15);
9706 CureCondition<ConBleed>(5 * p / 100 + 20);
9707 CureTempElements(p, body: true, mind: false);
9708 break;
9709 case CureType.CureMind:
9710 CureCondition<ConFear>();
9711 CureCondition<ConDim>(3 * p / 100 + 10);
9712 CureTempElements(p, body: false, mind: true);
9713 break;
9714 case CureType.Sleep:
9715 {
9716 for (int num2 = conditions.Count - 1; num2 >= 0; num2--)
9717 {
9718 Condition condition2 = conditions[num2];
9719 if (!(condition2 is ConSleep) && !(condition2 is ConFaint))
9720 {
9721 if (condition2.isPerfume)
9722 {
9723 condition2.Mod(-1, force: true);
9724 }
9725 else if (condition2.Type == ConditionType.Bad || condition2.Type == ConditionType.Debuff)
9726 {
9727 condition2.Kill();
9728 }
9729 }
9730 }
9731 CureCondition<ConWait>();
9732 CureCondition<ConDisease>((EClass.rnd(20) + 10) * p / 100);
9733 bool flag2 = HasCondition<ConAnorexia>();
9734 base.c_vomit -= (flag2 ? 3 : 2) * p / 100;
9735 if (base.c_vomit < 0)
9736 {
9737 base.c_vomit = 0;
9738 if (flag2)
9739 {
9740 RemoveCondition<ConAnorexia>();
9741 }
9742 }
9743 break;
9744 }
9745 case CureType.HealComplete:
9746 case CureType.Death:
9747 case CureType.Jure:
9748 case CureType.Boss:
9749 case CureType.Unicorn:
9750 {
9751 CureTempElements(p * 100, body: true, mind: true);
9752 for (int num = conditions.Count - 1; num >= 0; num--)
9753 {
9754 Condition condition = conditions[num];
9755 if (condition is ConAnorexia && type != CureType.Death && type != CureType.Unicorn && type != CureType.Jure)
9756 {
9757 continue;
9758 }
9759 switch (condition.Type)
9760 {
9761 case ConditionType.Bad:
9762 case ConditionType.Debuff:
9763 case ConditionType.Disease:
9764 condition.Kill();
9765 continue;
9766 case ConditionType.Stance:
9767 if (type == CureType.Death)
9768 {
9769 condition.Kill();
9770 continue;
9771 }
9772 break;
9773 }
9774 if (type == CureType.Death && condition.isPerfume)
9775 {
9776 condition.Kill();
9777 }
9778 }
9779 CureCondition<ConWait>();
9780 CureCondition<ConSleep>();
9781 switch (type)
9782 {
9783 case CureType.Death:
9784 case CureType.Boss:
9785 case CureType.Unicorn:
9786 SAN.Mod(-20);
9787 RemoveCondition<ConBrightnessOfLife>();
9788 RemoveCondition<ConDeathSentense>();
9789 break;
9790 case CureType.Jure:
9791 SAN.Mod(-999);
9792 if (HasElement(1206))
9793 {
9794 SetFeat(1206, 0, msg: true);
9795 }
9796 RemoveCondition<ConBrightnessOfLife>();
9797 RemoveCondition<ConDeathSentense>();
9798 break;
9799 case CureType.CureBody:
9800 case CureType.CureMind:
9801 case CureType.Prayer:
9802 break;
9803 }
9804 break;
9805 }
9806 }
9807 }
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:10520
Stats SAN
Definition: Chara.cs:1184
void Kill(bool silent=false)
Definition: Condition.cs:91
virtual void Mod(int a)
Definition: Stats.cs:135

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

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

◆ CureCondition< T >()

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

Definition at line 9635 of file Chara.cs.

9635 : Condition
9636 {
9637 T condition = GetCondition<T>();
9638 if (condition != null)
9639 {
9640 condition.value -= v;
9641 if (condition.value <= 0)
9642 {
9643 condition.Kill();
9644 }
9645 }
9646 }
override T GetCondition< T >()
Definition: Chara.cs:9648

◆ CureHost()

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

Definition at line 9672 of file Chara.cs.

9673 {
9674 if (parasite != null)
9675 {
9676 parasite.Cure(type, p, state);
9677 }
9678 if (ride != null)
9679 {
9680 ride.Cure(type, p, state);
9681 }
9682 Cure(type, p, state);
9683 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9685

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 10520 of file Chara.cs.

10521 {
10522 if (tempElements != null)
10523 {
10524 if (body)
10525 {
10527 }
10528 if (mind)
10529 {
10531 }
10532 }
10533 void Cure(int[] eles)
10534 {
10535 foreach (int ele in eles)
10536 {
10537 if (tempElements == null)
10538 {
10539 break;
10540 }
10541 Element element = tempElements.GetElement(ele);
10542 if (element != null && element.vBase < 0)
10543 {
10544 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
10545 }
10546 }
10547 }
10548 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:10428
Element GetElement(string alias)
static int[] List_Body
Definition: ELEMENT.cs:249
static int[] List_Mind
Definition: ELEMENT.cs:251

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

10487 {
10488 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
10489 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 10474 of file Chara.cs.

10475 {
10476 if (body)
10477 {
10478 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
10479 }
10480 if (mind)
10481 {
10482 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
10483 }
10484 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10486

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3226 of file Chara.cs.

3227 {
3228 bool broke = false;
3229 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
3230 {
3231 if (_p.IsValid)
3232 {
3233 if (_p.HasBlock)
3234 {
3235 EClass._map.MineBlock(_p, recoverBlock: false, this);
3236 if (_p.HasObj)
3237 {
3238 EClass._map.MineObj(_p, null, this);
3239 }
3240 broke = true;
3241 }
3242 if (_p.HasObj && _p.IsBlocked)
3243 {
3244 EClass._map.MineObj(_p, null, this);
3245 broke = true;
3246 }
3247 _p.Things.ForeachReverse(delegate(Thing t)
3248 {
3249 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
3250 {
3251 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3252 {
3253 t.Destroy();
3254 }
3255 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
3256 {
3257 t.SetPlaceState(PlaceState.roaming);
3258 }
3259 }
3260 });
3261 }
3262 });
3263 if (broke)
3264 {
3265 Msg.Say("stomp");
3266 Shaker.ShakeCam("stomp");
3267 }
3268 }
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool IsUnique
Definition: Card.cs:2129
void ForeachMultiSize(int w, int h, Action< Point, bool > action)
Definition: Point.cs:1385
bool IsBlocked
Definition: Point.cs:363
Definition: Shaker.cs:5
static void ShakeCam(string id="default", float magnitude=1f)
Definition: Shaker.cs:25
virtual bool IsBlockPath
Definition: Trait.cs:54
virtual bool IsDoor
Definition: Trait.cs:58

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

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

◆ Die()

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

Reimplemented from Card.

Definition at line 5399 of file Chara.cs.

5400 {
5401 combatCount = 0;
5402 if (isDead)
5403 {
5404 return;
5405 }
5406 if (host != null)
5407 {
5408 base.hp = -1;
5409 if ((uint)(attackSource - 17) > 1u)
5410 {
5411 AddCondition<ConFaint>(200, force: true);
5412 return;
5413 }
5414 ActRide.Unride(host, this);
5415 }
5416 bool isInActiveZone = IsInActiveZone;
5417 if (isInActiveZone)
5418 {
5419 if (id == "putty" && origin != null && origin.IsPCParty)
5420 {
5422 }
5423 if (IsPC)
5424 {
5426 }
5427 if (base.isSummon)
5428 {
5429 if (id == "tsunami")
5430 {
5431 pos.PlaySound("water");
5432 }
5433 else
5434 {
5435 Say("summon_vanish", this);
5436 pos.PlayEffect("vanish");
5437 pos.PlaySound("vanish");
5438 }
5439 Destroy();
5440 return;
5441 }
5442 if ((uint)(attackSource - 17) <= 1u)
5443 {
5444 if (attackSource == AttackSource.Euthanasia && trait is TraitLittleOne)
5445 {
5446 MakeEgg();
5447 if (IsPCFaction)
5448 {
5450 }
5451 }
5452 PlayEffect("revive");
5453 PlaySound("chime_angel");
5454 }
5455 else
5456 {
5457 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
5458 .Emit(50);
5459 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
5460 PlaySound(base.material.GetSoundDead(source));
5461 }
5464 ClearFOV();
5465 }
5466 if (base.hp >= 0)
5467 {
5468 base.hp = -1;
5469 }
5470 string text = "";
5471 "dead_in".langGame(EClass._zone.Name);
5472 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
5473 if (LangGame.Has("dead_" + attackSource))
5474 {
5475 text = "dead_" + attackSource;
5476 }
5477 else
5478 {
5479 if (e != Element.Void && e != null)
5480 {
5481 text = "dead_" + e.source.alias;
5482 }
5483 if (text == "" || !LangGame.Has(text))
5484 {
5485 text = "dead";
5486 }
5487 }
5488 if (IsPC)
5489 {
5490 EClass._zone.isDeathLocation = true;
5491 string s = ((origin == null) ? text : "dead_by");
5493 if (attackSource == AttackSource.Wrath)
5494 {
5496 }
5497 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
5499 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
5500 {
5501 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
5502 }
5503 AI_PlayMusic.keepPlaying = false;
5504 }
5505 if (isInActiveZone)
5506 {
5507 if (attackSource == AttackSource.DeathSentence || attackSource == AttackSource.Euthanasia)
5508 {
5509 Msg.Say("goto_heaven", this);
5510 }
5511 else
5512 {
5513 if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5514 {
5515 Msg.Say(text, this, "", text2);
5516 }
5517 string text3 = TalkTopic("dead");
5518 if (!text3.IsEmpty())
5519 {
5520 text3 = text3.StripBrackets();
5521 }
5522 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5523 if (!IsPC && flag)
5524 {
5525 MakeGrave(text3);
5526 }
5527 Msg.SetColor();
5528 SpawnLoot(origin);
5529 }
5530 if (IsPC)
5531 {
5533 }
5534 }
5535 if (IsPCFaction)
5536 {
5537 if (homeBranch != null)
5538 {
5539 homeBranch.Log(text, this, "");
5540 }
5541 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5542 if (!IsPC)
5543 {
5544 if (EClass.player.stats.allyDeath == 0)
5545 {
5546 Tutorial.Reserve("death_pet");
5547 }
5549 }
5550 }
5551 if (id == "mandrake" || HasElement(488))
5552 {
5553 Say("a_scream", this);
5554 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5555 }
5556 daysStarved = 0;
5557 isDead = true;
5559 enemy = null;
5560 _cooldowns = null;
5561 base.isSale = false;
5562 SetInt(70);
5563 EClass._map.props.sales.Remove(this);
5564 Cure(CureType.Death);
5565 SetAI(new NoGoal());
5567 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5568 {
5569 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5570 }
5571 if (IsPC)
5572 {
5573 EClass.player.returnInfo = null;
5574 EClass.player.uidLastTravelZone = 0;
5575 foreach (Chara chara3 in EClass._map.charas)
5576 {
5577 if (chara3.IsHostile())
5578 {
5579 chara3.hostility = chara3.OriginalHostility;
5580 }
5581 if (chara3.enemy == EClass.pc)
5582 {
5583 chara3.enemy = null;
5584 }
5585 }
5586 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5587 {
5588 EClass.player.preventDeathPenalty = true;
5589 }
5590 }
5591 else
5592 {
5593 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5594 if (currentZone is Zone_LittleGarden && id == "littleOne")
5595 {
5596 flag2 = false;
5597 }
5598 if (flag2)
5599 {
5600 EClass._map.deadCharas.Add(this);
5601 }
5602 currentZone.RemoveCard(this);
5603 }
5604 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5605 {
5606 int a = -10;
5607 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5608 {
5609 a = -5;
5610 }
5611 ModAffinity(EClass.pc, a, show: false);
5612 string text4 = id;
5613 if (!(text4 == "quru"))
5614 {
5615 if (text4 == "corgon")
5616 {
5617 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5618 }
5619 }
5620 else
5621 {
5622 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5623 }
5624 }
5625 if (origin != null)
5626 {
5627 if (origin.IsPCParty || origin.IsPCPartyMinion)
5628 {
5629 int num = 0;
5630 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5631 {
5632 num = -5;
5633 }
5634 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5635 {
5636 EClass.pc.Say("killcat");
5637 num = -1;
5638 }
5639 if (EClass.pc.party.HasElement(1563) && num < 0)
5640 {
5641 num = num * 30 / 100;
5642 }
5643 if (num != 0)
5644 {
5645 EClass.player.ModKarma(num);
5646 }
5647 }
5648 if (origin == EClass.pc)
5649 {
5650 EClass.pc.faith.Revelation("kill", 10);
5651 }
5652 else if (origin.IsPCFaction)
5653 {
5654 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5655 origin.Chara.ShowEmo(Emo.love);
5656 }
5657 }
5658 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5659 {
5660 EClass.player.doneBackers.Add(base.sourceBacker.id);
5661 }
5662 if (base.IsPCFactionOrMinion)
5663 {
5665 {
5666 Msg.Say("abort_allyDead");
5667 }
5668 }
5670 {
5671 Msg.Say("abort_enemyDead");
5672 }
5673 if (IsPCParty && !IsPC)
5674 {
5676 base.c_wasInPcParty = true;
5677 EClass.pc.Say("allyDead");
5678 }
5679 switch (id)
5680 {
5681 case "littleOne":
5682 if (attackSource != AttackSource.Euthanasia && !IsPCFaction)
5683 {
5684 EClass.player.flags.little_killed = true;
5686 }
5687 break;
5688 case "big_daddy":
5689 if (!IsPCFaction)
5690 {
5691 Chara chara = CharaGen.Create("littleOne");
5692 EClass._zone.AddCard(chara, pos.Copy());
5693 Msg.Say("little_pop");
5695 }
5696 break;
5697 case "shark_sister":
5698 if (!IsPCFaction)
5699 {
5700 Chara t = CharaGen.Create("sister_shark");
5701 EClass._zone.AddCard(t, pos.Copy());
5702 Msg.Say("shark_pop");
5703 }
5704 break;
5705 }
5706 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5707 {
5708 Chara chara2 = CharaGen.CreateFromFilter("c_plant", base.LV);
5709 EClass._zone.AddCard(chara2, pos.Copy());
5710 if (chara2.LV < base.LV)
5711 {
5712 chara2.SetLv(base.LV);
5713 }
5714 chara2.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5715 Msg.Say("plant_pop", this, chara2);
5716 }
5719 }
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:492
static void Unride(Chara host, Chara mount, bool talk=true)
Definition: ActRide.cs:107
Chara Find(string id)
Definition: CardManager.cs:20
GlobalCharaList globalCharas
Definition: CardManager.cs:46
void RefreshSprite()
virtual void RefreshStateIcon()
void AddBlood(int a=1, int id=-1)
Definition: Card.cs:6178
virtual bool IsPCParty
Definition: Card.cs:2189
Card SetLv(int a)
Definition: Card.cs:2977
ICardParent parent
Definition: Card.cs:56
virtual bool IsPCPartyMinion
Definition: Card.cs:2193
void ClearFOV()
Definition: Card.cs:6794
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6405
virtual bool IsPCFaction
Definition: Card.cs:2309
void SpawnLoot(Card origin)
Definition: Card.cs:5200
int LV
Definition: Card.cs:387
virtual bool isSynced
Definition: Card.cs:2125
static Chara CreateFromFilter(string id, int lv=-1, int levelRange=-1)
Definition: CharaGen.cs:22
int combatCount
Definition: Chara.cs:116
bool IsHuman
Definition: Chara.cs:893
int daysStarved
Definition: Chara.cs:331
void MakeMinion(Chara _master, MinionType type=MinionType.Default)
Definition: Chara.cs:2395
string NameBraced
Definition: Chara.cs:516
void ClearTempElements()
Definition: Chara.cs:10550
string TalkTopic(string topic="calm")
Definition: Chara.cs:7106
void TryDropBossLoot()
Definition: Chara.cs:5721
bool IsLocalChara
Definition: Chara.cs:855
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:852
void TryDropCarryOnly()
Definition: Chara.cs:4660
void MakeGrave(string lastword)
Definition: Chara.cs:5316
UD_String_MatData matColors
static ColorProfile Colors
Definition: EClass.cs:39
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:178
ConfigAutoCombat autoCombat
Definition: Game.cs:94
CardManager cards
Definition: Game.cs:156
static bool Has(string id)
Definition: LangGame.cs:46
List< Chara > deadCharas
Definition: Map.cs:46
static ThirstPersonInfo thirdPerson1
Definition: Msg.cs:6
bool HasElement(int ele, bool excludePC=false)
Definition: Party.cs:198
void RemoveMember(Chara c)
Definition: Party.cs:102
int allyDeath
Definition: Player.cs:111
void ModKarma(int a)
Definition: Player.cs:2566
Stats stats
Definition: Player.cs:1042
int little_dead
Definition: Player.cs:952
HashSet< int > doneBackers
Definition: Player.cs:1099
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2460
string deathMsg
Definition: Player.cs:1211
void TalkWitnesses(Chara criminal, string idTalk, int radius=4, WitnessType type=WitnessType.everyone, Func< Chara, bool > talkIf=null, int chance=3)
Definition: Point.cs:815
List< Card > sales
Definition: PropsManager.cs:14
static Religion recentWrath
Definition: Religion.cs:22
void Revelation(string idTalk, int chance=100)
Definition: Religion.cs:146
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)
void RefreshDeathSentense()
Definition: Zone.cs:1115
virtual bool HasLaw
Definition: Zone.cs:231
void RemoveCard(Card t)
Definition: Zone.cs:2034
void ResetHostility()
Definition: Zone.cs:2722
ZoneInstance instance
Definition: Zone.cs:55

References EClass._map, EClass._zone, ConfigAutoCombat.abortOnAllyDead, ConfigAutoCombat.abortOnEnemyDead, Zone.AddCard(), AddCondition(), Player.Stats.allyDeath, Game.Config.autoCombat, Game.cards, Map.charas, EClass.Colors, Game.config, CharaGen.Create(), CharaGen.CreateFromFilter(), Map.deadCharas, Player.deathMsg, Debug, Player.doneBackers, enemy, Zone.events, faith, ThingContainer.Find(), CardManager.GlobalCharaList.Find(), EClass.game, Effect.Get(), Steam.GetAchievement(), 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, Zone.RefreshDeathSentense(), Party.RemoveMember(), FactionBranch.RemoveMemeber(), Tutorial.Reserve(), Zone.ResetHostility(), Religion.Revelation(), EClass.rnd(), PropsManager.sales, Msg.Say(), Card.Say(), WidgetPopText.Say(), ThirstPersonInfo.Set(), Msg.SetColor(), Card.SetLv(), AI_Slaughter.slaughtering, CellEffect.source, Player.stats, Card.things, Msg.thirdPerson1, Player.TryAbortAutoCombat(), ActRide.Unride(), and Element.Void.

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

◆ DiminishTempElements()

void Chara.DiminishTempElements ( int  a = 1)
inline

Definition at line 10505 of file Chara.cs.

10506 {
10507 if (tempElements == null)
10508 {
10509 return;
10510 }
10511 foreach (Element item in tempElements.dict.Values.ToList())
10512 {
10513 if (item.vBase > 0)
10514 {
10515 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
10516 }
10517 }
10518 }

References ElementContainer.dict, and item.

◆ Divorce()

void Chara.Divorce ( Chara  c)
inline

Definition at line 8247 of file Chara.cs.

8248 {
8249 if (base.c_love != null)
8250 {
8251 base.c_love.dateMarriage = 0;
8252 base.c_love.dateWedding = 0;
8253 SetFeat(1275, 0);
8255 }
8256 }
int divorced
Definition: Player.cs:132

References Player.Stats.divorced, EClass.player, and Player.stats.

◆ DoAI()

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

Definition at line 6332 of file Chara.cs.

6333 {
6334 SetAI(new DynamicAIAct("", delegate
6335 {
6336 onPerform();
6337 return true;
6338 })
6339 {
6340 wait = wait
6341 });
6342 }

◆ DoHostileAction()

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

Definition at line 6472 of file Chara.cs.

6473 {
6474 if (_tg == null || !_tg.isChara)
6475 {
6476 return;
6477 }
6478 Chara chara = _tg.Chara;
6479 if (chara.IsPC)
6480 {
6481 EClass.pc.combatCount = 10;
6482 }
6483 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
6484 {
6485 return;
6486 }
6487 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
6488 {
6489 chara.Say("frown", this, chara);
6490 }
6491 else
6492 {
6493 if (EClass._zone.IsRegion)
6494 {
6495 return;
6496 }
6497 if (IsPC)
6498 {
6499 if (chara.IsFriendOrAbove() && !immediate)
6500 {
6501 chara.Say("frown", this, chara);
6502 chara.ShowEmo(Emo.sad);
6503 chara.hostility = Hostility.Neutral;
6504 return;
6505 }
6506 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
6507 {
6508 bool flag = chara.id == "fanatic";
6509 if (EClass.rnd(4) == 0 || flag)
6510 {
6511 chara.Say("callHelp", chara);
6512 chara.CallHelp(this, flag);
6513 }
6514 }
6515 if (chara.hostility <= Hostility.Enemy)
6516 {
6517 foreach (Chara member in EClass.pc.party.members)
6518 {
6519 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
6520 {
6521 member.SetEnemy(chara);
6522 }
6523 }
6524 }
6525 }
6526 else if (chara.IsPC && hostility <= Hostility.Enemy)
6527 {
6528 foreach (Chara member2 in EClass.pc.party.members)
6529 {
6530 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
6531 {
6532 member2.SetEnemy(this);
6533 }
6534 }
6535 }
6536 if (chara.calmCheckTurn <= 0 || IsPC)
6537 {
6538 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
6539 }
6540 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
6541 {
6542 GoHostile(chara);
6543 chara.GoHostile(this);
6544 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
6545 {
6546 Thing t = ThingGen.Create("49");
6547 ActThrow.Throw(chara, pos, t);
6548 Act.TC = chara;
6549 }
6550 }
6551 }
6552 }
static EffectIRenderer Throw(Card c, Point p, Thing t, ThrowMethod method=ThrowMethod.Default, float failChance=0f)
Definition: ActThrow.cs:97
override bool IsAliveInCurrentZone
Definition: Chara.cs:563
override bool IsPCPartyMinion
Definition: Chara.cs:653
int calmCheckTurn
Definition: Chara.cs:118
bool CanSee(Card c)
Definition: Chara.cs:1244
override bool IsPCFactionMinion
Definition: Chara.cs:669
bool IsFriendOrAbove()
Definition: Chara.cs:6749
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6423
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:6554
Hostility hostility
Definition: Chara.cs:293
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53

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

Referenced by Card.ApplyElementEffect(), ActMelee.Attack(), Point.CallGuard(), ActEffect.DamageEle(), ActTelekinesis.DoDamage(), DramaOutcome.event_az3(), DramaOutcome.fiama_starter_gift(), AI_Fuck.Finish(), ActRanged.Perform(), ActSummonGuard.Perform(), ActWater.Perform(), ActEffect.Proc(), ConTransmuteMimic.RevealMimicry(), AI_AttackHome.Run(), AI_Fuck.Run(), AI_Idle.Run(), GoalSiege.Run(), and ActThrow.Throw().

◆ Drink()

void Chara.Drink ( Card  t)
inline

Definition at line 5193 of file Chara.cs.

5194 {
5195 Say("drink", this, t.Duplicate(1));
5196 Say("quaff");
5197 PlaySound("drink");
5198 hunger.Mod(-2);
5199 t.ModNum(-1);
5200 t.trait.OnDrink(this);
5201 _ = IsPC;
5202 }
Thing Duplicate(int num)
Definition: Card.cs:3526
void ModNum(int a, bool notify=true)
Definition: Card.cs:3597
Stats hunger
Definition: Chara.cs:1168
virtual void OnDrink(Chara c)
Definition: Trait.cs:1018

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

4673 {
4674 if (held == null)
4675 {
4676 return null;
4677 }
4678 if (IsPC)
4679 {
4680 WidgetHotbar.dirtyCurrentItem = true;
4682 }
4683 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4684 card.OnLand();
4685 if (card.trait.CanOnlyCarry)
4686 {
4687 card.SetPlaceState(PlaceState.installed);
4688 }
4689 return card;
4690 }
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 4692 of file Chara.cs.

4693 {
4694 if (t.c_isImportant)
4695 {
4696 Msg.Say("markedImportant");
4697 return;
4698 }
4699 if (!t.trait.CanBeDropped)
4700 {
4701 Msg.Say("cantDrop", t);
4702 return;
4703 }
4704 if (t.trait is TraitAbility)
4705 {
4706 SE.Trash();
4707 t.Destroy();
4708 return;
4709 }
4710 Msg.Say("dropItem", t.Name);
4711 t.ignoreAutoPick = true;
4712 PlaySound("drop");
4713 EClass._zone.AddCard(t, pos);
4714 if (t.trait.CanOnlyCarry)
4715 {
4716 t.Install();
4717 }
4718 }
Card Install()
Definition: Card.cs:3823
virtual bool CanBeDropped
Definition: Trait.cs:313

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(), InvOwner.OnDrag(), and CoreDebug.SpawnFigure().

◆ Duplicate()

Chara Chara.Duplicate ( )
inline

Definition at line 1817 of file Chara.cs.

1818 {
1819 Chara chara = CharaGen.Create(id);
1820 chara.mana.value = mana.value;
1821 chara.stamina.value = stamina.value;
1822 foreach (KeyValuePair<int, Element> item in elements.dict)
1823 {
1824 if (item.Key != 1275)
1825 {
1826 Element orCreateElement = chara.elements.GetOrCreateElement(item.Key);
1827 orCreateElement.vBase = item.Value.ValueWithoutLink - orCreateElement.vSource;
1828 }
1829 }
1830 chara.SetFaith(faith);
1831 chara.bio = IO.DeepCopy(bio);
1832 chara.LV = base.LV;
1833 chara.c_daysWithGod = base.c_daysWithGod;
1834 chara.RefreshFaithElement();
1835 chara.hp = (int)Mathf.Clamp((float)chara.MaxHP * ((float)base.hp / (float)MaxHP) * 0.99f, 0f, chara.MaxHP);
1836 chara.isCopy = true;
1837 chara.isScaled = base.isScaled;
1838 if (HaveFur())
1839 {
1840 chara.c_fur = -1;
1841 }
1842 return chara;
1843 }
bool HaveFur()
Definition: Card.cs:8105
Stats mana
Definition: Chara.cs:1180
void RefreshFaithElement()
Definition: Chara.cs:10385
void SetFaith(string id)
Definition: Chara.cs:1739
Element GetOrCreateElement(Element ele)
int vSource
Definition: ELEMENT.cs:267
Definition: IO.cs:11
virtual int value
Definition: Stats.cs:56

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

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

◆ EnhanceTempElement()

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

Definition at line 10500 of file Chara.cs.

10501 {
10502 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
10503 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 10491 of file Chara.cs.

10492 {
10493 int[] array = (body ? Element.List_Body : Element.List_Mind);
10494 foreach (int ele in array)
10495 {
10496 EnhanceTempElement(ele, p, onlyRenew);
10497 }
10498 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10500

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 5170 of file Chara.cs.

5171 {
5172 int slot = EClass.sources.categories.map[s].slot;
5173 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
5174 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
5175 {
5176 SetEQQuality();
5177 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
5178 AddThing(thing);
5179 if (bodySlot != null && !body.Equip(thing, bodySlot))
5180 {
5181 thing.Destroy();
5182 }
5183 }
5184 }
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3180
bool Equip(Thing thing, BodySlot slot=null, bool msg=true)
Definition: CharaBody.cs:194
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Definition: CharaBody.cs:369
void SetEQQuality()
Definition: Chara.cs:5117
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 5150 of file Chara.cs.

5151 {
5152 SetEQQuality();
5153 if (r != Rarity.Random)
5154 {
5155 CardBlueprint.current.rarity = r;
5156 }
5157 Thing thing = ThingGen.Create(s, mat, base.LV);
5158 if (body.GetSlot(thing, onlyEmpty: true) == null)
5159 {
5160 return thing;
5161 }
5162 AddThing(thing);
5163 if (!body.Equip(thing))
5164 {
5165 thing.Destroy();
5166 }
5167 return thing;
5168 }

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

5187 {
5188 SetEQQuality();
5189 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
5190 AddThing(t);
5191 }
Thing SetNum(int a)
Definition: Card.cs:3577

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 6243 of file Chara.cs.

6244 {
6245 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
6246 {
6247 return 25 + Evalue(226) * 125 / 100;
6248 }
6249 return Evalue(226);
6250 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3558 of file Chara.cs.

3559 {
3560 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3561 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3562 zone = zone ?? EClass.world.region;
3564 {
3565 state = ZoneTransition.EnterState.Fall,
3566 x = pos.x,
3567 z = pos.z
3568 });
3569 }
void MoveZone(string alias)
Definition: Chara.cs:3373
int lv
Definition: Spatial.cs:142
Zone FindZone(int lv)
Definition: Spatial.cs:728
Region region
Definition: World.cs:23
Definition: Zone.cs:12
Zone GetTopZone()
Definition: Zone.cs:1950

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

7976 {
7977 TraitToolRange ranged = weapon.trait as TraitToolRange;
7978 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7979 if (thing != null)
7980 {
7981 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7982 if (thing2 != null)
7983 {
7984 return thing2;
7985 }
7986 }
7987 return things.Find((Thing t) => ranged.IsAmmo(t));
7988 }
bool IsAmmo
Definition: Card.cs:2287
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 7474 of file Chara.cs.

7475 {
7476 foreach (Card item in EClass._map.props.installed.all)
7477 {
7478 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7479 {
7480 return traitBed;
7481 }
7482 }
7483 return null;
7484 }

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

7707 {
7708 Thing result = null;
7709 int num = -1;
7710 if (IsPC)
7711 {
7712 return null;
7713 }
7714 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7715 {
7716 int num2 = CountNumEaten(item);
7717 int num3 = 100 - num2 + (item.HasElement(757) ? 10 : 0);
7718 if (num3 > num)
7719 {
7720 result = item;
7721 num = num3;
7722 }
7723 }
7724 return result;
7725 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7752
int CountNumEaten(Thing food)
Definition: Chara.cs:10356
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 2457 of file Chara.cs.

2458 {
2459 if (IsMinion)
2460 {
2461 master = EClass._map.FindChara(base.c_uidMaster);
2462 }
2463 return master;
2464 }
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 6638 of file Chara.cs.

6639 {
6640 for (int i = 0; i < EClass._map.charas.Count; i++)
6641 {
6642 Chara chara = EClass._map.charas[i];
6643 if (chara != this && chara != enemy && chara.mimicry == null && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6644 {
6645 DoHostileAction(chara);
6646 enemy = chara;
6647 return true;
6648 }
6649 }
6650 return false;
6651 }
ConTransmuteMimic mimicry
Definition: Chara.cs:106
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6472

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

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

◆ FindNewEnemy()

bool Chara.FindNewEnemy ( )
inline

Definition at line 6565 of file Chara.cs.

6566 {
6567 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
6568 {
6569 return false;
6570 }
6571 if (enemy != null && !enemy.IsAliveInCurrentZone)
6572 {
6573 enemy = null;
6574 }
6575 if (enemy != null)
6576 {
6577 return false;
6578 }
6579 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
6580 {
6581 return false;
6582 }
6583 if (mimicry != null)
6584 {
6585 return false;
6586 }
6587 bool flag = enemy != null || ai is GoalCombat;
6588 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6589 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
6590 bool flag3 = !IsPCParty;
6591 Chara chara = null;
6592 int num2 = 9999;
6593 for (int i = 0; i < EClass._map.charas.Count; i++)
6594 {
6595 Chara chara2 = EClass._map.charas[i];
6596 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2) || chara2.mimicry != null)
6597 {
6598 continue;
6599 }
6600 int num3 = Dist(chara2);
6601 int num4 = GetSightRadius() + (flag ? 1 : 0);
6602 if (num3 > num4)
6603 {
6604 continue;
6605 }
6606 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
6607 {
6608 if (this == pos.FirstChara)
6609 {
6610 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6611 }
6612 stealthSeen++;
6613 }
6614 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!base.IsPCFactionOrMinion || EClass.pc.ai.ShouldAllyAttack(chara2)))
6615 {
6616 if (!IsPCParty)
6617 {
6618 DoHostileAction(chara2);
6619 enemy = chara2;
6620 return true;
6621 }
6622 if (num3 < num2)
6623 {
6624 num2 = num3;
6625 chara = chara2;
6626 }
6627 }
6628 }
6629 if (chara != null)
6630 {
6631 DoHostileAction(chara);
6632 enemy = chara;
6633 return true;
6634 }
6635 return false;
6636 }
virtual bool ShouldAllyAttack(Chara tg)
Definition: AIAct.cs:134
int stealthSeen
Definition: Chara.cs:190
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 8090 of file Chara.cs.

8091 {
8092 return FindBed()?.owner.pos.cell.room;
8093 }
TraitBed FindBed()
Definition: Chara.cs:7474

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

◆ GainAbility()

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

Definition at line 10271 of file Chara.cs.

10272 {
10273 Element orCreateElement = elements.GetOrCreateElement(ele);
10274 if (orCreateElement.ValueWithoutLink == 0)
10275 {
10276 elements.ModBase(orCreateElement.id, 1);
10277 }
10278 if (orCreateElement is Spell)
10279 {
10280 int num = EClass.curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
10281 int num2 = origin?.Evalue(765) ?? 0;
10282 num = num * (100 - num2) / 100;
10283 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
10284 a = Mathf.Max(1, EClass.rndHalf(a));
10285 if (orCreateElement.source.charge == 1)
10286 {
10287 a = 1;
10288 }
10289 orCreateElement.vPotential += a;
10290 }
10291 Say("spell_gain", this, orCreateElement.Name);
10292 LayerAbility.SetDirty(orCreateElement);
10293 }
Element ModBase(int ele, int v)
virtual string Name
Definition: ELEMENT.cs:309
static void SetDirty(Element a)

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

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

◆ GetActionText()

string Chara.GetActionText ( )
inline

Definition at line 7414 of file Chara.cs.

7415 {
7416 string result = "?????";
7417 if (ai != null)
7418 {
7419 result = ai.GetCurrentActionText();
7420 }
7421 return result;
7422 }
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 8025 of file Chara.cs.

8026 {
8027 if (body.GetWeight(armorOnly: true) <= (HasElement(1204) ? 6000 : 30000))
8028 {
8029 return 120;
8030 }
8031 return 122;
8032 }
int GetWeight(bool armorOnly=false)
Definition: CharaBody.cs:436

References CharaBody.GetWeight().

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

◆ GetBestRangedWeapon()

Thing Chara.GetBestRangedWeapon ( )
inline

Definition at line 7990 of file Chara.cs.

7991 {
7992 Thing result = null;
7993 int num = 0;
7994 foreach (Thing thing in things)
7995 {
7996 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
7997 {
7998 num = thing.GetEquipValue();
7999 result = thing;
8000 }
8001 }
8002 return result;
8003 }
int GetEquipValue()
Definition: Card.cs:7401
bool IsRangedWeapon
Definition: Card.cs:2283
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7924

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 9610 of file Chara.cs.

9611 {
9612 for (int i = 0; i < conditions.Count; i++)
9613 {
9614 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
9615 {
9616 return conBuffStats.elements.GetElement(ele);
9617 }
9618 }
9619 return null;
9620 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 9605 of file Chara.cs.

9606 {
9607 return GetBuffStats(EClass.sources.elements.alias[alias].id);
9608 }
Element GetBuffStats(string alias)
Definition: Chara.cs:9605

References SourceManager.elements, and EClass.sources.

Referenced by GoalCombat.TryUseAbility().

◆ GetBurden()

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

Definition at line 1845 of file Chara.cs.

1846 {
1847 int num2 = (base.ChildrenWeight + ((t != null) ? ((num == -1) ? t.ChildrenAndSelfWeight : (t.SelfWeight * num)) : 0)) * 100 / WeightLimit;
1848 if (num2 < 0)
1849 {
1850 num2 = 1000;
1851 }
1853 {
1854 num2 = 0;
1855 }
1856 int num3 = ((num2 >= 100) ? ((num2 - 100) / 10 + 1) : 0);
1857 if (num3 > 9)
1858 {
1859 num3 = 9;
1860 }
1861 return num3;
1862 }

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

◆ GetCondition< T >()

override T Chara.GetCondition< T > ( )
inlinevirtual

Reimplemented from Card.

Definition at line 9648 of file Chara.cs.

9649 {
9650 for (int i = 0; i < conditions.Count; i++)
9651 {
9652 if (conditions[i] is T)
9653 {
9654 return conditions[i] as T;
9655 }
9656 }
9657 return null;
9658 }

◆ GetCooldown()

int Chara.GetCooldown ( int  idEle)
inline

Definition at line 8899 of file Chara.cs.

8900 {
8901 if (_cooldowns != null)
8902 {
8903 for (int i = 0; i < _cooldowns.Count; i++)
8904 {
8905 if (_cooldowns[i] / 1000 == idEle)
8906 {
8907 return _cooldowns[i] % 1000;
8908 }
8909 }
8910 }
8911 return 0;
8912 }

Referenced by NotificationCooldown.OnRefresh().

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3678 of file Chara.cs.

3679 {
3680 Debug.Log(angle);
3681 if (!renderer.hasActor)
3682 {
3683 if (angle == 0f || angle == 45f || angle == 90f)
3684 {
3685 return 2;
3686 }
3687 if (angle == -135f || angle == 180f || angle == -90f)
3688 {
3689 return 1;
3690 }
3691 if (angle == 135f)
3692 {
3693 return 0;
3694 }
3695 return 3;
3696 }
3697 return renderer.actor.currentDir;
3698 }
virtual int currentDir
Definition: CardActor.cs:41
float angle
Definition: Card.cs:72

References Debug.

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

◆ GetDestination()

Point Chara.GetDestination ( )
inline

Definition at line 7389 of file Chara.cs.

7390 {
7391 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
7392 }
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 4745 of file Chara.cs.

4746 {
4747 if (elements.Value(122) > elements.Value(120))
4748 {
4749 return elements.GetElement(122);
4750 }
4751 return elements.GetElement(120);
4752 }
int Value(int ele)

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4720 of file Chara.cs.

4721 {
4722 int num = Evalue(131);
4723 int num2 = Evalue(130);
4724 int num3 = Evalue(123);
4725 if (num > num2 && num > num3)
4726 {
4727 return AttackStyle.TwoWield;
4728 }
4729 if (num2 > num && num2 > num3)
4730 {
4731 return AttackStyle.TwoHand;
4732 }
4733 if (num3 > num && num3 > num2)
4734 {
4735 return AttackStyle.Shield;
4736 }
4737 return AttackStyle.Default;
4738 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 8214 of file Chara.cs.

8215 {
8216 SourceCategory.Row r = null;
8217 if (_listFavCat.Count == 0)
8218 {
8219 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
8220 {
8221 if (row.gift > 0)
8222 {
8223 _listFavCat.Add(row);
8224 }
8225 }
8226 }
8227 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8228 {
8229 r = _listFavCat.RandomItem();
8230 });
8231 return r;
8232 }
static List< SourceCategory.Row > _listFavCat
Definition: Chara.cs:196
int seed
Definition: Game.cs:201
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 8194 of file Chara.cs.

8195 {
8196 if (_listFavFood.Count == 0)
8197 {
8198 foreach (SourceThing.Row row in EClass.sources.things.rows)
8199 {
8200 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
8201 {
8202 _listFavFood.Add(row);
8203 }
8204 }
8205 }
8206 SourceThing.Row r = null;
8207 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8208 {
8209 r = _listFavFood.RandomItem();
8210 });
8211 return r;
8212 }
static List< SourceThing.Row > _listFavFood
Definition: Chara.cs:194
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 4740 of file Chara.cs.

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

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

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

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

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

◆ GetGoalFromTimeTable()

Goal Chara.GetGoalFromTimeTable ( int  hour)
inline

Definition at line 8965 of file Chara.cs.

8966 {
8967 if (IsPC)
8968 {
8969 return null;
8970 }
8971 switch (TimeTable.GetSpan(idTimeTable, hour))
8972 {
8973 case TimeTable.Span.Sleep:
8975 {
8976 return new GoalSleep();
8977 }
8978 break;
8979 case TimeTable.Span.Eat:
8980 return new GoalIdle();
8981 case TimeTable.Span.Work:
8982 if (IsGuest())
8983 {
8984 return new GoalIdle();
8985 }
8986 return GetGoalWork();
8987 case TimeTable.Span.Free:
8988 if (IsGuest())
8989 {
8990 return new GoalIdle();
8991 }
8992 return GetGoalHobby();
8993 }
8994 return null;
8995 }
Goal GetGoalWork()
Definition: Chara.cs:8997
Goal GetGoalHobby()
Definition: Chara.cs:9010
string idTimeTable
Definition: Chara.cs:470
static Span GetSpan(string id, int hour)
Definition: TimeTable.cs:45
bool isSimulating
Definition: Zone.cs:75

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

◆ GetGoalHobby()

Goal Chara.GetGoalHobby ( )
inline

Definition at line 9010 of file Chara.cs.

9011 {
9012 if (IsPrisoner)
9013 {
9014 return new GoalIdle();
9015 }
9016 if (memberType == FactionMemberType.Livestock)
9017 {
9018 return new GoalGraze();
9019 }
9020 return new GoalHobby();
9021 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1052

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 8997 of file Chara.cs.

8998 {
8999 if (IsPrisoner)
9000 {
9001 return new GoalIdle();
9002 }
9003 if (memberType == FactionMemberType.Livestock)
9004 {
9005 return new GoalGraze();
9006 }
9007 return new GoalWork();
9008 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 7399 of file Chara.cs.

7400 {
7401 int num = 50;
7402 if (FindBed() != null)
7403 {
7404 num += 50;
7405 }
7406 return num;
7407 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 7394 of file Chara.cs.

7395 {
7396 return base.LV / 2 + 4;
7397 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6901 of file Chara.cs.

6902 {
6903 if (mimicry != null)
6904 {
6905 return mimicry.thing.GetHoverText();
6906 }
6907 string text = base.Name;
6908 if (IsFriendOrAbove())
6909 {
6910 text = text.TagColor(EClass.Colors.colorFriend);
6911 }
6912 else if (IsHostile())
6913 {
6914 text = text.TagColor(EClass.Colors.colorHostile);
6915 }
6916 int num = 2;
6917 int lV = EClass.pc.LV;
6918 if (base.LV >= lV * 5)
6919 {
6920 num = 0;
6921 }
6922 else if (base.LV >= lV * 2)
6923 {
6924 num = 1;
6925 }
6926 else if (base.LV <= lV / 4)
6927 {
6928 num = 4;
6929 }
6930 else if (base.LV <= lV / 2)
6931 {
6932 num = 3;
6933 }
6934 string text2 = Lang.GetList("lvComparison")[num];
6935 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6936 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6937 s = (" (" + s.lang() + ") ").TagSize(14);
6938 s = "";
6939 if (memberType == FactionMemberType.Guest)
6940 {
6941 s += (" (" + "guest".lang() + ") ").TagSize(14);
6942 }
6943 else if (memberType == FactionMemberType.Livestock)
6944 {
6945 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6946 }
6947 if (!EClass.pc.IsMoving)
6948 {
6949 if (EClass.pc.HasHigherGround(this))
6950 {
6951 text2 += "lowerGround".lang();
6952 }
6953 else if (HasHigherGround(EClass.pc))
6954 {
6955 text2 += "higherGround".lang();
6956 }
6957 }
6958 if (Evalue(1232) > 0)
6959 {
6960 text2 = "milkBaby".lang().TagSize(14) + text2;
6961 }
6962 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6963 {
6964 text2 = "hasBounty".lang().TagSize(14) + text2;
6965 }
6966 if (EClass.pc.HasElement(481))
6967 {
6968 text2 += ("(" + faith.Name + ")").TagSize(14);
6969 }
6970 if (EClass.pc.HasElement(6607))
6971 {
6972 s += CraftUtil.GetBloodText(this).TagSize(14).TagColor(EClass.Colors.colorBlood);
6973 }
6974 return text + text2 + s;
6975 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1216
override bool IsMoving
Definition: Chara.cs:622
bool IsNeutral()
Definition: Chara.cs:6700
Color colorHostile
Color colorBlood
Color colorFriend
Gradient gradientLVComparison
static string GetBloodText(Chara c)
Definition: CraftUtil.cs:117
bool ShowBounty(Chara c)
Definition: GuildFighter.cs:39
bool HasBounty(Chara c)
Definition: GuildFighter.cs:44
Definition: Guild.cs:2
static GuildFighter Fighter
Definition: Guild.cs:56
override string GetHoverText()
Definition: Thing.cs:790

References ColorProfile.colorBlood, ColorProfile.colorFriend, ColorProfile.colorHostile, EClass.Colors, Guild.Fighter, CraftUtil.GetBloodText(), Thing.GetHoverText(), Lang.GetList(), ColorProfile.gradientLVComparison, GuildFighter.HasBounty(), Card.HasElement(), HasHigherGround(), IsMoving, Card.LV, EClass.pc, GuildFighter.ShowBounty(), and ConTransmuteMimic.thing.

Referenced by WidgetMouseover.Refresh().

◆ GetHoverText2()

override string Chara.GetHoverText2 ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6977 of file Chara.cs.

6978 {
6979 if (mimicry != null)
6980 {
6981 return mimicry.thing.GetHoverText2();
6982 }
6983 string text = "";
6984 if (knowFav)
6985 {
6986 text += Environment.NewLine;
6987 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
6988 }
6989 string text2 = "";
6991 {
6992 text2 += Environment.NewLine;
6993 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
6994 text2 += Environment.NewLine;
6995 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");
6996 text2 += Environment.NewLine;
6997 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
6998 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin + " scaled:" + base.isScaled;
6999 }
7001 {
7002 text2 += Environment.NewLine;
7003 text2 += "<size=14>";
7004 foreach (Hobby item in ListWorks())
7005 {
7006 text2 = text2 + item.Name + ", ";
7007 }
7008 foreach (Hobby item2 in ListHobbies())
7009 {
7010 text2 = text2 + item2.Name + ", ";
7011 }
7012 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
7013 }
7014 string text3 = "";
7015 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
7016 if (enumerable.Count() > 0)
7017 {
7018 text3 += Environment.NewLine;
7019 text3 += "<size=14>";
7020 int num = 0;
7021 foreach (BaseStats item3 in enumerable)
7022 {
7023 string text4 = item3.GetPhaseStr();
7024 if (text4.IsEmpty() || text4 == "#")
7025 {
7026 continue;
7027 }
7028 Color c = Color.white;
7029 switch (item3.source.group)
7030 {
7031 case "Bad":
7032 case "Debuff":
7033 case "Disease":
7035 break;
7036 case "Buff":
7038 break;
7039 }
7041 {
7042 text4 = text4 + "(" + item3.GetValue() + ")";
7043 if (resistCon != null && resistCon.ContainsKey(item3.id))
7044 {
7045 text4 = text4 + "{" + resistCon[item3.id] + "}";
7046 }
7047 }
7048 num++;
7049 text3 = text3 + text4.TagColor(c) + ", ";
7050 }
7051 if (num == 0)
7052 {
7053 text3 = "";
7054 }
7055 else
7056 {
7057 text = "";
7058 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
7059 }
7060 }
7062 {
7063 text3 += Environment.NewLine;
7064 foreach (ActList.Item item4 in ability.list.items)
7065 {
7066 text3 = text3 + item4.act.Name + ", ";
7067 }
7068 text3 = text3.TrimEnd(", ".ToCharArray());
7069 }
7070 return text + text2 + text3;
7071 }
override string ToString()
Definition: AIAct.cs:124
virtual string GetPhaseStr()
Definition: BaseStats.cs:47
virtual int GetValue()
Definition: BaseStats.cs:52
virtual string GetHoverText2()
Definition: Card.cs:7890
bool isScaled
Definition: Card.cs:915
SourceCategory.Row GetFavCat()
Definition: Chara.cs:8214
bool knowFav
Definition: Chara.cs:415
override string GetName(NameStyle style, int num=-1)
Definition: Chara.cs:1383
override int DV
Definition: Chara.cs:743
List< Hobby > ListHobbies(bool useMemberType=true)
Definition: Chara.cs:9153
override int PV
Definition: Chara.cs:772
SourceThing.Row GetFavFood()
Definition: Chara.cs:8194
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:9126
Color colorDebuff
bool showExtra
Definition: CoreDebug.cs:168
Definition: Hobby.cs:5
SourceTactics tactics

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

Referenced by WidgetMouseover.Refresh().

◆ GetIdPortrait()

string Chara.GetIdPortrait ( )
inline

Definition at line 8320 of file Chara.cs.

8321 {
8322 if (id == "olderyoungersister")
8323 {
8324 if (base.idSkin != 2)
8325 {
8326 return "UN_olderyoungersister";
8327 }
8328 return "UN_olderyoungersister_alt";
8329 }
8330 if (Portrait.allIds.Contains("UN_" + id + ".png"))
8331 {
8332 return "UN_" + id;
8333 }
8334 return base.c_idPortrait;
8335 }
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 8306 of file Chara.cs.

8307 {
8308 string text = race.id;
8309 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
8310 {
8311 return "foxfolk";
8312 }
8313 if (trait is TraitGuard)
8314 {
8315 return "guard";
8316 }
8317 return "";
8318 }

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

7168 {
7169 return GetSprite();
7170 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6819

◆ GetName()

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

Reimplemented from Card.

Definition at line 1383 of file Chara.cs.

1384 {
1385 if (mimicry != null)
1386 {
1387 return mimicry.thing.GetName(style, num);
1388 }
1389 if (base.isBackerContent && EClass.core.config.backer.Show(base.c_idBacker))
1390 {
1391 if (id == "follower" && !IsGlobal)
1392 {
1393 return "_follower".lang(EClass.sources.backers.map[base.c_idBacker].Name, faith.Name);
1394 }
1395 return EClass.sources.backers.map[base.c_idBacker].Name;
1396 }
1397 string text = base.c_altName ?? source.GetName(this);
1398 if (HasCondition<ConTransmuteShadow>())
1399 {
1400 text = EClass.sources.charas.map["shade"].GetName(this);
1401 }
1402 text = text.Replace("#ele5", MainElement.source.GetAltname(3)).Replace("#ele4", MainElement.source.GetAltname(2)).Replace("#ele3", MainElement.source.GetAltname(1))
1403 .Replace("#ele2", MainElement.source.GetAltname(0))
1404 .Replace("#ele", MainElement.source.GetName().ToLower());
1405 if (base.c_bossType == BossType.Evolved)
1406 {
1407 text = "_evolved".lang(text.ToTitleCase(wholeText: true));
1408 }
1409 trait.SetName(ref text);
1410 if (text.Length > 0 && char.IsLower(text[0]))
1411 {
1412 if (base.rarity >= Rarity.Legendary)
1413 {
1414 text = text.ToTitleCase();
1415 }
1416 else if (num != 0)
1417 {
1418 text = text.AddArticle();
1419 }
1420 }
1421 if (style == NameStyle.Simple)
1422 {
1423 return text;
1424 }
1425 int num2 = ((base.rarity == Rarity.Mythical) ? 3 : ((base.rarity >= Rarity.Legendary) ? 2 : ((!_alias.IsEmpty()) ? 1 : (-1))));
1426 if (trait is TraitAdventurer)
1427 {
1428 num2 = 1;
1429 }
1430 text = (Aka.IsEmpty() ? text.Bracket(num2) : (num2 switch
1431 {
1432 -1 => "_aka",
1433 1 => "_aka3",
1434 _ => "_aka2",
1435 }).lang((num2 == -1) ? Aka : Aka.ToTitleCase(wholeText: true), text.Bracket(num2)));
1436 string text2 = (base.isSale ? "forSale".lang(Lang._currency(GetPrice(CurrencyType.Money, sell: true, PriceType.PlayerShop), "money")) : "");
1437 return text + text2;
1438 }
BossType
Definition: BossType.cs:2
string Aka
Definition: Chara.cs:218
string _alias
Definition: Chara.cs:221
BackerContentConfig backer
Definition: CoreConfig.cs:613
string Name
Definition: Religion.cs:30
SourceBacker backers
SourceChara charas
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:535
virtual void SetName(ref string s)
Definition: Trait.cs:723

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

Referenced by TraitStoryBookHome.OnRead().

◆ GetNearbyCatToSniff()

Chara Chara.GetNearbyCatToSniff ( )
inline

Definition at line 8258 of file Chara.cs.

8259 {
8260 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
8261 {
8262 if (enumerator.MoveNext())
8263 {
8264 return enumerator.Current;
8265 }
8266 }
8267 return null;
8268 }
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1220

References race.

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

◆ GetPietyValue()

int Chara.GetPietyValue ( )
inline

Definition at line 10376 of file Chara.cs.

10377 {
10378 if (base._IsPC)
10379 {
10380 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
10381 }
10382 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
10383 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 5209 of file Chara.cs.

5210 {
5211 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
5212 if (!IsPCFaction)
5213 {
5214 return;
5215 }
5217 {
5218 if (homeZone != null && EClass._zone != homeZone)
5219 {
5220 Msg.Say("returnHome", this, homeZone.Name);
5222 }
5223 }
5224 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
5225 {
5226 EClass.pc.party.AddMemeber(this, showMsg: true);
5227 }
5228 }
static FactionBranch Branch
Definition: EClass.cs:23
void AddMemeber(Chara c, bool showMsg=false)
Definition: Party.cs:57
Point GetNearestPoint(bool allowBlock=false, bool allowChara=true, bool allowInstalled=true, bool ignoreCenter=false, int minRadius=0)
Definition: Point.cs:619
virtual bool CanJoinParty
Definition: TraitChara.cs:47
virtual bool CanJoinPartyResident
Definition: TraitChara.cs:50

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

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

◆ GetRoomWork()

BaseArea Chara.GetRoomWork ( )
inline

Definition at line 9104 of file Chara.cs.

9105 {
9106 BaseArea result = null;
9107 foreach (Hobby item in ListWorks())
9108 {
9109 AIWork aI = item.GetAI(this);
9110 if (aI.SetDestination())
9111 {
9112 if (aI.destArea != null)
9113 {
9114 result = aI.destArea;
9115 }
9116 else if (aI.destThing != null)
9117 {
9118 result = aI.destThing.pos.cell.room;
9119 }
9120 break;
9121 }
9122 }
9123 return result;
9124 }
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 6819 of file Chara.cs.

6820 {
6821 if (IsPCC)
6822 {
6823 PCC pCC = PCC.Get(pccData);
6824 pCC.Build();
6825 return pCC.variation.idle[0, 0];
6826 }
6827 if (spriteReplacer != null)
6828 {
6829 return spriteReplacer.data.GetSprite();
6830 }
6831 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);
6832 }
SpriteReplacer spriteReplacer
Definition: Chara.cs:156
override CardRow sourceCard
Definition: Chara.cs:452
int[] _tiles
Definition: RenderRow.cs:12
Sprite GetSprite(int dir=0, int skin=0, bool snow=false)
Definition: RenderRow.cs:271
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 6843 of file Chara.cs.

6844 {
6845 if (IsPCC)
6846 {
6848 {
6850 }
6851 }
6852 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && (GetBool(123) || affinity.CanSleepBeside()))
6853 {
6854 return EClass.setting.pass.subDead;
6855 }
6856 return SubPassData.Default;
6857 }
bool GetBool(int id)
Definition: BaseCard.cs:15
ConSleep conSleep
Definition: Chara.cs:102
override bool IsDeadOrSleeping
Definition: Chara.cs:575
PassSetting pass
Definition: GameSetting.cs:303
bool altHeldPos
Definition: Player.cs:1179
static SubPassData Default
Definition: SubPassData.cs:7

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

◆ GetTextHappiness()

string Chara.GetTextHappiness ( )
inline

Definition at line 7409 of file Chara.cs.

7410 {
7411 return GetHappiness().ToString() ?? "";
7412 }
int GetHappiness()
Definition: Chara.cs:7399

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 9242 of file Chara.cs.

9243 {
9244 string text = (simple ? "" : ("hobby".lang() + ":"));
9245 foreach (Hobby item in ListHobbies())
9246 {
9247 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
9248 }
9249 return text.TrimEnd(',');
9250 }

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 9252 of file Chara.cs.

9253 {
9254 string text = (simple ? "" : ("work".lang() + ":"));
9255 foreach (Hobby item in ListWorks())
9256 {
9257 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
9258 }
9259 return text.TrimEnd(',');
9260 }

References item.

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

◆ GetTopicText()

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

Definition at line 7073 of file Chara.cs.

7074 {
7075 string key = source.idText.IsEmpty(id);
7076 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
7077 {
7078 key = "littleOne2";
7079 }
7080 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
7081 if (row == null)
7082 {
7083 return null;
7084 }
7085 string text = row.GetText(topic, returnNull: true);
7086 if (text.IsEmpty())
7087 {
7088 return null;
7089 }
7090 if (text.StartsWith("@"))
7091 {
7092 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
7093 if (row == null)
7094 {
7095 return null;
7096 }
7097 text = row.GetText(topic, returnNull: true);
7098 if (text.IsEmpty())
7099 {
7100 return null;
7101 }
7102 }
7103 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
7104 }
SourceCharaText charaText

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 8280 of file Chara.cs.

8281 {
8282 int num = 0;
8283 if (base.c_upgrades != null)
8284 {
8285 num += base.c_upgrades.spent;
8286 }
8287 if (base.c_genes != null)
8288 {
8289 num += base.c_genes.GetTotalCost();
8290 }
8291 return num + base.feat;
8292 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 9173 of file Chara.cs.

9174 {
9175 foreach (Hobby item in ListWorks())
9176 {
9177 if (item.source.alias == id)
9178 {
9179 return item;
9180 }
9181 }
9182 foreach (Hobby item2 in ListHobbies())
9183 {
9184 if (item2.source.alias == id)
9185 {
9186 return item2;
9187 }
9188 }
9189 return null;
9190 }
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 9325 of file Chara.cs.

9326 {
9327 if (_workSummary == null)
9328 {
9329 _workSummary = new WorkSummary();
9330 }
9331 return _workSummary;
9332 }
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 8419 of file Chara.cs.

8420 {
8421 if (c.IsHostile() || c.IsDeadOrSleeping)
8422 {
8423 Msg.Say("affinityNone", c, this);
8424 return;
8425 }
8426 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
8427 {
8428 bool num = t.blessedState == BlessedState.Doomed;
8429 int num2 = 200 + t.LV * 3;
8430 if (t.rarity == Rarity.Legendary)
8431 {
8432 num2 *= 3;
8433 }
8434 if (t.rarity >= Rarity.Mythical)
8435 {
8436 num2 *= 5;
8437 }
8438 if (num)
8439 {
8440 num2 *= 2;
8441 }
8442 EClass.pc.PlayEffect("identify");
8443 EClass.pc.PlaySound("identify");
8444 c.PlayEffect("mutation");
8445 c.Say("draw_curse", c, t);
8446 t.Destroy();
8447 List<Element> list = new List<Element>();
8448 foreach (Element value in EClass.pc.elements.dict.Values)
8449 {
8450 if (value is Spell)
8451 {
8452 list.Add(value);
8453 }
8454 }
8455 if (list.Count == 0)
8456 {
8458 return;
8459 }
8460 Element element = list.RandomItem();
8461 EClass.pc.ModExp(element.id, num2);
8462 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
8463 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
8464 return;
8465 }
8466 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
8467 {
8468 GiveLovePotion(c, t);
8469 return;
8470 }
8471 if (t.trait is TraitErohon && c.id == t.c_idRefName)
8472 {
8473 c.OnGiveErohon(t);
8474 return;
8475 }
8476 if (t.trait is TraitTicketMassage)
8477 {
8478 t.ModNum(-1);
8479 c.Talk("ticket");
8480 switch (t.id)
8481 {
8482 case "ticket_massage":
8483 c.ModAffinity(EClass.pc, 10);
8485 {
8486 target = c
8487 });
8488 break;
8489 case "ticket_armpillow":
8490 c.ModAffinity(EClass.pc, 20);
8491 EClass.pc.AddCondition<ConSleep>(300, force: true);
8492 c.SetAI(new AI_ArmPillow
8493 {
8494 target = EClass.pc
8495 });
8496 break;
8497 case "ticket_champagne":
8498 c.ModAffinity(EClass.pc, 10);
8500 break;
8501 }
8502 return;
8503 }
8504 if (t.id == "flyer")
8505 {
8506 stamina.Mod(-1);
8507 if (c.things.Find((Thing a) => a.id == "flyer") != null)
8508 {
8509 c.Talk("flyer_miss");
8510 DoHostileAction(c);
8511 return;
8512 }
8513 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
8514 {
8515 Msg.Say("affinityNone", c, this);
8516 t.Destroy();
8517 elements.ModExp(291, 10f);
8518 return;
8519 }
8520 elements.ModExp(291, 50f);
8521 }
8522 if (t.id == "statue_weird")
8523 {
8524 EClass.pc.Say("statue_sell");
8525 }
8526 t.isGifted = true;
8527 c.nextUse = c.affinity.OnGift(t);
8528 if (!t.isDestroyed)
8529 {
8530 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
8531 {
8532 q.OnGiveItem(c, t);
8533 });
8534 if (c.TryEquip(t))
8535 {
8536 c.nextUse = null;
8537 }
8538 }
8539 }
Thing OnGift(Thing t)
Definition: Affinity.cs:131
int ExpToNext
Definition: Card.cs:2046
bool isCopy
Definition: Card.cs:879
bool IsCursed
Definition: Card.cs:2295
int CHA
Definition: Card.cs:2387
bool IsEquipmentOrRanged
Definition: Card.cs:2258
void SayNothingHappans()
Definition: Card.cs:7043
string c_idRefName
Definition: Card.cs:1667
void AddExp(int a, bool applyMod=true)
Definition: Card.cs:3023
void GiveLovePotion(Chara c, Thing t)
Definition: Chara.cs:8552
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7885
void OnGiveErohon(Thing t)
Definition: Chara.cs:8541
QuestManager quests
Definition: Game.cs:183
List< Quest > list
Definition: QuestManager.cs:11
Definition: Quest.cs:7
virtual void OnGiveItem(Chara c, Thing t)
Definition: Quest.cs:536

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

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

◆ GiveLovePotion()

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

Definition at line 8552 of file Chara.cs.

8553 {
8554 c.Say("give_love", c, t);
8555 c.PlaySound(t.material.GetSoundDead());
8556 c.ShowEmo(Emo.angry);
8557 c.ModAffinity(EClass.pc, -20, show: false);
8558 c.Talk("pervert");
8559 t.Destroy();
8560 }

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

6449 {
6450 if (enemy == null && !IsPC)
6451 {
6452 if (GetInt(106) == 0)
6453 {
6454 TalkTopic("aggro");
6455 }
6456 if (OriginalHostility != Hostility.Enemy)
6457 {
6458 ShowEmo(Emo.angry);
6459 }
6460 SetEnemy(_tg.Chara);
6461 }
6463 {
6464 if (hostility >= Hostility.Neutral)
6465 {
6466 Say("angry", this);
6467 }
6468 hostility = Hostility.Enemy;
6469 }
6470 }
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
virtual bool IsPCFactionMinion
Definition: Card.cs:2195

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

1307 {
1308 return HasAccess(c.pos);
1309 }
bool HasAccess(Card c)
Definition: Chara.cs:1306

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

1312 {
1313 if (!EClass._zone.IsPCFaction || p.cell.room == null || IsPC)
1314 {
1315 return true;
1316 }
1317 return p.cell.room.data.accessType switch
1318 {
1319 BaseArea.AccessType.Resident => memberType == FactionMemberType.Default,
1320 BaseArea.AccessType.Private => false,
1321 _ => true,
1322 };
1323 }

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

◆ HasCondition()

bool Chara.HasCondition ( string  alias)
inline

Definition at line 9593 of file Chara.cs.

9594 {
9595 for (int i = 0; i < conditions.Count; i++)
9596 {
9597 if (conditions[i].source.alias == alias)
9598 {
9599 return true;
9600 }
9601 }
9602 return false;
9603 }

Referenced by _Move(), AM_Adv._OnUpdateInput(), TraitGodStatue._OnUse(), ActPlan._Update(), Element._WriteNote(), ActMelee.Attack(), GoalCombat.BuildAbilityList(), AttackProcess.CalcHit(), Point.CallGuard(), ActNTR.CanPerform(), ActRanged.CanPerform(), ActRush.CanPerform(), ActEffect.DamageEle(), EvalueRiding(), ZonePreEnterEncounter.Execute(), TraitItemProc.GetHealAction(), AttackProcess.GetRawDamage(), AM_Adv.IsEntangled(), Point.ListWitnesses(), ModAffinity(), FactionBranch.OnAfterSimulate(), ListPeopleParty.OnClick(), TraitDrink.OnDrink(), Zone_Field.OnGenerateMap(), TraitScrollStatic.OnRead(), ConSleep.OnRemoved(), TraitAmmo.OnUse(), Zone_Yowyn.OnVisitNewMapOrRegenerate(), ActRanged.Perform(), ActWater.Perform(), AttackProcess.Perform(), AttackProcess.Prepare(), FoodEffect.Proc(), AttackProcess.ProcAbility(), ActEffect.ProcAt(), Religion.Punish(), Religion.PunishTakeOver(), Zone.RefreshDeathSentense(), RequestProtection(), ActRide.Ride(), AI_ArmPillow.Run(), AI_Fuck.Run(), AI_Idle.Run(), GoalCombat.Run(), Card.Teleport(), BaseSong.Tick(), Tick(), ConDeathSentense.Tick(), ConMiasma.Tick(), ConSleep.Tick(), UI.ToggleFeedback(), GoalCombat.TryMove(), ActPray.TryPray(), TraitBaseSpellbook.TryProgress(), Zone.TrySpawnFollower(), GoalCombat.TryUseAbility(), and ActSlime.ValidatePerform().

◆ HasCondition< T >()

override bool Chara.HasCondition< T > ( )
inlinevirtual

Reimplemented from Card.

Definition at line 9581 of file Chara.cs.

9582 {
9583 for (int i = 0; i < conditions.Count; i++)
9584 {
9585 if (conditions[i] is T)
9586 {
9587 return true;
9588 }
9589 }
9590 return false;
9591 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8894 of file Chara.cs.

8895 {
8896 return GetCooldown(idEle) != 0;
8897 }
int GetCooldown(int idEle)
Definition: Chara.cs:8899

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

◆ HasHigherGround()

bool Chara.HasHigherGround ( Card  c)
inline

Definition at line 1216 of file Chara.cs.

1217 {
1218 if (c == null)
1219 {
1220 return false;
1221 }
1222 float num = renderer.position.y - pos.Position(0).y + (_isLevitating ? 0.4f : 0f);
1223 float num2 = c.renderer.position.y - c.pos.Position(0).y + ((c.isChara && c.Chara._isLevitating) ? 0.4f : 0f);
1224 return num > num2 + 0.1f;
1225 }
bool _isLevitating
Definition: Chara.cs:136
ref Vector3 Position(int height)
Definition: Point.cs:548

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

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

◆ HasHobbyOrWork()

bool Chara.HasHobbyOrWork ( string  alias)
inline

Definition at line 9023 of file Chara.cs.

9024 {
9025 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
9026 listHobby.Clear();
9027 if (_works == null || _hobbies == null)
9028 {
9029 RerollHobby();
9030 }
9031 foreach (int work in _works)
9032 {
9033 if (work == num)
9034 {
9035 return true;
9036 }
9037 }
9038 foreach (int hobby in _hobbies)
9039 {
9040 if (hobby == num)
9041 {
9042 return true;
9043 }
9044 }
9045 return false;
9046 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:9286
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2439 of file Chara.cs.

2440 {
2441 foreach (Chara chara in EClass._map.charas)
2442 {
2443 if (chara.c_uidMaster == base.uid)
2444 {
2445 return true;
2446 }
2447 }
2448 return false;
2449 }

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

Referenced by ActEffect.ProcAt().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1750 of file Chara.cs.

1751 {
1752 Cure(CureType.HealComplete);
1753 base.hp = MaxHP;
1754 mana.value = mana.max;
1755 stamina.value = stamina.max;
1756 Refresh();
1757 }
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 4540 of file Chara.cs.

4541 {
4542 if (held == t || t.isDestroyed || t.Num <= 0)
4543 {
4544 return;
4545 }
4546 if (IsPC && t.isNPCProperty)
4547 {
4548 t.isNPCProperty = false;
4549 if (!t.GetBool(128))
4550 {
4552 pos.TryWitnessCrime(this);
4553 }
4554 }
4555 PickHeld();
4556 if (t.isChara)
4557 {
4559 {
4560 t.ShowEmo(Emo.love);
4561 }
4562 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4563 }
4564 else
4565 {
4566 if (num == -1 || num > t.Num)
4567 {
4568 num = t.Num;
4569 }
4570 if (num < t.Num)
4571 {
4572 t = t.Split(num);
4573 }
4574 }
4575 if (t.GetRootCard() != this)
4576 {
4577 t = Pick(t.Thing, msg: false, tryStack: false);
4578 if (t.GetRootCard() != this)
4579 {
4580 return;
4581 }
4582 }
4583 held = t;
4584 if (held.GetLightRadius() > 0)
4585 {
4587 }
4588 if (IsPC)
4589 {
4591 WidgetHotbar.dirtyCurrentItem = true;
4592 }
4593 }
Thing Split(int a)
Definition: Card.cs:3566
bool isNPCProperty
Definition: Card.cs:555
void RecalculateFOV()
Definition: Card.cs:6587
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2165
int GetLightRadius()
Definition: Card.cs:6634
void PickHeld(bool msg=false)
Definition: Chara.cs:4595
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:873

References BaseCard.GetBool(), 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 9409 of file Chara.cs.

9410 {
9411 if (!onDeserialize)
9412 {
9413 _cints[10] = 20;
9414 _cints[11] = 70;
9415 _cints[13] = 70;
9416 _cints[14] = 70;
9417 _cints[15] = 70;
9418 _cints[17] = 0;
9419 _cints[18] = 0;
9420 }
9421 foreach (Condition condition in conditions)
9422 {
9423 condition.SetOwner(this, onDeserialize);
9424 }
9425 }
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 7727 of file Chara.cs.

7728 {
7729 if (t == null)
7730 {
7731 t = FindBestFoodToEat();
7732 }
7733 if (t == null)
7734 {
7735 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7736 }
7737 if (t == null)
7738 {
7739 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7740 }
7741 if (t != null)
7742 {
7743 Say("eat_start", this, t.Duplicate(1));
7744 if (sound)
7745 {
7746 PlaySound("eat");
7747 }
7748 FoodEffect.Proc(this, t);
7749 }
7750 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7706
static void Proc(Chara c, Thing food, bool consume=true)
Definition: FoodEffect.cs:12

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

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

◆ IsBranchMember()

bool Chara.IsBranchMember ( )
inline

Definition at line 6710 of file Chara.cs.

6711 {
6712 if (faction == EClass.Home)
6713 {
6714 return homeZone == EClass.game.activeZone;
6715 }
6716 return false;
6717 }
Faction faction
Definition: Chara.cs:429
Zone activeZone
Definition: Game.cs:252

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

◆ IsCriticallyWounded()

bool Chara.IsCriticallyWounded ( bool  includeRide = false)
inline

Definition at line 1203 of file Chara.cs.

1204 {
1205 if (host == null || includeRide)
1206 {
1207 if (Evalue(1421) <= 0)
1208 {
1209 return base.hp < MaxHP / 5;
1210 }
1211 return base.hp + mana.value < (MaxHP + mana.max) / 5;
1212 }
1213 return false;
1214 }

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

2567 {
2568 if (!currentZone.IsRegion && p.IsValid)
2569 {
2570 CellDetail detail = p.detail;
2571 if (detail != null && detail.charas.Count > 0)
2572 {
2573 foreach (Chara chara in p.detail.charas)
2574 {
2575 if (chara.mimicry == null && (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed))
2576 {
2577 if (cancelAI && EClass.pc.ai is GoalManualMove)
2578 {
2579 EClass.pc.ai.Cancel();
2580 }
2581 return true;
2582 }
2583 }
2584 }
2585 }
2586 return false;
2587 }
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, mimicry, EClass.pc, and trait.

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

◆ IsEscorted()

bool Chara.IsEscorted ( )
inline

Definition at line 2466 of file Chara.cs.

2467 {
2468 if (!IsPCPartyMinion)
2469 {
2470 return false;
2471 }
2472 foreach (Quest item in EClass.game.quests.list)
2473 {
2474 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2475 {
2476 return true;
2477 }
2478 }
2479 return false;
2480 }
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 6754 of file Chara.cs.

6755 {
6756 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6757 {
6759 {
6760 return true;
6761 }
6762 }
6763 else if (IsHostile() && c.IsHostile())
6764 {
6765 return true;
6766 }
6767 return false;
6768 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6658 of file Chara.cs.

6659 {
6660 if (c == null)
6661 {
6662 return false;
6663 }
6664 if (base.IsPCFactionOrMinion)
6665 {
6666 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6667 {
6668 return true;
6669 }
6670 }
6671 else
6672 {
6674 {
6675 return true;
6676 }
6677 if (OriginalHostility >= Hostility.Friend)
6678 {
6679 if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
6680 {
6681 return true;
6682 }
6683 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6684 {
6685 return true;
6686 }
6687 }
6688 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6689 {
6690 return true;
6691 }
6692 }
6693 if (id == "unicorn" && (Evalue(418) < 0 || (c.HasElement(1216) && c.Evalue(418) < 1)))
6694 {
6695 return true;
6696 }
6697 return false;
6698 }
bool IsCriminal
Definition: Player.cs:1365

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

◆ IsInHomeZone()

bool Chara.IsInHomeZone ( )
inline

Definition at line 6724 of file Chara.cs.

6725 {
6726 return EClass.game.activeZone == currentZone;
6727 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6729 of file Chara.cs.

6729 : TraitSpot
6730 {
6731 foreach (T item in EClass._map.props.installed.traits.List<T>())
6732 {
6733 foreach (Point item2 in item.ListPoints())
6734 {
6735 if (pos.Equals(item2))
6736 {
6737 return true;
6738 }
6739 }
6740 }
6741 return false;
6742 }
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 6700 of file Chara.cs.

6701 {
6702 return hostility == Hostility.Neutral;
6703 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 8363 of file Chara.cs.

8364 {
8365 int num2 = ((!HasElement(1411)) ? 1 : 3);
8366 if (GetBurden(t, num) >= num2)
8367 {
8368 return false;
8369 }
8370 return true;
8371 }
int GetBurden(Card t=null, int num=-1)
Definition: Chara.cs:1845

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

◆ Kiss()

void Chara.Kiss ( Chara  c)
inline

Definition at line 6383 of file Chara.cs.

6384 {
6385 EClass.player.forceTalk = true;
6386 Talk("kiss", null, null, IsPC);
6387 PlaySound("kiss");
6388 renderer.PlayAnime(AnimeID.Kiss, c);
6389 int num = 2 + EClass.rnd(4) + ((!c.IsPC && c.affinity.CurrentStage < Affinity.Stage.Fond) ? (-EClass.rnd(10)) : 0);
6390 c.ShowEmo((num > 0) ? Emo.love : Emo.sad);
6391 if (num > 0 && EClass.rnd(IsPC ? 100 : 5000) == 0)
6392 {
6393 c.MakeEgg();
6394 }
6395 if (IsPC && this != c)
6396 {
6397 if (c.interest > 0)
6398 {
6399 c.ModAffinity(EClass.pc, num);
6400 c.interest -= 20 + EClass.rnd(10);
6401 }
6402 else
6403 {
6404 c.Say("affinityNone", c, EClass.pc);
6405 }
6406 }
6407 Effect.Get("love")._Play(pos, isSynced ? renderer.position : pos.Position(), 0f, c.pos);
6408 }
Effect _Play(Point from, Vector3 fromV, float fixY=0f, Point to=null, Sprite sprite=null)
Definition: Effect.cs:117

References Effect._Play(), Effect.Get(), interest, Card.MakeEgg(), ModAffinity(), EClass.pc, Card.pos, EClass.rnd(), Card.Say(), and Card.ShowEmo().

Referenced by ActKiss.Perform(), and DramaOutcome.wedding_kiss().

◆ ListAvailabeFeats()

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

Definition at line 10056 of file Chara.cs.

10057 {
10058 List<Element> list = new List<Element>();
10059 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
10060 {
10062 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
10063 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
10064 {
10065 list.Add(Element.Create(feat.id, num) as Feat);
10066 }
10067 }
10068 return list;
10069 }
int feat
Definition: Card.cs:375
static Element Create(int id, int v=0)
Definition: ELEMENT.cs:1115
Definition: FEAT.cs:316

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

9154 {
9155 listHobby.Clear();
9156 if (!useMemberType || memberType != FactionMemberType.Livestock)
9157 {
9158 if (_hobbies == null)
9159 {
9160 RerollHobby();
9161 }
9162 foreach (int hobby in _hobbies)
9163 {
9164 listHobby.Add(new Hobby
9165 {
9166 id = hobby
9167 });
9168 }
9169 }
9170 return listHobby;
9171 }

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

9127 {
9128 listHobby.Clear();
9129 if (useMemberType && memberType == FactionMemberType.Livestock)
9130 {
9131 listHobby.Add(new Hobby
9132 {
9133 id = 45
9134 });
9135 }
9136 else
9137 {
9138 if (_works == null)
9139 {
9140 RerollHobby();
9141 }
9142 foreach (int work in _works)
9143 {
9144 listHobby.Add(new Hobby
9145 {
9146 id = work
9147 });
9148 }
9149 }
9150 return listHobby;
9151 }

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

3598 {
3599 angle = Util.GetAngle(p.x - pos.x, p.z - pos.z);
3600 if (EClass._zone.IsRegion)
3601 {
3602 if (angle > 100f && angle < 170f)
3603 {
3604 base.dir = 2;
3605 }
3606 else if (angle > 170f && angle < 190f)
3607 {
3608 base.dir = 0;
3609 }
3610 else if (angle > 190f || (angle < -10f && angle > -100f))
3611 {
3612 base.dir = 3;
3613 }
3614 else
3615 {
3616 base.dir = 1;
3617 }
3618 angle -= 45f;
3619 }
3620 else if (angle > 170f && angle < 235f)
3621 {
3622 base.dir = 0;
3623 }
3624 else if (angle > 80f && angle < 145f)
3625 {
3626 base.dir = 1;
3627 }
3628 else if (angle > -100f && angle < -35f)
3629 {
3630 base.dir = 3;
3631 }
3632 else if (angle > -10f && angle < 55f)
3633 {
3634 base.dir = 2;
3635 }
3637 }

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2332 of file Chara.cs.

2333 {
2334 if (IsLocalChara && !base.IsUnique)
2335 {
2336 Debug.Log("Creating Replacement NPC for:" + this);
2338 }
2339 _MakeAlly();
2340 if (msg)
2341 {
2342 EClass.pc.Say("hire", this);
2343 EClass.Sound.Play("good");
2344 }
2345 EClass.pc.party.AddMemeber(this);
2346 if (EClass._zone.IsTown)
2347 {
2349 }
2350 }
Chara CreateReplacement()
Definition: Chara.cs:8173
void _MakeAlly()
Definition: Chara.cs:2352
virtual bool IsTown
Definition: Zone.cs:225
void RefreshListCitizen()
Definition: Zone.cs:3616

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

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

◆ MakeBraineCell()

Thing Chara.MakeBraineCell ( )
inline

Definition at line 8342 of file Chara.cs.

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

References DNA.GenerateGene().

◆ MakeGene()

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

Definition at line 8337 of file Chara.cs.

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

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

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

◆ MakeGrave()

void Chara.MakeGrave ( string  lastword)
inline

Definition at line 5316 of file Chara.cs.

5317 {
5318 if (!EClass._zone.IsRegion)
5319 {
5320 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
5321 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
5322 {
5323 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
5324 }
5325 Thing thing = ThingGen.Create(list.RandomItem());
5326 thing.MakeRefFrom(this);
5327 if (!lastword.IsEmpty())
5328 {
5329 thing.c_note = lastword;
5330 }
5331 thing.isModified = true;
5332 EClass._zone.AddCard(thing, pos).Install();
5333 }
5334 }
Card MakeRefFrom(string id)
Definition: Card.cs:5800

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

2396 {
2397 UnmakeMinion();
2398 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2399 this.hostility = hostility2;
2400 base.c_uidMaster = _master.uid;
2401 base.c_minionType = type;
2402 master = _master;
2403 Refresh();
2404 }
int uid
Definition: Card.cs:123

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

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

◆ MakePartyMemeber()

void Chara.MakePartyMemeber ( )
inline

Definition at line 2326 of file Chara.cs.

2327 {
2328 _MakeAlly();
2329 EClass.pc.party.AddMemeber(this);
2330 }

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

◆ Marry()

void Chara.Marry ( Chara  c)
inline

Definition at line 8234 of file Chara.cs.

8235 {
8236 if (base.c_love == null)
8237 {
8238 base.c_love = new LoveData();
8239 }
8240 base.c_love.dateMarriage = EClass.world.date.GetRaw();
8241 base.c_love.uidZoneMarriage = EClass._zone.uid;
8242 base.c_love.nameZoneMarriage = EClass._zone.Name;
8243 SetFeat(1275, 1, msg: true);
8245 }
int GetRaw(int offsetHours=0)
Definition: Date.cs:328
int married
Definition: Player.cs:129
int uid
Definition: Spatial.cs:70

References EClass._zone, World.date, Date.GetRaw(), Player.Stats.married, Spatial.Name, EClass.player, Player.stats, Spatial.uid, and EClass.world.

Referenced by DramaOutcome.marry().

◆ ModAffinity()

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

Definition at line 8095 of file Chara.cs.

8096 {
8097 if (c == this)
8098 {
8099 return;
8100 }
8101 if (IsPC)
8102 {
8103 c.ModAffinity(EClass.pc, a, show);
8104 }
8105 else
8106 {
8108 {
8109 return;
8110 }
8111 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
8112 if (IsPCFaction && homeBranch != null)
8113 {
8114 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
8115 }
8116 bool flag = a > 0;
8117 if (flag)
8118 {
8119 a = a * num / 100;
8120 if (affinity.GetLunchChance() > EClass.rnd(100) && GetInt(71) >= 0 && GetInt(71) < EClass.world.date.GetRaw())
8121 {
8122 SetInt(71, -1);
8123 }
8124 }
8125 if (show)
8126 {
8127 if (a == 0)
8128 {
8129 if (!showOnlyEmo)
8130 {
8131 Say("affinityNone", this, c);
8132 }
8133 }
8134 else
8135 {
8136 ShowEmo((!flag) ? Emo.angry : Emo.love);
8137 c.ShowEmo(flag ? Emo.love : Emo.sad);
8138 if (!showOnlyEmo)
8139 {
8140 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
8141 }
8142 }
8143 }
8144 if (c.IsPC)
8145 {
8146 a = affinity.Mod(a);
8147 }
8148 }
8149 }
int Mod(int a)
Definition: Affinity.cs:194
int GetLunchChance()
Definition: Affinity.cs:88
Stats hygiene
Definition: Chara.cs:1178
int Evalue(int ele)
static int GetAffinityMod(int phase)
Definition: StatsHygiene.cs:19
virtual bool CanChangeAffinity
Definition: Trait.cs:571

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(), Kiss(), ActEffect.LoveMiracle(), ModAffinity(), InvOwner.OnClick(), Affinity.OnGift(), Affinity.OnTalkRumor(), DramaManager.ParseLine(), DramaOutcome.revive_pet(), AI_Fuck.Run(), AI_Shear.Run(), and AI_Slaughter.Run().

◆ ModCorruption()

void Chara.ModCorruption ( int  a)
inline

Definition at line 10013 of file Chara.cs.

10014 {
10015 if (a > 0)
10016 {
10017 if (Evalue(962) >= 25 || (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0))
10018 {
10019 return;
10020 }
10021 int num = Evalue(412);
10022 if (num != 0)
10023 {
10024 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
10025 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
10026 }
10027 }
10028 if (a == 0)
10029 {
10030 return;
10031 }
10032 int num3 = (corruption + a) / 100 - corruption / 100;
10033 for (int i = 0; i < Mathf.Abs(num3); i++)
10034 {
10035 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
10036 {
10037 break;
10038 }
10039 }
10040 corruption += a;
10041 int num4 = 0;
10042 foreach (Element value in elements.dict.Values)
10043 {
10044 if (value.source.category == "ether")
10045 {
10046 num4 += value.Value;
10047 }
10048 }
10049 if (num4 > 0 && IsPC)
10050 {
10051 Tutorial.Reserve("ether");
10052 }
10053 corruption = num4 * 100 + corruption % 100;
10054 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:10172
static float rndf(float a)
Definition: EClass.cs:102

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

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

◆ ModHeight()

void Chara.ModHeight ( int  a)
inline

Definition at line 9962 of file Chara.cs.

9963 {
9964 if (!HasElement(450))
9965 {
9966 long num = bio.height;
9967 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9968 if (num < 1)
9969 {
9970 num = 1L;
9971 }
9972 if (num > 999999999)
9973 {
9974 num = 999999999L;
9975 }
9976 if (num != bio.height)
9977 {
9978 bio.height = (int)num;
9979 Say((a > 0) ? "height_gain" : "height_lose", this);
9980 }
9981 }
9982 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 10428 of file Chara.cs.

10429 {
10430 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
10431 {
10432 return;
10433 }
10434 bool flag = HasElement(1215);
10435 if (tempElements == null)
10436 {
10438 tempElements.SetParent(this);
10439 }
10440 if (a > 0 && flag)
10441 {
10442 a = a * 150 / 100;
10443 }
10444 int num = elements.ValueWithoutLink(ele);
10445 int num2 = Mathf.Abs(num) + 100;
10446 int num3 = num2 / (flag ? 2 : 4);
10447 int num4 = -num - 100;
10448 int num5 = tempElements.Base(ele);
10449 int num6 = num5 + a;
10450 if (onlyRenew)
10451 {
10452 num3 = Mathf.Min(a, num3);
10453 num4 = Mathf.Max(a, -num2 / 3);
10454 }
10455 if (a > 0 && num6 > num3)
10456 {
10457 a = ((num3 > num5) ? (num3 - num5) : 0);
10458 }
10459 if (a < 0 && num6 < num4)
10460 {
10461 a = ((num4 < num5) ? (num4 - num5) : 0);
10462 }
10463 Element element = tempElements.ModBase(ele, a);
10464 if (element.vBase == 0)
10465 {
10466 tempElements.Remove(element.id);
10467 if (tempElements.dict.Count == 0)
10468 {
10469 tempElements = null;
10470 }
10471 }
10472 }
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 9984 of file Chara.cs.

9985 {
9986 if (HasElement(450) || a == 0)
9987 {
9988 return;
9989 }
9990 long num = bio.weight;
9991 long num2 = bio.height;
9992 long num3 = num2 * num2 * 18 / 25000;
9993 long num4 = num2 * num2 * 24 / 10000;
9994 if (ignoreLimit || (num > num3 && num < num4))
9995 {
9996 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9997 if (num < 1)
9998 {
9999 num = 1L;
10000 }
10001 if (num > 999999999)
10002 {
10003 num = 999999999L;
10004 }
10005 if (num != bio.weight)
10006 {
10007 bio.weight = (int)num;
10008 Say((a > 0) ? "weight_gain" : "weight_lose", this);
10009 }
10010 }
10011 }
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 2680 of file Chara.cs.

2681 {
2682 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2683 {
2684 ai.Current.TryCancel(c);
2685 }
2686 }
bool TryCancel(Card c)
Definition: AIAct.cs:280
virtual bool CancelWhenMoved
Definition: AIAct.cs:96
override MoveResult _Move(Point newPoint, MoveType type=MoveType.Walk)
Definition: Chara.cs:2774

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

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

◆ MoveHome() [1/2]

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

◆ MoveHome() [2/2]

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

Definition at line 3513 of file Chara.cs.

3514 {
3515 if (isDead)
3516 {
3517 Revive();
3518 }
3519 else
3520 {
3521 Cure(CureType.Death);
3522 }
3523 CureCondition<ConSuspend>();
3524 if (IsPCParty)
3525 {
3527 }
3528 FactionBranch factionBranch = homeBranch;
3529 if (x == -1)
3530 {
3531 x = 50;
3532 }
3533 if (z == -1)
3534 {
3535 z = 50;
3536 }
3537 Point point = new Point(x, z);
3538 if (zone.IsActiveZone)
3539 {
3540 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3541 }
3542 zone.AddCard(this, point);
3543 SetHomeZone(zone);
3544 global.transition = new ZoneTransition
3545 {
3546 state = ZoneTransition.EnterState.Dead,
3547 x = point.x,
3548 z = point.z
3549 };
3550 orgPos = new Point(x, z);
3551 if (factionBranch != null)
3552 {
3554 factionBranch.policies.Validate();
3555 }
3556 }
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:9192
Chara SetHomeZone(Zone zone)
Definition: Chara.cs:1461
PolicyManager policies
bool IsActiveZone
Definition: Zone.cs:497

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

2663 {
2664 List<Point> list = new List<Point>();
2665 pos.ForeachNeighbor(delegate(Point p)
2666 {
2667 list.Add(p.Copy());
2668 });
2669 list.Shuffle();
2670 foreach (Point item in list)
2671 {
2672 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2673 {
2674 return true;
2675 }
2676 }
2677 return false;
2678 }
override MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2750
void ForeachNeighbor(Action< Point > action, bool diagonal=true)
Definition: Point.cs:1397

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

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2648 of file Chara.cs.

2649 {
2650 Point randomNeighbor = pos.GetRandomNeighbor();
2651 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2652 {
2653 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2654 {
2655 return false;
2656 }
2657 return TryMove(randomNeighbor) == MoveResult.Success;
2658 }
2659 return false;
2660 }
bool IsTopWaterAndNoSnow
Definition: Cell.cs:712
bool IsDeepWater
Definition: Point.cs:276

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

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

◆ MoveZone() [1/3]

◆ MoveZone() [2/3]

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

Definition at line 3386 of file Chara.cs.

3387 {
3388 if (z == currentZone)
3389 {
3390 return;
3391 }
3392 if (HasCondition<ConInvulnerable>())
3393 {
3394 RemoveCondition<ConInvulnerable>();
3395 }
3396 if (IsPC)
3397 {
3398 EClass.player.nextZone = z;
3400 {
3403 {
3404 if (EClass.player.returnInfo != null)
3405 {
3406 EClass.player.returnInfo.turns += 5;
3407 }
3409 {
3410 EClass.game.Save(isAutoSave: true);
3411 }
3412 }
3413 EClass.player.deathZoneMove = false;
3414 }
3416 if (currentZone.instance != null)
3417 {
3419 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3420 transition = new ZoneTransition
3421 {
3422 state = instance.ReturnState,
3423 x = instance.x,
3424 z = instance.z
3425 };
3426 instance.OnLeaveZone();
3427 Debug.Log(z);
3428 }
3429 EInput.Consume(consumeAxis: true);
3430 EClass.player.uidLastZone = currentZone.uid;
3432 {
3434 {
3435 Msg.Say("enterZone", z.Name);
3436 }
3437 else
3438 {
3439 if (z.IsRegion)
3440 {
3441 Msg.Say("leaveZone", currentZone.Name);
3442 }
3443 else if (z.id != currentZone.id)
3444 {
3445 Msg.Say("enterZone", z.Name);
3446 }
3447 EClass.player.lastZonePos = pos.Copy();
3448 }
3449 EClass.player.lastTransition = transition;
3450 }
3451 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3452 {
3454 }
3455 EClass.player.listCarryoverMap = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3456 if (!z.IsRegion && (z is Zone_Tent || currentZone is Zone_Tent))
3457 {
3458 foreach (Chara chara in EClass._map.charas)
3459 {
3460 if (chara.c_uidMaster == 0 && !chara.IsGlobal && !chara.isNPCProperty && (chara.id == "reaper" || chara.id == "messenger_death") && ((chara.enemy != null && chara.enemy.IsPCFactionOrMinion) || chara.Dist(EClass.pc) < 5))
3461 {
3462 EClass.player.listCarryoverMap.Add(chara);
3463 }
3464 }
3465 }
3466 foreach (Chara item2 in EClass.player.listCarryoverMap)
3467 {
3468 EClass._zone.RemoveCard(item2);
3469 }
3470 }
3471 if (party != null && party.leader == this)
3472 {
3473 foreach (Chara member in party.members)
3474 {
3475 if (member != this && !member.isDead && member.parent is Zone)
3476 {
3477 member.MoveZone(z);
3478 }
3479 }
3480 }
3481 if (global == null)
3482 {
3483 Debug.Log(base.Name);
3484 return;
3485 }
3486 transition.uidLastZone = currentZone?.uid ?? 0;
3487 global.transition = transition;
3488 if (z.IsActiveZone)
3489 {
3490 Point spawnPos = z.GetSpawnPos(this);
3491 global.transition = null;
3492 if (IsPC)
3493 {
3494 EClass.player.lastTransition = null;
3495 }
3496 z.AddCard(this, spawnPos);
3497 if (IsBranchMember())
3498 {
3500 }
3501 }
3502 else
3503 {
3504 z.AddCard(this);
3505 }
3506 }
MinionType c_minionType
Definition: Card.cs:1001
bool IsBranchMember()
Definition: Chara.cs:6710
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2457
bool ignoreAutoSave
Definition: CoreDebug.cs:126
bool Save(bool isAutoSave=false, bool silent=false)
Definition: Game.cs:1040
RoomManager rooms
Definition: Map.cs:31
Chara leader
Definition: Party.cs:31
bool deathZoneMove
Definition: Player.cs:1195
List< Chara > listCarryoverMap
Definition: Player.cs:1249
ReturnInfo returnInfo
Definition: Player.cs:892
bool simulatingZone
Definition: Player.cs:1205
void AssignCharas()
Definition: RoomManager.cs:39
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:265
Point GetSpawnPos(Chara c, ZoneTransition.EnterState destState=ZoneTransition.EnterState.Auto)
Definition: Zone.cs:1352

References EClass._map, EClass._zone, Zone.AddCard(), RoomManager.AssignCharas(), Card.c_minionType, Card.c_uidMaster, Map.charas, EInput.Consume(), Player.deathZoneMove, EClass.debug, Debug, Card.Dist(), enemy, SpatialManager.Find(), FindMaster(), EClass.game, Zone.GetSpawnPos(), Zone.GetTopZone(), homeZone, Card.id, Spatial.id, CoreDebug.ignoreAutoSave, Zone.instance, Zone.IsActiveZone, isDead, IsGlobal, Card.isNPCProperty, Zone.IsPCFaction, Card.IsPCFactionOrMinion, IsPCPartyMinion, Spatial.IsRegion, item, Party.leader, Player.listCarryoverMap, 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 3378 of file Chara.cs.

3379 {
3381 {
3382 state = state
3383 });
3384 }

◆ MutateRandom()

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

Definition at line 10172 of file Chara.cs.

10173 {
10174 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
10175 {
10176 Say("resistMutation", this);
10177 return false;
10178 }
10179 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
10180 for (int i = 0; i < tries; i++)
10181 {
10182 SourceElement.Row row = ie.RandomItem();
10183 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
10184 {
10185 if (EClass.sources.elements.map.ContainsKey(base.c_corruptionHistory.LastItem()))
10186 {
10187 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
10188 }
10189 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
10190 if (base.c_corruptionHistory.Count == 0)
10191 {
10192 base.c_corruptionHistory = null;
10193 }
10194 }
10195 Element element = elements.GetElement(row.id);
10196 int num = 1;
10197 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))
10198 {
10199 continue;
10200 }
10201 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
10202 {
10203 row = EClass.sources.elements.alias[row.aliasParent];
10204 element = elements.GetElement(row.id);
10205 }
10206 bool flag = row.tag.Contains("neg");
10207 if (vec > 0)
10208 {
10209 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
10210 {
10211 continue;
10212 }
10213 }
10214 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
10215 {
10216 continue;
10217 }
10218 bool flag2 = true;
10219 if (element != null)
10220 {
10221 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
10222 if (num > element.source.max)
10223 {
10224 num = element.source.max - 1;
10225 }
10226 flag = (flag && num > element.Value) || (!flag && num < element.Value);
10227 flag2 = num > element.Value;
10228 if (vec > 0 && !flag2)
10229 {
10230 continue;
10231 }
10232 }
10233 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
10234 SetFeat(row.id, num);
10235 if (flag2 && ether)
10236 {
10237 if (base.c_corruptionHistory == null)
10238 {
10239 base.c_corruptionHistory = new List<int>();
10240 }
10241 base.c_corruptionHistory.Add(row.id);
10242 if (IsPCFaction)
10243 {
10244 Element element2 = elements.GetElement(row.id);
10245 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
10246 }
10248 {
10249 EClass.player.flags.gotEtherDisease = true;
10250 Thing thing = ThingGen.Create("parchment");
10251 thing.SetStr(53, "letter_ether");
10252 Thing thing2 = ThingGen.Create("1165");
10253 thing2.SetBlessedState(BlessedState.Normal);
10254 Thing p = ThingGen.CreateParcel(null, thing2, thing);
10256 }
10257 }
10258 if (EClass.core.IsGameStarted && pos != null)
10259 {
10260 PlaySound(ether ? "mutation_ether" : "mutation");
10261 PlayEffect("mutation");
10263 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
10264 }
10265 return true;
10266 }
10267 Say("nothingHappens");
10268 return false;
10269 }
void SetStr(int id, string value=null)
Definition: BaseCard.cs:63
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3977
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:481
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 10321 of file Chara.cs.

10322 {
10323 if (_historyFood != null)
10324 {
10325 while (_historyFood.Count > 5)
10326 {
10327 _historyFood.RemoveAt(_historyFood.Count - 1);
10328 }
10329 if (_historyFood[0].Count > 0)
10330 {
10331 _historyFood.Insert(0, new List<string>());
10332 }
10333 }
10334 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1475 of file Chara.cs.

1476 {
1477 if (!IsGlobal)
1478 {
1479 return;
1480 }
1481 memberType = FactionMemberType.Default;
1482 foreach (Thing item in things.List((Thing a) => a.HasTag(CTAG.godArtifact)).ToList())
1483 {
1485 }
1486 UniqueData uniqueData = base.c_uniqueData;
1487 if (uniqueData != null)
1488 {
1489 Debug.Log(uniqueData.uidZone + "/" + EClass.game.spatials.map.ContainsKey(uniqueData.uidZone) + "/" + uniqueData.x + "/" + uniqueData.y);
1490 }
1491 if (uniqueData != null && EClass.game.spatials.map.ContainsKey(uniqueData.uidZone))
1492 {
1493 MoveHome(EClass.game.spatials.map[uniqueData.uidZone] as Zone, uniqueData.x, uniqueData.y);
1494 return;
1495 }
1496 Zone z = EClass.game.spatials.Find("somewhere");
1497 if (trait is TraitAdventurer)
1498 {
1499 z = EClass.world.region.ListTowns().RandomItem();
1500 SetHomeZone(z);
1501 }
1502 MoveZone(z, ZoneTransition.EnterState.RandomVisit);
1503 }
void PickOrDrop(Point p, string idThing, int idMat=-1, int num=1, bool msg=true)
Definition: Chara.cs:4356
List< Zone > ListTowns()
Definition: Region.cs:271
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 1542 of file Chara.cs.

1543 {
1544 if (source.job == "*r")
1545 {
1546 base.c_idJob = EClass.sources.jobs.rows.Where((SourceJob.Row j) => j.playable < 4).RandomItem().id;
1547 }
1548 if (bp.idJob != null)
1549 {
1550 base.c_idJob = bp.idJob;
1551 }
1552 if (bp.idRace != null)
1553 {
1554 base.c_idRace = bp.idRace;
1555 }
1556 }
CardBlueprint bp
Definition: Card.cs:78
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 1558 of file Chara.cs.

1559 {
1560 if (source.tag.Contains("boss"))
1561 {
1562 bossText = true;
1563 }
1564 int num = ((bp.lv != -999) ? bp.lv : base.LV);
1565 if (trait.AdvType == TraitChara.Adv_Type.Adv || trait.AdvType == TraitChara.Adv_Type.Adv_Fairy)
1566 {
1567 if (ListAdvRace.Count == 0)
1568 {
1569 ListAdvRace = EClass.sources.races.rows.Where((SourceRace.Row a) => a.playable <= 1 && a.id != "fairy").ToList();
1570 ListAdvJob = EClass.sources.jobs.rows.Where((SourceJob.Row a) => a.playable <= 4).ToList();
1571 }
1572 if (trait.AdvType == TraitChara.Adv_Type.Adv)
1573 {
1574 base.c_idRace = ListAdvRace.RandomItem().id;
1575 }
1576 base.c_idJob = ListAdvJob.RandomItem().id;
1577 _race = null;
1578 _job = null;
1579 num = 10 + EClass.rnd(40);
1580 }
1581 bio = new Biography();
1582 bio.Generate(this);
1583 if (source.idActor.Length != 0 && source.idActor[0] == "pcc" && pccData == null)
1584 {
1585 pccData = PCCData.Create(IDPCCBodySet);
1586 if (source.idActor.Length > 2)
1587 {
1588 pccData.SetPart("body", IDPCCBodySet, source.idActor[2]);
1589 }
1590 else
1591 {
1592 pccData.Randomize(IDPCCBodySet);
1593 }
1594 }
1595 if (source.mainElement.Length != 0)
1596 {
1597 int _genLv = Mathf.Min(genLv, 100);
1598 List<Tuple<string, int, int>> list = new List<Tuple<string, int, int>>();
1599 string[] mainElement = source.mainElement;
1600 for (int i = 0; i < mainElement.Length; i++)
1601 {
1602 string[] array = mainElement[i].Split('/');
1603 SourceElement.Row row = EClass.sources.elements.alias["ele" + array[0]];
1604 int num2 = source.LV * row.eleP / 100;
1605 if (list.Count == 0 || num2 < _genLv || array[0] == bp.idEle)
1606 {
1607 list.Add(new Tuple<string, int, int>(array[0], (array.Length > 1) ? int.Parse(array[1]) : 0, num2));
1608 }
1609 }
1610 Tuple<string, int, int> tuple = list.RandomItemWeighted((Tuple<string, int, int> a) => 10000 / (100 + (_genLv - a.Item3) * 25));
1611 if (!bp.idEle.IsEmpty())
1612 {
1613 tuple = list.Where((Tuple<string, int, int> a) => a.Item1 == bp.idEle || "ele" + a.Item1 == bp.idEle).FirstOrDefault() ?? tuple;
1614 }
1615 SetMainElement(tuple.Item1, (tuple.Item2 == 0) ? 10 : tuple.Item2, elemental: true);
1616 if (list.Count >= 2)
1617 {
1618 num = tuple.Item3 + base.LV - source.LV;
1619 }
1620 }
1621 if (source.name == "*r")
1622 {
1623 base.c_altName = NameGen.getRandomName();
1624 }
1625 if (source.GetText("aka") == "*r" || trait.UseRandomAlias)
1626 {
1627 _alias = AliasGen.GetRandomAlias();
1628 }
1629 happiness = EClass.rnd(100);
1630 contribution = EClass.rnd(100);
1631 RerollHobby();
1632 _idTimeTable = ((EClass.rnd(5) == 0) ? 1 : 0);
1633 ApplyRace();
1634 ApplyJob();
1635 ChangeMaterial(source.defMat.IsEmpty(race.material), ignoreFixedMaterial: true);
1636 if (num != source.LV)
1637 {
1638 SetLv(num);
1639 }
1640 if (base.LV > 5 && race.id == "mutant")
1641 {
1642 for (int j = 0; j < Mathf.Min(1 + base.LV / 5, 20); j++)
1643 {
1644 SetFeat(1644, j + 1);
1645 }
1646 }
1647 switch (id)
1648 {
1649 case "putty_mech_b":
1650 case "putty_mech":
1651 case "robot":
1652 SetFeat(1248, 1 + EClass.rnd(5));
1653 break;
1654 }
1655 InitStats();
1656 body.SetOwner(this);
1658 if (race.EQ.Length != 0 || !source.equip.IsEmpty())
1659 {
1660 TryRestock(onCreate: true);
1661 }
1662 switch (id)
1663 {
1664 case "dodo":
1665 base.idSkin = EClass.rnd(4);
1666 break;
1667 case "putty_snow":
1668 if (EClass.rnd(100) == 0 || EClass.debug.enable)
1669 {
1670 base.idSkin = EClass.rnd(4);
1671 }
1672 break;
1673 case "snail":
1674 base.idSkin = 5;
1675 break;
1676 case "olderyoungersister":
1677 base.idSkin = 1;
1678 break;
1679 case "sister_undead":
1680 case "dog":
1681 case "cat":
1682 base.idSkin = EClass.rnd(sourceCard.tiles.Length);
1683 if (id == "sister_undead" && EClass.rnd(10) == 0)
1684 {
1686 if (row2 != null && (!EClass.player.doneBackers.Contains(row2.id) || EClass.core.config.test.ignoreBackerDestoryFlag))
1687 {
1688 ApplyBacker(row2.id);
1689 }
1690 }
1691 break;
1692 case "baby":
1693 case "ika":
1694 SetFeat(1232, 3);
1695 break;
1696 }
1697 if (HasTag(CTAG.random_color))
1698 {
1699 DyeRandom();
1700 }
1701 SetAI(new NoGoal());
1702 if (!source.faith.IsEmpty())
1703 {
1704 SetFaith(source.faith);
1705 }
1706 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown")
1707 {
1709 }
1710 else if (EClass.game.activeZone != null && EClass.game.activeZone.id == "foxtown_nefu")
1711 {
1713 }
1714 else
1715 {
1716 SetFaith(EClass.game.religions.GetRandomReligion(onlyJoinable: true, EClass.rnd(10) == 0));
1717 }
1718 _affinity = 0;
1719 interest = 100;
1722 Refresh();
1723 stamina.value = stamina.max;
1724 mana.value = mana.max;
1725 isCreated = true;
1726 }
static int indexSister
void Generate(Chara c)
Definition: Biography.cs:323
void ClampInitialSkill()
Definition: Card.cs:3015
void DyeRandom()
Definition: Card.cs:6204
void ApplyBacker(int bid)
Definition: Card.cs:7224
int genLv
Definition: Card.cs:195
void SetOwner(Chara chara, bool deserialized=false)
Definition: CharaBody.cs:18
string IDPCCBodySet
Definition: Chara.cs:493
int _affinity
Definition: Chara.cs:305
void SetMainElement(string id, int v=0, bool elemental=false)
Definition: Chara.cs:2120
int happiness
Definition: Chara.cs:110
int contribution
Definition: Chara.cs:18
void CalculateMaxStamina()
Definition: Chara.cs:2052
bool isCreated
Definition: Chara.cs:138
int _idTimeTable
Definition: Chara.cs:343
void TryRestock(bool onCreate)
Definition: Chara.cs:4754
static List< SourceRace.Row > ListAdvRace
Definition: Chara.cs:168
void InitStats(bool onDeserialize=false)
Definition: Chara.cs:9409
bool bossText
Definition: Chara.cs:146
static List< SourceJob.Row > ListAdvJob
Definition: Chara.cs:170
bool ignoreBackerDestoryFlag
Definition: CoreConfig.cs:562
bool enable
Definition: CoreDebug.cs:286
ReligionTrickery Trickery
Religion GetRandomReligion(bool onlyJoinable=true, bool includeMinor=false)
int[] tiles
Definition: RenderRow.cs:10
List< Row > listSister
Definition: SourceBacker.cs:79
SourceRace races
virtual Adv_Type AdvType
Definition: TraitChara.cs:99
virtual bool UseRandomAlias
Definition: TraitChara.cs:127

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

◆ OnDeserialized()

override void Chara.OnDeserialized ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1353 of file Chara.cs.

1354 {
1355 isCreated = true;
1356 _cbits1.Bits = (uint)_cints[0];
1357 InitStats(onDeserialize: true);
1358 body.SetOwner(this, deserialized: true);
1359 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV);
1360 elements.ApplyElementMap(base.uid, SourceValueType.Chara, race.elementMap, base.DefaultLV);
1361 if (global != null && global.goal != null)
1362 {
1363 global.goal.SetOwner(this);
1364 }
1365 if (IsPCC)
1366 {
1367 pccData.state = (base.isCensored ? PCCState.Naked : PCCState.Normal);
1368 }
1369 if (tempElements != null)
1370 {
1371 tempElements.SetParent(this);
1372 }
1373 UpdateAngle();
1375 Refresh();
1376 if (source.tag.Contains("boss"))
1377 {
1378 bossText = true;
1379 }
1380 sharedCheckTurn = EClass.rnd(200);
1381 }
int sharedCheckTurn
Definition: Chara.cs:120
void UpdateAngle()
Definition: Chara.cs:3639
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 8541 of file Chara.cs.

8542 {
8543 Say("give_erohon", this);
8544 AddCondition<ConParalyze>(50, force: true);
8545 AddCondition<ConConfuse>(50, force: true);
8546 AddCondition<ConFear>(1000, force: true);
8547 ModAffinity(EClass.pc, 100);
8548 t.Destroy();
8549 Talk("pervert");
8550 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 8347 of file Chara.cs.

8348 {
8349 if (!isDead)
8350 {
8351 if (HasElement(1231))
8352 {
8353 Talk("insulted");
8354 AddCondition<ConEuphoric>(100 * Evalue(1231));
8355 }
8356 else if (EClass.rnd(20) == 0)
8357 {
8358 SetFeat(1231, 1, msg: true);
8359 }
8360 }
8361 }

References EClass.rnd().

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

◆ OnSerializing()

override void Chara.OnSerializing ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1338 of file Chara.cs.

1339 {
1340 if (enemy != null)
1341 {
1342 SetInt(55, enemy.uid);
1343 }
1344 _cints[0] = (int)_cbits1.Bits;
1345 List<BodySlot> slots = body.slots;
1346 rawSlots = new int[slots.Count];
1347 for (int i = 0; i < slots.Count; i++)
1348 {
1349 rawSlots[i] = slots[i].elementId;
1350 }
1351 }
List< BodySlot > slots
Definition: CharaBody.cs:8
int[] rawSlots
Definition: Chara.cs:73
BitArray32 _cbits1
Definition: Chara.cs:84
uint Bits
Definition: BitArray32.cs:6

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

◆ OnSleep() [1/2]

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

Definition at line 9924 of file Chara.cs.

9925 {
9926 if (days < 1)
9927 {
9928 days = 1;
9929 }
9930 int num = power * days;
9931 if (stamina.value < 0)
9932 {
9933 stamina.Set(1);
9934 }
9935 if (isWeakToSunlight && isSunLit)
9936 {
9937 base.hp = 0;
9938 if (mana.value > 0)
9939 {
9940 mana.Set(0);
9941 }
9942 AddCondition<ConBurning>(1000, force: true);
9943 }
9944 else
9945 {
9946 HealHP(num);
9947 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9948 mana.Mod(num);
9949 }
9950 if (IsPCFaction)
9951 {
9952 hunger.Mod(20);
9953 }
9954 sleepiness.Set(0);
9955 if (!IsMinion)
9956 {
9957 interest = 100;
9958 }
9959 Cure(CureType.Sleep, power);
9960 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:4085
bool isWeakToSunlight
Definition: Chara.cs:154
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 9904 of file Chara.cs.

9905 {
9906 bool isSunLit = pos.IsSunLit;
9907 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9908 int num = bed?.Power ?? 20;
9909 if (traitPillow != null)
9910 {
9911 num += traitPillow.owner.Power / 2;
9912 }
9913 if (bed != null)
9914 {
9915 num += bed.Evalue(750) * 5;
9916 if (bed.trait is TraitBedCoffin)
9917 {
9918 isSunLit = false;
9919 }
9920 }
9921 OnSleep(num, days, isSunLit);
9922 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9904
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 2219 of file Chara.cs.

2220 {
2221 return s switch
2222 {
2223 "é ­" => 30,
2224 "首" => 31,
2225 "体" => 32,
2226 "背" => 33,
2227 "手" => 35,
2228 "指" => 36,
2229 "è…•" => 34,
2230 "è…°" => 37,
2231 "è¶³" => 39,
2232 _ => -1,
2233 };
2234 }

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 9367 of file Chara.cs.

9368 {
9369 Hobby hobby = new Hobby();
9370 hobby.id = session.id;
9371 WorkSummary workSummary = _workSummary;
9372 hobby.GetAI(this).OnPerformWork(IsRealTime);
9373 if (!isHobby)
9374 {
9375 workSummary.progress += EClass.rnd(5) + 5;
9376 }
9377 int num = PerformWork(hobby, 0, isHobby);
9378 int num2 = PerformWork(hobby, 1, isHobby);
9379 int num3 = PerformWork(hobby, 2, isHobby);
9380 int num4 = PerformWork(hobby, 3, isHobby);
9381 workSummary.money += num;
9382 workSummary.food += num2;
9383 workSummary.knowledge += num3;
9384 workSummary.material += num4;
9385 int PerformWork(Hobby work, int idx, bool isHobby)
9386 {
9387 if (idx >= work.source.resources.Length)
9388 {
9389 return 0;
9390 }
9391 int num5 = work.source.resources[idx];
9392 int num6 = num5;
9393 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
9394 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
9395 if (num6 > 0 && num5 <= 0)
9396 {
9397 num5 = 1;
9398 }
9399 return num5;
9400 }
9401 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:9367
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 4376 of file Chara.cs.

4377 {
4378 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4379 {
4381 return t;
4382 }
4383 if (t.parent == this)
4384 {
4385 return t;
4386 }
4387 t = TryPoisonPotion(t);
4388 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4389 if (!dest.IsValid)
4390 {
4391 if (t.parent != EClass._zone)
4392 {
4393 if (IsPC)
4394 {
4395 Say("backpack_full_drop", t);
4396 SE.Drop();
4397 }
4398 return EClass._zone.AddCard(t, pos).Thing;
4399 }
4400 if (IsPC)
4401 {
4402 Say("backpack_full", t);
4403 }
4404 return t;
4405 }
4406 if (dest.stack != null)
4407 {
4408 if (msg)
4409 {
4410 PlaySound("pick_thing");
4411 Say("pick_thing", this, t);
4412 }
4413 t.TryStackTo(dest.stack);
4414 return dest.stack;
4415 }
4416 TryAbsorbRod(t);
4417 if (msg)
4418 {
4419 PlaySound("pick_thing");
4420 Say("pick_thing", this, t);
4421 }
4423 return dest.container.AddThing(t, tryStack);
4424 }
bool isNew
Definition: Card.cs:483
bool TryStackTo(Thing to)
Definition: Card.cs:3479
string c_idRefCard
Definition: Card.cs:1763
void TryReservePickupTutorial(Thing t)
Definition: Chara.cs:4470
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4426
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4440
static void Collect(Thing t)
bool autoCollectCard
Definition: Game.cs:52
DestData GetDest(Thing t, bool tryStack=true)

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

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

◆ PickHeld()

void Chara.PickHeld ( bool  msg = false)
inline

Definition at line 4595 of file Chara.cs.

4596 {
4597 if (held == null)
4598 {
4599 return;
4600 }
4601 Card card = held;
4602 if (IsPC && held.invY == 1)
4603 {
4604 WidgetHotbar.dirtyCurrentItem = true;
4606 held = null;
4607 return;
4608 }
4609 if (held.isChara)
4610 {
4611 DropHeld();
4612 return;
4613 }
4615 {
4616 Say("canOnlyCarry", held);
4617 DropHeld();
4618 return;
4619 }
4620 bool flag = held != things.TryStack(held.Thing);
4621 if (!flag && things.IsOverflowing())
4622 {
4623 if (IsPC)
4624 {
4625 Say("backpack_full_drop", held);
4626 SE.Drop();
4627 }
4628 DropHeld();
4629 return;
4630 }
4631 if (msg)
4632 {
4633 PlaySound("pick_thing");
4634 Say("pick_held", this, card);
4635 if (IsPC && card.id == "statue_weird")
4636 {
4637 Say("statue_pick");
4638 }
4639 }
4640 if (IsPC)
4641 {
4642 WidgetHotbar.dirtyCurrentItem = true;
4643 if (!flag)
4644 {
4646 if (held.GetRootCard() != EClass.pc)
4647 {
4648 Pick(held.Thing, msg: false);
4649 }
4650 }
4651 }
4652 held = null;
4653 }
int invY
Definition: Card.cs:1993
bool IsHotItem
Definition: Card.cs:120
Card DropHeld(Point dropPos=null)
Definition: Chara.cs:4672
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 4356 of file Chara.cs.

4357 {
4358 if (num != 0)
4359 {
4360 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4361 }
4362 }

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

Referenced by Map.MineObj(), OnBanish(), TraitBook.OnRead(), 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 4364 of file Chara.cs.

4365 {
4366 if (things.GetDest(t).IsValid)
4367 {
4368 Pick(t, msg);
4369 }
4370 else
4371 {
4372 EClass._zone.AddCard(t, p);
4373 }
4374 }

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

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1759 of file Chara.cs.

1760 {
1761 if (source == null)
1762 {
1763 Debug.LogError("source is null");
1764 SetSource();
1765 }
1766 if (ride != null && ride.source != null)
1767 {
1768 ride.Refresh(calledRecursive: true);
1769 }
1770 hasTelepathy = false;
1771 isWet = false;
1772 _isLevitating = HasElement(401) || (ride != null && ride._isLevitating);
1774 isWeakToSunlight = HasElement(1251) && !HasElement(431);
1775 base.isHidden = HasElement(415);
1776 foreach (Condition condition in conditions)
1777 {
1778 condition.OnRefresh();
1779 }
1780 if (isWet)
1781 {
1782 base.isHidden = false;
1783 }
1785 SetDirtySpeed();
1786 if (host != null && !calledRecursive && host.source != null)
1787 {
1788 host.Refresh(calledRecursive: true);
1789 }
1790 }
virtual void OnRefresh()
void Refresh(bool calledRecursive=false)
Definition: Chara.cs:1759
bool isWet
Definition: Chara.cs:144
override void SetSource()
Definition: Chara.cs:2108
bool IsUndead
Definition: Chara.cs:905
bool IsHorror
Definition: Chara.cs:929
bool IsMachine
Definition: Chara.cs:917

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

10386 {
10387 if (faithElements != null)
10388 {
10390 }
10392 if (idFaith == "eyth" && !HasElement(1228))
10393 {
10394 return;
10395 }
10396 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
10397 if (row == null)
10398 {
10399 return;
10400 }
10402 if (!HasCondition<ConExcommunication>())
10403 {
10404 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
10405 if (row2 != null)
10406 {
10407 faithElements.SetBase(row2.id, 1);
10408 }
10409 int[] array = row.elements;
10410 int num = GetPietyValue() * (120 + Evalue(1407) * 15 + Evalue(1228) * 20) / 100;
10411 for (int i = 0; i < array.Length; i += 2)
10412 {
10413 int num2 = array[i + 1] * num / 50;
10414 if (array[i] == 79)
10415 {
10416 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
10417 }
10418 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10419 {
10420 num2 = 20;
10421 }
10422 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
10423 }
10424 }
10426 }
string idFaith
Definition: Chara.cs:233
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:10376
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 1905 of file Chara.cs.

1906 {
1907 if (ride != null && !ride.IsDeadOrSleeping)
1908 {
1910 _Speed = ride._Speed;
1911 info?.AddText("rideSpeed".lang(_Speed.ToString() ?? ""));
1912 }
1913 else if (host != null)
1914 {
1915 if (host.ride == this)
1916 {
1917 _Speed = Evalue(79);
1918 int a = Evalue(1423);
1919 int value = 100 + (int)_Speed * ((!race.tag.Contains("noRide")) ? 1 : 5) * Mathf.Max(a, 1) - base.STR - host.EvalueRiding() * 2 - (race.tag.Contains("ride") ? 50 : 0);
1920 _Speed = _Speed * 100 / Mathf.Clamp(value, 100, 1000);
1921 }
1922 else
1923 {
1924 _Speed = (Evalue(79) + host.Evalue(79)) / 2;
1925 }
1926 }
1927 else
1928 {
1929 _Speed = Evalue(79) + Evalue(407) / 2;
1930 }
1931 if (body.GetSlot(37, onlyEmpty: false)?.thing != null && HasElement(1209) && !HasElement(419))
1932 {
1933 _Speed -= 25L;
1934 info?.AddText(-25L, EClass.sources.elements.map[1209].GetName());
1935 }
1936 if (parasite != null)
1937 {
1938 long speed = _Speed;
1939 _Speed = _Speed * 100 / Mathf.Clamp(120 + parasite.LV * 2 - base.STR - Evalue(227) * 2, 100, 1000);
1940 info?.AddText(_Speed - speed, "parasiteSpeed".lang());
1941 }
1942 if (_Speed < elements.ValueWithoutLink(79) / 3)
1943 {
1945 info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
1946 }
1947 int num = 100;
1948 if (EClass._zone.map != null && (EClass._zone.IsUnderwater || (base.Cell.IsTopWaterAndNoSnow && !base.Cell.isFloating)))
1949 {
1950 int num2 = Evalue(200);
1951 int num3 = Evalue(1252);
1952 num = 50 + Mathf.Clamp((int)Mathf.Sqrt(num2) * 5 - EClass._zone.DangerLv / 50, (num3 > 0) ? 50 : ((base.IsPowerful || IsMultisize) ? 40 : 0), 50) + Mathf.Clamp((int)Mathf.Sqrt(num2), 0, 25);
1953 if (info != null && num != 100)
1954 {
1955 info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
1956 }
1957 if (num3 > 0)
1958 {
1959 num += num3 * 20;
1960 info?.AddFix(num3 * 20, EClass.sources.elements.map[1252].GetName().ToTitleCase());
1961 }
1962 }
1963 if (IsPCFaction)
1964 {
1965 switch (burden.GetPhase())
1966 {
1967 case 1:
1968 num -= 10;
1969 info?.AddFix(-10, burden.GetPhaseStr());
1970 break;
1971 case 2:
1972 num -= 20;
1973 info?.AddFix(-20, burden.GetPhaseStr());
1974 break;
1975 case 3:
1976 num -= 30;
1977 info?.AddFix(-30, burden.GetPhaseStr());
1978 break;
1979 case 4:
1980 num -= (IsPC ? 50 : 100);
1981 info?.AddFix(IsPC ? (-50) : (-100), burden.GetPhaseStr());
1982 break;
1983 }
1984 if (IsPC)
1985 {
1986 switch (stamina.GetPhase())
1987 {
1988 case 1:
1989 num -= 10;
1990 info?.AddFix(-10, stamina.GetPhaseStr());
1991 break;
1992 case 0:
1993 num -= 20;
1994 info?.AddFix(-20, stamina.GetPhaseStr());
1995 break;
1996 }
1997 switch (sleepiness.GetPhase())
1998 {
1999 case 2:
2000 num -= 10;
2001 info?.AddFix(-10, sleepiness.GetPhaseStr());
2002 break;
2003 case 3:
2004 num -= 20;
2005 info?.AddFix(-20, sleepiness.GetPhaseStr());
2006 break;
2007 }
2008 switch (hunger.GetPhase())
2009 {
2010 case 3:
2011 case 4:
2012 num -= 10;
2013 info?.AddFix(-10, hunger.GetPhaseStr());
2014 break;
2015 case 5:
2016 num -= 30;
2017 info?.AddFix(-30, hunger.GetPhaseStr());
2018 break;
2019 }
2020 num += EClass.player.lastEmptyAlly * Evalue(1646);
2021 info?.AddFix(EClass.player.lastEmptyAlly * Evalue(1646), EClass.sources.elements.map[1646].GetName());
2022 }
2024 {
2025 num += EClass.player.lastEmptyAlly * 10 - 10;
2026 info?.AddFix(EClass.player.lastEmptyAlly * 10 - 10, "exceedParty".lang());
2027 }
2028 }
2029 else if (base.LV >= 1000 && !EClass.game.principal.disableVoidBlessing && !base.IsPCFactionOrMinion)
2030 {
2031 num += EClass.curve((base.LV - 900) / 100 * 10, 500, 100);
2032 info?.AddFix(EClass.curve((base.LV - 900) / 100 * 10, 500, 100), "enemySpeedBuff".lang());
2033 }
2034 if (HasCondition<ConGravity>())
2035 {
2036 num -= 30;
2037 info?.AddFix(-30, GetCondition<ConGravity>().Name);
2038 }
2039 if (_Speed < 10)
2040 {
2041 _Speed = 10L;
2042 }
2043 _Speed = _Speed * num / 100;
2044 if (_Speed < 10)
2045 {
2046 _Speed = 10L;
2047 info?.AddText("minSpeed".lang(10.ToString() ?? ""));
2048 }
2049 dirtySpeed = false;
2050 }
Thing thing
Definition: BodySlot.cs:8
override string ToString()
Definition: Chara.cs:1198
bool dirtySpeed
Definition: Chara.cs:172
long _Speed
Definition: Chara.cs:174
void AddText(string text, FontColor col=FontColor.Warning)
Definition: ELEMENT.cs:111
void AddFix(int v, string text)
Definition: ELEMENT.cs:132
bool disableVoidBlessing
int lastEmptyAlly
Definition: Player.cs:1219

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, IsMultisize, 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 _Move(), ConGravity.OnRefresh(), Player.RefreshEmptyAlly(), RefreshSpeed(), and Element.BonusInfo.WriteNote().

◆ RefreshWorkElements()

void Chara.RefreshWorkElements ( ElementContainer  parent = null)
inline

Definition at line 9192 of file Chara.cs.

9193 {
9194 if (workElements != null)
9195 {
9197 }
9198 workElements = null;
9199 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
9200 {
9201 return;
9202 }
9203 foreach (Hobby item in ListHobbies())
9204 {
9205 TryAdd(item);
9206 }
9207 foreach (Hobby item2 in ListWorks())
9208 {
9209 TryAdd(item2);
9210 }
9211 if (workElements != null)
9212 {
9214 }
9215 void TryAdd(Hobby h)
9216 {
9217 if (!h.source.elements.IsEmpty())
9218 {
9219 if (workElements == null)
9220 {
9222 }
9223 for (int i = 0; i < h.source.elements.Length; i += 2)
9224 {
9225 int num = h.source.elements[i];
9226 int num2 = h.source.elements[i + 1];
9227 int num3 = 100;
9228 if (num != 2115 && num != 2207)
9229 {
9230 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
9231 if (num3 <= 0)
9232 {
9233 continue;
9234 }
9235 }
9236 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
9237 }
9238 }
9239 }
9240 }
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().

◆ RemoveAllStances()

void Chara.RemoveAllStances ( )
inline

Definition at line 9809 of file Chara.cs.

9810 {
9811 for (int num = conditions.Count - 1; num >= 0; num--)
9812 {
9813 Condition condition = conditions[num];
9814 if (condition.Type == ConditionType.Stance)
9815 {
9816 condition.Kill();
9817 }
9818 }
9819 }

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

Referenced by CharaGenes.Remove().

◆ RemoveCondition< T >()

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

Definition at line 9660 of file Chara.cs.

9660 : Condition
9661 {
9662 for (int num = conditions.Count - 1; num >= 0; num--)
9663 {
9664 if (conditions[num] is T)
9665 {
9666 conditions[num].Kill();
9667 break;
9668 }
9669 }
9670 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 2247 of file Chara.cs.

2248 {
2249 if (body.slots.Count != 0)
2250 {
2251 BodySlot bodySlot = body.slots.LastItem();
2252 body.RemoveBodyPartAt(body.slots.Count - 1);
2253 if (msg)
2254 {
2255 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2256 PlaySound("offering");
2257 }
2258 }
2259 }
int elementId
Definition: BodySlot.cs:6
void RemoveBodyPartAt(int idx)
Definition: CharaBody.cs:344

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

8563 {
8564 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this)
8565 {
8566 return false;
8567 }
8568 if (host != null && host.isRestrained)
8569 {
8570 return false;
8571 }
8572 if (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion)
8573 {
8574 return false;
8575 }
8576 bool flag = false;
8577 foreach (Chara chara in EClass._map.charas)
8578 {
8579 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))
8580 {
8581 continue;
8582 }
8583 bool flag2 = chara.HasElement(1225) && !chara.GetBool(126);
8584 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
8585 {
8586 continue;
8587 }
8588 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
8589 int num2 = Dist(chara);
8590 if (num2 > 25)
8591 {
8592 continue;
8593 }
8594 if (num2 > num || !chara.CanSeeLos(pos, num2))
8595 {
8596 if (!flag2)
8597 {
8598 continue;
8599 }
8600 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
8601 if (!nearestPoint.IsValid)
8602 {
8603 continue;
8604 }
8605 chara.Teleport(nearestPoint);
8606 chara.AddCooldown(1225, 10);
8607 num2 = Dist(chara);
8608 Say("intercept_loyal", chara, this);
8609 chara.SetEnemy(attacker);
8610 attacker.SetEnemy(chara);
8611 if (num2 > num || !chara.CanSeeLos(pos, num2))
8612 {
8613 continue;
8614 }
8615 }
8616 if (!flag && !HasElement(1225))
8617 {
8618 Say("intercept", chara, this);
8619 if (EClass.rnd(10) == 0)
8620 {
8621 chara.Talk("intercept", base.NameSimple);
8622 }
8623 if (attacker.enemy == this)
8624 {
8625 attacker.SetEnemy(chara);
8626 }
8627 action(chara);
8628 flag = true;
8629 }
8630 }
8631 return flag;
8632 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5957
ConSuspend conSuspend
Definition: Chara.cs:104
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8843
bool HasCooldown(int idEle)
Definition: Chara.cs:8894

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

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

◆ RerollHobby()

void Chara.RerollHobby ( bool  extraSlotChance = true)
inline

Definition at line 9286 of file Chara.cs.

9287 {
9288 if (_hobbies != null && _works != null)
9289 {
9290 _hobbies.Clear();
9291 _works.Clear();
9292 }
9293 else
9294 {
9295 _hobbies = new List<int>();
9296 _works = new List<int>();
9297 }
9298 if (source.hobbies.IsEmpty())
9299 {
9300 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
9301 }
9302 else
9303 {
9304 string[] hobbies = source.hobbies;
9305 foreach (string key in hobbies)
9306 {
9307 AddHobby(EClass.sources.hobbies.alias[key].id);
9308 }
9309 }
9310 if (source.works.IsEmpty())
9311 {
9312 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
9313 }
9314 else
9315 {
9316 string[] hobbies = source.works;
9317 foreach (string key2 in hobbies)
9318 {
9319 AddWork(EClass.sources.hobbies.alias[key2].id);
9320 }
9321 }
9323 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:9325
void AddWork(int id)
Definition: Chara.cs:9274
void AddHobby(int id)
Definition: Chara.cs:9262
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 2261 of file Chara.cs.

2262 {
2263 for (int num = body.slots.Count - 1; num >= 0; num--)
2264 {
2265 BodySlot bodySlot = body.slots[num];
2266 if (bodySlot.elementId == 45 || bodySlot.elementId == 40)
2267 {
2268 return;
2269 }
2270 body.RemoveBodyPart(num);
2271 }
2272 string[] array = race.figure.Split('|');
2273 foreach (string s in array)
2274 {
2275 int num2 = ParseBodySlot(s);
2276 if (num2 != -1)
2277 {
2278 body.AddBodyPart(num2);
2279 }
2280 }
2282 }

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8728 of file Chara.cs.

8729 {
8730 _ = base.c_upgrades;
8731 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9866 of file Chara.cs.

9867 {
9868 if (con.power > 0 && resistCon != null)
9869 {
9870 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9871 if (1000 < EClass.rnd(a))
9872 {
9873 con.power = 0;
9874 }
9875 else if (500 < EClass.rnd(a))
9876 {
9877 con.power /= 5;
9878 }
9879 else if (200 < EClass.rnd(a))
9880 {
9881 con.power /= 3;
9882 }
9883 else if (100 < EClass.rnd(a))
9884 {
9885 con.power /= 2;
9886 }
9887 }
9888 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4764 of file Chara.cs.

4765 {
4766 string equip = source.equip;
4767 if (equip.IsEmpty())
4768 {
4769 equip = job.equip;
4770 }
4771 if (equip == "none")
4772 {
4773 return;
4774 }
4775 bool flag = true;
4776 switch (id)
4777 {
4778 case "kettle":
4779 case "quru":
4780 case "loytel":
4781 case "shojo":
4782 EQ_ID("staff_long", 1);
4783 EQ_CAT("head");
4784 EQ_CAT("torso");
4785 EQ_CAT("arm");
4786 return;
4787 case "adv_yukiimo":
4788 if (onCreate)
4789 {
4790 EQ_ID("tail_snowleopard");
4791 }
4792 break;
4793 case "adv_kiria":
4794 if (onCreate)
4795 {
4796 EQ_ID("sword_zephir");
4797 }
4798 break;
4799 case "adv_mesherada":
4800 if (onCreate)
4801 {
4802 EQ_ID("dagger_hathaway");
4803 }
4804 break;
4805 case "adv_verna":
4806 if (onCreate)
4807 {
4808 EQ_ID("staff_long", -1, Rarity.Legendary);
4809 }
4810 if (onCreate)
4811 {
4812 EQ_ID("cloak_wing", -1, Rarity.Mythical);
4813 }
4814 break;
4815 case "big_sister":
4816 if (onCreate)
4817 {
4818 EQ_ID("sword_muramasa");
4819 }
4820 break;
4821 case "adv_gaki":
4822 if (onCreate)
4823 {
4824 EQ_ID("dagger_gaki");
4825 }
4826 if (onCreate)
4827 {
4828 EQ_ID("dagger_ninto");
4829 }
4830 break;
4831 case "adv_ivory":
4832 EQ_ID("dagger", -1, Rarity.Legendary);
4833 AddThing("60");
4834 break;
4835 case "adv_wini":
4836 if (onCreate)
4837 {
4838 EQ_ID("staff_Cat", -1, Rarity.Mythical);
4839 }
4841 if (onCreate)
4842 {
4843 AddThing("1071");
4844 }
4845 break;
4846 case "namamani":
4847 if (onCreate)
4848 {
4849 AddThing("gun_gravity2");
4850 }
4851 break;
4852 case "lomias":
4853 if (onCreate)
4854 {
4855 AddThing("bow_vindale");
4856 }
4857 break;
4858 case "larnneire":
4859 if (onCreate)
4860 {
4861 EQ_ID("EtherDagger2");
4862 }
4863 break;
4864 case "keeper_garden":
4865 if (!body.HasWeapon())
4866 {
4867 EQ_ID("sword_ragnarok");
4868 }
4869 break;
4870 case "ungaga_pap":
4871 if (onCreate)
4872 {
4873 EQ_ID("axe_destruction");
4874 }
4875 break;
4876 case "lurie_boss":
4877 if (onCreate)
4878 {
4879 EQ_ID("ribbon_duponne");
4880 }
4881 break;
4882 case "seeker":
4883 if (onCreate)
4884 {
4885 EQ_ID("helm_seeker");
4886 }
4887 EQ_ID("robe_pope");
4888 EQ_ID("sword_katana");
4889 EQ_ID("staff");
4890 EQ_ID("sword_katana");
4891 if (onCreate)
4892 {
4893 EQ_ID("boots_seven");
4894 }
4895 if (onCreate)
4896 {
4897 for (int i = 0; i < 20; i++)
4898 {
4900 }
4901 EQ_Item("panty");
4902 AddThing("plat").SetNum(6);
4903 }
4904 break;
4905 case "ephrond":
4906 if (onCreate)
4907 {
4908 AddThing("guitar_efrond");
4909 }
4910 break;
4911 case "ashland":
4912 if (onCreate)
4913 {
4914 AddThing("guitar_ash");
4915 }
4916 break;
4917 case "swordkeeper":
4918 if (onCreate)
4919 {
4920 EQ_ID("EtherDagger");
4921 }
4922 break;
4923 case "mech_angel":
4924 if (onCreate)
4925 {
4926 Thing thing = ThingGen.Create("pole_holy");
4927 thing.SetReplica(on: true);
4928 thing.rarity = Rarity.Normal;
4929 thing.elements.SetTo(60, -15);
4930 thing.elements.SetTo(418, -100);
4931 thing.elements.SetTo(93, 50);
4932 AddThing(thing);
4933 body.Equip(thing);
4934 flag = false;
4935 }
4936 break;
4937 case "azzrasizzle":
4938 if (onCreate)
4939 {
4940 EQ_ID("staff_magius");
4941 }
4942 break;
4943 case "sorin":
4944 if (onCreate)
4945 {
4946 EQ_ID("staff_insanity");
4947 }
4948 break;
4949 case "robot":
4950 if (onCreate)
4951 {
4952 EQ_ID("sword_katana");
4953 }
4954 break;
4955 case "mimu":
4956 if (onCreate)
4957 {
4958 EQ_ID("staff_leek");
4959 }
4960 break;
4961 case "kumatan":
4962 if (onCreate)
4963 {
4964 EQ_ID("dagger_hocho");
4965 }
4966 break;
4967 }
4968 if (!TryEquipRanged())
4969 {
4970 switch (id)
4971 {
4972 case "tyche":
4973 case "trooper":
4974 case "mech_scarab":
4975 AddThing("gun_laser");
4976 break;
4977 case "rocketman":
4978 {
4979 Thing thing2 = AddThing("panzerfaust");
4980 thing2.ChangeMaterial("iron");
4981 thing2.c_ammo = 0;
4982 break;
4983 }
4984 default:
4985 switch (equip)
4986 {
4987 case "archer":
4988 EQ_CAT((EClass.rnd(4) == 0) ? "crossbow" : "bow");
4989 break;
4990 case "inquisitor":
4991 case "gunner":
4992 EQ_CAT("gun");
4993 break;
4994 }
4995 break;
4996 }
4997 }
4998 int num = ((base.rarity >= Rarity.Mythical) ? (base.LV * 3) : ((base.rarity >= Rarity.Legendary) ? (base.LV * 2) : base.LV));
4999 if (trait is TraitAdventurer)
5000 {
5001 num *= 3;
5002 }
5003 if (race.id == "asura")
5004 {
5005 for (int j = 0; j < 4; j++)
5006 {
5007 EQ_CAT(job.weapon.RandomItem());
5008 }
5009 }
5010 for (int k = 0; k < ((!(race.id == "mutant")) ? 1 : (2 + base.LV / 30)); k++)
5011 {
5012 if (flag)
5013 {
5014 if (source.ContainsTag("boxer"))
5015 {
5016 EQ_CAT("martial");
5017 }
5018 else if (!job.weapon.IsEmpty())
5019 {
5020 if (race.id == "mutant" || (body.slotMainHand != null && body.slotMainHand.thing == null))
5021 {
5022 EQ_CAT(job.weapon.RandomItem());
5023 }
5024 if (race.id == "mutant" || (Evalue(131) > 0 && EClass.rnd(2) == 0))
5025 {
5026 EQ_CAT(job.weapon.RandomItem());
5027 }
5028 }
5029 }
5030 EQ_CAT("torso");
5031 if (EClass.rnd(num) > 5)
5032 {
5033 EQ_CAT("arm");
5034 }
5035 if (EClass.rnd(num) > 10)
5036 {
5037 EQ_CAT("head");
5038 }
5039 if (EClass.rnd(num) > 15)
5040 {
5041 EQ_CAT("back");
5042 }
5043 if (EClass.rnd(num) > 20)
5044 {
5045 EQ_CAT("ring");
5046 }
5047 if (EClass.rnd(num) > 25)
5048 {
5049 EQ_CAT("amulet");
5050 }
5051 if (EClass.rnd(num) > 30)
5052 {
5053 EQ_CAT("foot");
5054 }
5055 if (EClass.rnd(num) > 35)
5056 {
5057 EQ_CAT("waist");
5058 }
5059 if (EClass.rnd(num) > 40)
5060 {
5061 EQ_CAT("ring");
5062 }
5063 }
5064 if (trait is TraitBard)
5065 {
5066 AddThing(ThingGen.Create("lute"));
5067 if (EClass.debug.enable || EClass.rnd(100) == 0)
5068 {
5069 EQ_ID("shield_lute");
5070 }
5071 }
5072 if (HasTag(CTAG.shield))
5073 {
5074 EQ_CAT("shield");
5075 }
5076 }
Card ChangeMaterial(int idNew, bool ignoreFixedMaterial=false)
Definition: Card.cs:3117
Card AddCard(Card c)
Definition: Card.cs:3166
void SetReplica(bool on)
Definition: Card.cs:3151
bool HasWeapon()
Definition: CharaBody.cs:400
BodySlot slotMainHand
Definition: CharaBody.cs:10
void EQ_Item(string s, int num=1)
Definition: Chara.cs:5186
Thing EQ_ID(string s, int mat=-1, Rarity r=Rarity.Random)
Definition: Chara.cs:5150
bool TryEquipRanged()
Definition: Chara.cs:8005
void EQ_CAT(string s)
Definition: Chara.cs:5170
void SetTo(int id, int v)
static Thing CreateSpellbook(string alias, int num=1)
Definition: ThingGen.cs:151

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

Referenced by CoreDebug.QuickStart().

◆ RestockInventory()

void Chara.RestockInventory ( bool  onCreate)
inline

Definition at line 5078 of file Chara.cs.

5079 {
5080 switch (id)
5081 {
5082 case "lomias":
5083 if (ShouldRestock("_meat"))
5084 {
5085 AddCard(ThingGen.Create("_meat").MakeRefFrom("begger"));
5086 }
5087 break;
5088 case "fiama":
5089 Restock("book_story", 1);
5090 break;
5091 case "rock_thrower":
5092 Restock("stone", 10 + EClass.rnd(10));
5093 break;
5094 case "giant":
5095 Restock("rock", 2 + EClass.rnd(10));
5096 break;
5097 case "farris":
5098 Restock("lute", 1);
5099 Restock("book_story_home", 1);
5100 break;
5101 case "begger":
5102 break;
5103 }
5104 void Restock(string id, int num)
5105 {
5106 if (ShouldRestock(id))
5107 {
5108 AddCard(ThingGen.Create(id).SetNum(num));
5109 }
5110 }
5111 bool ShouldRestock(string id)
5112 {
5113 return things.Find(id) == null;
5114 }
5115 }

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

◆ Revive()

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

Definition at line 5230 of file Chara.cs.

5231 {
5232 if (!isDead)
5233 {
5234 return;
5235 }
5236 isDead = false;
5237 base.hp = MaxHP / 3;
5238 mana.value = 0;
5239 stamina.value = 0;
5240 if (hunger.value > 30)
5241 {
5242 hunger.value = 30;
5243 }
5244 sleepiness.value = 0;
5246 RemoveCondition<StanceTaunt>();
5247 if (id == "keeper_garden")
5248 {
5249 SaiyanRevive();
5250 }
5251 if (IsPC)
5252 {
5254 {
5255 Msg.Say("noDeathPenalty2", this);
5256 }
5258 {
5259 Msg.Say("noDeathPenalty", this);
5260 }
5261 else
5262 {
5264 }
5265 List<Thing> dropList = new List<Thing>();
5266 EClass.pc.things.Foreach(delegate(Thing t)
5267 {
5269 {
5270 t.ignoreAutoPick = true;
5271 dropList.Add(t);
5272 }
5273 }, onlyAccessible: false);
5274 foreach (Thing item in dropList)
5275 {
5277 Msg.Say("backpack_full_drop", item);
5278 }
5279 EClass.player.preventDeathPenalty = false;
5280 }
5281 if (IsPCFaction && homeBranch != null)
5282 {
5283 homeBranch.Log("bRevive", this);
5284 }
5285 if (p != null)
5286 {
5287 if (!p.IsInBounds)
5288 {
5290 }
5291 EClass._zone.AddCard(this, p);
5292 if (msg)
5293 {
5294 SE.Play("revive");
5295 Msg.Say("revive", this);
5296 PlayEffect("revive");
5297 }
5298 SetCensored(enable: false);
5299 }
5300 }
void SetCensored(bool enable)
Definition: Card.cs:7944
Card parentCard
Definition: Card.cs:104
void SaiyanRevive()
Definition: Chara.cs:5302
void ApplyDeathPenalty()
Definition: Chara.cs:5336
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1193
void Foreach(Action< Thing > action, bool onlyAccessible=true)
override int SelfWeight
Definition: Thing.cs:67

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

3579 {
3580 if (renderer.hasActor)
3581 {
3582 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3583 }
3584 else
3585 {
3586 base.dir = ((base.dir == 0) ? 1 : 0);
3587 }
3588 UpdateAngle();
3590 }

Referenced by AI_Dance.Run().

◆ SaiyanRevive()

void Chara.SaiyanRevive ( )
inline

Definition at line 5302 of file Chara.cs.

5303 {
5304 ModCorruption(-100000);
5305 if (base.LV < 10000000)
5306 {
5307 SetLv(base.LV * 10 + 9);
5308 }
5309 Refresh();
5310 base.hp = MaxHP;
5311 mana.value = mana.max;
5312 stamina.value = stamina.max;
5313 bossText = true;
5314 }
void ModCorruption(int a)
Definition: Chara.cs:10013

References Stats.max, and Refresh().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 9062 of file Chara.cs.

9063 {
9064 if (IsPC)
9065 {
9067 }
9068 if (ai.IsRunning)
9069 {
9070 if (ai == g && ai.IsNoGoal)
9071 {
9072 return g;
9073 }
9074 ai.Cancel();
9075 if (ai == g)
9076 {
9077 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
9078 return g;
9079 }
9080 }
9081 if (HasCondition<ConWait>())
9082 {
9083 RemoveCondition<ConWait>();
9084 }
9085 ai = g;
9086 ai.SetOwner(this);
9087 if (IsPC)
9088 {
9090 }
9091 return g;
9092 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:189
QueueManager queues
Definition: Player.cs:1237
void OnSetGoal(AIAct newGoal)
Definition: QueueManager.cs:23

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

Referenced by _Move(), Zone.AddCard(), Thing.DoAct(), UIInventory.DoAct(), Player.EndTurn(), GiveGift(), TraitTrolley.OnActivateTrap(), BaseListPeople.OnClick(), LayerCraft.OnClickCraft(), OnCreate(), ZoneInstanceBout.OnLeaveZone(), AM_Paint.OnUpdateInput(), ActBloodsuck.Perform(), ActNTR.Perform(), ActRanged.Perform(), ActRestrain.Perform(), ActSlime.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 9052 of file Chara.cs.

9053 {
9054 SetAI(new GoalCombat());
9055 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 9048 of file Chara.cs.

9049 {
9050 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetCooldown()

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

Definition at line 8861 of file Chara.cs.

8862 {
8863 if (_cooldowns == null)
8864 {
8865 _cooldowns = new List<int>();
8866 }
8867 bool flag = false;
8868 for (int i = 0; i < _cooldowns.Count; i++)
8869 {
8870 if (_cooldowns[i] / 1000 == idEle)
8871 {
8872 if (turns == 0)
8873 {
8874 _cooldowns.RemoveAt(i);
8875 }
8876 else
8877 {
8878 _cooldowns[i] = idEle * 1000 + turns;
8879 }
8880 flag = true;
8881 break;
8882 }
8883 }
8884 if (!flag && turns > 0)
8885 {
8886 AddCooldown(idEle, turns);
8887 }
8888 if (_cooldowns.Count == 0)
8889 {
8890 _cooldowns = null;
8891 }
8892 }

Referenced by ConTransmuteBat.OnRemoved().

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3571 of file Chara.cs.

3572 {
3573 base.dir = d;
3574 UpdateAngle();
3576 }

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

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1896 of file Chara.cs.

1897 {
1898 dirtySpeed = true;
1899 if (host != null)
1900 {
1902 }
1903 }

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

6424 {
6425 enemy = c;
6426 if (c == null)
6427 {
6428 if (ai is GoalCombat)
6429 {
6430 ai.Cancel();
6431 }
6432 }
6433 else
6434 {
6435 calmCheckTurn = 10 + EClass.rnd(30);
6436 }
6437 return c;
6438 }

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

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

◆ SetEQQuality()

void Chara.SetEQQuality ( )
inlineprivate

Definition at line 5117 of file Chara.cs.

5118 {
5120 Rarity rarity = Rarity.Normal;
5121 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
5122 Rarity rarity2 = base.rarity;
5123 if (id == "big_sister")
5124 {
5125 num = (isOnCreate ? 8 : 4);
5126 }
5127 if (!isOnCreate && EClass.rnd(10) != 0)
5128 {
5129 num /= 2;
5130 }
5131 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
5132 {
5133 rarity = Rarity.Superior;
5134 }
5135 else if (rarity2 == Rarity.Legendary)
5136 {
5137 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
5138 }
5139 else if (rarity2 >= Rarity.Mythical)
5140 {
5141 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
5142 }
5143 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
5144 {
5145 rarity = Rarity.Legendary;
5146 }
5147 CardBlueprint.current.rarity = rarity;
5148 }
static void Set(CardBlueprint _bp=null)
static CardBlueprint CharaGenEQ
static bool isOnCreate
Definition: Chara.cs:186

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

◆ SetFaction()

Chara Chara.SetFaction ( Faction  f)
inline

Definition at line 1453 of file Chara.cs.

1454 {
1455 _faction = null;
1456 faction = f;
1458 return this;
1459 }
Faction _faction
Definition: Chara.cs:158
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 1744 of file Chara.cs.

1745 {
1746 faith = r;
1748 }

References faith, and RefreshFaithElement().

◆ SetFaith() [2/2]

void Chara.SetFaith ( string  id)
inline

Definition at line 1739 of file Chara.cs.

1740 {
1742 }
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 10071 of file Chara.cs.

10072 {
10073 Feat feat = elements.GetElement(id) as Feat;
10074 int num = 0;
10075 if (feat != null && feat.Value > 0)
10076 {
10077 if (value == feat.Value)
10078 {
10079 return;
10080 }
10081 num = feat.Value;
10082 feat.Apply(-feat.Value, elements);
10083 }
10084 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
10085 if (feat.Value != 0)
10086 {
10087 feat.Apply(feat.Value, elements);
10088 }
10090 {
10091 Refresh();
10093 }
10094 if (!msg)
10095 {
10096 return;
10097 }
10098 if (feat.source.textInc.IsEmpty())
10099 {
10100 PlaySound("ding_skill");
10102 Say("gainFeat", this, feat.FullName);
10103 }
10104 else
10105 {
10106 bool flag = value < num;
10107 if (feat.source.tag.Contains("neg"))
10108 {
10109 flag = !flag;
10110 }
10111 switch (id)
10112 {
10113 case 1270:
10114 if (!flag)
10115 {
10116 PlaySound("chime_angel");
10117 }
10118 break;
10119 case 1271:
10120 if (!flag)
10121 {
10122 PlaySound("chime_devil");
10123 }
10124 break;
10125 default:
10126 PlaySound("mutation");
10127 break;
10128 }
10130 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
10131 }
10133 }
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 Card._OnDeserialized(), LayerWorldSetting.Apply(), DNA.Apply(), ApplyEditorTags(), ApplyRace(), Card.LevelUp(), TraitFoodEggFertilized.MakeBaby(), Zone_Casino.OnActivate(), OnCreate(), TraitDrinkMilkMother.OnDrink(), ConSleep.OnRemoved(), FoodEffect.Proc(), CoreDebug.SetElement(), DramaOutcome.upgrade_miscreation(), and DramaOutcome.wedding_setup().

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1520 of file Chara.cs.

1521 {
1522 if (!IsGlobal)
1523 {
1525 global = new GlobalData();
1526 base.isSubsetCard = false;
1527 enemy = null;
1528 base.c_uidMaster = 0;
1529 }
1530 return this;
1531 }

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

1506 {
1507 SetGlobal();
1508 homeZone = _home;
1509 _home.AddCard(this, x, z);
1510 global.transition = new ZoneTransition
1511 {
1512 state = ZoneTransition.EnterState.Exact,
1513 x = x,
1514 z = z
1515 };
1516 orgPos = new Point(x, z);
1517 return this;
1518 }

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

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

◆ SetHomeZone()

Chara Chara.SetHomeZone ( Zone  zone)
inline

Definition at line 1461 of file Chara.cs.

1462 {
1463 homeZone = zone;
1464 SetGlobal();
1465 return this;
1466 }

References homeZone, and SetGlobal().

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

◆ SetHostility()

Chara Chara.SetHostility ( Hostility  h)
inline

Definition at line 1468 of file Chara.cs.

1469 {
1470 Hostility hostility2 = (base.c_originalHostility = h);
1471 this.hostility = hostility2;
1472 return this;
1473 }

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

◆ SetMainElement() [1/2]

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

Definition at line 2129 of file Chara.cs.

2130 {
2131 if (base.c_idMainElement != 0)
2132 {
2133 SetElements(base.c_idMainElement, remove: true);
2134 base.c_idMainElement = 0;
2135 }
2136 if (id != 0)
2137 {
2138 _ = EClass.sources.elements.map[id];
2139 SetElements(id, remove: false);
2140 base.c_idMainElement = id;
2141 if (elemental)
2142 {
2143 base.isElemental = true;
2144 _colorInt = 0;
2145 Color colorSprite = EClass.setting.elements[MainElement.source.alias].colorSprite;
2146 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);
2147 }
2148 _ability = null;
2149 }
2150 void SetElements(int idEle, bool remove)
2151 {
2152 elements.SetBase(idEle, (!remove) ? ((v == 0) ? 10 : v) : 0);
2153 elements.ModBase(EClass.sources.elements.alias[EClass.sources.elements.map[idEle].aliasRef].id, remove ? (-20) : 20);
2154 switch (idEle)
2155 {
2156 case 910:
2157 elements.ModBase(951, remove ? 10 : (-10));
2158 break;
2159 case 911:
2160 elements.ModBase(950, remove ? 10 : (-10));
2161 break;
2162 case 912:
2163 elements.ModBase(953, remove ? 10 : (-10));
2164 break;
2165 case 913:
2166 elements.ModBase(952, remove ? 10 : (-10));
2167 break;
2168 case 916:
2169 elements.ModBase(960, remove ? 10 : (-10));
2170 break;
2171 case 919:
2172 elements.ModBase(956, remove ? 10 : (-10));
2173 break;
2174 case 925:
2175 elements.ModBase(962, remove ? 10 : (-10));
2176 break;
2177 case 922:
2178 elements.ModBase(965, remove ? 10 : (-10));
2179 break;
2180 case 921:
2181 elements.ModBase(971, remove ? 10 : (-10));
2182 break;
2183 case 926:
2184 elements.ModBase(961, remove ? 10 : (-10));
2185 break;
2186 case 914:
2187 case 915:
2188 case 917:
2189 case 918:
2190 case 920:
2191 case 923:
2192 case 924:
2193 break;
2194 }
2195 }
2196 }
int _colorInt
Definition: Card.cs:68
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 2120 of file Chara.cs.

2121 {
2122 if (!id.StartsWith("ele"))
2123 {
2124 id = "ele" + id;
2125 }
2126 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
2127 }

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

10136 {
10137 SourceElement.Row row = EClass.sources.elements.map[idEle];
10139 Element element = elements.GetElement(idEle);
10140 Element element2 = elements.GetElement(row2.id);
10141 int num = element?.Value ?? 0;
10142 if (a < 0)
10143 {
10144 a = 0;
10145 }
10146 if (a > row.max)
10147 {
10148 a = row.max;
10149 }
10150 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
10151 if (a == 0 && (element == null || element.Value == 0))
10152 {
10154 return;
10155 }
10156 if (element != null && element.Value == a)
10157 {
10159 return;
10160 }
10161 if (element2 != null && element2.Value > 0)
10162 {
10163 SetFeat(element2.id, 0);
10164 }
10165 SetFeat(idEle, a);
10166 PlaySound("mutation");
10167 PlayEffect("mutation");
10169 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
10170 }

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

9058 {
9059 return SetAI(_NoGoalPC);
9060 }
static NoGoal _NoGoalPC
Definition: Chara.cs:198

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6811 of file Chara.cs.

6812 {
6813 if (IsPCC)
6814 {
6815 PCC.Get(pccData).Build(state);
6816 }
6817 }

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

6860 {
6861 p.mat = base.material;
6862 p.matColor = base.colorInt;
6863 if (!renderer.usePass)
6864 {
6865 return;
6866 }
6867 if (renderer.replacer != null)
6868 {
6869 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6870 if (renderer.replacer.mat != -1)
6871 {
6872 p.mat = EClass.sources.materials.rows.TryGet(renderer.replacer.mat, 0);
6873 p.matColor = BaseTileMap.GetColorInt(ref p.mat.matColor, 100);
6874 p.color -= 1048576f;
6875 }
6876 }
6877 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6878 {
6879 if (source._tiles_snow.Length > 1)
6880 {
6881 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6882 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6883 }
6884 else
6885 {
6886 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6887 }
6888 }
6889 else if (sourceCard._tiles.Length > 1)
6890 {
6891 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6892 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6893 }
6894 else
6895 {
6896 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6897 }
6898 p.dir = base.dir;
6899 }
static int GetColorInt(ref Color matColor, int p)
override bool flipX
Definition: Chara.cs:549
SourceMaterial.Row mat
Definition: RenderParam.cs:17
SourceMaterial materials
virtual bool IsSnowCovered
Definition: Spatial.cs:545

References RenderRow._tiles, SourceChara.Row._tiles_snow, EClass._zone, BaseTileMap.GetColorInt(), Spatial.IsSnowCovered, RenderParam.mat, SourceManager.materials, EClass.sources, 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 7434 of file Chara.cs.

7435 {
7436 switch (m)
7437 {
7438 case UIList.SortMode.ByJob:
7439 sortVal = job._index * 10000 + sourceCard._index;
7440 break;
7441 case UIList.SortMode.ByRace:
7442 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
7443 break;
7444 case UIList.SortMode.ByFeat:
7445 sortVal = -GetTotalFeat();
7446 break;
7447 default:
7448 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7449 break;
7450 case UIList.SortMode.ByWorkk:
7451 break;
7452 }
7453 if (base.isFav)
7454 {
7455 sortVal -= 100000000;
7456 }
7457 }
int sortVal
Definition: Card.cs:102
int GetTotalFeat()
Definition: Chara.cs:8280
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 2108 of file Chara.cs.

2109 {
2110 source = EClass.sources.charas.map.TryGetValue(id);
2111 if (source == null)
2112 {
2113 Debug.LogWarning("Chara " + id + " not found");
2114 id = "chicken";
2115 source = EClass.sources.charas.map[id];
2116 }
2117 path.walker = this;
2118 }

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2451 of file Chara.cs.

2452 {
2453 base.c_summonDuration = duration;
2454 base.isSummon = true;
2455 }

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

7774 {
7775 if (t.IsRangedWeapon && t.category.slot == 0)
7776 {
7777 if (!CanEquipRanged(t))
7778 {
7779 return false;
7780 }
7781 int num = 0;
7782 foreach (Thing thing in things)
7783 {
7784 if (thing.IsRangedWeapon)
7785 {
7786 if (thing.category.slot != 0 && thing.isEquipped)
7787 {
7788 return false;
7789 }
7790 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7791 {
7792 num = thing.GetEquipValue();
7793 }
7794 }
7795 }
7796 if (t.GetEquipValue() > num)
7797 {
7798 return true;
7799 }
7800 return false;
7801 }
7802 BodySlot bodySlot = body.GetSlot(t);
7803 if (bodySlot == null)
7804 {
7805 return false;
7806 }
7807 if (useFav)
7808 {
7809 switch (GetFavAttackStyle())
7810 {
7811 case AttackStyle.Default:
7812 case AttackStyle.TwoHand:
7813 if (t.IsMeleeWeapon)
7814 {
7815 bodySlot = body.slotMainHand;
7816 }
7817 else if (bodySlot.elementId == 35)
7818 {
7819 return false;
7820 }
7821 break;
7822 case AttackStyle.Shield:
7823 if (t.IsMeleeWeapon)
7824 {
7825 bodySlot = body.slotMainHand;
7826 }
7827 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7828 {
7829 return false;
7830 }
7831 break;
7832 case AttackStyle.TwoWield:
7833 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7834 {
7835 return false;
7836 }
7837 break;
7838 }
7839 }
7840 if (!body.IsEquippable(t, bodySlot, text: false))
7841 {
7842 return false;
7843 }
7844 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7845 {
7846 return false;
7847 }
7848 if (!base.IsPCFactionOrMinion)
7849 {
7850 int num2 = 0;
7851 foreach (Element value in t.elements.dict.Values)
7852 {
7853 if (value.Value <= 0)
7854 {
7855 int num3 = 100;
7856 switch (value.id)
7857 {
7858 case 418:
7859 num3 = 10;
7860 break;
7861 case 60:
7862 case 61:
7863 case 62:
7864 num3 = 200;
7865 break;
7866 case 962:
7867 num3 = 10000;
7868 break;
7869 }
7870 num2 += value.Value * num3 / 100;
7871 }
7872 }
7873 if (num2 < -40)
7874 {
7875 return false;
7876 }
7877 }
7878 if (t.HasTag(CTAG.gift) && t.c_uidAttune != base.uid)
7879 {
7880 return false;
7881 }
7882 return true;
7883 }
bool IsMeleeWeapon
Definition: Card.cs:2281
BlessedState blessedState
Definition: Card.cs:279
int c_uidAttune
Definition: Card.cs:1198
bool IsEquippable(Thing thing, BodySlot slot, bool text=true)
Definition: CharaBody.cs:110
AttackStyle GetFavAttackStyle()
Definition: Chara.cs:4720

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

◆ ShouldThrowAway()

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

Definition at line 8634 of file Chara.cs.

8635 {
8636 if (IsPCFaction)
8637 {
8638 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
8639 {
8640 return false;
8641 }
8642 if (t.trait.GetHealAction(this) != null)
8643 {
8644 return false;
8645 }
8646 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
8647 {
8648 return false;
8649 }
8650 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
8651 {
8652 return false;
8653 }
8654 }
8655 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed || t.c_isImportant)
8656 {
8657 return false;
8658 }
8659 if (t.trait is TraitCurrency || t.trait is TraitTool)
8660 {
8661 return false;
8662 }
8663 switch (type)
8664 {
8665 case ClearInventoryType.SellAtTown:
8666 if (!t.isGifted && !t.isNPCProperty)
8667 {
8668 return false;
8669 }
8670 break;
8671 case ClearInventoryType.Purge:
8672 switch (t.category.id)
8673 {
8674 case "fish":
8675 if (EClass.rnd(3) == 0)
8676 {
8677 return true;
8678 }
8679 break;
8680 case "junk":
8681 case "garbage":
8682 if (EClass.rnd(3) != 0)
8683 {
8684 return true;
8685 }
8686 break;
8687 }
8688 if (t.id == "flyer")
8689 {
8690 return true;
8691 }
8692 if (!t.IsDecayed && EClass.rnd(3) == 0)
8693 {
8694 return false;
8695 }
8696 if (!things.IsFull() && t.IsRangedWeapon)
8697 {
8698 return false;
8699 }
8700 break;
8701 }
8702 return true;
8703 }
bool IsThrownWeapon
Definition: Card.cs:2285
bool IsFood
Definition: Card.cs:2215
bool isGifted
Definition: Card.cs:783
virtual Action GetHealAction(Chara c)
Definition: Trait.cs:625

References Card.c_isImportant, 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 7177 of file Chara.cs.

7178 {
7179 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
7180 if (conSuspend != null && IsPCParty)
7181 {
7182 RemoveCondition<ConSuspend>();
7183 }
7184 if (LayerDrama.forceJump == null)
7185 {
7186 if (IsDeadOrSleeping)
7187 {
7188 ShowDialog("_chara", "sleep");
7189 return;
7190 }
7191 if (EClass.pc.isHidden && !CanSee(EClass.pc))
7192 {
7193 ShowDialog("_chara", "invisible");
7194 return;
7195 }
7197 {
7199 ShowDialog("_chara", "give_card");
7200 Thing thing = ThingGen.Create("figure");
7201 thing.MakeFigureFrom(id);
7202 EClass.player.DropReward(thing);
7203 thing = ThingGen.Create("figure3");
7204 thing.MakeFigureFrom(id);
7205 EClass.player.DropReward(thing);
7206 return;
7207 }
7208 if (GetInt(71) == -2)
7209 {
7210 ShowDialog("_chara", "give_lunch");
7211 Thing t = CraftUtil.MakeLoveLunch(this);
7213 SetInt(71, EClass.world.date.GetRaw() + 43200);
7214 return;
7215 }
7216 if (base.isRestrained)
7217 {
7218 ShowDialog("_chara", "strain");
7219 return;
7220 }
7221 if (IsEscorted())
7222 {
7223 ShowDialog("_chara", "escort");
7224 return;
7225 }
7227 {
7228 string step = ((!(EClass._zone is Zone_Wedding)) ? "party" : (IsPCParty ? "wedding_love" : ((IsMarried || affinity.IsWeddingHater) ? "wedding_hater" : "wedding")));
7229 if (EClass._zone is Zone_Wedding && IsPCParty && base.c_love != null && !base.c_love.gaveCutter)
7230 {
7231 step = "wedding_cutter";
7232 EClass.player.DropReward(ThingGen.Create("dagger_cakecutter"));
7233 base.c_love.gaveCutter = true;
7234 }
7235 ShowDialog("_chara", step);
7236 return;
7237 }
7238 if (EClass.game.quests.OnShowDialog(this))
7239 {
7240 return;
7241 }
7242 if (id == "nino")
7243 {
7245 }
7246 switch (id)
7247 {
7248 case "loytel":
7249 {
7251 {
7252 EClass.game.quests.Get("pre_debt_runaway").Complete();
7253 EClass.player.flags.loytelEscaped = false;
7254 EClass.game.quests.Add("debt", "loytel");
7255 ShowDialog("loytel", "loytelEscaped");
7256 return;
7257 }
7258 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
7259 if (questDebt != null && questDebt.paid)
7260 {
7261 questDebt.stage++;
7262 if (questDebt.stage > 7)
7263 {
7264 questDebt.stage = 7;
7265 }
7266 ShowDialog("loytel", "debt" + questDebt.stage);
7267 return;
7268 }
7269 break;
7270 }
7271 case "farris":
7272 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3" || EClass.game.IsSurvival)
7273 {
7274 ShowDialog("farris");
7275 return;
7276 }
7278 {
7279 case -1:
7280 ShowDialog("farris", "nymelle_noQuest");
7281 break;
7282 case 0:
7283 ShowDialog("farris", "nymelle_first");
7284 break;
7285 case 1:
7286 ShowDialog("farris", "home_first");
7287 break;
7288 default:
7289 ShowDialog("farris");
7290 break;
7291 }
7292 return;
7293 case "ashland":
7294 ShowDialog("ashland");
7295 return;
7296 case "fiama":
7297 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv && EClass.game.quests.GetPhase<QuestExploration>() == 3)
7298 {
7299 SoundManager.ForceBGM();
7300 LayerDrama.ActivateMain("mono", "nymelle_crystal");
7301 }
7303 {
7305 {
7306 EClass.player.flags.fiamaFirstDream = true;
7307 ShowDialog("fiama", "firstDream");
7308 }
7310 {
7311 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
7312 {
7313 EClass.player.flags.fiamaStoryBookGiven = true;
7314 EClass.player.DropReward(ThingGen.Create("book_story"));
7315 });
7316 }
7317 else
7318 {
7319 ShowDialog("fiama");
7320 }
7321 }
7322 else
7323 {
7324 ShowDialog("fiama");
7325 }
7326 return;
7327 case "big_sister":
7329 {
7330 ShowDialog("big_sister", "little_saved");
7331 EClass.player.flags.little_saved = false;
7332 return;
7333 }
7335 {
7336 ShowDialog("big_sister", "little_dead");
7337 EClass.player.flags.little_killed = false;
7338 return;
7339 }
7340 break;
7341 }
7342 if (trait is TraitGuildDoorman)
7343 {
7344 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
7345 ShowDialog("guild_doorman", "main", tag);
7346 return;
7347 }
7348 if (trait is TraitGuildClerk)
7349 {
7350 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
7351 ShowDialog("guild_clerk", "main", tag2);
7352 return;
7353 }
7354 }
7355 bool flag = true;
7356 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
7357 {
7358 flag = false;
7359 }
7360 if (flag && File.Exists(PackageIterator.GetFiles("Dialog/Drama/" + id + ".xlsx").LastOrDefault()?.FullName ?? (CorePath.DramaData + id + ".xlsx")))
7361 {
7362 ShowDialog(id);
7363 }
7364 else
7365 {
7366 ShowDialog("_chara");
7367 }
7368 }
bool CanGiveCard()
Definition: Affinity.cs:65
bool IsWeddingHater
Definition: Affinity.cs:36
void MakeFigureFrom(string id)
Definition: Card.cs:5795
void ShowDialog()
Definition: Chara.cs:7177
bool IsMarried
Definition: Chara.cs:611
bool DroppedCard(string id)
Definition: CodexManager.cs:46
void MarkCardDrop(string id)
Definition: CodexManager.cs:41
static string DramaData
Definition: CorePath.cs:182
static Thing MakeLoveLunch(Chara c)
Definition: CraftUtil.cs:220
bool IsSurvival
Definition: Game.cs:276
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:493
int storyFiama
Definition: Player.cs:637
bool little_saved
Definition: Player.cs:457
bool fiamaStoryBookGiven
Definition: Player.cs:313
bool fiamaFirstDream
Definition: Player.cs:325
bool little_killed
Definition: Player.cs:469
CodexManager codex
Definition: Player.cs:1141
bool EnableDreamStory
Definition: Player.cs:1296
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2598
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
int GetPhase(string id)
Quest Get(string id)
void Complete()
Definition: Quest.cs:473
ReligionHealing Healing
bool IsCrystalLv
Definition: Zone_Nymelle.cs:25
virtual bool IsFestival
Definition: Zone.cs:211

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(), Steam.GetAchievement(), QuestManager.GetPhase(), Date.GetRaw(), ReligionManager.Healing, Spatial.id, Zone_Nymelle.IsCrystalLv, Zone.IsFestival, Card.isHidden, Game.IsSurvival, Affinity.IsWeddingHater, 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 7370 of file Chara.cs.

7371 {
7372 return _ShowDialog(book, null, step, tag);
7373 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:7375

References book.

◆ Slap()

void Chara.Slap ( Chara  c,
bool  slapToDeath = false 
)
inline

Definition at line 6410 of file Chara.cs.

6411 {
6412 PlaySound("whip");
6413 Say("slap", this, c);
6414 c.PlayAnime(AnimeID.Shiver);
6415 c.DamageHP(slapToDeath ? (c.MaxHP * 2) : (5 + EClass.rndHalf(EClass.pc.MaxHP / 3)), 919, 100, AttackSource.Condition);
6416 c.OnInsulted();
6417 if (slapToDeath && c.IsAliveInCurrentZone)
6418 {
6419 c.Die();
6420 }
6421 }
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6390
void OnInsulted()
Definition: Chara.cs:8347
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Chara.cs:5399

References Card.DamageHP(), Die(), IsAliveInCurrentZone, MaxHP, OnInsulted(), EClass.pc, Card.PlayAnime(), and EClass.rndHalf().

Referenced by DramaOutcome.wedding_fail().

◆ Sleep()

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

Definition at line 9890 of file Chara.cs.

9891 {
9892 RemoveCondition<ConAwakening>();
9893 AddCondition(Condition.Create(100, delegate(ConSleep con)
9894 {
9895 con.pcSleep = 15;
9896 con.pcBed = bed;
9897 con.pcPillow = pillow;
9898 con.pickup = pickup;
9899 con.posBed = posBed;
9900 con.posPillow = posPillow;
9901 }), force: true);
9902 }

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

8271 {
8272 Say("abCatSniff", this, c);
8273 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
8274 c.ShowEmo(Emo.angry);
8275 ShowEmo(Emo.love);
8276 Talk("sniff");
8277 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
8278 }

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

4656 {
4657 return held.Split(a);
4658 }

References Card.Split().

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

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1879 of file Chara.cs.

1880 {
1881 bool flag = EClass._map.FindThing((Thing t) => t.IsInstalled && t.pos.Equals(EClass.pc.pos) && t.trait is TraitStairsUp) != null;
1882 Say(flag ? "dmgBurdenStairs" : "dmgBurdenFallDown", this);
1883 int num = MaxHP;
1884 if (Evalue(1421) > 0)
1885 {
1886 num = mana.max;
1887 }
1888 int num2 = (num * (base.ChildrenWeight * 100 / WeightLimit) / (flag ? 100 : 200) + 1) * mtp / 100;
1889 if (base.hp <= 0)
1890 {
1891 num2 *= 2;
1892 }
1893 DamageHP(num2, flag ? AttackSource.BurdenStairs : AttackSource.BurdenFallDown);
1894 }
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 3996 of file Chara.cs.

3997 {
3998 if (host != null)
3999 {
4000 host.SyncRide();
4001 }
4002 if (ride != null)
4003 {
4004 SyncRide(ride);
4005 }
4006 if (parasite != null)
4007 {
4009 }
4010 }

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

4013 {
4014 if (!c.pos.Equals(pos))
4015 {
4016 if (!pos.IsValid)
4017 {
4018 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
4019 pos = new Point();
4020 }
4021 EClass._map.MoveCard(pos, c);
4022 }
4023 }

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

◆ TalkTopic()

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

Definition at line 7106 of file Chara.cs.

7107 {
7108 if (host == null && !IsInActiveZone)
7109 {
7110 return null;
7111 }
7112 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
7113 {
7114 return null;
7115 }
7116 if (IsPCParty)
7117 {
7118 int num = EClass.pc.party.members.Count - 1;
7119 switch (topic)
7120 {
7121 case "calm":
7122 if (EClass.rnd(num * 5) != 0)
7123 {
7124 return null;
7125 }
7126 break;
7127 case "aggro":
7128 if (EClass.rnd(num * 10) != 0)
7129 {
7130 return null;
7131 }
7132 break;
7133 case "kill":
7134 if (EClass.rnd(num * 3) != 0)
7135 {
7136 return null;
7137 }
7138 break;
7139 case "fov":
7140 return null;
7141 }
7142 }
7143 string topicText = GetTopicText(topic);
7144 if (topicText.IsEmpty())
7145 {
7146 return null;
7147 }
7148 string text = "_bracketTalk".lang();
7149 bool flag = topicText.StartsWith("*");
7150 bool flag2 = topicText.StartsWith("(");
7151 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
7152 topicText = ApplyTone(topicText);
7153 topicText = topicText.Replace("~", "*");
7154 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
7155 Msg.Say(StripTalkSpeiclaCharacters(topicText.Replace("&", "")));
7156 if (topic == "dead")
7157 {
7158 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
7159 }
7160 else if (flag || flag3 || flag2)
7161 {
7162 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
7163 }
7164 return topicText;
7165 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:7015
string StripTalkSpeiclaCharacters(string text)
Definition: Card.cs:6996
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:7094
string GetTopicText(string topic="calm")
Definition: Chara.cs:7073
static UI ui
Definition: EClass.cs:17
Color Thinking
Definition: MsgColors.cs:17
Color Talk
Definition: MsgColors.cs:7

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

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

◆ Tick()

override void Chara.Tick ( )
inlinevirtual

Reimplemented from Card.

Definition at line 4025 of file Chara.cs.

4026 {
4027 SyncRide();
4028 combatCount--;
4029 ignoreSPAbsorb = false;
4030 if (IsPC)
4031 {
4032 if (hasMovedThisTurn)
4033 {
4034 pos.Things.ForeachReverse(delegate(Thing t)
4035 {
4037 {
4038 AI_Goto aI_Goto = ai.Current as AI_Goto;
4039 if ((aI_Goto == null && !(ai is GoalManualMove)) || (aI_Goto != null && !aI_Goto.dest.Equals(pos)))
4040 {
4041 return;
4042 }
4043 }
4044 t.trait.OnStepped(this);
4045 });
4046 if (isDead)
4047 {
4048 return;
4049 }
4050 hasMovedThisTurn = false;
4052 {
4053 EClass.player.haltMove = false;
4054 ActionMode.Adv.TryCancelInteraction(sound: false);
4055 EInput.Consume(1);
4056 return;
4057 }
4058 if (EClass._zone.IsRegion)
4059 {
4061 {
4062 foreach (Chara member in EClass.pc.party.members)
4063 {
4064 if (member.hunger.value > 65)
4065 {
4066 member.InstantEat(null, sound: false);
4067 }
4068 }
4069 }
4070 Chara chara = null;
4072 if (cell2 != null && (cell2.zone == null || (cell2.zone is Zone_Field && !cell2.zone.IsPCFaction)))
4073 {
4074 foreach (Chara chara2 in EClass._map.charas)
4075 {
4076 if (!chara2.IsPCFactionOrMinion && !chara2.IsGlobal && chara2.pos.Equals(EClass.pc.pos))
4077 {
4078 chara = chara2;
4079 break;
4080 }
4081 }
4082 }
4083 if (chara != null)
4084 {
4086 {
4087 EClass.player.safeTravel = 5 + EClass.rnd(5);
4088 }
4089 EClass._zone.RemoveCard(chara);
4090 Msg.Say("encounter");
4091 EClass.player.EnterLocalZone(encounter: true, chara);
4092 }
4093 else if (EClass.player.safeTravel <= 0)
4094 {
4095 if (cell2 != null && cell2.zone == null && !EClass.debug.ignoreEncounter)
4096 {
4098 if (!tileInfo.shore)
4099 {
4100 bool num = EClass.pc.HasCondition<ConWardMonster>();
4101 bool flag = EClass.pc.HasCondition<ConDrawMonster>();
4102 bool flag2 = EClass.game.quests.Get<QuestEscort>() != null;
4103 int num2 = (tileInfo.isRoad ? 22 : 12);
4104 if (flag2)
4105 {
4106 num2 = (tileInfo.isRoad ? 16 : 10);
4107 }
4108 if (num)
4109 {
4110 num2 *= (flag2 ? 2 : 20);
4111 }
4112 if (flag)
4113 {
4114 num2 /= 2;
4115 }
4116 if (EClass.rnd(num2) == 0)
4117 {
4118 Msg.Say("encounter");
4119 if (!flag)
4120 {
4121 EClass.player.safeTravel = 5 + EClass.rnd(5);
4122 }
4123 EClass.player.EnterLocalZone(encounter: true);
4124 }
4125 }
4126 }
4127 }
4128 else
4129 {
4131 }
4132 }
4133 }
4134 EClass.player.pickupDelay = 0f;
4135 if (EClass.player.returnInfo != null)
4136 {
4138 if (EClass.player.returnInfo.turns <= 0)
4139 {
4141 {
4142 EClass.player.returnInfo = null;
4144 }
4145 else
4146 {
4148 {
4149 int uidDest = EClass.player.returnInfo.uidDest;
4150 Zone zone = null;
4151 if (uidDest != 0)
4152 {
4153 zone = EClass.game.spatials.map.TryGetValue(uidDest) as Zone;
4154 }
4155 if (zone == null || zone.destryoed)
4156 {
4157 zone = EClass.world.region;
4158 }
4160 {
4161 Msg.Say("returnFail");
4162 }
4163 else
4164 {
4165 Msg.Say("returnComplete");
4166 EClass.player.uidLastTravelZone = 0;
4168 EClass.player.lastZonePos = null;
4169 }
4170 EClass.player.returnInfo = null;
4171 return;
4172 }
4173 EClass.player.returnInfo = null;
4174 Msg.Say("returnOverweight");
4175 }
4176 }
4177 }
4178 if ((HasNoGoal || !ai.IsRunning) && !WillConsumeTurn())
4179 {
4181 return;
4182 }
4185 {
4186 RecipeUpdater.dirty = true;
4187 }
4189 }
4190 else
4191 {
4192 actTime = EClass.player.baseActTime * Mathf.Max(0.1f, (float)EClass.pc.Speed / (float)Speed);
4193 hasMovedThisTurn = false;
4194 }
4197 {
4198 return;
4199 }
4201 if (host != null && !consumeTurn)
4202 {
4203 if (host.ride == this && ((host.hasMovedThisTurn && IsInCombat) || (enemy != null && turn % 3 != 0)))
4204 {
4205 consumeTurn = true;
4206 }
4207 if (host.parasite == this && enemy != null && EClass.rnd(10) > EClass.rnd(host.Evalue(227) + 10))
4208 {
4209 if (Dist(enemy) < 3 && EClass.rnd(2) == 0)
4210 {
4211 Say("parasite_fail", this, host);
4212 if (EClass.rnd(2) == 0 && GetInt(106) == 0)
4213 {
4214 Talk("parasite_fail");
4215 }
4216 }
4217 consumeTurn = true;
4218 }
4219 }
4220 if (consumeTurn)
4221 {
4222 if (IsPC)
4223 {
4225 }
4226 }
4227 else
4228 {
4229 if (base.isRestrained)
4230 {
4231 TryUnrestrain();
4232 }
4233 if (enemy != null)
4234 {
4236 {
4237 enemy = null;
4238 }
4239 else if (!IsPC && (ai.CancelOnAggro || !ai.IsRunning))
4240 {
4241 SetAIAggro();
4242 }
4243 }
4244 if (HasNoGoal || !ai.IsRunning)
4245 {
4246 ChooseNewGoal();
4247 }
4248 ai.Tick();
4249 }
4250 Cell cell = base.Cell;
4252 {
4253 AddCondition<ConWet>(50);
4254 if (pos.IsHotSpring)
4255 {
4256 hygiene.Mod(2);
4257 }
4258 }
4259 if (IsPC && !EClass._zone.IsRegion && cell.CanSuffocate() && !EClass.debug.godMode && !HasElement(1252))
4260 {
4261 AddCondition<ConSuffocation>(800 / (100 + EvalueMax(200, -5) * 10), force: true);
4262 }
4263 CellEffect e;
4264 if (cell.effect != null)
4265 {
4266 e = cell.effect;
4267 switch (e.id)
4268 {
4269 case 1:
4270 case 2:
4271 case 4:
4272 if (IsLevitating)
4273 {
4274 Say("levitating");
4275 break;
4276 }
4277 AddCondition<ConWet>(50);
4278 ProcEffect();
4279 break;
4280 case 3:
4281 PlaySound("fire_step");
4282 AddCondition<ConBurning>(30);
4283 break;
4284 case 5:
4285 if (!isWet)
4286 {
4287 PlaySound("bubble");
4288 AddCondition<ConWet>(30);
4289 ProcEffect();
4290 }
4291 break;
4292 case 6:
4293 if (hasMovedThisTurn)
4294 {
4295 Say("abMistOfDarkness_step", this);
4296 }
4297 AddCondition<ConDark>(e.power);
4298 break;
4299 }
4300 }
4301 if (IsPC)
4302 {
4303 if (EClass.player.currentHotItem.Thing != null)
4304 {
4306 }
4308 }
4309 void ClearEffect()
4310 {
4311 EClass._map.SetLiquid(cell.x, cell.z, 0, 0);
4312 }
4313 void ProcEffect()
4314 {
4315 if (e.idEffect != 0)
4316 {
4317 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
4318 {
4319 aliasEle = EClass.sources.elements.map[e.idEle].alias,
4320 n1 = e.n1,
4321 refVal = e.refVal
4322 });
4323 ClearEffect();
4324 }
4325 }
4326 }
virtual bool CancelOnAggro
Definition: AIAct.cs:80
bool TryCancelInteraction(bool sound=true)
Definition: AM_Adv.cs:1115
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1086
static AM_Adv Adv
Definition: ActionMode.cs:15
virtual void OnEndPlayerTurn()
int turn
Definition: Card.cs:66
void TryUnrestrain(bool force=false, Chara c=null)
Definition: Card.cs:7328
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:7727
int Speed
Definition: Chara.cs:1109
static bool consumeTurn
Definition: Chara.cs:182
void SetAIAggro()
Definition: Chara.cs:9052
bool ignoreSPAbsorb
Definition: Chara.cs:148
void ChooseNewGoal()
Definition: Chara.cs:8933
bool WillConsumeTurn()
Definition: Chara.cs:3716
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:97
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:1197
float baseActTime
Definition: Player.cs:1225
void EnterLocalZone(bool encounter=false, Chara mob=null)
Definition: Player.cs:1974
HotItem currentHotItem
Definition: Player.cs:1126
int safeTravel
Definition: Player.cs:946
int eloY
Definition: Point.cs:81
int eloX
Definition: Point.cs:79
bool IsHotSpring
Definition: Point.cs:375
bool destryoed
Definition: Spatial.cs:45
virtual void OnTickHeld()
Definition: Trait.cs:1076
virtual bool IgnoreOnSteppedWhenMoving
Definition: Trait.cs:383
Definition: ActRef.cs:2

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

◆ TickConditions()

void Chara.TickConditions ( )
inline

Definition at line 3728 of file Chara.cs.

3729 {
3730 if (_cooldowns != null)
3731 {
3732 TickCooldown();
3733 }
3734 turn++;
3735 consumeTurn = false;
3736 preventRegen = false;
3737 emoIcon = Emo2.none;
3738 if (base.isSummon)
3739 {
3740 base.c_summonDuration--;
3741 if (base.c_summonDuration <= 0)
3742 {
3743 Die();
3744 return;
3745 }
3746 }
3748 {
3749 AddCondition<ConWet>(20);
3750 }
3751 switch (turn % 50)
3752 {
3753 case 0:
3754 happiness = (hunger.value + stamina.value + depression.value + bladder.value + hygiene.value) / 5;
3755 break;
3756 case 1:
3757 if (!IsPC || !EClass.debug.godMode)
3758 {
3759 if (EClass.rnd(2) == 0 && !HasCondition<ConAwakening>())
3760 {
3761 sleepiness.Mod(1);
3762 }
3763 if (EClass.rnd(3) == 0)
3764 {
3765 hunger.Mod(1);
3766 }
3767 if (IsPC && (sleepiness.GetPhase() != 0 || stamina.GetPhase() <= 1))
3768 {
3769 Tutorial.Play("sleep");
3770 }
3771 }
3772 break;
3773 case 2:
3774 if (parasite != null)
3775 {
3776 ModExp(227, (int)((EClass._zone.IsRegion ? 5 : 40) + parasite.affinity.CurrentStage));
3777 }
3778 if (ride != null)
3779 {
3780 ModExp(226, (int)((EClass._zone.IsRegion ? 5 : 40) + ride.affinity.CurrentStage));
3781 }
3782 break;
3783 case 3:
3784 {
3785 int phase = hygiene.GetPhase();
3786 int num = 0;
3787 num = ((!IsPC) ? ((phase > 3) ? 50 : 0) : ((phase > 3) ? 50 : 0));
3788 if (num > EClass.rnd(100))
3789 {
3790 hygiene.Mod(-1);
3791 }
3792 break;
3793 }
3794 case 4:
3795 if (IsPC)
3796 {
3798 }
3799 break;
3800 case 5:
3801 case 30:
3803 {
3804 AddCondition<ConBurning>(1000, force: true);
3805 }
3806 break;
3807 case 10:
3808 if (HasElement(1250))
3809 {
3810 if (!HasCondition<ConVampire>())
3811 {
3812 AddCondition<ConVampire>();
3813 }
3814 if (!IsPC && !HasCooldown(8793))
3815 {
3816 bool flag = false;
3817 flag = ((!HasCondition<ConTransmuteBat>()) ? (!HasElement(431) && pos.IsSunLit) : (body.HasElement(431) || (EClass.world.date.IsNight && !pos.IsSunLit)));
3818 if (flag && base.IsPCFactionOrMinion && !EClass._zone.IsPCFactionOrTent && EClass._zone.HasLaw && pos.ListWitnesses(this).Count > 0 && !HasCondition<ConBurning>())
3819 {
3820 flag = false;
3821 }
3822 if (flag)
3823 {
3824 UseAbility("SpTransmuteBat", this);
3825 }
3826 }
3827 }
3828 if (HasElement(1423) && !HasCondition<ConPeaky>())
3829 {
3830 AddCondition<ConPeaky>();
3831 }
3832 break;
3833 }
3834 if (turn % 200 == 0)
3835 {
3837 }
3838 if (IsPCParty)
3839 {
3840 if (dirtyWeight)
3841 {
3842 CalcBurden();
3843 }
3844 int phase2 = burden.GetPhase();
3845 int phase3 = hunger.GetPhase();
3846 if (phase3 >= 4)
3847 {
3848 preventRegen = true;
3849 }
3850 if (EClass.rnd(EClass._zone.IsRegion ? 100 : 30) == 0 && phase2 >= 3)
3851 {
3852 Say("dmgBurden", this);
3853 DamageHP(MaxHP * (base.ChildrenWeight * 100 / WeightLimit) / 1000 + 1, AttackSource.Burden);
3854 if (isDead)
3855 {
3856 return;
3857 }
3858 }
3859 if (EClass.rnd(12) == 0)
3860 {
3861 if (IsPC)
3862 {
3863 if (phase2 > 0)
3864 {
3865 ModExp(207, 1 + phase2 * phase2);
3866 }
3867 }
3868 else
3869 {
3870 ModExp(207, 4);
3871 }
3872 }
3873 if (IsPC)
3874 {
3875 if (phase3 >= 5)
3876 {
3877 if (!(ai is AI_Eat) && EClass.rnd(5) == 0)
3878 {
3879 DamageHP(1 + EClass.rnd(2) + MaxHP / 50, AttackSource.Hunger);
3880 }
3881 if (!isDead && EClass.rnd(3) == 0)
3882 {
3883 stamina.Mod(-1);
3884 }
3885 }
3886 if (isDead)
3887 {
3888 return;
3889 }
3890 phase3 = stamina.GetPhase();
3891 if (phase3 <= 0)
3892 {
3893 preventRegen = true;
3894 }
3896 {
3897 if (EClass.rnd(100) == 0 && !isConfused)
3898 {
3899 Msg.Say("rain_confuse");
3900 AddCondition<ConConfuse>(500);
3901 }
3902 if (EClass.rnd(300) == 0 && !isBlind)
3903 {
3904 Msg.Say("rain_confuse");
3905 AddCondition<ConBlind>(200);
3906 }
3907 }
3908 if (turn % (200000 / Mathf.Max(100 + Evalue(409) * 10, 50)) == 0)
3909 {
3910 ModCorruption(1);
3911 }
3912 }
3913 }
3914 if (!IsPC)
3915 {
3916 int num2 = Evalue(409);
3917 if (num2 > 0 && turn % (200000 / Mathf.Max(100 + num2 * 10, 50)) == 0)
3918 {
3919 ModCorruption(1);
3920 }
3921 }
3922 for (int num3 = conditions.Count - 1; num3 >= 0; num3--)
3923 {
3924 if (num3 < conditions.Count)
3925 {
3926 Condition condition = conditions[num3];
3927 if (!condition.TimeBased)
3928 {
3929 condition.Tick();
3930 }
3931 if (!condition.IsKilled)
3932 {
3933 if (condition.ConsumeTurn)
3934 {
3935 consumeTurn = true;
3936 }
3937 if (condition.PreventRegen)
3938 {
3939 preventRegen = true;
3940 }
3941 if (condition.EmoIcon != 0 && condition.EmoIcon > emoIcon)
3942 {
3943 emoIcon = condition.EmoIcon;
3944 }
3945 }
3946 if (isDead)
3947 {
3948 return;
3949 }
3950 }
3951 }
3952 string text = id;
3953 if (!(text == "cocoon"))
3954 {
3955 if (text == "tsunami")
3956 {
3957 if (elements.Base(79) < 30)
3958 {
3959 Die();
3960 return;
3961 }
3962 if (IsInCombat)
3963 {
3964 elements.SetTo(79, elements.Base(79) * 3 / 4);
3965 }
3966 }
3967 }
3968 else
3969 {
3970 if (!EClass._zone.IsRegion && !IsDisabled && 1.0001f - (float)base.hp / (float)MaxHP > EClass.rndf(1f) && !pos.IsSunLit)
3971 {
3972 HatchEgg();
3973 return;
3974 }
3975 consumeTurn = true;
3976 }
3977 if (!preventRegen)
3978 {
3979 if (EClass.rnd(25) == 0 && base.hp < MaxHP)
3980 {
3981 HealHP(EClass.rnd(Evalue(300) / 3 + 1) + 1);
3982 elements.ModExp(300, 8f);
3983 }
3984 if (EClass.rnd(8) == 0 && mana.value < mana.max)
3985 {
3986 mana.Mod(EClass.rnd(Evalue(301) / 2 + 1) + 1);
3987 elements.ModExp(301, 8f);
3988 }
3989 if (EClass.rnd(20) == 0 && !IsPC && stamina.value < stamina.max)
3990 {
3991 stamina.Mod(EClass.rnd(5) + 1);
3992 }
3993 }
3994 }
Emo2
Definition: Emo2.cs:2
Definition: AI_Eat.cs:5
Stage CurrentStage
Definition: Affinity.cs:32
virtual bool PreventRegen
virtual bool TimeBased
virtual Emo2 EmoIcon
Definition: BaseStats.cs:17
void HatchEgg()
Definition: Card.cs:5891
bool dirtyWeight
Definition: Card.cs:86
bool HasElement(int idEle)
Definition: CharaBody.cs:412
void TickCooldown()
Definition: Chara.cs:8914
void DiminishTempElements(int a=1)
Definition: Chara.cs:10505
Emo2 emoIcon
Definition: Chara.cs:108
bool UseAbility(int idAct, Card tc=null, Point pos=null, bool pt=false)
Definition: Chara.cs:5887
bool isBlind
Definition: Chara.cs:132
static bool preventRegen
Definition: Chara.cs:184
void CalcBurden()
Definition: Chara.cs:1864
virtual bool IsKilled
Definition: Condition.cs:7
override void Tick()
Definition: Condition.cs:70
void UpdateNyan()
Definition: Player.cs:2438
List< Chara > ListWitnesses(Chara criminal, int radius=4, WitnessType type=WitnessType.crime, Chara target=null)
Definition: Point.cs:830
static void Play(string idStep)
Definition: Tutorial.cs:7
bool IsRaining
Definition: Weather.cs:117
bool IsPCFactionOrTent
Definition: Zone.cs:478

References EClass._map, EClass._zone, affinity, BaseCondition.ConsumeTurn, Weather.CurrentCondition, Affinity.CurrentStage, EClass.debug, BaseStats.EmoIcon, Stats.GetPhase(), CoreDebug.godMode, Card.HasElement(), CharaBody.HasElement(), Zone.HasLaw, Map.IsIndoor, Condition.IsKilled, Zone.IsPCFactionOrTent, Weather.IsRaining, Spatial.IsRegion, Stats.max, Stats.Mod(), EClass.pc, Tutorial.Play(), EClass.player, BaseCondition.PreventRegen, EClass.rnd(), EClass.rndf(), Msg.Say(), Condition.Tick(), BaseCondition.TimeBased, Player.UpdateNyan(), Stats.value, World.weather, and EClass.world.

Referenced by _Move().

◆ TickCooldown()

void Chara.TickCooldown ( )
inline

Definition at line 8914 of file Chara.cs.

8915 {
8916 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8917 {
8918 if (_cooldowns[num] % 1000 == 1)
8919 {
8920 _cooldowns.RemoveAt(num);
8921 }
8922 else
8923 {
8924 _cooldowns[num]--;
8925 }
8926 }
8927 if (_cooldowns.Count == 0)
8928 {
8929 _cooldowns = null;
8930 }
8931 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 9334 of file Chara.cs.

9335 {
9337 if (span != TimeTable.Span.Work && span != 0)
9338 {
9339 return;
9340 }
9341 WorkSummary workSummary = GetWorkSummary();
9342 if (span == TimeTable.Span.Work)
9343 {
9344 if (workSummary.work != null)
9345 {
9346 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
9347 }
9348 }
9349 else if (workSummary.hobbies.Count > 0)
9350 {
9351 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
9352 }
9353 }
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 1198 of file Chara.cs.

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

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

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

◆ TryAbsorbRod()

void Chara.TryAbsorbRod ( Thing  t)
inline

Definition at line 4440 of file Chara.cs.

4441 {
4442 if (!IsPC || !(t.trait is TraitRod) || t.c_charges <= 0 || !HasElement(1564))
4443 {
4444 return;
4445 }
4446 Say("absorbRod", this, t);
4447 TraitRod rod = t.trait as TraitRod;
4448 bool flag = false;
4449 if (rod.source != null)
4450 {
4451 using IEnumerator<SourceElement.Row> enumerator = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.id == rod.source.id).GetEnumerator();
4452 if (enumerator.MoveNext())
4453 {
4454 SourceElement.Row current = enumerator.Current;
4455 if (IsPC)
4456 {
4457 GainAbility(current.id, t.c_charges * 100, t);
4458 flag = true;
4459 }
4460 }
4461 }
4462 if (!flag)
4463 {
4464 mana.Mod(-50 * t.c_charges);
4465 }
4466 t.c_charges = 0;
4468 }
int c_charges
Definition: Card.cs:1295
void GainAbility(int ele, int mtp=100, Thing origin=null)
Definition: Chara.cs:10271

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

7487 {
7488 if (!IsPCFaction && !IsGuest())
7489 {
7490 return null;
7491 }
7492 foreach (Card item in EClass._map.props.installed.all)
7493 {
7494 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7495 {
7496 traitBed.AddHolder(this);
7497 Msg.Say("claimBed", this);
7498 return traitBed;
7499 }
7500 }
7501 return null;
7502 }
bool CanAssign(Chara c)
Definition: TraitBed.cs:165

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

5722 {
5724 {
5725 return;
5726 }
5727 int num = 0;
5728 bool flag = false;
5729 bool flag2 = false;
5730 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5731 TreasureType type = TreasureType.BossQuest;
5732 if (EClass._zone.Boss == this)
5733 {
5734 type = TreasureType.BossNefia;
5735 num = 2 + EClass.rnd(2);
5736 flag = (flag2 = true);
5737 EClass._zone.Boss = null;
5738 Msg.Say("boss_win", EClass._zone.Name);
5740 {
5741 Msg.Say("boss_win_void", EClass._zone.Name);
5742 EClass.player.flags.KilledBossInVoid = true;
5743 }
5744 if (EClass._zone.IsNefia)
5745 {
5748 SE.Play("Jingle/fanfare2");
5749 EClass._zone.SetBGM(114, refresh: true, 3f);
5750 }
5753 }
5754 switch (id)
5755 {
5756 case "azzrasizzle":
5757 num = 5;
5758 flag = (flag2 = true);
5759 EClass.Sound.StopBGM(3f);
5760 EClass._zone.SetBGM(1, refresh: false);
5762 {
5763 EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk();
5764 }
5765 break;
5766 case "vernis_boss":
5767 num = 5;
5768 flag = (flag2 = true);
5769 EClass.Sound.StopBGM(3f);
5770 EClass._zone.SetBGM(1, refresh: false);
5772 {
5773 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5774 }
5775 break;
5776 case "lurie_boss":
5777 if (!(EClass._zone is Zone_Exile))
5778 {
5779 num = 5;
5780 flag = (flag2 = true);
5781 EClass._zone.SetBGM(120, refresh: true, 3f);
5783 {
5784 EClass.game.quests.Get<QuestNegotiationDarkness>().ChangePhase(4);
5785 EClass.player.flags.killedDuponne = true;
5786 }
5787 }
5788 break;
5789 case "ungaga_pap":
5790 num = 5;
5791 flag = (flag2 = true);
5793 {
5794 EClass._zone.SetBGM(46, refresh: true, 3f);
5795 }
5796 break;
5797 case "melilith_boss":
5798 num = 5;
5799 flag = (flag2 = true);
5800 EClass.Sound.StopBGM(3f);
5801 EClass._zone.SetBGM(1, refresh: false);
5802 break;
5803 case "doga":
5804 {
5805 QuestCurry questCurry = EClass.game.quests.Get<QuestCurry>();
5806 if (questCurry != null)
5807 {
5808 num = 5;
5809 flag = (flag2 = true);
5810 EClass.Sound.StopBGM(3f);
5811 EClass._zone.SetBGM(1, refresh: false);
5812 questCurry.NextPhase();
5813 }
5814 break;
5815 }
5816 case "fairy_raina":
5817 case "fairy_poina":
5818 {
5819 bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
5820 QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
5821 if (num2 && questNasu != null && questNasu.phase <= 1)
5822 {
5823 if (questNasu.phase == 0)
5824 {
5825 questNasu.NextPhase();
5826 }
5827 num = 5;
5828 flag = (flag2 = true);
5829 EClass.Sound.StopBGM(3f);
5830 EClass._zone.SetBGM(1, refresh: false);
5831 EClass.player.DropReward(ThingGen.Create("backpack_holding"));
5832 questNasu.NextPhase();
5833 }
5834 break;
5835 }
5836 case "isygarad":
5837 {
5838 num = 5;
5839 flag = (flag2 = true);
5840 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5841 if (questExploration != null)
5842 {
5843 SE.Play("kill_boss");
5844 questExploration.ChangePhase(3);
5845 EClass.Sound.StopBGM(3f);
5846 EClass._zone.SetBGM(1, refresh: false);
5847 }
5848 break;
5849 }
5850 case "swordkeeper":
5851 num = 10;
5852 flag = true;
5853 SE.Play("kill_boss");
5854 SoundManager.ForceBGM();
5855 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5856 break;
5857 }
5858 if (flag)
5859 {
5860 SE.Play("kill_boss");
5861 }
5862 if (num != 0)
5863 {
5865 {
5866 EClass.player.stats.deepest = EClass._zone.DangerLv;
5867 Msg.Say("update_deepest", EClass.player.stats.deepest.ToString() ?? "");
5868 }
5870 {
5871 EClass.player.stats.deepestVoid = -EClass._zone.lv;
5872 Msg.Say("update_deepest_void", EClass.player.stats.deepestVoid.ToString() ?? "");
5873 }
5874 EClass.player.willAutoSave = true;
5875 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5876 point.SetBlock();
5877 point.SetObj();
5878 EClass._zone.AddCard(thing, point).Install();
5879 ThingGen.TryLickChest(thing);
5880 }
5881 if (flag2)
5882 {
5884 }
5885 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:433
int deepest
Definition: Player.cs:114
long nefiaBeaten
Definition: Player.cs:150
int deepestVoid
Definition: Player.cs:117
void ModFame(int a)
Definition: Player.cs:2122
void SetObj(int id=0, int value=1, int dir=0)
Definition: Point.cs:928
void SetBlock(int idMat=0, int idBlock=0)
Definition: Point.cs:918
int phase
Definition: Quest.cs:40
void NextPhase()
Definition: Quest.cs:572
void ChangePhase(int a)
Definition: Quest.cs:577
bool isConquered
Definition: Spatial.cs:382
static void TryLickChest(Thing chest)
Definition: ThingGen.cs:409
static Thing CreateTreasure(string id, int lv, TreasureType type=TreasureType.Map)
Definition: ThingGen.cs:256
static Thing CreateScroll(int ele, int num=1)
Definition: ThingGen.cs:182
virtual bool IsNefia
Definition: Zone.cs:287
void SetBGM(List< int > ids, bool refresh=true, float fadeDuration=0f)
Definition: Zone.cs:3003
Chara Boss
Definition: Zone.cs:86

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

Referenced by ActEffect.Proc().

◆ TryDropCarryOnly()

void Chara.TryDropCarryOnly ( )
inline

Definition at line 4660 of file Chara.cs.

4661 {
4662 if (held != null && held.trait.CanOnlyCarry)
4663 {
4664 DropHeld();
4665 }
4666 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4667 {
4668 DropThing(item);
4669 }
4670 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4692

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

◆ TryEquip()

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

Definition at line 7885 of file Chara.cs.

7886 {
7887 if (!ShouldEquip(t, useFav))
7888 {
7889 return false;
7890 }
7891 if (t.category.slot == 0)
7892 {
7893 return false;
7894 }
7895 if (useFav)
7896 {
7897 BodySlot slot = body.GetSlot(t);
7898 switch (GetFavAttackStyle())
7899 {
7900 case AttackStyle.Default:
7901 case AttackStyle.TwoHand:
7902 if (t.IsMeleeWeapon)
7903 {
7904 slot = body.slotMainHand;
7905 }
7906 break;
7907 case AttackStyle.Shield:
7908 if (t.IsMeleeWeapon)
7909 {
7910 slot = body.slotMainHand;
7911 }
7912 break;
7913 }
7914 body.Equip(t, slot);
7915 }
7916 else
7917 {
7918 body.Equip(t);
7919 }
7920 Say("equip", this, t);
7921 return true;
7922 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7773

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

8006 {
8007 if (IsPC)
8008 {
8010 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
8011 {
8012 ranged = thing;
8013 return true;
8014 }
8015 return false;
8016 }
8017 if (ranged != null && ranged.parent == this)
8018 {
8019 return true;
8020 }
8022 return ranged != null;
8023 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:7990

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

7930 {
7931 Thing dest = null;
7932 if (IsPC)
7933 {
7935 {
7936 return FindThrowable(hotbar: true);
7937 }
7938 return null;
7939 }
7940 things.Foreach(delegate(Thing t)
7941 {
7942 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7943 {
7944 dest = t;
7945 }
7946 });
7947 return dest;
7948 Thing FindThrowable(bool hotbar)
7949 {
7950 things.Foreach(delegate(Thing t)
7951 {
7952 if (dest == null)
7953 {
7954 if (t.IsHotItem)
7955 {
7956 if (!hotbar)
7957 {
7958 return;
7959 }
7960 }
7961 else if (hotbar)
7962 {
7963 return;
7964 }
7965 if (t.HasTag(CTAG.throwWeapon))
7966 {
7967 dest = t;
7968 }
7969 }
7970 });
7971 return dest;
7972 }
7973 }

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

4519 {
4520 if (held == t)
4521 {
4522 return true;
4523 }
4524 if (t.isDestroyed || t.Num <= 0)
4525 {
4526 return false;
4527 }
4528 if (!CanPick(t))
4529 {
4530 if (t.parent == null)
4531 {
4532 EClass._zone.AddCard(t, pos);
4533 }
4534 return false;
4535 }
4536 HoldCard(t, num);
4537 return true;
4538 }
bool CanPick(Card c)
Definition: Chara.cs:4338
void HoldCard(Card t, int num=-1)
Definition: Chara.cs:4540

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

8152 {
8153 int num = Evalue(289);
8154 if (num == 0)
8155 {
8156 return false;
8157 }
8158 int lV = t.LV;
8159 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
8160 {
8161 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
8162 int num2 = 50;
8163 if (lV > num)
8164 {
8165 num2 += (lV - num) * 10;
8166 }
8167 elements.ModExp(289, Mathf.Min(num2, 1000));
8168 return true;
8169 }
8170 return false;
8171 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:2102

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

Referenced by Player.OnAdvanceHour().

◆ TryMove()

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

Reimplemented from Card.

Definition at line 2750 of file Chara.cs.

2751 {
2752 foreach (Condition condition in conditions)
2753 {
2754 if (!condition.TryMove(newPoint))
2755 {
2756 return MoveResult.Fail;
2757 }
2758 }
2759 if (base.isRestrained)
2760 {
2761 if (!IsPC)
2762 {
2763 return MoveResult.Fail;
2764 }
2765 base.isRestrained = false;
2766 }
2767 if (!CanMoveTo(newPoint, allowDestroyPath))
2768 {
2769 return MoveResult.Fail;
2770 }
2771 return _Move(newPoint);
2772 }
virtual bool TryMove(Point p)

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

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

◆ TryMoveTowards()

MoveResult Chara.TryMoveTowards ( Point  p)
inline

Definition at line 2688 of file Chara.cs.

2689 {
2690 if (p.Equals(pos))
2691 {
2692 return MoveResult.Success;
2693 }
2695 {
2696 return MoveResult.Fail;
2697 }
2698 bool flag = true;
2699 Point point = null;
2700 _sharedPos.Set(p);
2701 if (CanDestroyPath())
2702 {
2704 {
2705 return MoveResult.Success;
2706 }
2707 Debug.Log(CanMoveTo(pos));
2709 }
2710 int num = pos.Distance(p);
2711 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2712 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2713 {
2714 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2715 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2716 {
2717 return MoveResult.Success;
2718 }
2719 }
2720 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2721 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2722 {
2723 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2724 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2725 {
2726 return MoveResult.Success;
2727 }
2728 }
2729 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2730 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2731 {
2732 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2733 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2734 {
2735 return MoveResult.Success;
2736 }
2737 }
2738 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2739 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2740 {
2741 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2742 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2743 {
2744 return MoveResult.Success;
2745 }
2746 }
2747 return MoveResult.Fail;
2748 }
static Point _sharedPos
Definition: Chara.cs:176
void RequestPathImmediate(PathProgress progress)
Definition: PathManager.cs:41
List< PathFinderNode > nodes
Definition: PathProgress.cs:16
bool TooHeavyToMove()
Definition: Player.cs:2609
Point GetPointTowards(Point dest)
Definition: Point.cs:801

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

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

◆ TryNeckHunt()

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

Definition at line 9821 of file Chara.cs.

9822 {
9823 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9824 {
9825 return false;
9826 }
9827 if (TC.hp > (long)TC.MaxHP * (long)(Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) + Evalue(1426) * 5) / (TC.IsPowerful ? 200 : 100))
9828 {
9829 return false;
9830 }
9831 if (TC.HasElement(427))
9832 {
9833 return false;
9834 }
9835 if (TC.IsPC && EClass.player.invlunerable)
9836 {
9837 return false;
9838 }
9839 PlaySound("hit_finish");
9840 Say("finish");
9841 Say("finish2", this, TC);
9842 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9843 return false;
9844 }
@ harvest
bool invlunerable
Definition: Player.cs:1199
Definition: TC.cs:4

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

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 10295 of file Chara.cs.

10296 {
10297 if (IsPCParty)
10298 {
10299 foreach (Chara member in EClass.pc.party.members)
10300 {
10301 if (member.HasElement(1641) && EClass.rnd(3) != 0)
10302 {
10303 Msg.Say("curse_nullify", member);
10304 return true;
10305 }
10306 }
10307 }
10308 else if (HasElement(1641) && EClass.rnd(3) != 0)
10309 {
10310 Say("curse_nullify", this);
10311 return true;
10312 }
10313 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
10314 {
10315 Say("curse_nullify", this);
10316 return true;
10317 }
10318 return false;
10319 }

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

◆ TryPickGroundItem()

void Chara.TryPickGroundItem ( Func< Card, bool >  func = null)
inline

Definition at line 4494 of file Chara.cs.

4495 {
4496 foreach (Card item in pos.ListCards())
4497 {
4498 if ((IsPC || !(EClass.pc.ai is AI_UseCrafter aI_UseCrafter) || !aI_UseCrafter.ings.Contains(item)) && item.isThing && item.placeState == PlaceState.roaming && CanPick(item) && (func == null || func(item)))
4499 {
4500 Thing thing = Pick(item.Thing);
4501 if (thing != null && !IsPC)
4502 {
4503 thing.isNPCProperty = true;
4504 }
4505 break;
4506 }
4507 }
4508 }

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4426 of file Chara.cs.

4427 {
4428 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4429 {
4430 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)
4431 .id;
4432 Say("poisonDrip", this);
4433 int num = t.Num;
4434 t.Destroy();
4435 t = ThingGen.Create(text).SetNum(num);
4436 }
4437 return t;
4438 }
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 3270 of file Chara.cs.

3271 {
3272 List<Chara> list = point.ListCharas();
3273 if (list.Count == 0)
3274 {
3275 return;
3276 }
3277 list.Copy().ForeachReverse(delegate(Chara c)
3278 {
3279 if (!c.ai.IsMoveAI && !c.IsPC && c.trait.CanBePushed && c != this && !c.noMove && (!EClass._zone.IsRegion || c.IsPCFactionOrMinion))
3280 {
3281 List<Point> list2 = new List<Point>();
3282 for (int i = point.x - 1; i <= point.x + 1; i++)
3283 {
3284 for (int j = point.z - 1; j <= point.z + 1; j++)
3285 {
3286 if (i != point.x || j != point.z)
3287 {
3288 Point point2 = new Point(i, j);
3289 if (point2.IsValid && !point2.HasChara && !point2.IsBlocked && !point2.cell.hasDoor && !point2.IsBlockByHeight(point))
3290 {
3291 list2.Add(point2);
3292 }
3293 }
3294 }
3295 }
3296 if (list2.Count > 0)
3297 {
3298 if (list2.Count > 1)
3299 {
3300 list2.ForeachReverse(delegate(Point p)
3301 {
3302 if (p.Equals(new Point(point.x + point.x - pos.x, point.z + point.z - pos.z)))
3303 {
3304 list2.Remove(p);
3305 }
3306 });
3307 }
3308 Point newPoint = list2.RandomItem();
3309 if (IsPC)
3310 {
3311 Say("displace", this, c);
3312 PlaySound("push");
3313 }
3314 else if (c.isSynced)
3315 {
3316 c.PlayEffect("push");
3317 }
3318 c.MoveByForce(newPoint, this, checkWall: true);
3319 if (!c.IsPC && c.trait is TraitRogue && EClass.rnd(3) == 0 && GetCurrency() > 20 && !HasElement(426))
3320 {
3321 int num = EClass.rndHalf(10 + Mathf.Min(GetCurrency() / 100, 1000));
3322 c.Talk("pushed");
3323 Say("pushed_money", this, c);
3324 ModCurrency(-num);
3325 c.ModCurrency(num);
3326 c.PlaySound("steal_money");
3327 }
3328 else if (IsPC && !c.IsPCParty && !c.IsUnique && c.IsHumanSpeak && EClass.rnd(5) == 0)
3329 {
3330 c.Talk("pushed");
3331 }
3332 }
3333 }
3334 });
3335 }
bool IsMoveAI
Definition: AIAct.cs:55
bool IsHumanSpeak
Definition: Chara.cs:1029

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

4511 {
4512 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4513 {
4514 EClass._zone.AddCard(t, pos);
4515 }
4516 }
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2137

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

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

7505 {
7506 if (GetInt(113) != 0)
7507 {
7508 return;
7509 }
7510 _ListItems.Clear();
7511 Thing bestRangedWeapon = GetBestRangedWeapon();
7512 foreach (Thing thing in things)
7513 {
7514 if (!thing.IsAmmo && !thing.c_isImportant)
7515 {
7516 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
7517 {
7518 _ListItems.Add(thing);
7519 }
7520 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
7521 {
7522 _ListItems.Add(thing);
7523 }
7524 }
7525 }
7526 if (_ListItems.Count == 0)
7527 {
7528 return;
7529 }
7530 List<Thing> containers2 = containers.ToList();
7531 foreach (Thing listItem in _ListItems)
7532 {
7533 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
7534 }
7535 }
void Add(Act a, string s="")
Definition: ActPlan.cs:11
static List< Thing > _ListItems
Definition: Chara.cs:192

References EClass._zone, Card.c_isImportant, 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 4470 of file Chara.cs.

4471 {
4472 if (t.id == "axe")
4473 {
4474 Tutorial.Reserve("tool");
4475 }
4476 if (t.category.id == "mushroom")
4477 {
4478 Tutorial.Reserve("food");
4479 }
4480 if (t.category.id == "herb")
4481 {
4482 Tutorial.Reserve("herb");
4483 }
4484 if (t.id == "pasture")
4485 {
4486 Tutorial.Reserve("pasture");
4487 }
4488 if (t.id == "log")
4489 {
4490 Tutorial.Reserve("process");
4491 }
4492 }

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4754 of file Chara.cs.

4755 {
4756 isOnCreate = onCreate;
4757 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4758 {
4759 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4760 }
4761 RestockInventory(onCreate);
4762 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:5078
void RestockEquip(bool onCreate)
Definition: Chara.cs:4764

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

6441 {
6442 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))
6443 {
6444 SetEnemy(c);
6445 }
6446 }

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

7543 {
7545 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7542

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

7548 {
7549 if (base.isSummon || (memberType == FactionMemberType.Livestock && homeBranch != null && !homeBranch.policies.IsActive(2715)))
7550 {
7551 return;
7552 }
7553 int num = 2;
7554 int num2 = 1;
7555 int num3 = 2;
7556 bool flag = GetInt(113) == 0;
7557 int num4 = 2;
7558 int num5 = 2;
7559 int num6 = 2;
7561 {
7562 num5 = 0;
7563 num6 = 0;
7564 }
7565 foreach (Thing thing3 in things)
7566 {
7567 if (CanEat(thing3, shouldEat))
7568 {
7569 if (thing3.HasElement(757))
7570 {
7571 num2 -= thing3.Num;
7572 num -= thing3.Num;
7573 }
7574 else
7575 {
7576 num -= thing3.Num;
7577 }
7578 }
7579 if (thing3.trait.GetHealAction(this) != null)
7580 {
7581 num3 -= thing3.Num;
7582 }
7583 if (thing3.id == "polish_powder")
7584 {
7585 num4 -= thing3.Num;
7586 }
7587 if (thing3.trait is TraitBlanketColdproof)
7588 {
7589 num5 -= thing3.Num;
7590 }
7591 if (thing3.trait is TraitBlanketFireproof)
7592 {
7593 num6 -= thing3.Num;
7594 }
7595 }
7596 _ListItems.Clear();
7597 foreach (Thing container in containers)
7598 {
7599 if (!container.IsSharedContainer)
7600 {
7601 continue;
7602 }
7603 foreach (Thing thing4 in container.things)
7604 {
7605 if (!thing4.c_isImportant && thing4.IsIdentified && thing4 != EClass.pc.held)
7606 {
7607 if (num4 > 0 && thing4.id == "polish_powder")
7608 {
7609 _ListItems.Add(thing4);
7610 num4 -= thing4.Num;
7611 }
7612 else if (num5 > 0 && !HasElement(1236) && thing4.trait is TraitBlanketColdproof)
7613 {
7614 _ListItems.Add(thing4);
7615 num5 -= thing4.Num;
7616 }
7617 else if (num6 > 0 && thing4.trait is TraitBlanketFireproof)
7618 {
7619 _ListItems.Add(thing4);
7620 num6 -= thing4.Num;
7621 }
7622 else if (num2 > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant && thing4.HasElement(757))
7623 {
7624 _ListItems.Add(thing4);
7625 num2 -= thing4.Num;
7626 }
7627 else if (num > 0 && CanEat(thing4, shouldEat) && !thing4.c_isImportant)
7628 {
7629 _ListItems.Add(thing4);
7630 num -= thing4.Num;
7631 }
7632 else if (num3 > 0 && thing4.trait.GetHealAction(this) != null)
7633 {
7634 _ListItems.Add(thing4);
7635 num3 -= thing4.Num;
7636 }
7637 else if (flag && thing4.IsEquipmentOrRanged && !thing4.HasTag(CTAG.gift) && ShouldEquip(thing4, useFav: true))
7638 {
7639 _ListItems.Add(thing4);
7640 }
7641 }
7642 }
7643 }
7644 if (_ListItems.Count == 0)
7645 {
7646 return;
7647 }
7648 _ListItems.ForeachReverse(delegate(Thing t)
7649 {
7650 if (t.IsEquipmentOrRanged)
7651 {
7652 bool flag3 = false;
7653 int slot = t.category.slot;
7654 int equipValue = t.GetEquipValue();
7655 foreach (Thing listItem in _ListItems)
7656 {
7657 if (listItem.category.slot == slot && listItem.GetEquipValue() > equipValue)
7658 {
7659 flag3 = true;
7660 break;
7661 }
7662 }
7663 if (flag3)
7664 {
7665 _ListItems.Remove(t);
7666 }
7667 }
7668 });
7669 bool flag2 = false;
7670 foreach (Thing listItem2 in _ListItems)
7671 {
7672 Thing thing = listItem2;
7673 if (things.IsFull(thing))
7674 {
7675 break;
7676 }
7677 Thing thing2 = listItem2.parent as Thing;
7678 if (thing.HasElement(757))
7679 {
7680 if (thing.Num > 1)
7681 {
7682 thing = thing.Split(1);
7683 }
7684 }
7685 else if (thing.Num > 2)
7686 {
7687 thing = thing.Split(2);
7688 }
7689 if (msg)
7690 {
7691 Say("takeSharedItem", this, thing, thing2.GetName(NameStyle.Full));
7692 }
7693 AddCard(thing);
7694 if (ShouldEquip(thing, useFav: true) && thing.category.slot != 0)
7695 {
7696 TryEquip(thing, useFav: true);
7697 flag2 = true;
7698 }
7699 }
7700 if (flag2 && flag)
7701 {
7702 TryPutSharedItems(containers);
7703 }
7704 }
bool IsIdentified
Definition: Card.cs:2417
bool HasItemProtection
bool IsActive(int id, int days=-1)
bool IsSharedContainer
Definition: Thing.cs:113

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

◆ TryUpgrade()

void Chara.TryUpgrade ( bool  msg = true)
inline

Definition at line 8733 of file Chara.cs.

8734 {
8735 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
8736 {
8737 return;
8738 }
8739 for (int i = 0; i < 100; i++)
8740 {
8741 if (base.feat == 0)
8742 {
8743 break;
8744 }
8745 if (base.c_upgrades == null)
8746 {
8747 base.c_upgrades = new CharaUpgrade();
8748 }
8749 if (base.c_upgrades.halt)
8750 {
8751 break;
8752 }
8753 Rand.SetSeed(base.uid + base.c_upgrades.count);
8754 int num = EClass.rnd(100);
8755 int num2 = 0;
8756 int num3 = 1;
8757 int num4 = 0;
8758 bool flag = false;
8759 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
8760 List<Element> list = ListAvailabeFeats(pet: true);
8761 if (num >= 90 && list.Count > 0)
8762 {
8763 Element element = list.RandomItem();
8764 num2 = element.id;
8765 num4 = element.CostLearn;
8766 }
8767 else if (num >= 60 && ie.Any())
8768 {
8769 num2 = ie.RandomItem().id;
8770 num4 = 3;
8771 }
8772 else
8773 {
8774 num2 = Element.List_MainAttributesMajor.RandomItem();
8775 num4 = 1;
8776 num3 = 2;
8777 flag = true;
8778 }
8779 Rand.SetSeed();
8780 if (num4 > base.feat)
8781 {
8782 break;
8783 }
8784 base.feat -= num4;
8785 base.c_upgrades.count++;
8786 base.c_upgrades.spent += num4;
8787 bool flag2 = false;
8788 if (flag)
8789 {
8790 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8791 {
8792 if (item.idEle == num2)
8793 {
8794 item.value += num3;
8795 item.cost += num4;
8796 flag2 = true;
8797 break;
8798 }
8799 }
8800 }
8801 if (!flag2)
8802 {
8803 base.c_upgrades.items.Add(new CharaUpgrade.Item
8804 {
8805 idEle = num2,
8806 value = num3,
8807 cost = num4
8808 });
8809 }
8810 SourceElement.Row row = EClass.sources.elements.map[num2];
8811 if (row.category == "feat")
8812 {
8813 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8814 }
8815 else if (elements.ValueWithoutLink(row.id) == 0)
8816 {
8817 elements.Learn(row.id);
8818 }
8819 else
8820 {
8821 elements.ModBase(num2, num3);
8822 }
8823 }
8824 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:10056
void Learn(int ele, int v=1)
virtual int CostLearn
Definition: ELEMENT.cs:319
static int[] List_MainAttributesMajor
Definition: ELEMENT.cs:247
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 WindowCharaMini.Refresh().

◆ TryUse()

bool Chara.TryUse ( Thing  t)
inline

Definition at line 8034 of file Chara.cs.

8035 {
8036 if (t.id == "338" && t.blessedState >= BlessedState.Normal)
8037 {
8038 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
8039 if (thing != null)
8040 {
8041 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
8042 SE.Change();
8043 t.trait.OnBlend(thing, this);
8044 return true;
8045 }
8046 return false;
8047 }
8048 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
8049 {
8050 return false;
8051 }
8052 if (t.id == "cigar")
8053 {
8054 (t.trait as TraitItemProc).OnUse(this);
8055 return true;
8056 }
8057 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
8058 {
8060 {
8061 target = t
8062 });
8063 return true;
8064 }
8065 if (t.trait.CanDrink(this))
8066 {
8067 Drink(t);
8068 return true;
8069 }
8070 if (t.trait.CanRead(this))
8071 {
8073 {
8074 target = t
8075 });
8076 return true;
8077 }
8078 if (base.hp < MaxHP * 90 / 100)
8079 {
8080 Action healAction = t.trait.GetHealAction(this);
8081 if (healAction != null)
8082 {
8083 healAction();
8084 return true;
8085 }
8086 }
8087 return false;
8088 }
bool isAcidproof
Definition: Card.cs:687
void SetAIImmediate(AIAct g)
Definition: Chara.cs:9094
virtual bool CanRead(Chara c)
Definition: Trait.cs:995
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1013
virtual void OnBlend(Thing t, Chara c)
Definition: Trait.cs:635

References Card.blessedState, 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 9355 of file Chara.cs.

9356 {
9357 if (EClass.world.date.IsExpired(GetInt(51)))
9358 {
9359 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
9360 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
9361 homeBranch.expeditions.Add(expedition);
9362 return true;
9363 }
9364 return false;
9365 }
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.

◆ UnmakeMinion()

void Chara.UnmakeMinion ( )
inline

Definition at line 2406 of file Chara.cs.

2407 {
2408 base.c_uidMaster = 0;
2409 master = null;
2410 enemy = null;
2411 foreach (Chara chara in EClass._map.charas)
2412 {
2413 if (chara.enemy == this)
2414 {
2415 chara.SetEnemy();
2416 chara.ai.Cancel();
2417 }
2418 }
2419 ai.Cancel();
2420 Refresh();
2421 }

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

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

◆ UpdateAngle()

void Chara.UpdateAngle ( )
inline

Definition at line 3639 of file Chara.cs.

3640 {
3641 if (IsPCC)
3642 {
3643 if (base.dir == 0)
3644 {
3645 angle = 225f;
3646 }
3647 else if (base.dir == 1)
3648 {
3649 angle = 135f;
3650 }
3651 else if (base.dir == 2)
3652 {
3653 angle = 45f;
3654 }
3655 else if (base.dir == 3)
3656 {
3657 angle = -45f;
3658 }
3659 }
3660 else if (base.dir == 0)
3661 {
3662 angle = 165f;
3663 }
3664 else if (base.dir == 1)
3665 {
3666 angle = 300f;
3667 }
3668 else if (base.dir == 2)
3669 {
3670 angle = 0f;
3671 }
3672 else if (base.dir == 3)
3673 {
3674 angle = 120f;
3675 }
3676 }

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3700 of file Chara.cs.

3701 {
3702 int num = 4;
3703 for (int i = -num; i < num + 1; i++)
3704 {
3705 for (int j = -num; j < num + 1; j++)
3706 {
3707 shared.Set(pos.x + i, pos.z + j);
3708 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3709 {
3710 _ = 1;
3711 }
3712 }
3713 }
3714 }
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/3]

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

Definition at line 5897 of file Chara.cs.

5898 {
5899 if (HasCooldown(a.id))
5900 {
5901 return false;
5902 }
5903 if (!a.ValidatePerform(this, tc, pos))
5904 {
5905 return false;
5906 }
5907 if (a.source.proc.TryGet(0) == "Heal" && HasElement(1422) && !IsPC)
5908 {
5909 List<int> list = new List<int> { 8400, 8401, 8402, 8403, 8404, 8405 };
5910 int num = list.IndexOf(a.id);
5911 if (num != -1)
5912 {
5913 int num2 = list.TryGet(num + Evalue(1422));
5914 a = elements.GetElement(num2)?.act ?? ACT.Create(num2);
5915 }
5916 }
5917 int num3 = 1;
5918 Act.Cost cost = a.GetCost(this);
5919 a.GetPower(this);
5920 int i = 1;
5921 int num4 = 0;
5922 bool flag = a.IsTargetHostileParty();
5923 bool flag2 = ability.Has(a.id);
5924 if (IsPC && HasCondition<StanceManaCost>())
5925 {
5926 num4 = Evalue(1657);
5927 }
5928 _pts.Clear();
5929 if (a.TargetType.ForceParty)
5930 {
5931 pt = true;
5932 }
5933 if (pt)
5934 {
5935 i = 0;
5936 if (flag)
5937 {
5938 ForeachEnemy(delegate
5939 {
5940 i++;
5941 });
5942 }
5943 else
5944 {
5945 ForeachParty(delegate
5946 {
5947 i++;
5948 });
5949 }
5950 }
5951 if (a is Spell && IsPC && a.vPotential < i && !flag2)
5952 {
5953 i = 1;
5954 _pts.Clear();
5955 _pts.Add(this);
5956 pt = false;
5957 }
5958 int num5 = 100;
5959 if (!a.TargetType.ForceParty && i > 1)
5960 {
5961 num5 = (IsPC ? (i * 100) : (50 + i * 50));
5962 }
5963 int num6 = cost.cost * num5 / 100;
5964 if (cost.type == Act.CostType.MP && Evalue(483) > 0)
5965 {
5966 num6 = num6 * 100 / (100 + (int)Mathf.Sqrt(Evalue(483) * 10) * 3);
5967 }
5968 if (i == 0)
5969 {
5970 if (IsPC)
5971 {
5973 }
5974 return false;
5975 }
5976 if (!IsPC && cost.type == Act.CostType.MP && mana.value < 0 && (EClass.rnd(4) != 0 || IsPCFaction || (base.IsPowerful && mana.value < -20)))
5977 {
5978 return false;
5979 }
5980 if (IsPC)
5981 {
5982 if (!Dialog.warned && cost.type == Act.CostType.MP && cost.cost > 0 && mana.value < num6 && !EClass.debug.godMode)
5983 {
5984 ActPlan.warning = true;
5985 Dialog.TryWarnMana(delegate
5986 {
5987 if (UseAbility(a, tc, pos, pt))
5988 {
5990 }
5991 });
5992 return false;
5993 }
5994 EClass.ui.CloseLayers();
5995 }
5996 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))
5997 {
5998 Say("shakeHead", this);
5999 return true;
6000 }
6001 if (tc != null && tc != this)
6002 {
6003 LookAt(tc.pos);
6004 }
6005 if (pos != null && !base.pos.Equals(pos))
6006 {
6007 LookAt(pos);
6008 }
6009 if (a.CanRapidFire && HasElement(1648))
6010 {
6011 num3 = 1 + Evalue(1648);
6012 }
6013 if (IsPC && cost.cost > 0 && a.Value == 0 && !flag2)
6014 {
6016 return false;
6017 }
6018 if (a is Spell)
6019 {
6020 string s = (isConfused ? "_cast_confuse" : (HasCondition<ConDim>() ? "_cast_dim" : ""));
6021 if (!a.source.tag.Contains("useHand"))
6022 {
6023 Say(race.castStyle.IsEmpty("cast"), this, a.source.GetName().ToLower(), s.lang());
6024 }
6025 if (IsPC)
6026 {
6027 _ = (i + 1) / 2;
6028 if (a.vPotential < i && !flag2)
6029 {
6030 Msg.Say("noSpellStock");
6031 EInput.Consume();
6032 return false;
6033 }
6034 if (num4 > 0 && (a.vPotential >= i * 2 || flag2))
6035 {
6036 if (!flag2)
6037 {
6038 a.vPotential -= i * 2;
6039 }
6040 num6 = num6 * (100 - num4 * 20) / 100;
6041 }
6042 else if (!flag2)
6043 {
6044 a.vPotential -= i;
6045 }
6047 }
6048 }
6049 else
6050 {
6051 if (IsPC && HasElement(1274) && a.vPotential < 0 && !flag2 && !a.HasTag("dontForget"))
6052 {
6053 Msg.Say("noSpellStock");
6054 EInput.Consume();
6055 return false;
6056 }
6057 if (a.source.langAct.Length != 0 && tc != null)
6058 {
6059 string text = a.source.langAct[0];
6060 string text2 = ((a.source.langAct.Length >= 2) ? a.source.langAct[1] : "");
6061 if (text == "spell_hand")
6062 {
6063 string[] list2 = Lang.GetList("attack" + race.meleeStyle.IsEmpty("Touch"));
6064 string @ref = text2.lang(list2[4]);
6065 Say(tc.IsPCParty ? "cast_hand_ally" : "cast_hand", this, tc, @ref, tc.IsPCParty ? list2[1] : list2[2]);
6066 }
6067 else
6068 {
6069 Say(text, this, tc, text2.IsEmpty() ? "" : text2.lang());
6070 }
6071 if (a.source.id == 6630)
6072 {
6073 Talk("insult_" + (base.IsMale ? "m" : "f"));
6074 }
6075 }
6076 }
6077 switch (cost.type)
6078 {
6079 case Act.CostType.MP:
6080 if (Evalue(1421) >= 2 && base.hp <= MaxHP / Mathf.Max(1, 9 - Evalue(1421) * 2))
6081 {
6082 num6 /= 2;
6083 }
6084 if (isSynced)
6085 {
6086 PlayEffect("cast");
6087 }
6088 mana.Mod(-num6);
6089 if (isDead)
6090 {
6091 return true;
6092 }
6093 elements.ModExp(304, Mathf.Clamp(num6 * 2, 1, 200));
6094 break;
6095 case Act.CostType.SP:
6096 stamina.Mod(-num6);
6097 ignoreSPAbsorb = true;
6098 break;
6099 }
6100 if (a is Spell && GetCondition<ConSilence>() != null)
6101 {
6102 Say("cast_silence", this);
6103 return true;
6104 }
6105 if (isDead)
6106 {
6107 return true;
6108 }
6109 int spellExp = elements.GetSpellExp(this, a, num5);
6110 if (EClass.rnd(100) >= CalcCastingChance(a, i) && !EClass.debug.godMode)
6111 {
6112 Say("fizzle", this);
6113 PlayEffect("fizzle");
6114 PlaySound("fizzle");
6115 if (cost.cost > 0 && a.source.lvFactor > 0)
6116 {
6117 ModExp(a.id, spellExp / 5);
6118 }
6119 RemoveCondition<ConInvisibility>();
6120 return true;
6121 }
6122 bool flag3 = true;
6123 if (a.source.cooldown > 0 && (!IsPC || !a.source.tag.Contains("CD_npc")))
6124 {
6125 AddCooldown(a.id, a.source.cooldown);
6126 }
6127 if (HasTalk("phrase_" + a.source.alias))
6128 {
6129 EClass.player.forceTalk = true;
6130 Talk("phrase_" + a.source.alias);
6131 }
6132 if (pt)
6133 {
6134 Act.forcePt = true;
6135 if (flag)
6136 {
6137 ForeachEnemy(delegate(Chara c)
6138 {
6139 a.Perform(this, c, c.pos);
6140 });
6141 }
6142 else
6143 {
6144 ForeachParty(delegate(Chara c)
6145 {
6146 a.Perform(this, c, c.pos);
6147 });
6148 }
6149 Act.forcePt = false;
6150 }
6151 else
6152 {
6153 for (int j = 0; j < num3; j++)
6154 {
6155 if (a.TargetType != TargetType.SelfParty && tc != null && !tc.IsAliveInCurrentZone)
6156 {
6157 break;
6158 }
6159 ActEffect.RapidCount = j;
6160 ActEffect.RapidDelay = a.RapidDelay;
6161 flag3 = a.Perform(this, tc, pos);
6162 }
6163 }
6164 if (flag3 && !isDead)
6165 {
6166 if (IsPC && flag2 && elements.Base(a.id) == 0 && a.PotentialAsStock)
6167 {
6168 elements.ModBase(a.id, 1);
6169 }
6170 if (cost.cost > 0 && a.source.lvFactor > 0)
6171 {
6172 ModExp(a.id, spellExp);
6173 }
6174 if (a.source.alias.StartsWith("sword_"))
6175 {
6176 ModExp(101, 50);
6177 }
6178 }
6179 ActEffect.RapidCount = 0;
6180 if (flag3 && !a.source.tag.Contains("keepInvisi") && EClass.rnd(2) == 0)
6181 {
6182 RemoveCondition<ConInvisibility>();
6183 RemoveCondition<ConDark>();
6184 }
6185 if (!base.IsPCFactionOrMinion && a.HasTag("specialAbility"))
6186 {
6187 string name = a.Name;
6188 renderer.Say("| " + name + " ");
6189 }
6190 return flag3;
6191 void ForeachEnemy(Action<Chara> action)
6192 {
6193 if (_pts.Count == 0)
6194 {
6195 for (int num10 = EClass._map.charas.Count - 1; num10 >= 0; num10--)
6196 {
6197 Chara chara3 = EClass._map.charas[num10];
6198 if (chara3 != this && CanSeeLos(chara3) && chara3.IsHostile(this))
6199 {
6200 _pts.Add(chara3);
6201 }
6202 }
6203 }
6204 for (int num11 = _pts.Count - 1; num11 >= 0; num11--)
6205 {
6206 action(_pts[num11]);
6207 }
6208 }
6209 void ForeachParty(Action<Chara> action)
6210 {
6211 if (_pts.Count == 0)
6212 {
6213 if (IsPCParty)
6214 {
6215 for (int num7 = EClass.pc.party.members.Count - 1; num7 >= 0; num7--)
6216 {
6217 Chara chara = EClass.pc.party.members[num7];
6218 if (chara == this || chara.host != null || CanSeeLos(chara))
6219 {
6220 _pts.Add(chara);
6221 }
6222 }
6223 }
6224 else
6225 {
6226 for (int num8 = EClass._map.charas.Count - 1; num8 >= 0; num8--)
6227 {
6228 Chara chara2 = EClass._map.charas[num8];
6229 if ((chara2 == this || (chara2.IsFriendOrAbove(this) && CanSeeLos(chara2))) && (chara2 == tc || _pts.Count < 3 || EClass.rnd(_pts.Count * _pts.Count) > 6))
6230 {
6231 _pts.Add(chara2);
6232 }
6233 }
6234 }
6235 }
6236 for (int num9 = _pts.Count - 1; num9 >= 0; num9--)
6237 {
6238 action(_pts[num9]);
6239 }
6240 }
6241 }
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:144
virtual float RapidDelay
Definition: ACT.cs:177
virtual bool ValidatePerform(Chara _cc, Card _tc, Point _tp)
Definition: ACT.cs:316
bool IsTargetHostileParty()
Definition: ACT.cs:241
virtual bool CanRapidFire
Definition: ACT.cs:175
bool HasTalk(string idTopic)
Definition: Card.cs:6926
bool Has(int id)
static List< Chara > _pts
Definition: Chara.cs:188
int CalcCastingChance(Element e, int num=1)
Definition: Chara.cs:6252
Definition: Dialog.cs:7
static bool warned
Definition: Dialog.cs:50
static void TryWarnMana(Action action)
Definition: Dialog.cs:399
int GetSpellExp(Chara c, Element e, int costMod=100)
int vPotential
Definition: ELEMENT.cs:261
virtual int GetPower(Card c)
Definition: ELEMENT.cs:1086
virtual Act.Cost GetCost(Chara c)
Definition: ELEMENT.cs:1045
virtual bool PotentialAsStock
Definition: ELEMENT.cs:341
Act act
Definition: ELEMENT.cs:399
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, CharaAbility.Has(), Element.HasTag(), host, Element.id, IsFriendOrAbove(), IsHostile(), Act.IsTargetHostileParty(), SourceRace.Row.meleeStyle, Party.members, Stats.Mod(), Element.Name, party, EClass.pc, Act.Perform(), EClass.player, Card.pos, Element.PotentialAsStock, Act.RapidDelay, EClass.rnd(), Msg.Say(), Msg.SayNothingHappen(), TargetType.SelfParty, LayerAbility.SetDirty(), Element.source, Act.TargetType, Dialog.TryWarnMana(), Act.Cost.type, EClass.ui, Act.ValidatePerform(), Element.Value, Stats.value, Element.vPotential, and Dialog.warned.

◆ UseAbility() [2/3]

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

◆ UseAbility() [3/3]

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

Definition at line 5892 of file Chara.cs.

5893 {
5894 return UseAbility(elements.GetElement(idAct)?.act ?? ACT.Create(idAct), tc, pos, pt);
5895 }

References ACT.Create().

◆ ValidateWorks()

void Chara.ValidateWorks ( )
inline

Definition at line 9403 of file Chara.cs.

9404 {
9405 _goalWork.FindWork(this, setAI: false);
9407 }
static GoalHobby _goalHobby
Definition: Chara.cs:210
static GoalWork _goalWork
Definition: Chara.cs:208
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 5363 of file Chara.cs.

5364 {
5365 base.c_vomit++;
5366 Say("vomit", this);
5367 PlaySound("vomit");
5368 if (!EClass._zone.IsRegion)
5369 {
5370 Thing thing = ThingGen.Create("731");
5372 {
5373 thing.MakeRefFrom(this);
5374 }
5375 EClass._zone.AddCard(thing, pos);
5376 }
5377 if (HasCondition<ConAnorexia>())
5378 {
5379 ModExp(70, -50);
5380 ModExp(71, -75);
5381 ModExp(77, -100);
5382 }
5383 else if (base.c_vomit > 10)
5384 {
5385 AddCondition<ConAnorexia>();
5386 }
5387 AddCondition<ConDim>();
5388 if (HasCondition<ConAnorexia>())
5389 {
5390 ModWeight(-1 * (1 + EClass.rnd(5)));
5391 }
5392 if (hunger.GetPhase() >= 4)
5393 {
5394 DamageHP(9999L, AttackSource.Hunger);
5395 }
5396 hunger.Mod(30);
5397 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:9984

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

3717 {
3718 for (int num = conditions.Count - 1; num >= 0; num--)
3719 {
3720 if (conditions[num].ConsumeTurn)
3721 {
3722 return true;
3723 }
3724 }
3725 return false;
3726 }

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

7425 {
7426 n.Clear();
7427 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
7428 SetImage(uIItem.image2);
7429 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
7430 n.AddText("");
7431 n.Build();
7432 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6312
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:163

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

◆ _cbits1

BitArray32 Chara._cbits1

Definition at line 84 of file Chara.cs.

Referenced by OnSerializing().

◆ _cints

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

Definition at line 82 of file Chara.cs.

Referenced by OnDeserialized(), and OnSerializing().

◆ _cooldowns

List<int> Chara._cooldowns

◆ _faction

Faction Chara._faction
private

Definition at line 158 of file Chara.cs.

Referenced by SetFaction().

◆ _goalHobby

GoalHobby Chara._goalHobby = new GoalHobby()
staticprivate

Definition at line 210 of file Chara.cs.

◆ _goalWork

GoalWork Chara._goalWork = new GoalWork()
staticprivate

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

Referenced by HasHigherGround(), and Refresh().

◆ _job

SourceJob.Row Chara._job

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

◆ _listFavFood

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

Definition at line 194 of file Chara.cs.

◆ _ListItems

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

Definition at line 192 of file Chara.cs.

◆ _NoGoalPC

NoGoal Chara._NoGoalPC = new NoGoal()
static

Definition at line 198 of file Chara.cs.

◆ _NoGoalRepeat

NoGoal Chara._NoGoalRepeat = new NoGoal()
static

Definition at line 200 of file Chara.cs.

Referenced by ActPlan.Item.Perform().

◆ _pts

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

Definition at line 188 of file Chara.cs.

◆ _race

SourceRace.Row Chara._race

Definition at line 162 of file Chara.cs.

Referenced by ChangeRace(), and OnCreate().

◆ _sharedPos

Point Chara._sharedPos = new Point()
staticprivate

Definition at line 176 of file Chara.cs.

Referenced by TryMoveTowards().

◆ _Speed

long Chara._Speed
private

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

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

◆ ai

◆ body

◆ bossText

bool Chara.bossText

Definition at line 146 of file Chara.cs.

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

◆ calmCheckTurn

int Chara.calmCheckTurn

Definition at line 118 of file Chara.cs.

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

◆ canSeeInvisible

bool Chara.canSeeInvisible

Definition at line 140 of file Chara.cs.

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

◆ combatCount

int Chara.combatCount

Definition at line 116 of file Chara.cs.

◆ conditions

◆ conSleep

◆ consumeTurn

bool Chara.consumeTurn
static

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

Referenced by RefreshSpeed(), and SetDirtySpeed().

◆ emoIcon

Emo2 Chara.emoIcon

Definition at line 108 of file Chara.cs.

Referenced by Condition.Kill(), TCOrbitChara.RefreshAll(), and BaseCondition.RefreshEmoIcon().

◆ enemy

◆ faithElements

◆ global

◆ goalList

GoalList Chara.goalList = new GoalList()

Definition at line 202 of file Chara.cs.

◆ happiness

int Chara.happiness

Definition at line 110 of file Chara.cs.

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

◆ hasMovedThisTurn

bool Chara.hasMovedThisTurn
private

Definition at line 178 of file Chara.cs.

Referenced by _Move().

◆ hasTelepathy

bool Chara.hasTelepathy

◆ held

◆ host

◆ idleActTimer

int Chara.idleActTimer

Definition at line 114 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ idleTimer

float Chara.idleTimer

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

◆ isBerserk

bool Chara.isBerserk

◆ isBlind

◆ isConfused

◆ isCreated

bool Chara.isCreated

Definition at line 138 of file Chara.cs.

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

◆ isDrunk

bool Chara.isDrunk

Definition at line 126 of file Chara.cs.

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

◆ isFainted

bool Chara.isFainted

Definition at line 130 of file Chara.cs.

◆ isOnCreate

bool Chara.isOnCreate
static

Definition at line 186 of file Chara.cs.

◆ isParalyzed

bool Chara.isParalyzed

Definition at line 134 of file Chara.cs.

Referenced by Point.ListWitnesses().

◆ isWeakToSunlight

bool Chara.isWeakToSunlight

Definition at line 154 of file Chara.cs.

Referenced by Refresh().

◆ isWet

bool Chara.isWet

◆ lastPos

Point Chara.lastPos = new Point()

Definition at line 90 of file Chara.cs.

Referenced by _Move().

◆ ListAdvJob

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

Definition at line 170 of file Chara.cs.

Referenced by OnCreate().

◆ ListAdvRace

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

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

◆ memberType

◆ mimicry

◆ nextUse

Thing Chara.nextUse

Definition at line 100 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ orgPos

◆ parasite

◆ party

Party Chara.party

Definition at line 43 of file Chara.cs.

Referenced by _Move(), AM_Adv._OnUpdateInput(), TraitGodStatue._OnUse(), TraitShrine._OnUse(), Party.AddMemeber(), Faction.AddReserve(), LayerSleep.Advance(), ZoneEventQuest.AggroEnemy(), WidgetRoster.Build(), WidgetStatsBar.Build(), LayerInventory.CreateContainer(), FactionBranch.DailyOutcome(), Card.Destroy(), Die(), DoHostileAction(), TileMapElona.DrawTile(), ZonePreEnterEncounter.Execute(), GoalAutoCombat.GetActPlanColor(), GetRevived(), GoalAutoCombat.GoalAutoCombat(), TraitFoodEggFertilized.Incubate(), MakeAlly(), MakePartyMemeber(), Card.ModExpParty(), MoveHome(), Player.MoveZone(), TraitHitchingPost.OnActivateTrap(), Player.OnAdvanceHour(), FactionBranch.OnAfterSimulate(), ListPeopleParty.OnClick(), Zone_DungeonFairy.OnGenerateMap(), Zone_RandomDungeon.OnGenerateMap(), Zone_Void.OnGenerateMap(), ZoneEventHarvest.OnLeaveZone(), ElementContainerCard.OnLevelUp(), BaseListPeople.OnList(), ListPeopleParty.OnList(), Game.OnLoad(), BaseListPeople.OnRefreshMenu(), ConSleep.OnRemoved(), QuestDebt.OnStart(), Scene.OnUpdate(), TraitGeneMachine.OnUse(), TraitStairsLocked.OnUse(), ZoneEventMusic.OnVisit(), ActPray.Pray(), CoreDebug.QuickStart(), Player.RefreshEmptyAlly(), ActRide.Ride(), AI_Idle.Run(), AI_PassTime.Run(), AI_Slaughter.Run(), Weather.SetCondition(), LayerDragGrid.SetInv(), Tick(), ConSleep.Tick(), TryNullifyCurse(), ActPray.TryPray(), GoalCombat.TryUseAbility(), CoreDebug.UpdateInput(), DramaOutcome.upgrade_miscreation(), UseAbility(), ElementContainerCard.ValueBonus(), and TraitBookSkill.WriteNote().

◆ 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 184 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 216 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 120 of file Chara.cs.

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

◆ source

◆ spriteReplacer

SpriteReplacer Chara.spriteReplacer

Definition at line 156 of file Chara.cs.

Referenced by LayerEditSkin.RefreshImage().

◆ stealthSeen

int Chara.stealthSeen

Definition at line 190 of file Chara.cs.

◆ tempElements

◆ turnLastSeen

int Chara.turnLastSeen = -100

Definition at line 112 of file Chara.cs.

Referenced by AI_Idle.Run().

◆ visibleWithTelepathy

bool Chara.visibleWithTelepathy

◆ wasInWater

bool Chara.wasInWater

Definition at line 150 of file Chara.cs.

Referenced by _Move().

◆ workElements

ElementContainer Chara.workElements

Definition at line 40 of file Chara.cs.

Property Documentation

◆ _affinity

int Chara._affinity
getset

Definition at line 304 of file Chara.cs.

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

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

◆ _alias

string Chara._alias
getset

Definition at line 220 of file Chara.cs.

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

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

◆ _idTimeTable

int Chara._idTimeTable
getset

Definition at line 342 of file Chara.cs.

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

Referenced by OnCreate().

◆ _maxStamina

int Chara._maxStamina
getset

Definition at line 366 of file Chara.cs.

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

Referenced by CalculateMaxStamina().

◆ ability

◆ actorPrefab

override string Chara.actorPrefab
get

Definition at line 520 of file Chara.cs.

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

◆ affinity

◆ Aka

◆ AliasMaterialOnCreate

override string Chara.AliasMaterialOnCreate
get

Definition at line 560 of file Chara.cs.

◆ baseWorkElements

ElementContainer Chara.baseWorkElements
get

Definition at line 1136 of file Chara.cs.

1137 {
1138 get
1139 {
1140 if (_baseWorkElements == null)
1141 {
1143 foreach (Hobby item in ListHobbies())
1144 {
1145 Build(item);
1146 }
1147 foreach (Hobby item2 in ListWorks())
1148 {
1149 Build(item2);
1150 }
1151 }
1152 return _baseWorkElements;
1153 void Build(Hobby h)
1154 {
1155 if (!h.source.elements.IsEmpty())
1156 {
1157 for (int i = 0; i < h.source.elements.Length; i += 2)
1158 {
1159 int ele = h.source.elements[i];
1160 int v = h.source.elements[i + 1];
1161 _baseWorkElements.ModBase(ele, v);
1162 }
1163 }
1164 }
1165 }
1166 }
ElementContainer _baseWorkElements
Definition: Chara.cs:206

◆ bladder

Stats Chara.bladder
get

Definition at line 1176 of file Chara.cs.

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

◆ burden

◆ CanGainConResist

bool Chara.CanGainConResist
get

Definition at line 1186 of file Chara.cs.

1187 {
1188 get
1189 {
1190 if (base.rarity >= Rarity.Legendary)
1191 {
1192 return !IsPCFaction;
1193 }
1194 return false;
1195 }
1196 }

◆ CanOpenDoor

bool Chara.CanOpenDoor
get

Definition at line 832 of file Chara.cs.

833 {
834 get
835 {
836 if (base.INT < 5)
837 {
838 if (IsPCFaction)
839 {
840 return memberType == FactionMemberType.Default;
841 }
842 return false;
843 }
844 return true;
845 }
846 }

◆ CanWitness

bool Chara.CanWitness
get

Definition at line 1016 of file Chara.cs.

1017 {
1018 get
1019 {
1020 if (!IsHuman && !IsFairy && !IsGod)
1021 {
1022 return race.id == "mutant";
1023 }
1024 return true;
1025 }
1026 }
bool IsFairy
Definition: Chara.cs:953
bool IsGod
Definition: Chara.cs:965

Referenced by Point.ListWitnesses().

◆ corruption

int Chara.corruption
getset

Definition at line 378 of file Chara.cs.

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

Referenced by CanDuplicate().

◆ CurrentGeneSlot

int Chara.CurrentGeneSlot
get

Definition at line 1096 of file Chara.cs.

1097 {
1098 get
1099 {
1100 if (base.c_genes != null)
1101 {
1102 return base.c_genes.GetGeneSlot(this);
1103 }
1104 return 0;
1105 }
1106 }

Referenced by InvOwnerGene._OnProcess(), CanDuplicate(), WindowCharaMini.Refresh(), WindowChara.RefreshSkill(), and DNA.WriteNoteExtra().

◆ CurrentSpan

TimeTable.Span Chara.CurrentSpan
get

Definition at line 850 of file Chara.cs.

Referenced by ConSleep.Tick().

◆ currentZone

Zone Chara.currentZone
getset

Definition at line 256 of file Chara.cs.

257 {
258 get
259 {
260 return RefZone.Get(_cints[1]);
261 }
262 set
263 {
264 _cints[1] = RefZone.Set(value);
265 }
266 }
static int Set(Zone zone)
Definition: RefZone.cs:12
static Zone Get(int uid)
Definition: RefZone.cs:3

Referenced by _Move(), AM_ViewZone._OnUpdateInput(), CharaMassTransfer.Add(), 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(), ListPeopleParty.OnClick(), LayerNewZone.OnClickExit(), QuestDialog.OnDropReward(), Game.OnLoad(), Player.OnStartNewGame(), Scene.OnUpdate(), AM_BaseGameMode.OnUpdateInput(), ZoneEventWedding.OnVisit(), 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 330 of file Chara.cs.

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

◆ depression

Stats Chara.depression
get

Definition at line 1174 of file Chara.cs.

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

◆ DestDist

int Chara.DestDist
get

Definition at line 1012 of file Chara.cs.

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

◆ DV

override int Chara.DV
get

Definition at line 742 of file Chara.cs.

743 {
744 get
745 {
746 if (IsPCFaction)
747 {
748 return WeaknessMod(elements.Value(64));
749 }
750 int num = base.LV;
751 if (num > 50)
752 {
753 num = 50 + (num - 50) / 10;
754 }
755 return WeaknessMod(num + elements.Value(64) * (100 + num + race.DV * 5) / 100);
756 int WeaknessMod(int a)
757 {
758 if (HasCondition<ConWeakness>())
759 {
760 if (a <= 0)
761 {
762 return a * 2;
763 }
764 return a / 2;
765 }
766 return a;
767 }
768 }
769 }

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

◆ faction

Faction Chara.faction
getset

Definition at line 428 of file Chara.cs.

429 {
430 get
431 {
432 return _faction ?? (_faction = EClass.game.factions.dictAll.TryGetValue(idFaction));
433 }
434 set
435 {
436 idFaction = value?.uid;
437 }
438 }
string idFaction
Definition: Chara.cs:245
Dictionary< string, Faction > dictAll
FactionManager factions
Definition: Game.cs:162

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

◆ faith

◆ flipX

override bool Chara.flipX
get

Definition at line 548 of file Chara.cs.

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

Referenced by CharaActor.RefreshSprite().

◆ GeneCostMTP

int Chara.GeneCostMTP
get

Definition at line 1084 of file Chara.cs.

1085 {
1086 get
1087 {
1088 if (!IsPC)
1089 {
1090 return 100;
1091 }
1092 return 5;
1093 }
1094 }

Referenced by TraitGene.TrySetHeldAct(), and TraitGene.WriteNote().

◆ goalListType

GoalListType Chara.goalListType
getset

Definition at line 280 of file Chara.cs.

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

◆ HasHost

override bool Chara.HasHost
get

Definition at line 702 of file Chara.cs.

Referenced by ActEffect.Proc().

◆ HasNoGoal

◆ homeBranch

◆ homeZone

◆ hostility

◆ hunger

◆ hygiene

Stats Chara.hygiene
get

Definition at line 1178 of file Chara.cs.

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

◆ idFaction

string Chara.idFaction
getset

Definition at line 244 of file Chara.cs.

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

◆ idFaith

string Chara.idFaith
getset

Definition at line 232 of file Chara.cs.

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

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

◆ IDPCCBodySet

string Chara.IDPCCBodySet
get

Definition at line 492 of file Chara.cs.

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

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

◆ idTimeTable

string Chara.idTimeTable
get

Definition at line 470 of file Chara.cs.

Referenced by LayerQuestBoard.RefreshHire().

◆ interest

int Chara.interest
getset

Definition at line 318 of file Chara.cs.

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

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

◆ IsAdventurer

bool Chara.IsAdventurer
get

Definition at line 1054 of file Chara.cs.

1055 {
1056 get
1057 {
1058 if (global != null && faction != EClass.pc.faction)
1059 {
1060 return IsPCC;
1061 }
1062 return false;
1063 }
1064 }

◆ isAlawysVisible

bool Chara.isAlawysVisible
getset

Definition at line 402 of file Chara.cs.

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

◆ IsAliveInCurrentZone

◆ IsAnimal

bool Chara.IsAnimal
get

Definition at line 880 of file Chara.cs.

881 {
882 get
883 {
884 if (!race.IsAnimal)
885 {
886 return HasTag(CTAG.animal);
887 }
888 return true;
889 }
890 }

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

◆ IsCat

bool Chara.IsCat
get

Definition at line 1000 of file Chara.cs.

1001 {
1002 get
1003 {
1004 if (!(race.id == "cat") && !(race.id == "catsister"))
1005 {
1006 return race.id == "catgod";
1007 }
1008 return true;
1009 }
1010 }

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

◆ isChara

override bool Chara.isChara
get

Definition at line 700 of file Chara.cs.

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

◆ isDead

◆ IsDeadOrSleeping

override bool Chara.IsDeadOrSleeping
get

◆ IsDisabled

override bool Chara.IsDisabled
get

◆ IsDragon

bool Chara.IsDragon
get

Definition at line 976 of file Chara.cs.

977 {
978 get
979 {
980 if (!race.IsDragon)
981 {
982 return HasTag(CTAG.dragon);
983 }
984 return true;
985 }
986 }

◆ IsEyth

bool Chara.IsEyth
get

Definition at line 1066 of file Chara.cs.

Referenced by TraitAltar.CanOffer(), TraitAltar.OnOffer(), and Card.PurgeEythArtifact().

◆ IsFairy

bool Chara.IsFairy
get

Definition at line 952 of file Chara.cs.

953 {
954 get
955 {
956 if (!race.IsFairy)
957 {
958 return HasTag(CTAG.fairy);
959 }
960 return true;
961 }
962 }

Referenced by Faction.IsWearingPanty().

◆ IsFish

bool Chara.IsFish
get

Definition at line 940 of file Chara.cs.

941 {
942 get
943 {
944 if (!race.IsFish)
945 {
946 return HasTag(CTAG.fish);
947 }
948 return true;
949 }
950 }

◆ IsGlobal

◆ IsGod

bool Chara.IsGod
get

Definition at line 964 of file Chara.cs.

965 {
966 get
967 {
968 if (!race.IsGod)
969 {
970 return HasTag(CTAG.god);
971 }
972 return true;
973 }
974 }

◆ IsHorror

bool Chara.IsHorror
get

Definition at line 928 of file Chara.cs.

929 {
930 get
931 {
932 if (!race.IsHorror)
933 {
934 return HasTag(CTAG.horror);
935 }
936 return true;
937 }
938 }

Referenced by Refresh().

◆ IsHuman

bool Chara.IsHuman
get

Definition at line 892 of file Chara.cs.

893 {
894 get
895 {
896 if (!race.IsHuman)
897 {
898 return HasTag(CTAG.human);
899 }
900 return true;
901 }
902 }

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

1029 {
1030 get
1031 {
1032 if (!IsHuman && !race.tag.Contains("humanSpeak"))
1033 {
1034 return HasTag(CTAG.humanSpeak);
1035 }
1036 return true;
1037 }
1038 }

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

◆ IsIdle

bool Chara.IsIdle
get

Definition at line 866 of file Chara.cs.

867 {
868 get
869 {
870 if (!IsDeadOrSleeping)
871 {
872 return ai.Current.IsIdle;
873 }
874 return false;
875 }
876 }
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 598 of file Chara.cs.

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

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

◆ IsLocalChara

bool Chara.IsLocalChara
get

Definition at line 854 of file Chara.cs.

855 {
856 get
857 {
858 if (!IsGlobal && !base.isSubsetCard)
859 {
860 return homeZone == EClass._zone;
861 }
862 return false;
863 }
864 }

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

◆ IsMachine

bool Chara.IsMachine
get

Definition at line 916 of file Chara.cs.

917 {
918 get
919 {
920 if (!race.IsMachine)
921 {
922 return HasTag(CTAG.machine);
923 }
924 return true;
925 }
926 }

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

◆ IsMaid

bool Chara.IsMaid
get

Definition at line 1040 of file Chara.cs.

1041 {
1042 get
1043 {
1044 if (EClass.Branch != null)
1045 {
1046 return EClass.Branch.uidMaid == base.uid;
1047 }
1048 return false;
1049 }
1050 }

Referenced by FactionBranch.GetMaid().

◆ IsMarried

bool Chara.IsMarried
get

Definition at line 610 of file Chara.cs.

611 {
612 get
613 {
614 if (base.c_love != null)
615 {
616 return base.c_love.dateMarriage != 0;
617 }
618 return false;
619 }
620 }

Referenced by GameDate.AdvanceDay(), DramaOutcome.marry(), WindowChara.RefreshNote(), AI_Idle.Run(), TraitDeedDivorce.TrySetHeldAct(), and TraitDeedLostRing.TrySetHeldAct().

◆ IsMinion

override bool Chara.IsMinion
get

Definition at line 640 of file Chara.cs.

641 {
642 get
643 {
644 if (master == null)
645 {
646 return base.c_uidMaster != 0;
647 }
648 return true;
649 }
650 }

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

◆ IsMofuable

bool Chara.IsMofuable
get

Definition at line 1124 of file Chara.cs.

1125 {
1126 get
1127 {
1128 if (!race.tag.Contains("mofu"))
1129 {
1130 return HasElement(419);
1131 }
1132 return true;
1133 }
1134 }

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

◆ IsMoving

override bool Chara.IsMoving
get

Definition at line 622 of file Chara.cs.

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

◆ IsMultisize

◆ IsPC

override bool Chara.IsPC
get

Definition at line 626 of file Chara.cs.

Referenced by _Move(), TraitShrine._OnUse(), ActPlan._Update(), Element._WriteNote(), TraitSwitch.ActivateTrap(), CharaAbility.Add(), Zone.AddGlobalCharasOnActivate(), DNA.Apply(), Feat.Apply(), ActMelee.Attack(), CalcBurden(), CalculateMaxStamina(), TraitTrolley.CanActivate(), Thing.CanAutoFire(), AIAct.Cancel(), TraitFoodPreparedPackage.CanEat(), CanMoveTo(), ActTelekinesis.CanPerform(), Act.CanPerform(), TraitScroll.CanRead(), DNA.CanRemove(), CanReplace(), CanSee(), Player.CanSee(), CanSeeLos(), CanSeeSimple(), ActThrow.CanThrow(), AI_Torture.CreateProgress(), Cuddle(), FactionBranch.DailyOutcome(), ActionMode.DoFunc(), DoHostileAction(), CharaRenderer.Draw(), BaseTileMap.DrawTile(), CharaBody.Equip(), AI_Fish.ProgressFish.Fail(), AI_Fuck.Finish(), Biography.GetAge(), GetBurden(), Element.GetCost(), GetFirstStep(), TraitToolBrush.GetHeldEmo(), DNA.GetInvalidFeat(), FactionBranch.GetResidentTax(), Zone.GetSpawnPos(), HasAccess(), Party.HasElement(), TraitGamble.IdleUse(), Zone.IsCrime(), Party.IsCriticallyWounded(), CharaBody.IsEquippable(), AI_Eat.IsValidTarget(), Religion.JoinFaith(), Card.Kick(), Religion.LeaveFaith(), Point.ListWitnesses(), AI_Fish.Makefish(), StatsMana.Mod(), StatsStamina.Mod(), ModAffinity(), TraitBasketGame.OnActivateTrap(), TraitHitchingPost.OnActivateTrap(), FactionBranch.OnAdvanceDay(), BaseListPeople.OnClick(), ListPeopleParty.OnClick(), WindowChara.OnClickPortrait(), TaskHarvest.OnCreateProgress(), TaskPlow.OnCreateProgress(), TraitFortuneCookie.OnEat(), ListPeopleParty.OnInstantiate(), AI_Fish.ProgressFish.OnProgress(), AI_Fish.ProgressFish.OnProgressComplete(), TaskDig.OnProgressComplete(), TaskMine.OnProgressComplete(), TraitBaseSpellbook.OnRead(), TraitBookExp.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(), ActKiss.Perform(), ActRanged.Perform(), ActWait.Perform(), ActZap.Perform(), AttackProcess.Perform(), ActEffect.Poison(), ActPray.Pray(), FoodEffect.Proc(), ActEffect.Proc(), ActEffect.ProcAt(), InvOwner.Transaction.Process(), TraitBaseSpellbook.ReadFailEffect(), ButtonRoster.Refresh(), TCOrbitChara.RefreshAll(), WindowChara.RefreshNote(), WindowChara.RefreshProfile(), WindowChara.RefreshSkill(), RefreshSpeed(), CoreDebug.RegenerateNames(), CharaAbility.Remove(), RequestProtection(), AI_Eat.Run(), AI_Fish.Run(), AI_Goto.Run(), AI_Idle.Run(), AI_PassTime.Run(), AI_PlayMusic.Run(), AI_Torture.Run(), AI_Trolley.Run(), AIProgress.Run(), GoalCombat.Run(), TaskPoint.Run(), Map.Save(), WindowChara.SetChara(), CharaRenderer.SetFirst(), LayerDragGrid.SetInv(), AIAct.Start(), ConSleep.SuccubusVisit(), Player.TargetRanged(), ConFear.Tick(), ConSleep.Tick(), ConSuffocation.Tick(), AIAct.TryCancel(), TaskHarvest.TryGetAct(), AI_Goto.TryGoTo(), GoalCombat.TryMove(), TryMove(), TryMoveTowards(), Trait.TryOpenLock(), LayerDragGrid.TryProc(), TraitBaseSpellbook.TryProgress(), TryPush(), ActRanged.TryReload(), TrySetEnemy(), TraitLeash.TrySetHeldAct(), TraitToolButcher.TrySetHeldAct(), Map.TrySmoothPick(), GoalCombat.TryUseAbility(), CharaBody.Unequip(), CharaBody.UnqeuipIfTooHeavy(), CharaRenderer.UpdatePosition(), and DramaOutcome.upgrade_miscreation().

◆ IsPCC

◆ IsPCFaction

override bool Chara.IsPCFaction
get

Definition at line 684 of file Chara.cs.

685 {
686 get
687 {
688 if (EClass.pc != null)
689 {
690 return faction == EClass.pc.faction;
691 }
692 return false;
693 }
694 }

Referenced by _Move(), ActPlan._Update(), Element._WriteNote(), GameDate.AdvanceDay(), 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(), ListPeopleParty.OnList(), Game.OnLoad(), ElementContainerFaction.OnUnequip(), Zone.OnVisit(), ZoneEventWedding.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(), 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 668 of file Chara.cs.

669 {
670 get
671 {
672 if (master != null)
673 {
674 if (!master.IsPCFaction)
675 {
677 }
678 return true;
679 }
680 return false;
681 }
682 }

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

◆ IsPCParty

override bool Chara.IsPCParty
get

Definition at line 628 of file Chara.cs.

629 {
630 get
631 {
632 if (party != null)
633 {
634 return party.leader == EClass.pc;
635 }
636 return false;
637 }
638 }

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

◆ IsPCPartyMinion

override bool Chara.IsPCPartyMinion
get

Definition at line 652 of file Chara.cs.

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

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

◆ IsPlant

bool Chara.IsPlant
get

Definition at line 988 of file Chara.cs.

989 {
990 get
991 {
992 if (!race.IsPlant)
993 {
994 return HasTag(CTAG.plant);
995 }
996 return true;
997 }
998 }

Referenced by GoalCombat.Run().

◆ IsPrisoner

bool Chara.IsPrisoner
get

Definition at line 1052 of file Chara.cs.

◆ isSynced

override bool Chara.isSynced
get

◆ isThing

override bool Chara.isThing
get

Definition at line 698 of file Chara.cs.

◆ IsUndead

bool Chara.IsUndead
get

Definition at line 904 of file Chara.cs.

905 {
906 get
907 {
908 if (!race.IsUndead)
909 {
910 return HasTag(CTAG.undead);
911 }
912 return true;
913 }
914 }

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

◆ IsWealthy

bool Chara.IsWealthy
get

Definition at line 1068 of file Chara.cs.

1069 {
1070 get
1071 {
1072 if (!source.works.Contains("Rich"))
1073 {
1074 return source.hobbies.Contains("Rich");
1075 }
1076 return true;
1077 }
1078 }

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

◆ job

◆ knowFav

bool Chara.knowFav
getset

Definition at line 414 of file Chara.cs.

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

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

◆ MainElement

Element Chara.MainElement
get

Definition at line 730 of file Chara.cs.

731 {
732 get
733 {
734 if (base.c_idMainElement == 0)
735 {
736 return Element.Void;
737 }
738 return elements.GetElement(base.c_idMainElement);
739 }
740 }

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

◆ NameTitled

string Chara.NameTitled
get

Definition at line 518 of file Chara.cs.

Referenced by Scene.OnUpdate(), and ActEffect.Proc().

◆ OriginalHostility

Hostility Chara.OriginalHostility
get

Definition at line 472 of file Chara.cs.

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

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

◆ Pref

override SourcePref Chara.Pref
get

Definition at line 800 of file Chara.cs.

801 {
802 get
803 {
804 if (spriteReplacer != null)
805 {
807 }
808 if (base.idSkin > 0)
809 {
810 switch (sourceCard.tiles.TryGet(base.idSkin))
811 {
812 case 2319:
813 case 2619:
814 case 2621:
815 case 2623:
816 case 2625:
818 case 2320:
819 case 2611:
820 case 2620:
821 case 2622:
822 case 2624:
823 case 2626:
824 case 2828:
826 }
827 }
828 return sourceCard.pref;
829 }
830 }
SourcePref snowputit2
Definition: CoreRef.cs:326
SourcePref sonwputit1
Definition: CoreRef.cs:324
SourcePref replacer1
Definition: CoreRef.cs:330
PrefData prefs
Definition: CoreRef.cs:417
CoreRef refs
Definition: Core.cs:51
SourcePref pref
Definition: RenderRow.cs:68
SourcePref pref
Definition: SpriteData.cs:23

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

◆ PrefIndex

override int Chara.PrefIndex
get

Definition at line 532 of file Chara.cs.

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

◆ PV

override int Chara.PV
get

Definition at line 771 of file Chara.cs.

772 {
773 get
774 {
775 if (IsPCFaction)
776 {
777 return WeaknessMod(elements.Value(65));
778 }
779 int num = base.LV;
780 if (num > 50)
781 {
782 num = 50 + (num - 50) / 10;
783 }
784 return WeaknessMod(num + elements.Value(65) * (100 + num + race.PV * 5) / 100);
785 int WeaknessMod(int a)
786 {
787 if (HasCondition<ConWeakness>())
788 {
789 if (a <= 0)
790 {
791 return a * 2;
792 }
793 return a / 2;
794 }
795 return a;
796 }
797 }
798 }

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

◆ race

◆ SAN

◆ SelfWeight

override int Chara.SelfWeight
get

Definition at line 726 of file Chara.cs.

◆ sleepiness

Stats Chara.sleepiness
get

◆ sourceCard

override CardRow Chara.sourceCard
get

◆ sourceRenderCard

override CardRow Chara.sourceRenderCard
get

Definition at line 454 of file Chara.cs.

455 {
456 get
457 {
458 if (pccData != null && !(source.renderData is RenderDataPcc))
459 {
461 }
462 return source;
463 }
464 }
static Row rowDefaultPCC
Definition: SourceChara.cs:154

◆ Speed

int Chara.Speed
get

Definition at line 1108 of file Chara.cs.

1109 {
1110 get
1111 {
1112 if (dirtySpeed)
1113 {
1114 RefreshSpeed();
1115 }
1116 if (_Speed > 100000000)
1117 {
1118 return 100000000;
1119 }
1120 return (int)_Speed;
1121 }
1122 }

Referenced by GameUpdater.ConditionUpdater.FixedUpdate().

◆ stamina

◆ tactics

Tactics Chara.tactics
get

Definition at line 848 of file Chara.cs.

◆ trait

◆ uidEditor

int Chara.uidEditor
getset

Definition at line 354 of file Chara.cs.

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

Referenced by SerializedCards.Add().

◆ WeightLimit

override int Chara.WeightLimit
get

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