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

Public Member Functions

override string ToString ()
 
bool IsCriticallyWounded (bool includeRide=false)
 
bool HasHigherGround (Card c)
 
bool CanSeeSimple (Point p)
 
bool CanSee (Card c)
 
bool CanSeeLos (Card c, int dist=-1)
 
bool CanSeeLos (Point p, int dist=-1)
 
bool HasAccess (Card c)
 
bool HasAccess (Point p)
 
bool CanSleep ()
 
override string GetName (NameStyle style, int num=-1)
 
override void ChangeRarity (Rarity r)
 
Chara SetFaction (Faction f)
 
Chara SetHomeZone (Zone zone)
 
Chara SetHostility (Hostility h)
 
void OnBanish ()
 
Chara SetGlobal (Zone _home, int x, int z)
 
Chara SetGlobal ()
 
void RemoveGlobal ()
 
override void OnBeforeCreate ()
 
override void OnCreate (int genLv)
 
Chara ScaleByPrincipal ()
 
void SetFaith (string id)
 
void SetFaith (Religion r)
 
void HealAll ()
 
void Refresh (bool calledRecursive=false)
 
bool CanDuplicate ()
 
Chara Duplicate ()
 
int GetBurden (Card t=null, int num=-1)
 
void CalcBurden ()
 
void Stumble (int mtp=100)
 
void SetDirtySpeed ()
 
void RefreshSpeed (Element.BonusInfo info=null)
 
void CalculateMaxStamina ()
 
override void ApplyEditorTags (EditorTag tag)
 
override void SetSource ()
 
void SetMainElement (string id, int v=0, bool elemental=false)
 
void SetMainElement (int id, int v=0, bool elemental=false)
 
void ApplyJob (bool remove=false)
 
void ChangeJob (string idNew)
 
void AddRandomBodyPart (bool msg=false)
 
void RemoveLastBodyPart (bool msg=false)
 
void ResetBody ()
 
void ApplyRace (bool remove=false)
 
void ChangeRace (string idNew)
 
void MakePartyMemeber ()
 
void MakeAlly (bool msg=true)
 
void _MakeAlly ()
 
bool CanBeTempAlly (Chara c)
 
void 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 6786 of file Chara.cs.

6787 {
6788 CardRenderer cardRenderer = renderer;
6789 CharaRenderer charaRenderer = new CharaRenderer();
6790 if (source.skinAntiSpider != 0 && EClass.core.config.game.antiSpider)
6791 {
6792 base.idSkin = source.skinAntiSpider;
6793 }
6794 if (host != null)
6795 {
6796 charaRenderer.pccData = PCCData.Create("ride");
6797 string idPart = base.c_idRidePCC.IsEmpty(EClass.core.pccs.sets["ride"].map["body"].map.Keys.First());
6798 charaRenderer.pccData.SetPart("body", "ride", idPart);
6799 charaRenderer.pccData.ride = EClass.core.pccs.GetRideData(idPart);
6800 }
6801 else
6802 {
6803 foreach (Condition condition in conditions)
6804 {
6805 RendererReplacer rendererReplacer = condition.GetRendererReplacer();
6806 if (rendererReplacer != null)
6807 {
6808 charaRenderer.replacer = rendererReplacer;
6809 charaRenderer.data = rendererReplacer.data;
6810 break;
6811 }
6812 }
6813 if (charaRenderer.replacer == null)
6814 {
6815 charaRenderer.pccData = pccData;
6816 }
6817 }
6818 renderer = charaRenderer;
6819 renderer.SetOwner(this);
6820 if (cardRenderer != null)
6821 {
6822 renderer.SetFirst(first: false, cardRenderer.position);
6823 }
6824 return charaRenderer;
6825 }
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 2357 of file Chara.cs.

2358 {
2359 if (EClass.pc.homeBranch != null)
2360 {
2362 }
2363 else
2364 {
2365 SetGlobal();
2367 }
2368 Hostility hostility2 = (base.c_originalHostility = Hostility.Ally);
2369 this.hostility = hostility2;
2370 orgPos = null;
2371 base.c_summonDuration = 0;
2372 base.isSummon = false;
2373 UnmakeMinion();
2374 SetInt(32);
2375 Refresh();
2376 }
Hostility
Definition: Hostility.cs:2
list. Refresh()
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
void UnmakeMinion()
Definition: Chara.cs:2411
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 2779 of file Chara.cs.

2780 {
2781 if (isDead)
2782 {
2783 return MoveResult.Fail;
2784 }
2785 if (IsPC)
2786 {
2787 float num = EClass.setting.defaultActPace;
2788 switch (burden.GetPhase())
2789 {
2790 case 3:
2791 num *= 1.5f;
2792 break;
2793 case 4:
2794 num *= 2f;
2795 break;
2796 }
2798 {
2799 int num2 = 30;
2800 if (!EClass.pc.HasElement(408))
2801 {
2803 {
2804 case Weather.Condition.Rain:
2805 num2 += 5;
2806 break;
2807 case Weather.Condition.RainHeavy:
2808 num2 += 10;
2809 num *= 1.5f;
2810 break;
2811 case Weather.Condition.Snow:
2812 num2 += 10;
2813 break;
2814 case Weather.Condition.SnowHeavy:
2815 num2 += 15;
2816 num *= 1.5f;
2817 break;
2818 }
2819 }
2820 if (newPoint.matFloor.id == 48)
2821 {
2822 num2 += 20;
2823 num *= 1.8f;
2824 }
2825 num2 = num2 * 100 / (100 + EClass.sqrt(EvalueMax(240, -20) * 10) + EvalueMax(407, -5) * 5);
2826 EClass.world.date.AdvanceMin(num2 * 6);
2827 EClass.player.lastZonePos = null;
2829 int num3 = base.hp;
2830 for (int i = 0; i < num2 * 4; i++)
2831 {
2832 EClass.pc.party.members.ForeachReverse(delegate(Chara m)
2833 {
2834 if (!m.isDead)
2835 {
2836 m.TickConditions();
2837 }
2838 });
2839 if (base.hp < MaxHP / 5 && base.hp < num3 && !EClass.player.regionMoveWarned)
2840 {
2841 EClass.player.regionMoveWarned = true;
2842 Msg.Say("regionAbortMove");
2843 EInput.Consume(consumeAxis: true);
2844 SetAI(new NoGoal());
2845 return MoveResult.Fail;
2846 }
2847 }
2848 if (newPoint.cell.CanSuffocate())
2849 {
2850 bool flag = HasElement(1252);
2851 if (!flag)
2852 {
2853 AddCondition<ConSuffocation>((Evalue(200) != 0) ? (2000 / (100 + EvalueMax(200, -5) * 10)) : 30, force: true);
2854 }
2855 int num4 = GetCondition<ConSuffocation>()?.GetPhase() ?? 0;
2856 if (num4 >= 2)
2857 {
2858 DamageHP(EClass.rndHalf(10 + MaxHP / 5), AttackSource.Condition);
2859 }
2860 if (!isDead && !HasElement(429))
2861 {
2862 ModExp(200, ((!flag) ? 1 : 10) + num4 * 12);
2863 }
2864 }
2865 EClass.player.regionMoveWarned = false;
2866 if (isDead)
2867 {
2868 return MoveResult.Fail;
2869 }
2870 }
2871 if (num > EClass.setting.defaultActPace * 3f)
2872 {
2873 num = EClass.setting.defaultActPace * 3f;
2874 }
2875 actTime = num;
2876 }
2877 if (IsPCFaction && EClass.rnd(5) == 0 && newPoint.cell.CanSuffocate())
2878 {
2879 int num5 = Mathf.Min(5 + EClass._zone.DangerLv / 10, 200);
2880 ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2881 if (ride != null)
2882 {
2883 ride.ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2884 }
2885 if (parasite != null)
2886 {
2887 parasite.ModExp(200, EClass._zone.IsRegion ? 50 : num5);
2888 }
2889 }
2890 Chara chara = ((ride == null) ? this : ride);
2891 if (!EClass._zone.IsRegion || chara.IsPC)
2892 {
2893 bool flag2 = (chara.isConfused && EClass.rnd(2) == 0) || (chara.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !chara.HasElement(1215));
2894 if (host != null && host.ride == this && ((host.isConfused && EClass.rnd(2) == 0) || (host.isDrunk && EClass.rnd(IsIdle ? 2 : 8) == 0 && !host.HasElement(1215))))
2895 {
2896 flag2 = true;
2897 }
2898 if (flag2 && newPoint.Distance(pos) <= 1)
2899 {
2900 Point randomNeighbor = pos.GetRandomNeighbor();
2901 if (CanMoveTo(randomNeighbor, allowDestroyPath: false))
2902 {
2903 newPoint = randomNeighbor;
2904 if (isDrunk)
2905 {
2906 Talk("drunk");
2907 }
2908 }
2909 }
2910 }
2911 if (newPoint.x != pos.x || newPoint.z != pos.z)
2912 {
2913 LookAt(newPoint);
2914 }
2915 CellEffect effect = base.Cell.effect;
2916 if (effect != null && effect.id == 7)
2917 {
2918 CellEffect effect2 = base.Cell.effect;
2919 if (race.height < 500 && !race.tag.Contains("webfree") && EClass.rnd(effect2.power + 25) > EClass.rnd(base.STR + base.DEX + 1))
2920 {
2921 Say("abWeb_caught", this);
2922 PlaySound("web");
2923 effect2.power = effect2.power * 3 / 4;
2924 renderer.PlayAnime(AnimeID.Shiver);
2925 return MoveResult.Fail;
2926 }
2927 Say("abWeb_pass", this);
2928 EClass._map.SetEffect(base.Cell.x, base.Cell.z);
2929 }
2930 if (IsPC)
2931 {
2932 EClass.player.renderExtraTime = 0f;
2933 if (EClass._zone.IsRegion)
2934 {
2936 }
2937 else if ((newPoint.x > pos.x && newPoint.z > pos.z) || (newPoint.x < pos.x && newPoint.z < pos.z))
2938 {
2939 EClass.player.renderExtraTime = actTime * EClass.setting.render.anime.diagonalSpeed;
2940 }
2941 }
2942 if (newPoint.HasChara)
2943 {
2944 foreach (Chara item in newPoint.ListCharas())
2945 {
2946 if (item.mimicry != null && item.IsHostile(this))
2947 {
2948 item.mimicry.RevealMimicry(this, surprise: true);
2949 return MoveResult.Event;
2950 }
2951 }
2952 }
2953 if (newPoint.cell.hasDoor)
2954 {
2955 foreach (Thing thing in pos.Things)
2956 {
2957 if (thing.trait is TraitDoor traitDoor && traitDoor.owner.c_lockLv > 0)
2958 {
2959 if (base.INT < 10)
2960 {
2961 return MoveResult.Fail;
2962 }
2963 traitDoor.TryOpenLock(this);
2964 return MoveResult.Door;
2965 }
2966 }
2967 }
2968 Cell cell = newPoint.cell;
2969 Cell cell2 = pos.cell;
2970 bool flag3 = cell.HasLiquid && !IsLevitating;
2971 bool hasBridge = cell.HasBridge;
2972 bool hasRamp = cell.HasRamp;
2973 bool flag4 = EClass._zone.IsSnowCovered && !cell.HasRoof && !cell.isClearSnow;
2974 TileRow tileRow = (hasRamp ? ((TileRow)cell.sourceBlock) : ((TileRow)(hasBridge ? cell.sourceBridge : cell.sourceFloor)));
2975 SourceMaterial.Row row = (hasRamp ? cell.matBlock : (hasBridge ? cell.matBridge : cell.matFloor));
2976 bool flag5 = cell.IsTopWater && !cell.isFloating;
2977 if (!EClass._zone.IsRegion)
2978 {
2979 if (cell.hasDoorBoat)
2980 {
2981 tileRow = FLOOR.sourceWood;
2982 row = MATERIAL.sourceOak;
2983 flag5 = false;
2984 }
2985 else if (flag4 && !tileRow.ignoreSnow)
2986 {
2987 if (tileRow.tileType.IsWater)
2988 {
2989 tileRow = FLOOR.sourceIce;
2990 row = MATERIAL.sourceIce;
2991 }
2992 else
2993 {
2994 tileRow = FLOOR.sourceSnow;
2995 row = MATERIAL.sourceSnow;
2996 }
2997 flag5 = false;
2998 }
2999 }
3000 if ((pos.sourceFloor.isBeach || cell2.IsSnowTile) && !pos.HasObj)
3001 {
3002 EClass._map.SetFoormark(pos, 1, (int)Util.GetAngle(pos.x - newPoint.x, pos.z - newPoint.z), cell2.IsSnowTile ? 312 : 304);
3003 }
3004 if (isSynced)
3005 {
3006 string text = ((flag3 || flag5) ? "water" : tileRow.soundFoot.IsEmpty(row.soundFoot.IsEmpty("default")));
3007 if (cell.obj != 0 && cell.sourceObj.tileType.IsPlayFootSound && !cell.matObj.soundFoot.IsEmpty())
3008 {
3009 text = cell.matObj.soundFoot;
3010 }
3011 if (IsPC)
3012 {
3013 foreach (Thing thing2 in newPoint.Things)
3014 {
3015 if (thing2.IsInstalled && (thing2.trait.IsChangeFloorHeight || thing2.Pref.Surface))
3016 {
3017 text = thing2.material.soundFoot;
3018 }
3019 }
3020 }
3021 if (!text.IsEmpty())
3022 {
3023 SoundManager.altLastData = IsPC;
3024 PlaySound("Footstep/" + text, IsPC ? 1f : 0.9f);
3025 }
3026 if (!flag5)
3027 {
3029 PCOrbit pcOrbit = EClass.screen.pcOrbit;
3030 bool flag6 = scene.actionMode.gameSpeed > 1f;
3031 scene.psFoot.transform.position = renderer.position + pcOrbit.footPos;
3032 scene.psFoot.startColor = row.matColor;
3033 scene.psFoot.Emit(pcOrbit.emitFoot * ((!flag6) ? 1 : 2));
3034 if (flag6 && IsPC)
3035 {
3036 scene.psSmoke.transform.position = renderer.position + pcOrbit.smokePos;
3037 scene.psSmoke.Emit(pcOrbit.emitSmoke);
3038 }
3039 }
3040 if (flag3 || flag5)
3041 {
3042 Effect.Get("ripple").Play(newPoint);
3043 }
3044 }
3045 lastPos.Set(pos);
3046 if (type != MoveType.Force)
3047 {
3048 if (newPoint.HasChara && ai.Current.PushChara)
3049 {
3050 TryPush(newPoint);
3051 }
3052 if (newPoint.HasChara && newPoint.Charas.Count == 1)
3053 {
3054 Chara chara2 = newPoint.Charas[0];
3055 if (CanReplace(chara2))
3056 {
3057 chara2.MoveByForce(lastPos, this);
3058 if (chara.IsPC)
3059 {
3060 Say("replace_pc", chara, chara2);
3061 }
3062 }
3063 }
3064 }
3065 if (cell.hasDoor)
3066 {
3067 foreach (Thing thing3 in newPoint.Things)
3068 {
3069 if (thing3.trait is TraitDoor traitDoor2)
3070 {
3071 traitDoor2.TryOpen(this);
3072 }
3073 }
3074 }
3075 EClass._zone.map.MoveCard(newPoint, this);
3076 SyncRide();
3078 {
3079 foreach (Chara member in EClass.pc.party.members)
3080 {
3081 if (member.isLeashed && !member.IsPC && member.host == null && !member.IsDisabled && !member.HasCondition<ConEntangle>() && !member.IsInCombat && member.Dist(EClass.pc) > 1)
3082 {
3083 member.TryMoveTowards(EClass.pc.pos);
3084 }
3085 }
3086 }
3088 {
3090 }
3091 if (IsPC)
3092 {
3093 PlaySound("Footstep/Extra/pcfootstep");
3094 if (pos.HasThing)
3095 {
3096 foreach (Card item2 in pos.ListCards())
3097 {
3098 if (!item2.isThing || item2.placeState != 0 || item2.ignoreAutoPick)
3099 {
3100 continue;
3101 }
3103 {
3105 ContainerFlag containerFlag = item2.category.GetRoot().id.ToEnum<ContainerFlag>();
3106 if (containerFlag == ContainerFlag.none)
3107 {
3108 containerFlag = ContainerFlag.other;
3109 }
3110 if ((dataPick.noRotten && item2.IsDecayed) || (dataPick.onlyRottable && item2.trait.Decay == 0))
3111 {
3112 continue;
3113 }
3114 if (dataPick.userFilter)
3115 {
3116 switch (dataPick.IsFilterPass(item2.GetName(NameStyle.Full, 1)))
3117 {
3118 case Window.SaveData.FilterResult.PassWithoutFurtherTest:
3119 Pick(item2.Thing);
3120 continue;
3121 case Window.SaveData.FilterResult.Block:
3122 continue;
3123 }
3124 }
3125 if (dataPick.advDistribution)
3126 {
3127 foreach (int cat in dataPick.cats)
3128 {
3129 if (item2.category.uid == cat)
3130 {
3131 Pick(item2.Thing);
3132 }
3133 }
3134 }
3135 else if (!dataPick.flag.HasFlag(containerFlag))
3136 {
3137 Pick(item2.Thing);
3138 }
3139 }
3140 else
3141 {
3142 Pick(item2.Thing);
3143 }
3144 }
3145 }
3146 if (EClass._zone.IsRegion)
3147 {
3149 if (cell3?.zone != null && !cell3.zone.HiddenInRegionMap && (!(cell3.zone is Zone_Field) || cell3.zone.children.Count > 0 || cell3.zone.IsPCFaction))
3150 {
3151 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() ?? "");
3152 }
3153 if (pos.matFloor.alias == "snow" && EClass.rnd(3) == 0)
3154 {
3156 Msg.Say(Lang.GetList("walk_snow").RandomItem());
3157 }
3158 else if (EClass.world.weather.CurrentCondition == Weather.Condition.RainHeavy && EClass.rnd(3) == 0)
3159 {
3161 Msg.Say(Lang.GetList("walk_storm").RandomItem());
3162 }
3163 }
3165 }
3166 if (IsPCC)
3167 {
3168 int num6 = Mathf.Abs(cell2.topHeight - cell.topHeight);
3169 if ((num6 >= 3 && lastPos.sourceBlock.tileType.slopeHeight == 0 && newPoint.sourceBlock.tileType.slopeHeight == 0) || cell2.hasDoorBoat || cell.hasDoorBoat)
3170 {
3171 renderer.PlayAnime((cell2.topHeight >= cell.topHeight) ? AnimeID.JumpDown : ((num6 >= 6) ? AnimeID.Jump : AnimeID.JumpSmall));
3172 }
3173 else
3174 {
3175 float surfaceHeight = cell2.GetSurfaceHeight();
3176 float surfaceHeight2 = cell.GetSurfaceHeight();
3177 num6 = (int)Mathf.Abs((surfaceHeight - surfaceHeight2) * 100f);
3178 if (num6 >= 15)
3179 {
3180 renderer.PlayAnime((surfaceHeight >= surfaceHeight2) ? AnimeID.JumpDown : ((num6 >= 40) ? AnimeID.Jump : AnimeID.JumpSmall));
3181 }
3182 }
3183 }
3184 lastPos.Things.ForeachReverse(delegate(Thing t)
3185 {
3186 t.trait.OnSteppedOut(this);
3187 });
3188 if (!IsPC)
3189 {
3190 pos.Things.ForeachReverse(delegate(Thing t)
3191 {
3192 t.trait.OnStepped(this);
3193 });
3194 }
3195 if (CanDestroyPath())
3196 {
3198 }
3199 if (IsPC)
3200 {
3201 if (renderer.anime == null && renderer.replacer != null)
3202 {
3204 }
3206 {
3207 if (!FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room == null)
3208 {
3209 EClass.player.flags.isShoesOff = false;
3210 EClass.pc.Say("shoes_on", EClass.pc);
3211 EClass.pc.SetPCCState(PCCState.Normal);
3212 }
3213 }
3214 else if (FLOOR.IsTatami(pos.cell.sourceSurface.id) && pos.cell.room != null)
3215 {
3216 EClass.player.flags.isShoesOff = true;
3217 EClass.pc.Say("shoes_off", EClass.pc);
3218 EClass.pc.SetPCCState(PCCState.ShoesOff);
3219 }
3220 }
3221 bool flag7 = flag5 || EClass._zone.IsUnderwater;
3222 if (wasInWater != flag7)
3223 {
3224 wasInWater = flag7;
3225 RefreshSpeed();
3226 }
3227 hasMovedThisTurn = true;
3228 return MoveResult.Success;
3229 }
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:6375
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:6935
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:4149
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:7901
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:6122
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7052
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:3733
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:2487
bool IsInCombat
Definition: Chara.cs:878
bool HasCondition(string alias)
Definition: Chara.cs:9612
AIAct SetAI(AIAct g)
Definition: Chara.cs:9081
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:2500
void DestroyPath(Point pos)
Definition: Chara.cs:3231
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:3342
Point lastPos
Definition: Chara.cs:90
void MoveByForce(Point newPoint, Card c=null, bool checkWall=false)
Definition: Chara.cs:2685
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:2693
void SyncRide()
Definition: Chara.cs:4001
bool isDead
Definition: Chara.cs:391
override void LookAt(Card c)
Definition: Chara.cs:3597
bool isConfused
Definition: Chara.cs:128
override bool IsPCC
Definition: Chara.cs:696
void TryPush(Point point)
Definition: Chara.cs:3275
void SetPCCState(PCCState state)
Definition: Chara.cs:6827
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:364
int distanceTravel
Definition: Player.cs:936
Flags flags
Definition: Player.cs:1137
Window.SaveData dataPick
Definition: Player.cs:1077
bool regionMoveWarned
Definition: Player.cs:1203
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 7391 of file Chara.cs.

7392 {
7393 EClass.Sound.Play("pop_drama");
7394 if (book == "_chara" && IsPC)
7395 {
7396 step = "pc";
7397 }
7398 if (id == "lomias")
7399 {
7401 }
7402 return LayerDrama.Activate(book, sheet, step, this, null, tag);
7403 }
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 9456 of file Chara.cs.

9457 {
9458 c.owner = this;
9459 if (!(c is ConBurning))
9460 {
9461 if (c is ConBleed && ResistLv(964) >= 3)
9462 {
9463 return null;
9464 }
9465 }
9466 else if (ResistLv(950) >= 3)
9467 {
9468 return null;
9469 }
9471 {
9472 if (c.GainResistFactor >= 400)
9473 {
9474 c.power /= 2;
9475 }
9476 ResistCon(c);
9477 if (c.power <= 0)
9478 {
9479 return null;
9480 }
9481 }
9482 if (!force)
9483 {
9484 if (c.source.negate.Length != 0)
9485 {
9486 string[] negate = c.source.negate;
9487 foreach (string text in negate)
9488 {
9489 if (HasElement(text))
9490 {
9491 return null;
9492 }
9493 }
9494 }
9495 Element defenseAttribute = c.GetDefenseAttribute(this);
9496 if (defenseAttribute != null)
9497 {
9498 c.power = 100 * c.power / Mathf.Max(100 + defenseAttribute.Value, 1);
9499 }
9500 if (c.source.resistance.Length != 0)
9501 {
9502 int num = ResistLv(EClass.sources.elements.alias[c.source.resistance[0]].id);
9503 if (num > 0)
9504 {
9505 c.power /= num * num + 1;
9506 if (c.power <= 40)
9507 {
9508 return null;
9509 }
9510 }
9511 }
9512 c.power = c.EvaluatePower(c.power);
9513 if (c.power <= 0)
9514 {
9515 return null;
9516 }
9517 }
9518 int num2 = c.EvaluateTurn(c.power);
9519 if (num2 == 0)
9520 {
9521 return null;
9522 }
9523 for (int j = 0; j < conditions.Count; j++)
9524 {
9525 if (conditions[j].id != c.id)
9526 {
9527 continue;
9528 }
9529 if (c.Type == ConditionType.Stance || c.IsToggle)
9530 {
9531 conditions[j].Kill();
9532 return null;
9533 }
9534 if (conditions[j].CanStack(c))
9535 {
9536 if (conditions[j].ShouldOverride(c))
9537 {
9538 if (conditions[j].IsOverrideConditionMet(c, num2))
9539 {
9540 conditions[j].Kill(silent: true);
9541 continue;
9542 }
9543 return null;
9544 }
9545 if (CanGainConResist)
9546 {
9547 AddResistCon(c);
9548 }
9549 conditions[j].OnStacked(c.power);
9550 conditions[j].OnStartOrStack();
9551 conditions[j].PlayEffect();
9552 }
9553 if (!conditions[j].AllowMultipleInstance)
9554 {
9555 return null;
9556 }
9557 }
9558 foreach (Condition condition in conditions)
9559 {
9560 if (condition.TryNullify(c))
9561 {
9562 return null;
9563 }
9564 }
9565 c.value = num2;
9566 conditions.Add(c);
9567 if (CanGainConResist)
9568 {
9569 AddResistCon(c);
9570 }
9571 c.SetOwner(this);
9572 c.Start();
9573 SetDirtySpeed();
9574 if (c.ShouldRefresh)
9575 {
9576 Refresh();
9577 }
9578 if (c.CancelAI)
9579 {
9580 ai.Cancel();
9581 }
9582 if (IsPC && c.ConsumeTurn && !EClass.pc.isRestrained)
9583 {
9585 }
9586 if (c.SyncRide && (ride != null || parasite != null))
9587 {
9588 if (ride != null)
9589 {
9591 }
9592 if (parasite != null)
9593 {
9595 }
9596 }
9597 return c;
9598 }
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:6117
void SetDirtySpeed()
Definition: Chara.cs:1896
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9451
bool CanGainConResist
Definition: Chara.cs:1187
void AddResistCon(Condition con)
Definition: Chara.cs:9865
void ResistCon(Condition con)
Definition: Chara.cs:9885
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:2129
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 9446 of file Chara.cs.

9446 : Condition
9447 {
9448 return AddCondition(typeof(T).Name, p, force);
9449 }
string Name
Definition: Card.cs:2177

◆ AddCooldown()

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

Definition at line 8862 of file Chara.cs.

8863 {
8864 if (_cooldowns == null)
8865 {
8866 _cooldowns = new List<int>();
8867 }
8868 if (turns != 0)
8869 {
8870 _cooldowns.Add(idEle * 1000 + turns);
8871 return;
8872 }
8873 SourceElement.Row row = EClass.sources.elements.map[idEle];
8874 if (row.cooldown > 0)
8875 {
8876 _cooldowns.Add(idEle * 1000 + row.cooldown);
8877 }
8878 }
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 10355 of file Chara.cs.

10356 {
10357 if (!IsPCFaction || !IsGlobal)
10358 {
10359 _historyFood = null;
10360 return;
10361 }
10362 if (_historyFood == null)
10363 {
10364 _historyFood = new List<List<string>>
10365 {
10366 new List<string>()
10367 };
10368 }
10369 if (_historyFood[0].Count < 5)
10370 {
10371 _historyFood[0].Add(food.id);
10372 }
10373 }
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 9281 of file Chara.cs.

9282 {
9283 foreach (int hobby in _hobbies)
9284 {
9285 if (hobby == id)
9286 {
9287 return;
9288 }
9289 }
9290 _hobbies.Add(id);
9291 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2241 of file Chara.cs.

2242 {
2243 int ele = new int[9] { 30, 31, 33, 35, 35, 36, 34, 37, 39 }.RandomItem();
2244 body.AddBodyPart(ele);
2245 if (msg)
2246 {
2247 Say("gain_bodyparts", this, Element.Get(ele).GetName().ToLower());
2248 PlaySound("offering");
2249 }
2250 }
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 9865 of file Chara.cs.

9866 {
9867 if (con.power > 0 && con.GainResistFactor > 0)
9868 {
9869 int key = con.id;
9870 if (resistCon == null)
9871 {
9872 resistCon = new Dictionary<int, int>();
9873 }
9874 if (resistCon.ContainsKey(key))
9875 {
9876 resistCon[key] += con.power * con.GainResistFactor / 100;
9877 }
9878 else
9879 {
9880 resistCon[key] = con.power * con.GainResistFactor / 100;
9881 }
9882 }
9883 }
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 9293 of file Chara.cs.

9294 {
9295 foreach (int work in _works)
9296 {
9297 if (work == id)
9298 {
9299 return;
9300 }
9301 }
9302 _works.Add(id);
9303 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5348 of file Chara.cs.

5349 {
5350 if (!IsPC)
5351 {
5352 return;
5353 }
5354 int currency = GetCurrency();
5355 if (currency > 0)
5356 {
5357 int num = currency / 3 + EClass.rnd(currency / 3 + 1);
5358 if (num <= 0)
5359 {
5360 num = 1;
5361 }
5362 Msg.Say("panaltyMoney", this, Lang._currency(num));
5363 ModCurrency(-num);
5365 }
5366 foreach (Element value in EClass.pc.elements.dict.Values)
5367 {
5368 if (EClass.rnd(5) == 0 && value.IsMainAttribute)
5369 {
5370 EClass.pc.elements.ModExp(value.id, -500f);
5371 }
5372 }
5373 }
@ 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:2014

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

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

2204 {
2205 elements.ApplyElementMap(base.uid, SourceValueType.Chara, job.elementMap, base.DefaultLV, remove, applyFeat: true);
2206 if (IsPCC)
2207 {
2208 EClass.game.uniforms.Apply(pccData, job.id, base.IsMale, canUseOtherGender: true);
2209 }
2210 }
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 2289 of file Chara.cs.

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

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

2392 {
2393 owner?.Say("summon_vanish", this);
2394 pos.PlayEffect("vanish");
2395 pos.PlaySound("vanish");
2396 pos.PlayEffect("teleport");
2397 Destroy();
2398 }
void Destroy()
Definition: Card.cs:5164
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 2428 of file Chara.cs.

2429 {
2430 List<Chara> list = new List<Chara>();
2431 foreach (Chara chara in EClass._map.charas)
2432 {
2433 if (chara.IsMinion && chara.master == this)
2434 {
2435 list.Add(chara);
2436 }
2437 }
2438 foreach (Chara item in list)
2439 {
2440 item.Banish(this);
2441 }
2442 }
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 6264 of file Chara.cs.

6265 {
6266 if (!(e is Spell))
6267 {
6268 return 100;
6269 }
6270 if (!IsPC)
6271 {
6272 int num2 = 95;
6273 if (host != null)
6274 {
6275 if (host.ride == this)
6276 {
6277 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.EvalueRiding()));
6278 }
6279 if (host.parasite == this)
6280 {
6281 return num2 * 100 / (100 + 300 / Mathf.Max(5, 10 + host.Evalue(227)));
6282 }
6283 }
6284 return num2;
6285 }
6286 int num3 = Evalue(304);
6287 if (!IsPCFaction)
6288 {
6289 num3 = Mathf.Max(num3, base.LV + 5);
6290 }
6291 int num4 = 0;
6292 int num5 = 0;
6293 bool num6 = GetArmorSkill() == 122;
6294 AttackStyle attackStyle = body.GetAttackStyle();
6295 if (num6)
6296 {
6297 num4 = 20 - Evalue(122) / 5;
6298 num5 += 10 - Evalue(1654) * 4;
6299 }
6300 else
6301 {
6302 num4 = 10 - Evalue(120) / 5;
6303 }
6304 if (num4 < 5)
6305 {
6306 num4 = 5;
6307 }
6308 if (ride != null)
6309 {
6310 num4 += 5;
6311 }
6312 if (parasite != null)
6313 {
6314 num4 += 10;
6315 }
6316 if (attackStyle == AttackStyle.TwoWield)
6317 {
6318 num4 += 5;
6319 }
6320 if (attackStyle == AttackStyle.Shield)
6321 {
6322 num4 += 10;
6323 num5 += 20 - Evalue(1654) * 8;
6324 }
6325 if (isConfused)
6326 {
6327 num4 += 10000;
6328 }
6329 if (HasCondition<ConDim>())
6330 {
6331 num4 += ((Evalue(1654) >= 3) ? 1500 : 2500);
6332 }
6333 if (num > 1)
6334 {
6335 num4 += 5 * num;
6336 }
6337 if (num5 < 0)
6338 {
6339 num5 = 0;
6340 }
6341 return Mathf.Clamp(100 + e.Value - 10 - e.source.LV * e.source.cost[0] * num4 / Mathf.Max(10 + num3 * 10, 1), 0, 100 - num5);
6342 }
AttackStyle
Definition: AttackStyle.cs:2
AttackStyle GetAttackStyle()
Definition: CharaBody.cs:479
override int GetArmorSkill()
Definition: Chara.cs:8044
int EvalueRiding()
Definition: Chara.cs:6255
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 2057 of file Chara.cs.

2058 {
2059 int num = base.END;
2060 int num2 = 0;
2061 foreach (Element value in elements.dict.Values)
2062 {
2063 if (value.source.category == "skill")
2064 {
2065 num = ((!IsPC) ? (num + Mathf.Max(value.ValueWithoutLink, 0)) : (num + Mathf.Max(value.vBase, 0)));
2066 }
2067 }
2068 num2 = EClass.curve(num, 30, 10, 60);
2069 if (num2 < 10)
2070 {
2071 num2 = 10;
2072 }
2073 _maxStamina = num2 + 15;
2074 }
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 6570 of file Chara.cs.

6571 {
6572 foreach (Chara chara in EClass._map.charas)
6573 {
6574 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6575 {
6576 chara.GoHostile(tg);
6577 }
6578 }
6579 }
Hostility OriginalHostility
Definition: Chara.cs:473
void GoHostile(Card _tg)
Definition: Chara.cs:6464

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

8414 {
8415 if (things.IsFull())
8416 {
8417 return false;
8418 }
8419 if (t.c_isImportant)
8420 {
8421 return false;
8422 }
8423 if (t.id == "1084")
8424 {
8425 return true;
8426 }
8427 if (t.trait is TraitBookExp)
8428 {
8429 return true;
8430 }
8431 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
8432 {
8433 return false;
8434 }
8435 return true;
8436 }
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 8392 of file Chara.cs.

8393 {
8395 {
8396 return true;
8397 }
8398 if (!IsValidGiftWeight(t, num))
8399 {
8400 return false;
8401 }
8402 if (!skipImportantCheck && t.c_isImportant)
8403 {
8404 return false;
8405 }
8406 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
8407 {
8408 return false;
8409 }
8410 return true;
8411 }
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8382

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

4339 {
4340 return true;
4341 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2378 of file Chara.cs.

2379 {
2380 if (IsPCFaction || IsGlobal || IsMinion || IsMultisize || EClass._zone.CountMinions(c) > c.MaxSummon || base.rarity >= Rarity.Legendary)
2381 {
2382 return false;
2383 }
2384 if (HasElement(1222))
2385 {
2386 return false;
2387 }
2388 return true;
2389 }
int MaxSummon
Definition: Chara.cs:728
override bool IsMultisize
Definition: Chara.cs:720
int CountMinions(Chara c)
Definition: Zone.cs:3797

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

8846 {
8847 if (IsPC || base.isScaled || HasElement(1273))
8848 {
8849 return false;
8850 }
8851 if (!EClass.debug.godMode)
8852 {
8853 if (base.c_daysWithPC > 360)
8854 {
8855 return affinity.CanSleepBeside();
8856 }
8857 return false;
8858 }
8859 return true;
8860 }
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 2487 of file Chara.cs.

2488 {
2489 if (!IsMultisize)
2490 {
2491 if (base.rarity >= Rarity.Superior && !base.IsPCFactionOrMinion && ai is GoalCombat && !EClass._zone.IsPCFaction)
2492 {
2493 return !(EClass._zone is Zone_Town);
2494 }
2495 return false;
2496 }
2497 return true;
2498 }

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

7772 {
7773 if (t.IsDecayed && !HasElement(480))
7774 {
7775 return false;
7776 }
7777 if (HasElement(1250) && !t.HasElement(710))
7778 {
7779 return false;
7780 }
7781 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7782 {
7783 return false;
7784 }
7785 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7786 {
7787 return t.trait.CanEat(this);
7788 }
7789 return false;
7790 }
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 7943 of file Chara.cs.

7944 {
7945 return !body.IsTooHeavyToEquip(t);
7946 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 8313 of file Chara.cs.

8314 {
8315 foreach (ActList.Item item in ability.list.items)
8316 {
8317 if (item.act.id == 6630)
8318 {
8319 return true;
8320 }
8321 }
8322 return false;
8323 }
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 2594 of file Chara.cs.

2595 {
2596 return CanInteractTo(c.pos);
2597 }
bool CanInteractTo(Card c)
Definition: Chara.cs:2594

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

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

4334 {
4335 return true;
4336 }

Referenced by HotItemNoItem._TrySetAct().

◆ CanMoveTo()

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

Definition at line 2500 of file Chara.cs.

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

4344 {
4345 if (c.isDestroyed)
4346 {
4347 return false;
4348 }
4349 Card rootCard = c.GetRootCard();
4350 if (rootCard.isDestroyed || (rootCard.ExistsOnMap && rootCard.pos.Distance(pos) > 1))
4351 {
4352 return false;
4353 }
4354 if (rootCard != this && things.IsFull(c.Thing))
4355 {
4356 return false;
4357 }
4358 return true;
4359 }
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 3342 of file Chara.cs.

3343 {
3345 {
3346 return false;
3347 }
3348 if (IsPC)
3349 {
3350 return true;
3351 }
3352 if (c.IsPC || c.pos.Equals(EClass.pc.pos) || c.host != null)
3353 {
3354 return false;
3355 }
3356 if (!IsHostile(c))
3357 {
3358 if (c.c_uidMaster != 0 || c.isSummon || base.IsPowerful || IsEscorted())
3359 {
3360 return true;
3361 }
3362 if (DestDist < c.DestDist)
3363 {
3364 return true;
3365 }
3366 if (IsPCParty && !c.IsPCParty)
3367 {
3368 return true;
3369 }
3370 if (IsPCFaction && !c.IsPCParty)
3371 {
3372 return true;
3373 }
3374 }
3375 return false;
3376 }
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:6669
bool IsEscorted()
Definition: Chara.cs:2471
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 5216 of file Chara.cs.

5217 {
5218 return EClass.world.date.IsExpired(base.c_dateDeathLock);
5219 }
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:6629
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 2212 of file Chara.cs.

2213 {
2214 ApplyJob(remove: true);
2215 base.c_idJob = idNew;
2216 _job = null;
2217 ApplyJob();
2218 if (IsPCC)
2219 {
2220 PCC.Get(pccData).Build();
2221 }
2222 }
void ApplyJob(bool remove=false)
Definition: Chara.cs:2203
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 7188 of file Chara.cs.

7189 {
7190 memberType = type;
7191 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2322 of file Chara.cs.

2323 {
2324 ApplyRace(remove: true);
2325 base.c_idRace = idNew;
2326 _race = null;
2327 ApplyRace();
2328 ChangeMaterial(source.defMat.IsEmpty(race.material));
2329 }
@ ChangeMaterial
void ApplyRace(bool remove=false)
Definition: Chara.cs:2289
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 8952 of file Chara.cs.

8953 {
8954 if (IsPC && EClass.AdvMode)
8955 {
8956 SetNoGoal();
8957 return;
8958 }
8959 if (IsPCParty || base.noMove)
8960 {
8961 SetAI(new GoalIdle());
8962 return;
8963 }
8964 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8965 {
8966 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8967 if (goalFromTimeTable != null)
8968 {
8969 SetAI(goalFromTimeTable);
8970 if (goalFromTimeTable is GoalWork)
8971 {
8972 goalFromTimeTable.Tick();
8973 }
8974 return;
8975 }
8976 }
8977 if (goalList.index == -2)
8978 {
8980 }
8981 SetAI(goalList.Next());
8982 }
Status Tick()
Definition: AIAct.cs:366
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8984
GoalListType goalListType
Definition: Chara.cs:281
AIAct SetNoGoal()
Definition: Chara.cs:9076
bool IsHomeMember()
Definition: Chara.cs:6735
bool IsGuest()
Definition: Chara.cs:6760
GoalList goalList
Definition: Chara.cs:202
bool IsInHomeZone()
Definition: Chara.cs:6740
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 7478 of file Chara.cs.

7479 {
7480 if (map == null)
7481 {
7482 map = EClass._map;
7483 }
7484 foreach (Card item in map.props.installed.all)
7485 {
7486 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7487 {
7488 traitBed.RemoveHolder(this);
7489 }
7490 }
7491 }
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 8724 of file Chara.cs.

8725 {
8726 int num = 0;
8727 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8728 {
8729 Thing thing = things[num2];
8730 if (ShouldThrowAway(thing, type))
8731 {
8732 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8733 thing.Destroy();
8734 }
8735 }
8736 if (num > 0)
8737 {
8738 ModCurrency(num);
8739 if (type == ClearInventoryType.SellAtTown)
8740 {
8741 Msg.Say("party_sell", this, num.ToString() ?? "");
8742 PlaySound("pay");
8743 }
8744 }
8745 }
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:7504
int Num
Definition: Card.cs:159
bool ShouldThrowAway(Thing t, ClearInventoryType type)
Definition: Chara.cs:8653

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

10570 {
10571 if (tempElements != null)
10572 {
10574 tempElements = null;
10575 }
10576 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountDebuff()

int Chara.CountDebuff ( )
inline

Definition at line 9641 of file Chara.cs.

9642 {
9643 int num = 0;
9644 foreach (Condition condition in conditions)
9645 {
9646 if (condition.Type == ConditionType.Debuff)
9647 {
9648 num++;
9649 }
9650 }
9651 return num;
9652 }

References BaseStats.Type.

Referenced by GoalCombat.TryUseAbility().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 10375 of file Chara.cs.

10376 {
10377 if (_historyFood == null)
10378 {
10379 return -1;
10380 }
10381 int num = 0;
10382 foreach (List<string> item in _historyFood)
10383 {
10384 foreach (string item2 in item)
10385 {
10386 if (item2 == food.id)
10387 {
10388 num++;
10389 }
10390 }
10391 }
10392 return num;
10393 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 8192 of file Chara.cs.

8193 {
8194 Chara chara = CharaGen.Create(id);
8195 chara.c_originalHostility = base.c_originalHostility;
8196 if (chara.c_originalHostility != 0)
8197 {
8198 chara.hostility = chara.c_originalHostility;
8199 }
8200 if (orgPos != null)
8201 {
8202 chara.orgPos = orgPos.Copy();
8203 }
8204 chara.pos = pos.Copy();
8205 chara.isImported = true;
8206 chara.c_editorTags = base.c_editorTags;
8207 chara.c_editorTraitVal = base.c_editorTraitVal;
8208 chara.c_idTrait = base.c_idTrait;
8209 chara.homeZone = homeZone;
8210 return chara;
8211 }
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 6356 of file Chara.cs.

6357 {
6358 Talk("goodBoy");
6359 Say(headpat ? "headpat" : "cuddle", this, c);
6360 c.ShowEmo(Emo.love);
6361 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
6362 {
6363 c.MakeEgg();
6364 }
6365 if (headpat && this != c)
6366 {
6367 if (c.interest > 0)
6368 {
6369 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
6370 c.interest -= 20 + EClass.rnd(10);
6371 }
6373 {
6374 foreach (Chara member in party.members)
6375 {
6376 if (!member.IsPC && CanSeeLos(member))
6377 {
6378 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
6379 }
6380 }
6381 }
6382 }
6383 if (c.Evalue(1221) > 0)
6384 {
6385 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
6386 if (c.id == "hedgehog_ether")
6387 {
6388 ele = 922;
6389 }
6390 Say("reflect_thorne", this, c);
6391 DamageHP(10L, ele, Power, AttackSource.Condition);
6392 }
6393 }
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:6343
Thing MakeEgg(bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
Definition: Card.cs:5822
Element MainElement
Definition: Chara.cs:731
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:8114
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 9704 of file Chara.cs.

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

9654 : Condition
9655 {
9656 T condition = GetCondition<T>();
9657 if (condition != null)
9658 {
9659 condition.value -= v;
9660 if (condition.value <= 0)
9661 {
9662 condition.Kill();
9663 }
9664 }
9665 }
override T GetCondition< T >()
Definition: Chara.cs:9667

◆ CureHost()

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

Definition at line 9691 of file Chara.cs.

9692 {
9693 if (parasite != null)
9694 {
9695 parasite.Cure(type, p, state);
9696 }
9697 if (ride != null)
9698 {
9699 ride.Cure(type, p, state);
9700 }
9701 Cure(type, p, state);
9702 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9704

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 10539 of file Chara.cs.

10540 {
10541 if (tempElements != null)
10542 {
10543 if (body)
10544 {
10546 }
10547 if (mind)
10548 {
10550 }
10551 }
10552 void Cure(int[] eles)
10553 {
10554 foreach (int ele in eles)
10555 {
10556 if (tempElements == null)
10557 {
10558 break;
10559 }
10560 Element element = tempElements.GetElement(ele);
10561 if (element != null && element.vBase < 0)
10562 {
10563 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
10564 }
10565 }
10566 }
10567 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:10447
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 10505 of file Chara.cs.

10506 {
10507 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
10508 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 10493 of file Chara.cs.

10494 {
10495 if (body)
10496 {
10497 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
10498 }
10499 if (mind)
10500 {
10501 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
10502 }
10503 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10505

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3231 of file Chara.cs.

3232 {
3233 bool broke = false;
3234 pos.ForeachMultiSize(base.W, base.H, delegate(Point _p, bool main)
3235 {
3236 if (_p.IsValid)
3237 {
3238 if (_p.HasBlock)
3239 {
3240 EClass._map.MineBlock(_p, recoverBlock: false, this);
3241 if (_p.HasObj)
3242 {
3243 EClass._map.MineObj(_p, null, this);
3244 }
3245 broke = true;
3246 }
3247 if (_p.HasObj && _p.IsBlocked)
3248 {
3249 EClass._map.MineObj(_p, null, this);
3250 broke = true;
3251 }
3252 _p.Things.ForeachReverse(delegate(Thing t)
3253 {
3254 if (t.IsInstalled && (t.trait.IsBlockPath || t.trait.IsDoor))
3255 {
3256 if (t.isNPCProperty && t.trait.CanBeDestroyed)
3257 {
3258 t.Destroy();
3259 }
3260 else if (!t.IsUnique && !t.trait.CanBeDestroyed)
3261 {
3262 t.SetPlaceState(PlaceState.roaming);
3263 }
3264 }
3265 });
3266 }
3267 });
3268 if (broke)
3269 {
3270 Msg.Say("stomp");
3271 Shaker.ShakeCam("stomp");
3272 }
3273 }
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 5411 of file Chara.cs.

5412 {
5413 combatCount = 0;
5414 if (isDead)
5415 {
5416 return;
5417 }
5418 if (host != null)
5419 {
5420 base.hp = -1;
5421 if ((uint)(attackSource - 17) > 1u)
5422 {
5423 AddCondition<ConFaint>(200, force: true);
5424 return;
5425 }
5426 ActRide.Unride(host, this);
5427 }
5428 bool isInActiveZone = IsInActiveZone;
5429 if (isInActiveZone)
5430 {
5431 if (id == "putty" && origin != null && origin.IsPCParty)
5432 {
5434 }
5435 if (IsPC)
5436 {
5438 }
5439 if (base.isSummon)
5440 {
5441 if (id == "tsunami")
5442 {
5443 pos.PlaySound("water");
5444 }
5445 else
5446 {
5447 Say("summon_vanish", this);
5448 pos.PlayEffect("vanish");
5449 pos.PlaySound("vanish");
5450 }
5451 Destroy();
5452 return;
5453 }
5454 if ((uint)(attackSource - 17) <= 1u)
5455 {
5456 if (attackSource == AttackSource.Euthanasia && trait is TraitLittleOne)
5457 {
5458 MakeEgg();
5459 if (IsPCFaction)
5460 {
5462 }
5463 }
5464 PlayEffect("revive");
5465 PlaySound("chime_angel");
5466 }
5467 else
5468 {
5469 Effect.Get("blood").Play((parent is Chara) ? (parent as Chara).pos : pos).SetParticleColor(EClass.Colors.matColors[base.material.alias].main)
5470 .Emit(50);
5471 AddBlood(AI_Slaughter.slaughtering ? 12 : (2 + EClass.rnd(2)));
5472 PlaySound(base.material.GetSoundDead(source));
5473 }
5476 ClearFOV();
5477 }
5478 if (base.hp >= 0)
5479 {
5480 base.hp = -1;
5481 }
5482 string text = "";
5483 "dead_in".langGame(EClass._zone.Name);
5484 string text2 = ((origin == null) ? "" : origin.GetName(NameStyle.Full));
5485 if (LangGame.Has("dead_" + attackSource))
5486 {
5487 text = "dead_" + attackSource;
5488 }
5489 else
5490 {
5491 if (e != Element.Void && e != null)
5492 {
5493 text = "dead_" + e.source.alias;
5494 }
5495 if (text == "" || !LangGame.Has(text))
5496 {
5497 text = "dead";
5498 }
5499 }
5500 if (IsPC)
5501 {
5502 EClass._zone.isDeathLocation = true;
5503 string s = ((origin == null) ? text : "dead_by");
5505 if (attackSource == AttackSource.Wrath)
5506 {
5508 }
5509 EClass.player.deathMsg = GameLang.Parse(s.langGame(), thirdPerson: true, EClass.pc.NameBraced, "dead_in".langGame(EClass._zone.Name), text2);
5511 if (EClass._zone.instance is ZoneInstanceRandomQuest zoneInstanceRandomQuest)
5512 {
5513 zoneInstanceRandomQuest.status = ZoneInstance.Status.Fail;
5514 }
5515 AI_PlayMusic.keepPlaying = false;
5516 }
5517 if (isInActiveZone)
5518 {
5519 if (attackSource == AttackSource.DeathSentence || attackSource == AttackSource.Euthanasia)
5520 {
5521 Msg.Say("goto_heaven", this);
5522 }
5523 else
5524 {
5525 if (originalTarget != null || origin == null || !origin.isSynced || (attackSource != AttackSource.Melee && attackSource != AttackSource.Range))
5526 {
5527 Msg.Say(text, this, "", text2);
5528 }
5529 string text3 = TalkTopic("dead");
5530 if (!text3.IsEmpty())
5531 {
5532 text3 = text3.StripBrackets();
5533 }
5534 bool flag = base.rarity >= Rarity.Legendary && !IsPCFaction;
5535 if (!IsPC && flag)
5536 {
5537 MakeGrave(text3);
5538 }
5539 Msg.SetColor();
5540 SpawnLoot(origin);
5541 }
5542 if (IsPC)
5543 {
5545 }
5546 }
5547 if (IsPCFaction)
5548 {
5549 if (homeBranch != null)
5550 {
5551 homeBranch.Log(text, this, "");
5552 }
5553 WidgetPopText.Say("popDead".lang(base.Name), FontColor.Bad);
5554 if (!IsPC)
5555 {
5556 if (EClass.player.stats.allyDeath == 0)
5557 {
5558 Tutorial.Reserve("death_pet");
5559 }
5561 }
5562 }
5563 if (id == "mandrake" || HasElement(488))
5564 {
5565 Say("a_scream", this);
5566 ActEffect.ProcAt(EffectId.Scream, base.LV * 3 + 200, BlessedState.Normal, this, this, pos, isNeg: true);
5567 }
5568 daysStarved = 0;
5569 isDead = true;
5571 enemy = null;
5572 _cooldowns = null;
5573 base.isSale = false;
5574 SetInt(70);
5575 EClass._map.props.sales.Remove(this);
5576 Cure(CureType.Death);
5577 SetAI(new NoGoal());
5579 if (isInActiveZone && EClass._zone.HasLaw && IsHuman && OriginalHostility >= Hostility.Neutral)
5580 {
5581 pos.TalkWitnesses(origin?.Chara, "witness", 3, WitnessType.crime, (Chara c) => !c.IsPCParty && !c.IsUnique);
5582 }
5583 if (IsPC)
5584 {
5585 EClass.player.returnInfo = null;
5586 EClass.player.uidLastTravelZone = 0;
5587 foreach (Chara chara3 in EClass._map.charas)
5588 {
5589 if (chara3.IsHostile())
5590 {
5591 chara3.hostility = chara3.OriginalHostility;
5592 }
5593 if (chara3.enemy == EClass.pc)
5594 {
5595 chara3.enemy = null;
5596 }
5597 }
5598 if (EClass.pc.things.Find("letter_will") != null && EClass.rnd(10) == 0)
5599 {
5600 EClass.player.preventDeathPenalty = true;
5601 }
5602 }
5603 else
5604 {
5605 bool flag2 = currentZone.IsActiveZone && IsLocalChara && !currentZone.IsPCFaction;
5606 if (currentZone is Zone_LittleGarden && id == "littleOne")
5607 {
5608 flag2 = false;
5609 }
5610 if (flag2)
5611 {
5612 EClass._map.deadCharas.Add(this);
5613 }
5614 currentZone.RemoveCard(this);
5615 }
5616 if ((origin != null && origin.IsPCParty) || IsPCFaction)
5617 {
5618 int a = -10;
5619 if (IsPCFaction && !IsPCParty && (origin == null || !origin.IsPCParty))
5620 {
5621 a = -5;
5622 }
5623 ModAffinity(EClass.pc, a, show: false);
5624 string text4 = id;
5625 if (!(text4 == "quru"))
5626 {
5627 if (text4 == "corgon")
5628 {
5629 EClass.game.cards.globalCharas.Find("quru")?.ModAffinity(EClass.pc, -20, show: false);
5630 }
5631 }
5632 else
5633 {
5634 EClass.game.cards.globalCharas.Find("corgon")?.ModAffinity(EClass.pc, -20, show: false);
5635 }
5636 }
5637 if (origin != null)
5638 {
5639 if (origin.IsPCParty || origin.IsPCPartyMinion)
5640 {
5641 int num = 0;
5642 if (OriginalHostility >= Hostility.Friend && IsHuman && !base.IsPCFactionOrMinion)
5643 {
5644 num = -5;
5645 }
5646 else if (race.id == "cat" && OriginalHostility >= Hostility.Neutral)
5647 {
5648 EClass.pc.Say("killcat");
5649 num = -1;
5650 }
5651 if (EClass.pc.party.HasElement(1563) && num < 0)
5652 {
5653 num = num * 30 / 100;
5654 }
5655 if (num != 0)
5656 {
5657 EClass.player.ModKarma(num);
5658 }
5659 }
5660 if (origin == EClass.pc)
5661 {
5662 EClass.pc.faith.Revelation("kill", 10);
5663 }
5664 else if (origin.IsPCFaction)
5665 {
5666 origin.Chara.ModAffinity(EClass.pc, 1, show: false);
5667 origin.Chara.ShowEmo(Emo.love);
5668 }
5669 }
5670 if (base.sourceBacker != null && origin != null && origin.IsPCParty)
5671 {
5672 EClass.player.doneBackers.Add(base.sourceBacker.id);
5673 }
5674 if (base.IsPCFactionOrMinion)
5675 {
5677 {
5678 Msg.Say("abort_allyDead");
5679 }
5680 }
5682 {
5683 Msg.Say("abort_enemyDead");
5684 }
5685 if (IsPCParty && !IsPC)
5686 {
5688 base.c_wasInPcParty = true;
5689 EClass.pc.Say("allyDead");
5690 }
5691 switch (id)
5692 {
5693 case "littleOne":
5694 if (attackSource != AttackSource.Euthanasia && !IsPCFaction)
5695 {
5696 EClass.player.flags.little_killed = true;
5698 }
5699 break;
5700 case "big_daddy":
5701 if (!IsPCFaction)
5702 {
5703 Chara chara = CharaGen.Create("littleOne");
5704 EClass._zone.AddCard(chara, pos.Copy());
5705 Msg.Say("little_pop");
5707 }
5708 break;
5709 case "shark_sister":
5710 if (!IsPCFaction)
5711 {
5712 Chara t = CharaGen.Create("sister_shark");
5713 EClass._zone.AddCard(t, pos.Copy());
5714 Msg.Say("shark_pop");
5715 }
5716 break;
5717 }
5718 if (attackSource == AttackSource.Finish && origin != null && origin.Evalue(665) > 0)
5719 {
5720 Chara chara2 = CharaGen.CreateFromFilter("c_plant", base.LV);
5721 EClass._zone.AddCard(chara2, pos.Copy());
5722 if (chara2.LV < base.LV)
5723 {
5724 chara2.SetLv(base.LV);
5725 }
5726 chara2.MakeMinion((origin.IsPCParty || origin.IsPCPartyMinion) ? EClass.pc : origin.Chara, MinionType.Friend);
5727 Msg.Say("plant_pop", this, chara2);
5728 }
5731 }
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:6182
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:6798
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6409
virtual bool IsPCFaction
Definition: Card.cs:2309
void SpawnLoot(Card origin)
Definition: Card.cs:5204
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:2400
string NameBraced
Definition: Chara.cs:516
void ClearTempElements()
Definition: Chara.cs:10569
string TalkTopic(string topic="calm")
Definition: Chara.cs:7122
void TryDropBossLoot()
Definition: Chara.cs:5733
bool IsLocalChara
Definition: Chara.cs:855
Chara enemy
Definition: Chara.cs:86
bool IsInActiveZone
Definition: Chara.cs:852
void TryDropCarryOnly()
Definition: Chara.cs:4665
void MakeGrave(string lastword)
Definition: Chara.cs:5328
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:2586
Stats stats
Definition: Player.cs:1059
int little_dead
Definition: Player.cs:969
HashSet< int > doneBackers
Definition: Player.cs:1116
bool TryAbortAutoCombat(bool immediate=true)
Definition: Player.cs:2480
string deathMsg
Definition: Player.cs:1231
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:2054
void ResetHostility()
Definition: Zone.cs:2742
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 10524 of file Chara.cs.

10525 {
10526 if (tempElements == null)
10527 {
10528 return;
10529 }
10530 foreach (Element item in tempElements.dict.Values.ToList())
10531 {
10532 if (item.vBase > 0)
10533 {
10534 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
10535 }
10536 }
10537 }

References ElementContainer.dict, and item.

◆ Divorce()

void Chara.Divorce ( Chara  c)
inline

Definition at line 8266 of file Chara.cs.

8267 {
8268 if (base.c_love != null)
8269 {
8270 base.c_love.dateMarriage = 0;
8271 base.c_love.dateWedding = 0;
8272 SetFeat(1275, 0);
8274 }
8275 }
int divorced
Definition: Player.cs:135

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

◆ DoAI()

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

Definition at line 6344 of file Chara.cs.

6345 {
6346 SetAI(new DynamicAIAct("", delegate
6347 {
6348 onPerform();
6349 return true;
6350 })
6351 {
6352 wait = wait
6353 });
6354 }

◆ DoHostileAction()

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

Definition at line 6488 of file Chara.cs.

6489 {
6490 if (_tg == null || !_tg.isChara)
6491 {
6492 return;
6493 }
6494 Chara chara = _tg.Chara;
6495 if (chara.IsPC)
6496 {
6497 EClass.pc.combatCount = 10;
6498 }
6499 if (!chara.IsAliveInCurrentZone || !IsAliveInCurrentZone || chara == this)
6500 {
6501 return;
6502 }
6503 if ((IsPCFaction || IsPCFactionMinion) && (chara.IsPCFaction || chara.IsPCFactionMinion))
6504 {
6505 chara.Say("frown", this, chara);
6506 }
6507 else
6508 {
6509 if (EClass._zone.IsRegion)
6510 {
6511 return;
6512 }
6513 if (IsPC)
6514 {
6515 if (chara.IsFriendOrAbove() && !immediate)
6516 {
6517 chara.Say("frown", this, chara);
6518 chara.ShowEmo(Emo.sad);
6519 chara.hostility = Hostility.Neutral;
6520 return;
6521 }
6522 if (!chara.IsPCFaction && chara.hostility >= Hostility.Neutral && !EClass._zone.IsPCFaction)
6523 {
6524 bool flag = chara.id == "fanatic";
6525 if (EClass.rnd(4) == 0 || flag)
6526 {
6527 chara.Say("callHelp", chara);
6528 chara.CallHelp(this, flag);
6529 }
6530 }
6531 if (chara.hostility <= Hostility.Enemy)
6532 {
6533 foreach (Chara member in EClass.pc.party.members)
6534 {
6535 if (member != EClass.pc && member.enemy == null && member.CanSee(chara))
6536 {
6537 member.SetEnemy(chara);
6538 }
6539 }
6540 }
6541 }
6542 else if (chara.IsPC && hostility <= Hostility.Enemy)
6543 {
6544 foreach (Chara member2 in EClass.pc.party.members)
6545 {
6546 if (member2 != EClass.pc && member2.enemy == null && member2.CanSee(this))
6547 {
6548 member2.SetEnemy(this);
6549 }
6550 }
6551 }
6552 if (chara.calmCheckTurn <= 0 || IsPC)
6553 {
6554 chara.calmCheckTurn = (IsPC ? (20 + EClass.rnd(30)) : (10 + EClass.rnd(10)));
6555 }
6556 if (hostility != Hostility.Enemy || chara.hostility != Hostility.Enemy)
6557 {
6558 GoHostile(chara);
6559 chara.GoHostile(this);
6560 if (base.isHidden && !chara.CanSee(this) && !chara.IsDisabled && !chara.IsPCParty && !chara.IsPCPartyMinion && EClass.rnd(10 + Dist(chara) * 10) == 0)
6561 {
6562 Thing t = ThingGen.Create("49");
6563 ActThrow.Throw(chara, pos, t);
6564 Act.TC = chara;
6565 }
6566 }
6567 }
6568 }
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:6765
Chara SetEnemy(Chara c=null)
Definition: Chara.cs:6439
void CallHelp(Chara tg, bool fanatic=false)
Definition: Chara.cs:6570
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 5205 of file Chara.cs.

5206 {
5207 Say("drink", this, t.Duplicate(1));
5208 Say("quaff");
5209 PlaySound("drink");
5210 hunger.Mod(-2);
5211 t.ModNum(-1);
5212 t.trait.OnDrink(this);
5213 _ = IsPC;
5214 }
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 4677 of file Chara.cs.

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

4698 {
4699 if (t.c_isImportant)
4700 {
4701 Msg.Say("markedImportant");
4702 return;
4703 }
4704 if (!t.trait.CanBeDropped)
4705 {
4706 Msg.Say("cantDrop", t);
4707 return;
4708 }
4709 if (t.trait is TraitAbility)
4710 {
4711 SE.Trash();
4712 t.Destroy();
4713 return;
4714 }
4715 Msg.Say("dropItem", t.Name);
4716 t.ignoreAutoPick = true;
4717 PlaySound("drop");
4718 EClass._zone.AddCard(t, pos);
4719 if (t.trait.CanOnlyCarry)
4720 {
4721 t.Install();
4722 }
4723 }
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:8111
Stats mana
Definition: Chara.cs:1180
void RefreshFaithElement()
Definition: Chara.cs:10404
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 10519 of file Chara.cs.

10520 {
10521 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
10522 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 10510 of file Chara.cs.

10511 {
10512 int[] array = (body ? Element.List_Body : Element.List_Mind);
10513 foreach (int ele in array)
10514 {
10515 EnhanceTempElement(ele, p, onlyRenew);
10516 }
10517 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10519

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 5182 of file Chara.cs.

5183 {
5184 int slot = EClass.sources.categories.map[s].slot;
5185 BodySlot bodySlot = ((slot == 0) ? null : body.GetSlot(slot));
5186 if ((slot == 0 || bodySlot != null) && (slot != 37 || !HasElement(1209)))
5187 {
5188 SetEQQuality();
5189 Thing thing = ThingGen.CreateFromCategory(s, base.LV);
5190 AddThing(thing);
5191 if (bodySlot != null && !body.Equip(thing, bodySlot))
5192 {
5193 thing.Destroy();
5194 }
5195 }
5196 }
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:5129
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 5162 of file Chara.cs.

5163 {
5164 SetEQQuality();
5165 if (r != Rarity.Random)
5166 {
5167 CardBlueprint.current.rarity = r;
5168 }
5169 Thing thing = ThingGen.Create(s, mat, base.LV);
5170 if (body.GetSlot(thing, onlyEmpty: true) == null)
5171 {
5172 return thing;
5173 }
5174 AddThing(thing);
5175 if (!body.Equip(thing))
5176 {
5177 thing.Destroy();
5178 }
5179 return thing;
5180 }

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

5199 {
5200 SetEQQuality();
5201 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
5202 AddThing(t);
5203 }
Thing SetNum(int a)
Definition: Card.cs:3577

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 6255 of file Chara.cs.

6256 {
6257 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
6258 {
6259 return 25 + Evalue(226) * 125 / 100;
6260 }
6261 return Evalue(226);
6262 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3563 of file Chara.cs.

3564 {
3565 Msg.Say("skyFall", EClass.pc, EClass._zone.Name);
3566 Zone zone = (EClass._zone.isExternalZone ? null : EClass._zone.GetTopZone().FindZone(EClass._zone.lv - 1));
3567 zone = zone ?? EClass.world.region;
3569 {
3570 state = ZoneTransition.EnterState.Fall,
3571 x = pos.x,
3572 z = pos.z
3573 });
3574 }
void MoveZone(string alias)
Definition: Chara.cs:3378
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:1970

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

7995 {
7996 TraitToolRange ranged = weapon.trait as TraitToolRange;
7997 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7998 if (thing != null)
7999 {
8000 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
8001 if (thing2 != null)
8002 {
8003 return thing2;
8004 }
8005 }
8006 return things.Find((Thing t) => ranged.IsAmmo(t));
8007 }
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 7493 of file Chara.cs.

7494 {
7495 foreach (Card item in EClass._map.props.installed.all)
7496 {
7497 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7498 {
7499 return traitBed;
7500 }
7501 }
7502 return null;
7503 }

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

7726 {
7727 Thing result = null;
7728 int num = -1;
7729 if (IsPC)
7730 {
7731 return null;
7732 }
7733 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7734 {
7735 int num2 = CountNumEaten(item);
7736 int num3 = 100 - num2 + (item.HasElement(757) ? 10 : 0);
7737 if (num3 > num)
7738 {
7739 result = item;
7740 num = num3;
7741 }
7742 }
7743 return result;
7744 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7771
int CountNumEaten(Thing food)
Definition: Chara.cs:10375
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 2462 of file Chara.cs.

2463 {
2464 if (IsMinion)
2465 {
2466 master = EClass._map.FindChara(base.c_uidMaster);
2467 }
2468 return master;
2469 }
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 6654 of file Chara.cs.

6655 {
6656 for (int i = 0; i < EClass._map.charas.Count; i++)
6657 {
6658 Chara chara = EClass._map.charas[i];
6659 if (chara != this && chara != enemy && chara.mimicry == null && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6660 {
6661 DoHostileAction(chara);
6662 enemy = chara;
6663 return true;
6664 }
6665 }
6666 return false;
6667 }
ConTransmuteMimic mimicry
Definition: Chara.cs:106
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6488

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

6582 {
6583 if (EClass._zone.isPeace && base.IsPCFactionOrMinion && !IsPC)
6584 {
6585 return false;
6586 }
6587 if (enemy != null && !enemy.IsAliveInCurrentZone)
6588 {
6589 enemy = null;
6590 }
6591 if (enemy != null)
6592 {
6593 return false;
6594 }
6595 if (IsPCParty && EClass.pc.isHidden && base.isHidden)
6596 {
6597 return false;
6598 }
6599 if (mimicry != null)
6600 {
6601 return false;
6602 }
6603 bool flag = enemy != null || ai is GoalCombat;
6604 int num = (base.PER + Evalue(210) * 2) * ((!flag) ? 1 : 2);
6605 bool flag2 = IsPCParty && !IsPC && EClass.game.config.tactics.dontWander;
6606 bool flag3 = !IsPCParty;
6607 Chara chara = null;
6608 int num2 = 9999;
6609 for (int i = 0; i < EClass._map.charas.Count; i++)
6610 {
6611 Chara chara2 = EClass._map.charas[i];
6612 if (chara2 == this || !IsHostile(chara2) || !CanSee(chara2) || chara2.mimicry != null)
6613 {
6614 continue;
6615 }
6616 int num3 = Dist(chara2);
6617 int num4 = GetSightRadius() + (flag ? 1 : 0);
6618 if (num3 > num4)
6619 {
6620 continue;
6621 }
6622 if (flag3 && EClass.rnd(chara2.Evalue(152) + 5) * (100 + num3 * num3 * 10) / 100 > EClass.rnd(num))
6623 {
6624 if (this == pos.FirstChara)
6625 {
6626 chara2.ModExp(152, Mathf.Clamp((num - chara2.Evalue(152)) / 2, 1, Mathf.Max(30 - stealthSeen * 2, 1)));
6627 }
6628 stealthSeen++;
6629 }
6630 else if (CanSeeLos(chara2) && (!flag2 || EClass.pc.isBlind || EClass.pc.CanSeeLos(chara2)) && (!base.IsPCFactionOrMinion || EClass.pc.ai.ShouldAllyAttack(chara2)))
6631 {
6632 if (!IsPCParty)
6633 {
6634 DoHostileAction(chara2);
6635 enemy = chara2;
6636 return true;
6637 }
6638 if (num3 < num2)
6639 {
6640 num2 = num3;
6641 chara = chara2;
6642 }
6643 }
6644 }
6645 if (chara != null)
6646 {
6647 DoHostileAction(chara);
6648 enemy = chara;
6649 return true;
6650 }
6651 return false;
6652 }
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 8109 of file Chara.cs.

8110 {
8111 return FindBed()?.owner.pos.cell.room;
8112 }
TraitBed FindBed()
Definition: Chara.cs:7493

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

10291 {
10292 Element orCreateElement = elements.GetOrCreateElement(ele);
10293 if (orCreateElement.ValueWithoutLink == 0)
10294 {
10295 elements.ModBase(orCreateElement.id, 1);
10296 }
10297 if (orCreateElement is Spell)
10298 {
10299 int num = EClass.curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
10300 int num2 = origin?.Evalue(765) ?? 0;
10301 num = num * (100 - num2) / 100;
10302 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
10303 a = Mathf.Max(1, EClass.rndHalf(a));
10304 if (orCreateElement.source.charge == 1)
10305 {
10306 a = 1;
10307 }
10308 orCreateElement.vPotential += a;
10309 }
10310 Say("spell_gain", this, orCreateElement.Name);
10311 LayerAbility.SetDirty(orCreateElement);
10312 }
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 7430 of file Chara.cs.

7431 {
7432 string result = "?????";
7433 if (ai != null)
7434 {
7435 result = ai.GetCurrentActionText();
7436 }
7437 return result;
7438 }
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 8044 of file Chara.cs.

8045 {
8046 if (body.GetWeight(armorOnly: true) <= (HasElement(1204) ? 6000 : 30000))
8047 {
8048 return 120;
8049 }
8050 return 122;
8051 }
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 8009 of file Chara.cs.

8010 {
8011 Thing result = null;
8012 int num = 0;
8013 foreach (Thing thing in things)
8014 {
8015 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
8016 {
8017 num = thing.GetEquipValue();
8018 result = thing;
8019 }
8020 }
8021 return result;
8022 }
int GetEquipValue()
Definition: Card.cs:7405
bool IsRangedWeapon
Definition: Card.cs:2283
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7943

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 9629 of file Chara.cs.

9630 {
9631 for (int i = 0; i < conditions.Count; i++)
9632 {
9633 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
9634 {
9635 return conBuffStats.elements.GetElement(ele);
9636 }
9637 }
9638 return null;
9639 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 9624 of file Chara.cs.

9625 {
9626 return GetBuffStats(EClass.sources.elements.alias[alias].id);
9627 }
Element GetBuffStats(string alias)
Definition: Chara.cs:9624

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

9668 {
9669 for (int i = 0; i < conditions.Count; i++)
9670 {
9671 if (conditions[i] is T)
9672 {
9673 return conditions[i] as T;
9674 }
9675 }
9676 return null;
9677 }

◆ GetCooldown()

int Chara.GetCooldown ( int  idEle)
inline

Definition at line 8918 of file Chara.cs.

8919 {
8920 if (_cooldowns != null)
8921 {
8922 for (int i = 0; i < _cooldowns.Count; i++)
8923 {
8924 if (_cooldowns[i] / 1000 == idEle)
8925 {
8926 return _cooldowns[i] % 1000;
8927 }
8928 }
8929 }
8930 return 0;
8931 }

Referenced by NotificationCooldown.OnRefresh().

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3683 of file Chara.cs.

3684 {
3685 Debug.Log(angle);
3686 if (!renderer.hasActor)
3687 {
3688 if (angle == 0f || angle == 45f || angle == 90f)
3689 {
3690 return 2;
3691 }
3692 if (angle == -135f || angle == 180f || angle == -90f)
3693 {
3694 return 1;
3695 }
3696 if (angle == 135f)
3697 {
3698 return 0;
3699 }
3700 return 3;
3701 }
3702 return renderer.actor.currentDir;
3703 }
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 7405 of file Chara.cs.

7406 {
7407 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
7408 }
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 4750 of file Chara.cs.

4751 {
4752 if (elements.Value(122) > elements.Value(120))
4753 {
4754 return elements.GetElement(122);
4755 }
4756 return elements.GetElement(120);
4757 }
int Value(int ele)

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4725 of file Chara.cs.

4726 {
4727 int num = Evalue(131);
4728 int num2 = Evalue(130);
4729 int num3 = Evalue(123);
4730 if (num > num2 && num > num3)
4731 {
4732 return AttackStyle.TwoWield;
4733 }
4734 if (num2 > num && num2 > num3)
4735 {
4736 return AttackStyle.TwoHand;
4737 }
4738 if (num3 > num && num3 > num2)
4739 {
4740 return AttackStyle.Shield;
4741 }
4742 return AttackStyle.Default;
4743 }

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 8233 of file Chara.cs.

8234 {
8235 SourceCategory.Row r = null;
8236 if (_listFavCat.Count == 0)
8237 {
8238 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
8239 {
8240 if (row.gift > 0)
8241 {
8242 _listFavCat.Add(row);
8243 }
8244 }
8245 }
8246 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8247 {
8248 r = _listFavCat.RandomItem();
8249 });
8250 return r;
8251 }
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:24

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

8214 {
8215 if (_listFavFood.Count == 0)
8216 {
8217 foreach (SourceThing.Row row in EClass.sources.things.rows)
8218 {
8219 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
8220 {
8221 _listFavFood.Add(row);
8222 }
8223 }
8224 }
8225 SourceThing.Row r = null;
8226 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8227 {
8228 r = _listFavFood.RandomItem();
8229 });
8230 return r;
8231 }
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 4745 of file Chara.cs.

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

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

8985 {
8986 if (IsPC)
8987 {
8988 return null;
8989 }
8990 switch (TimeTable.GetSpan(idTimeTable, hour))
8991 {
8992 case TimeTable.Span.Sleep:
8994 {
8995 return new GoalSleep();
8996 }
8997 break;
8998 case TimeTable.Span.Eat:
8999 return new GoalIdle();
9000 case TimeTable.Span.Work:
9001 if (IsGuest())
9002 {
9003 return new GoalIdle();
9004 }
9005 return GetGoalWork();
9006 case TimeTable.Span.Free:
9007 if (IsGuest())
9008 {
9009 return new GoalIdle();
9010 }
9011 return GetGoalHobby();
9012 }
9013 return null;
9014 }
Goal GetGoalWork()
Definition: Chara.cs:9016
Goal GetGoalHobby()
Definition: Chara.cs:9029
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 9029 of file Chara.cs.

9030 {
9031 if (IsPrisoner)
9032 {
9033 return new GoalIdle();
9034 }
9035 if (memberType == FactionMemberType.Livestock)
9036 {
9037 return new GoalGraze();
9038 }
9039 return new GoalHobby();
9040 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1052

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 9016 of file Chara.cs.

9017 {
9018 if (IsPrisoner)
9019 {
9020 return new GoalIdle();
9021 }
9022 if (memberType == FactionMemberType.Livestock)
9023 {
9024 return new GoalGraze();
9025 }
9026 return new GoalWork();
9027 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 7415 of file Chara.cs.

7416 {
7417 int num = 50;
7418 if (FindBed() != null)
7419 {
7420 num += 50;
7421 }
7422 return num;
7423 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 7410 of file Chara.cs.

7411 {
7412 return base.LV / 2 + 4;
7413 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6917 of file Chara.cs.

6918 {
6919 if (mimicry != null)
6920 {
6921 return mimicry.thing.GetHoverText();
6922 }
6923 string text = base.Name;
6924 if (IsFriendOrAbove())
6925 {
6926 text = text.TagColor(EClass.Colors.colorFriend);
6927 }
6928 else if (IsHostile())
6929 {
6930 text = text.TagColor(EClass.Colors.colorHostile);
6931 }
6932 int num = 2;
6933 int lV = EClass.pc.LV;
6934 if (base.LV >= lV * 5)
6935 {
6936 num = 0;
6937 }
6938 else if (base.LV >= lV * 2)
6939 {
6940 num = 1;
6941 }
6942 else if (base.LV <= lV / 4)
6943 {
6944 num = 4;
6945 }
6946 else if (base.LV <= lV / 2)
6947 {
6948 num = 3;
6949 }
6950 string text2 = Lang.GetList("lvComparison")[num];
6951 text2 = (" (" + text2 + ") ").TagSize(14).TagColor(EClass.Colors.gradientLVComparison.Evaluate(0.25f * (float)num));
6952 string s = (IsFriendOrAbove() ? "HostilityAlly" : (IsNeutral() ? "HostilityNeutral" : "HostilityEnemy"));
6953 s = (" (" + s.lang() + ") ").TagSize(14);
6954 s = "";
6955 if (memberType == FactionMemberType.Guest)
6956 {
6957 s += (" (" + "guest".lang() + ") ").TagSize(14);
6958 }
6959 else if (memberType == FactionMemberType.Livestock)
6960 {
6961 s += (" (" + "livestock".lang() + ") ").TagSize(14);
6962 }
6963 if (!EClass.pc.IsMoving)
6964 {
6965 if (EClass.pc.HasHigherGround(this))
6966 {
6967 text2 += "lowerGround".lang();
6968 }
6969 else if (HasHigherGround(EClass.pc))
6970 {
6971 text2 += "higherGround".lang();
6972 }
6973 }
6974 if (Evalue(1232) > 0)
6975 {
6976 text2 = "milkBaby".lang().TagSize(14) + text2;
6977 }
6978 if (Guild.Fighter.ShowBounty(this) && Guild.Fighter.HasBounty(this))
6979 {
6980 text2 = "hasBounty".lang().TagSize(14) + text2;
6981 }
6982 if (EClass.pc.HasElement(481))
6983 {
6984 text2 += ("(" + faith.Name + ")").TagSize(14);
6985 }
6986 if (EClass.pc.HasElement(6607))
6987 {
6988 s += CraftUtil.GetBloodText(this).TagSize(14).TagColor(EClass.Colors.colorBlood);
6989 }
6990 return text + text2 + s;
6991 }
bool HasHigherGround(Card c)
Definition: Chara.cs:1216
override bool IsMoving
Definition: Chara.cs:622
bool IsNeutral()
Definition: Chara.cs:6716
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 6993 of file Chara.cs.

6994 {
6995 if (mimicry != null)
6996 {
6997 return mimicry.thing.GetHoverText2();
6998 }
6999 string text = "";
7000 if (knowFav)
7001 {
7002 text += Environment.NewLine;
7003 text = text + "<size=14>" + "favgift".lang(GetFavCat().GetName().ToLower(), GetFavFood().GetName()) + "</size>";
7004 }
7005 string text2 = "";
7007 {
7008 text2 += Environment.NewLine;
7009 text2 = text2 + "Lv:" + base.LV + " HP:" + base.hp + "/" + MaxHP + " MP:" + mana.value + "/" + mana.max + " DV:" + DV + " PV:" + PV + " Hunger:" + hunger.value;
7010 text2 += Environment.NewLine;
7011 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");
7012 text2 += Environment.NewLine;
7013 text2 = text2 + base.uid + IsMinion + "/" + base.c_uidMaster + "/" + master;
7014 text2 = text2 + " dir:" + base.dir + " skin:" + base.idSkin + " scaled:" + base.isScaled;
7015 }
7017 {
7018 text2 += Environment.NewLine;
7019 text2 += "<size=14>";
7020 foreach (Hobby item in ListWorks())
7021 {
7022 text2 = text2 + item.Name + ", ";
7023 }
7024 foreach (Hobby item2 in ListHobbies())
7025 {
7026 text2 = text2 + item2.Name + ", ";
7027 }
7028 text2 = text2.TrimEnd(", ".ToCharArray()) + "</size>";
7029 }
7030 string text3 = "";
7031 IEnumerable<BaseStats> enumerable = conditions.Concat((!IsPCFaction) ? new BaseStats[0] : new BaseStats[2] { hunger, stamina });
7032 if (enumerable.Count() > 0)
7033 {
7034 text3 += Environment.NewLine;
7035 text3 += "<size=14>";
7036 int num = 0;
7037 foreach (BaseStats item3 in enumerable)
7038 {
7039 string text4 = item3.GetPhaseStr();
7040 if (text4.IsEmpty() || text4 == "#")
7041 {
7042 continue;
7043 }
7044 Color c = Color.white;
7045 switch (item3.source.group)
7046 {
7047 case "Bad":
7048 case "Debuff":
7049 case "Disease":
7051 break;
7052 case "Buff":
7054 break;
7055 }
7057 {
7058 text4 = text4 + "(" + item3.GetValue() + ")";
7059 if (resistCon != null && resistCon.ContainsKey(item3.id))
7060 {
7061 text4 = text4 + "{" + resistCon[item3.id] + "}";
7062 }
7063 }
7064 num++;
7065 text3 = text3 + text4.TagColor(c) + ", ";
7066 }
7067 if (num == 0)
7068 {
7069 text3 = "";
7070 }
7071 else
7072 {
7073 text = "";
7074 text3 = text3.TrimEnd(", ".ToCharArray()) + "</size>";
7075 }
7076 }
7078 {
7079 text3 += Environment.NewLine;
7080 foreach (ActList.Item item4 in ability.list.items)
7081 {
7082 text3 = text3 + item4.act.Name + ", ";
7083 }
7084 text3 = text3.TrimEnd(", ".ToCharArray());
7085 }
7086 return text + text2 + text3;
7087 }
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:7896
bool isScaled
Definition: Card.cs:915
SourceCategory.Row GetFavCat()
Definition: Chara.cs:8233
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:9172
override int PV
Definition: Chara.cs:772
SourceThing.Row GetFavFood()
Definition: Chara.cs:8213
List< Hobby > ListWorks(bool useMemberType=true)
Definition: Chara.cs:9145
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 8339 of file Chara.cs.

8340 {
8341 if (id == "olderyoungersister")
8342 {
8343 if (base.idSkin != 2)
8344 {
8345 return "UN_olderyoungersister";
8346 }
8347 return "UN_olderyoungersister_alt";
8348 }
8349 if (Portrait.allIds.Contains("UN_" + id + ".png"))
8350 {
8351 return "UN_" + id;
8352 }
8353 return base.c_idPortrait;
8354 }
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 8325 of file Chara.cs.

8326 {
8327 string text = race.id;
8328 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
8329 {
8330 return "foxfolk";
8331 }
8332 if (trait is TraitGuard)
8333 {
8334 return "guard";
8335 }
8336 return "";
8337 }

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

7184 {
7185 return GetSprite();
7186 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6835

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

8278 {
8279 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
8280 {
8281 if (enumerator.MoveNext())
8282 {
8283 return enumerator.Current;
8284 }
8285 }
8286 return null;
8287 }
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 10395 of file Chara.cs.

10396 {
10397 if (base._IsPC)
10398 {
10399 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
10400 }
10401 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
10402 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 5221 of file Chara.cs.

5222 {
5223 Revive(EClass.pc.pos.GetNearestPoint(allowBlock: false, allowChara: false), msg: true);
5224 if (!IsPCFaction)
5225 {
5226 return;
5227 }
5229 {
5230 if (homeZone != null && EClass._zone != homeZone)
5231 {
5232 Msg.Say("returnHome", this, homeZone.Name);
5234 }
5235 }
5236 else if (!EClass._zone.IsPCFaction || homeBranch != EClass.Branch || base.c_wasInPcParty)
5237 {
5238 EClass.pc.party.AddMemeber(this, showMsg: true);
5239 }
5240 }
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 9123 of file Chara.cs.

9124 {
9125 BaseArea result = null;
9126 foreach (Hobby item in ListWorks())
9127 {
9128 AIWork aI = item.GetAI(this);
9129 if (aI.SetDestination())
9130 {
9131 if (aI.destArea != null)
9132 {
9133 result = aI.destArea;
9134 }
9135 else if (aI.destThing != null)
9136 {
9137 result = aI.destThing.pos.cell.room;
9138 }
9139 break;
9140 }
9141 }
9142 return result;
9143 }
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 6835 of file Chara.cs.

6836 {
6837 if (IsPCC)
6838 {
6839 PCC pCC = PCC.Get(pccData);
6840 pCC.Build();
6841 return pCC.variation.idle[0, 0];
6842 }
6843 if (spriteReplacer != null)
6844 {
6845 return spriteReplacer.data.GetSprite();
6846 }
6847 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);
6848 }
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 6859 of file Chara.cs.

6860 {
6861 if (IsPCC)
6862 {
6864 {
6866 }
6867 }
6868 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && (GetBool(123) || affinity.CanSleepBeside()))
6869 {
6870 return EClass.setting.pass.subDead;
6871 }
6872 return SubPassData.Default;
6873 }
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:1199
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 7425 of file Chara.cs.

7426 {
7427 return GetHappiness().ToString() ?? "";
7428 }
int GetHappiness()
Definition: Chara.cs:7415

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 9261 of file Chara.cs.

9262 {
9263 string text = (simple ? "" : ("hobby".lang() + ":"));
9264 foreach (Hobby item in ListHobbies())
9265 {
9266 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
9267 }
9268 return text.TrimEnd(',');
9269 }

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 9271 of file Chara.cs.

9272 {
9273 string text = (simple ? "" : ("work".lang() + ":"));
9274 foreach (Hobby item in ListWorks())
9275 {
9276 text = text + " " + item.Name.TagColor((item.GetEfficiency(this) > 0) ? FontColor.Good : FontColor.Warning) + ",";
9277 }
9278 return text.TrimEnd(',');
9279 }

References item.

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

◆ GetTopicText()

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

Definition at line 7089 of file Chara.cs.

7090 {
7091 string key = source.idText.IsEmpty(id);
7092 if (id == "littleOne" && EClass._zone is Zone_LittleGarden)
7093 {
7094 key = "littleOne2";
7095 }
7096 SourceCharaText.Row row = EClass.sources.charaText.map.TryGetValue(key);
7097 if (row == null)
7098 {
7099 return null;
7100 }
7101 string text = row.GetText(topic, returnNull: true);
7102 if (text.IsEmpty())
7103 {
7104 return null;
7105 }
7106 if (text.StartsWith("@"))
7107 {
7108 row = EClass.sources.charaText.map.TryGetValue(text.Replace("@", ""));
7109 if (row == null)
7110 {
7111 return null;
7112 }
7113 text = row.GetText(topic, returnNull: true);
7114 if (text.IsEmpty())
7115 {
7116 return null;
7117 }
7118 }
7119 return text.Split(Environment.NewLine.ToCharArray()).RandomItem();
7120 }
SourceCharaText charaText

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 8299 of file Chara.cs.

8300 {
8301 int num = 0;
8302 if (base.c_upgrades != null)
8303 {
8304 num += base.c_upgrades.spent;
8305 }
8306 if (base.c_genes != null)
8307 {
8308 num += base.c_genes.GetTotalCost();
8309 }
8310 return num + base.feat;
8311 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 9192 of file Chara.cs.

9193 {
9194 foreach (Hobby item in ListWorks())
9195 {
9196 if (item.source.alias == id)
9197 {
9198 return item;
9199 }
9200 }
9201 foreach (Hobby item2 in ListHobbies())
9202 {
9203 if (item2.source.alias == id)
9204 {
9205 return item2;
9206 }
9207 }
9208 return null;
9209 }
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 9344 of file Chara.cs.

9345 {
9346 if (_workSummary == null)
9347 {
9348 _workSummary = new WorkSummary();
9349 }
9350 return _workSummary;
9351 }
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 8438 of file Chara.cs.

8439 {
8440 if (c.IsHostile() || c.IsDeadOrSleeping)
8441 {
8442 Msg.Say("affinityNone", c, this);
8443 return;
8444 }
8445 if (!t.isCopy && t.IsCursed && t.IsEquipmentOrRanged && !t.IsAmmo && c.HasElement(1414))
8446 {
8447 bool num = t.blessedState == BlessedState.Doomed;
8448 int num2 = 200 + t.LV * 3;
8449 if (t.rarity == Rarity.Legendary)
8450 {
8451 num2 *= 3;
8452 }
8453 if (t.rarity >= Rarity.Mythical)
8454 {
8455 num2 *= 5;
8456 }
8457 if (num)
8458 {
8459 num2 *= 2;
8460 }
8461 EClass.pc.PlayEffect("identify");
8462 EClass.pc.PlaySound("identify");
8463 c.PlayEffect("mutation");
8464 c.Say("draw_curse", c, t);
8465 t.Destroy();
8466 List<Element> list = new List<Element>();
8467 foreach (Element value in EClass.pc.elements.dict.Values)
8468 {
8469 if (value is Spell)
8470 {
8471 list.Add(value);
8472 }
8473 }
8474 if (list.Count == 0)
8475 {
8477 return;
8478 }
8479 Element element = list.RandomItem();
8480 EClass.pc.ModExp(element.id, num2);
8481 EClass.pc.Say("draw_curse2", EClass.pc, element.Name);
8482 c.AddExp(Mathf.Min(num2 / 3, c.ExpToNext));
8483 return;
8484 }
8485 if ((t.id == "lovepotion" || t.id == "dreambug") && !Application.isEditor)
8486 {
8487 GiveLovePotion(c, t);
8488 return;
8489 }
8490 if (t.trait is TraitErohon && c.id == t.c_idRefName)
8491 {
8492 c.OnGiveErohon(t);
8493 return;
8494 }
8495 if (t.trait is TraitTicketMassage)
8496 {
8497 t.ModNum(-1);
8498 c.Talk("ticket");
8499 switch (t.id)
8500 {
8501 case "ticket_massage":
8502 c.ModAffinity(EClass.pc, 10);
8504 {
8505 target = c
8506 });
8507 break;
8508 case "ticket_armpillow":
8509 c.ModAffinity(EClass.pc, 20);
8510 EClass.pc.AddCondition<ConSleep>(300, force: true);
8511 c.SetAI(new AI_ArmPillow
8512 {
8513 target = EClass.pc
8514 });
8515 break;
8516 case "ticket_champagne":
8517 c.ModAffinity(EClass.pc, 10);
8519 break;
8520 }
8521 return;
8522 }
8523 if (t.id == "flyer")
8524 {
8525 stamina.Mod(-1);
8526 if (c.things.Find((Thing a) => a.id == "flyer") != null)
8527 {
8528 c.Talk("flyer_miss");
8529 DoHostileAction(c);
8530 return;
8531 }
8532 if (EClass.rnd(20) != 0 && c.CHA > EClass.rnd(base.CHA + Evalue(291) * 3 + 10))
8533 {
8534 Msg.Say("affinityNone", c, this);
8535 t.Destroy();
8536 elements.ModExp(291, 10f);
8537 return;
8538 }
8539 elements.ModExp(291, 50f);
8540 }
8541 if (t.id == "statue_weird")
8542 {
8543 EClass.pc.Say("statue_sell");
8544 }
8545 t.isGifted = true;
8546 c.nextUse = c.affinity.OnGift(t);
8547 if (!t.isDestroyed)
8548 {
8549 EClass.game.quests.list.ForeachReverse(delegate(Quest q)
8550 {
8551 q.OnGiveItem(c, t);
8552 });
8553 if (c.TryEquip(t))
8554 {
8555 c.nextUse = null;
8556 }
8557 }
8558 }
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:7047
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:8571
bool TryEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7904
void OnGiveErohon(Thing t)
Definition: Chara.cs:8560
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 8571 of file Chara.cs.

8572 {
8573 c.Say("give_love", c, t);
8574 c.PlaySound(t.material.GetSoundDead());
8575 c.ShowEmo(Emo.angry);
8576 c.ModAffinity(EClass.pc, -20, show: false);
8577 c.Talk("pervert");
8578 t.Destroy();
8579 }

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

6465 {
6466 if (enemy == null && !IsPC)
6467 {
6468 if (GetInt(106) == 0)
6469 {
6470 TalkTopic("aggro");
6471 }
6472 if (OriginalHostility != Hostility.Enemy)
6473 {
6474 ShowEmo(Emo.angry);
6475 }
6476 SetEnemy(_tg.Chara);
6477 }
6479 {
6480 if (hostility >= Hostility.Neutral)
6481 {
6482 Say("angry", this);
6483 }
6484 hostility = Hostility.Enemy;
6485 }
6486 }
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 9612 of file Chara.cs.

9613 {
9614 for (int i = 0; i < conditions.Count; i++)
9615 {
9616 if (conditions[i].source.alias == alias)
9617 {
9618 return true;
9619 }
9620 }
9621 return false;
9622 }

Referenced by _Move(), AM_Adv._OnUpdateInput(), TraitGodStatue._OnUse(), ActPlan._Update(), Element._WriteNote(), ActMelee.Attack(), GoalCombat.BuildAbilityList(), AttackProcess.CalcHit(), Point.CallGuard(), ListPeopleParty.CanJoinParty(), ActNTR.CanPerform(), ActRanged.CanPerform(), ActRush.CanPerform(), ActEffect.DamageEle(), EvalueRiding(), ZonePreEnterEncounter.Execute(), TraitItemProc.GetHealAction(), AttackProcess.GetRawDamage(), AM_Adv.IsEntangled(), Point.ListWitnesses(), ModAffinity(), FactionBranch.OnAfterSimulate(), 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 9600 of file Chara.cs.

9601 {
9602 for (int i = 0; i < conditions.Count; i++)
9603 {
9604 if (conditions[i] is T)
9605 {
9606 return true;
9607 }
9608 }
9609 return false;
9610 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8913 of file Chara.cs.

8914 {
8915 return GetCooldown(idEle) != 0;
8916 }
int GetCooldown(int idEle)
Definition: Chara.cs:8918

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

9043 {
9044 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
9045 listHobby.Clear();
9046 if (_works == null || _hobbies == null)
9047 {
9048 RerollHobby();
9049 }
9050 foreach (int work in _works)
9051 {
9052 if (work == num)
9053 {
9054 return true;
9055 }
9056 }
9057 foreach (int hobby in _hobbies)
9058 {
9059 if (hobby == num)
9060 {
9061 return true;
9062 }
9063 }
9064 return false;
9065 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:9305
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2444 of file Chara.cs.

2445 {
2446 foreach (Chara chara in EClass._map.charas)
2447 {
2448 if (chara.c_uidMaster == base.uid)
2449 {
2450 return true;
2451 }
2452 }
2453 return false;
2454 }

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

4546 {
4547 if (held == t || t.isDestroyed || t.Num <= 0)
4548 {
4549 return;
4550 }
4551 if (IsPC && t.isNPCProperty)
4552 {
4553 t.isNPCProperty = false;
4554 if (!t.GetBool(128))
4555 {
4557 pos.TryWitnessCrime(this);
4558 }
4559 }
4560 PickHeld();
4561 if (t.isChara)
4562 {
4564 {
4565 t.ShowEmo(Emo.love);
4566 }
4567 EClass.player.altHeldPos = t.renderer.data.ForceAltHeldPosition || EClass.rnd(2) == 0;
4568 }
4569 else
4570 {
4571 if (num == -1 || num > t.Num)
4572 {
4573 num = t.Num;
4574 }
4575 if (num < t.Num)
4576 {
4577 t = t.Split(num);
4578 }
4579 }
4580 if (t.GetRootCard() != this)
4581 {
4582 t = Pick(t.Thing, msg: false, tryStack: false);
4583 if (t.GetRootCard() != this)
4584 {
4585 return;
4586 }
4587 }
4588 held = t;
4589 if (held.GetLightRadius() > 0)
4590 {
4592 }
4593 if (IsPC)
4594 {
4596 WidgetHotbar.dirtyCurrentItem = true;
4597 }
4598 }
Thing Split(int a)
Definition: Card.cs:3566
bool isNPCProperty
Definition: Card.cs:555
void RecalculateFOV()
Definition: Card.cs:6591
virtual bool IsAliveInCurrentZone
Definition: Card.cs:2165
int GetLightRadius()
Definition: Card.cs:6638
void PickHeld(bool msg=false)
Definition: Chara.cs:4600
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 9428 of file Chara.cs.

9429 {
9430 if (!onDeserialize)
9431 {
9432 _cints[10] = 20;
9433 _cints[11] = 70;
9434 _cints[13] = 70;
9435 _cints[14] = 70;
9436 _cints[15] = 70;
9437 _cints[17] = 0;
9438 _cints[18] = 0;
9439 }
9440 foreach (Condition condition in conditions)
9441 {
9442 condition.SetOwner(this, onDeserialize);
9443 }
9444 }
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 7746 of file Chara.cs.

7747 {
7748 if (t == null)
7749 {
7750 t = FindBestFoodToEat();
7751 }
7752 if (t == null)
7753 {
7754 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7755 }
7756 if (t == null)
7757 {
7758 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7759 }
7760 if (t != null)
7761 {
7762 Say("eat_start", this, t.Duplicate(1));
7763 if (sound)
7764 {
7765 PlaySound("eat");
7766 }
7767 FoodEffect.Proc(this, t);
7768 }
7769 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7725
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 6726 of file Chara.cs.

6727 {
6728 if (faction == EClass.Home)
6729 {
6730 return homeZone == EClass.game.activeZone;
6731 }
6732 return false;
6733 }
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 2571 of file Chara.cs.

2572 {
2573 if (!currentZone.IsRegion && p.IsValid)
2574 {
2575 CellDetail detail = p.detail;
2576 if (detail != null && detail.charas.Count > 0)
2577 {
2578 foreach (Chara chara in p.detail.charas)
2579 {
2580 if (chara.mimicry == null && (chara.IsHostile(this) || chara.IsHostile() || !chara.trait.CanBePushed))
2581 {
2582 if (cancelAI && EClass.pc.ai is GoalManualMove)
2583 {
2584 EClass.pc.ai.Cancel();
2585 }
2586 return true;
2587 }
2588 }
2589 }
2590 }
2591 return false;
2592 }
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 2471 of file Chara.cs.

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

6771 {
6772 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6773 {
6775 {
6776 return true;
6777 }
6778 }
6779 else if (IsHostile() && c.IsHostile())
6780 {
6781 return true;
6782 }
6783 return false;
6784 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6674 of file Chara.cs.

6675 {
6676 if (c == null)
6677 {
6678 return false;
6679 }
6680 if (base.IsPCFactionOrMinion)
6681 {
6682 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6683 {
6684 return true;
6685 }
6686 }
6687 else
6688 {
6690 {
6691 return true;
6692 }
6693 if (OriginalHostility >= Hostility.Friend)
6694 {
6695 if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
6696 {
6697 return true;
6698 }
6699 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6700 {
6701 return true;
6702 }
6703 }
6704 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6705 {
6706 return true;
6707 }
6708 }
6709 if (id == "unicorn" && (Evalue(418) < 0 || (c.HasElement(1216) && c.Evalue(418) < 1)))
6710 {
6711 return true;
6712 }
6713 return false;
6714 }
bool IsCriminal
Definition: Player.cs:1385

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

6741 {
6742 return EClass.game.activeZone == currentZone;
6743 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6745 of file Chara.cs.

6745 : TraitSpot
6746 {
6747 foreach (T item in EClass._map.props.installed.traits.List<T>())
6748 {
6749 foreach (Point item2 in item.ListPoints())
6750 {
6751 if (pos.Equals(item2))
6752 {
6753 return true;
6754 }
6755 }
6756 }
6757 return false;
6758 }
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 6716 of file Chara.cs.

6717 {
6718 return hostility == Hostility.Neutral;
6719 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 8382 of file Chara.cs.

8383 {
8384 int num2 = ((!HasElement(1411)) ? 1 : 3);
8385 if (GetBurden(t, num) >= num2)
8386 {
8387 return false;
8388 }
8389 return true;
8390 }
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 6395 of file Chara.cs.

6396 {
6397 EClass.player.forceTalk = true;
6398 Talk("kiss", null, null, IsPC);
6399 PlaySound("kiss");
6400 renderer.PlayAnime(AnimeID.Kiss, c);
6401 int num = 2 + EClass.rnd(4) + ((!c.IsPC && c.affinity.CurrentStage < Affinity.Stage.Fond) ? (-EClass.rnd(10)) : 0);
6402 c.ShowEmo((num > 0) ? Emo.love : Emo.sad);
6403 if (num > 0 && EClass.rnd(IsPC ? 100 : 5000) == 0)
6404 {
6405 c.MakeEgg();
6406 }
6407 if (IsPC && this != c)
6408 {
6409 if (c.interest > 0)
6410 {
6411 c.ModAffinity(EClass.pc, num);
6412 c.interest -= 20 + EClass.rnd(10);
6413 }
6414 else
6415 {
6416 c.Say("affinityNone", c, EClass.pc);
6417 }
6418 }
6419 Effect.Get("love")._Play(pos, isSynced ? renderer.position : pos.Position(), 0f, c.pos);
6420 }
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 10075 of file Chara.cs.

10076 {
10077 List<Element> list = new List<Element>();
10078 foreach (SourceElement.Row item in EClass.sources.elements.rows.Where((SourceElement.Row a) => a.group == "FEAT" && a.cost[0] != -1 && !a.categorySub.IsEmpty()))
10079 {
10081 int num = ((feat.ValueWithoutLink <= 0) ? 1 : (feat.ValueWithoutLink + 1));
10082 if (num <= feat.source.max && !feat.HasTag("class") && !feat.HasTag("hidden") && !feat.HasTag("innate") && (!pet || !feat.HasTag("noPet")) && (showAll || feat.IsPurchaseFeatReqMet(elements)))
10083 {
10084 list.Add(Element.Create(feat.id, num) as Feat);
10085 }
10086 }
10087 return list;
10088 }
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 9172 of file Chara.cs.

9173 {
9174 listHobby.Clear();
9175 if (!useMemberType || memberType != FactionMemberType.Livestock)
9176 {
9177 if (_hobbies == null)
9178 {
9179 RerollHobby();
9180 }
9181 foreach (int hobby in _hobbies)
9182 {
9183 listHobby.Add(new Hobby
9184 {
9185 id = hobby
9186 });
9187 }
9188 }
9189 return listHobby;
9190 }

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

9146 {
9147 listHobby.Clear();
9148 if (useMemberType && memberType == FactionMemberType.Livestock)
9149 {
9150 listHobby.Add(new Hobby
9151 {
9152 id = 45
9153 });
9154 }
9155 else
9156 {
9157 if (_works == null)
9158 {
9159 RerollHobby();
9160 }
9161 foreach (int work in _works)
9162 {
9163 listHobby.Add(new Hobby
9164 {
9165 id = work
9166 });
9167 }
9168 }
9169 return listHobby;
9170 }

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

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

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2337 of file Chara.cs.

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

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

8362 {
8363 return DNA.GenerateGene(this, DNA.Type.Brain);
8364 }
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 8356 of file Chara.cs.

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

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

5329 {
5330 if (!EClass._zone.IsRegion)
5331 {
5332 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
5333 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
5334 {
5335 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
5336 }
5337 Thing thing = ThingGen.Create(list.RandomItem());
5338 thing.MakeRefFrom(this);
5339 if (!lastword.IsEmpty())
5340 {
5341 thing.c_note = lastword;
5342 }
5343 thing.isModified = true;
5344 EClass._zone.AddCard(thing, pos).Install();
5345 }
5346 }
Card MakeRefFrom(string id)
Definition: Card.cs:5804

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

2401 {
2402 UnmakeMinion();
2403 Hostility hostility2 = (base.c_originalHostility = (_master.IsPCFaction ? Hostility.Ally : _master.hostility));
2404 this.hostility = hostility2;
2405 base.c_uidMaster = _master.uid;
2406 base.c_minionType = type;
2407 master = _master;
2408 Refresh();
2409 }
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 2331 of file Chara.cs.

2332 {
2333 _MakeAlly();
2334 EClass.pc.party.AddMemeber(this);
2335 }

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

◆ Marry()

void Chara.Marry ( Chara  c)
inline

Definition at line 8253 of file Chara.cs.

8254 {
8255 if (base.c_love == null)
8256 {
8257 base.c_love = new LoveData();
8258 }
8259 base.c_love.dateMarriage = EClass.world.date.GetRaw();
8260 base.c_love.uidZoneMarriage = EClass._zone.uid;
8261 base.c_love.nameZoneMarriage = EClass._zone.Name;
8262 SetFeat(1275, 1, msg: true);
8264 }
int GetRaw(int offsetHours=0)
Definition: Date.cs:328
int married
Definition: Player.cs:132
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 8114 of file Chara.cs.

8115 {
8116 if (c == this)
8117 {
8118 return;
8119 }
8120 if (IsPC)
8121 {
8122 c.ModAffinity(EClass.pc, a, show);
8123 }
8124 else
8125 {
8127 {
8128 return;
8129 }
8130 int num = StatsHygiene.GetAffinityMod(EClass.pc.hygiene.GetPhase()) + (HasElement(417) ? 30 : 0) + (EClass.pc.HasCondition<ConSmoking>() ? (-30) : 0);
8131 if (IsPCFaction && homeBranch != null)
8132 {
8133 num += (int)Mathf.Sqrt(homeBranch.Evalue(2117)) * 5;
8134 }
8135 bool flag = a > 0;
8136 if (flag)
8137 {
8138 a = a * num / 100;
8139 if (affinity.GetLunchChance() > EClass.rnd(100) && GetInt(71) >= 0 && GetInt(71) < EClass.world.date.GetRaw())
8140 {
8141 SetInt(71, -1);
8142 }
8143 }
8144 if (show)
8145 {
8146 if (a == 0)
8147 {
8148 if (!showOnlyEmo)
8149 {
8150 Say("affinityNone", this, c);
8151 }
8152 }
8153 else
8154 {
8155 ShowEmo((!flag) ? Emo.angry : Emo.love);
8156 c.ShowEmo(flag ? Emo.love : Emo.sad);
8157 if (!showOnlyEmo)
8158 {
8159 Say(flag ? "affinityPlus" : "affinityMinus", this, c);
8160 }
8161 }
8162 }
8163 if (c.IsPC)
8164 {
8165 a = affinity.Mod(a);
8166 }
8167 }
8168 }
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 10032 of file Chara.cs.

10033 {
10034 if (a > 0)
10035 {
10036 if (Evalue(962) >= 25 || (ResistLv(962) > 0 && EClass.rnd(ResistLv(962) + 1) != 0))
10037 {
10038 return;
10039 }
10040 int num = Evalue(412);
10041 if (num != 0)
10042 {
10043 float num2 = (float)a * 100f / (float)Mathf.Max(100 + num * 2, 10);
10044 a = (int)num2 + ((EClass.rndf(1f) < num2 % 1f) ? 1 : 0);
10045 }
10046 }
10047 if (a == 0)
10048 {
10049 return;
10050 }
10051 int num3 = (corruption + a) / 100 - corruption / 100;
10052 for (int i = 0; i < Mathf.Abs(num3); i++)
10053 {
10054 if (!MutateRandom((num3 > 0) ? 1 : (-1), 100, ether: true))
10055 {
10056 break;
10057 }
10058 }
10059 corruption += a;
10060 int num4 = 0;
10061 foreach (Element value in elements.dict.Values)
10062 {
10063 if (value.source.category == "ether")
10064 {
10065 num4 += value.Value;
10066 }
10067 }
10068 if (num4 > 0 && IsPC)
10069 {
10070 Tutorial.Reserve("ether");
10071 }
10072 corruption = num4 * 100 + corruption % 100;
10073 }
bool MutateRandom(int vec=0, int tries=100, bool ether=false, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:10191
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 9981 of file Chara.cs.

9982 {
9983 if (!HasElement(450))
9984 {
9985 long num = bio.height;
9986 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9987 if (num < 1)
9988 {
9989 num = 1L;
9990 }
9991 if (num > 999999999)
9992 {
9993 num = 999999999L;
9994 }
9995 if (num != bio.height)
9996 {
9997 bio.height = (int)num;
9998 Say((a > 0) ? "height_gain" : "height_lose", this);
9999 }
10000 }
10001 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 10447 of file Chara.cs.

10448 {
10449 if (a < 0 && !naturalDecay && HasElement(EClass.sources.elements.alias["sustain_" + EClass.sources.elements.map[ele].alias]?.id ?? 0))
10450 {
10451 return;
10452 }
10453 bool flag = HasElement(1215);
10454 if (tempElements == null)
10455 {
10457 tempElements.SetParent(this);
10458 }
10459 if (a > 0 && flag)
10460 {
10461 a = a * 150 / 100;
10462 }
10463 int num = elements.ValueWithoutLink(ele);
10464 int num2 = Mathf.Abs(num) + 100;
10465 int num3 = num2 / (flag ? 2 : 4);
10466 int num4 = -num - 100;
10467 int num5 = tempElements.Base(ele);
10468 int num6 = num5 + a;
10469 if (onlyRenew)
10470 {
10471 num3 = Mathf.Min(a, num3);
10472 num4 = Mathf.Max(a, -num2 / 3);
10473 }
10474 if (a > 0 && num6 > num3)
10475 {
10476 a = ((num3 > num5) ? (num3 - num5) : 0);
10477 }
10478 if (a < 0 && num6 < num4)
10479 {
10480 a = ((num4 < num5) ? (num4 - num5) : 0);
10481 }
10482 Element element = tempElements.ModBase(ele, a);
10483 if (element.vBase == 0)
10484 {
10485 tempElements.Remove(element.id);
10486 if (tempElements.dict.Count == 0)
10487 {
10488 tempElements = null;
10489 }
10490 }
10491 }
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 10003 of file Chara.cs.

10004 {
10005 if (HasElement(450) || a == 0)
10006 {
10007 return;
10008 }
10009 long num = bio.weight;
10010 long num2 = bio.height;
10011 long num3 = num2 * num2 * 18 / 25000;
10012 long num4 = num2 * num2 * 24 / 10000;
10013 if (ignoreLimit || (num > num3 && num < num4))
10014 {
10015 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
10016 if (num < 1)
10017 {
10018 num = 1L;
10019 }
10020 if (num > 999999999)
10021 {
10022 num = 999999999L;
10023 }
10024 if (num != bio.weight)
10025 {
10026 bio.weight = (int)num;
10027 Say((a > 0) ? "weight_gain" : "weight_lose", this);
10028 }
10029 }
10030 }
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 2685 of file Chara.cs.

2686 {
2687 if (!newPoint.sourceBlock.tileType.IsBlockPass && (!checkWall || (Dist(newPoint) <= 1 && CanMoveTo(newPoint, allowDestroyPath: false))) && _Move(newPoint, MoveType.Force) == MoveResult.Success && ai.Current.CancelWhenMoved)
2688 {
2689 ai.Current.TryCancel(c);
2690 }
2691 }
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:2779

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

3519 {
3520 if (isDead)
3521 {
3522 Revive();
3523 }
3524 else
3525 {
3526 Cure(CureType.Death);
3527 }
3528 CureCondition<ConSuspend>();
3529 if (IsPCParty)
3530 {
3532 }
3533 FactionBranch factionBranch = homeBranch;
3534 if (x == -1)
3535 {
3536 x = 50;
3537 }
3538 if (z == -1)
3539 {
3540 z = 50;
3541 }
3542 Point point = new Point(x, z);
3543 if (zone.IsActiveZone)
3544 {
3545 point = point.GetNearestPoint(allowBlock: false, allowChara: false);
3546 }
3547 zone.AddCard(this, point);
3548 SetHomeZone(zone);
3549 global.transition = new ZoneTransition
3550 {
3551 state = ZoneTransition.EnterState.Dead,
3552 x = point.x,
3553 z = point.z
3554 };
3555 orgPos = new Point(x, z);
3556 if (factionBranch != null)
3557 {
3559 factionBranch.policies.Validate();
3560 }
3561 }
void RefreshWorkElements(ElementContainer parent=null)
Definition: Chara.cs:9211
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 2667 of file Chara.cs.

2668 {
2669 List<Point> list = new List<Point>();
2670 pos.ForeachNeighbor(delegate(Point p)
2671 {
2672 list.Add(p.Copy());
2673 });
2674 list.Shuffle();
2675 foreach (Point item in list)
2676 {
2677 if (!item.Equals(pos) && !item.HasChara && TryMove(item) == MoveResult.Success)
2678 {
2679 return true;
2680 }
2681 }
2682 return false;
2683 }
override MoveResult TryMove(Point newPoint, bool allowDestroyPath=true)
Definition: Chara.cs:2755
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 2653 of file Chara.cs.

2654 {
2655 Point randomNeighbor = pos.GetRandomNeighbor();
2656 if (!randomNeighbor.Equals(pos) && !randomNeighbor.HasChara && HasAccess(randomNeighbor))
2657 {
2658 if ((race.tag.Contains("water") || source.tag.Contains("water")) && pos.cell.IsTopWaterAndNoSnow && !randomNeighbor.IsDeepWater)
2659 {
2660 return false;
2661 }
2662 return TryMove(randomNeighbor) == MoveResult.Success;
2663 }
2664 return false;
2665 }
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 3391 of file Chara.cs.

3392 {
3393 if (z == currentZone)
3394 {
3395 return;
3396 }
3397 if (HasCondition<ConInvulnerable>())
3398 {
3399 RemoveCondition<ConInvulnerable>();
3400 }
3401 if (IsPC)
3402 {
3403 EClass.player.nextZone = z;
3405 {
3408 {
3409 if (EClass.player.returnInfo != null)
3410 {
3411 EClass.player.returnInfo.turns += 5;
3412 }
3414 {
3415 EClass.game.Save(isAutoSave: true);
3416 }
3417 }
3418 EClass.player.deathZoneMove = false;
3419 }
3421 if (currentZone.instance != null)
3422 {
3424 z = EClass.game.spatials.Find(instance.uidZone) ?? EClass.pc.homeZone;
3425 transition = new ZoneTransition
3426 {
3427 state = instance.ReturnState,
3428 x = instance.x,
3429 z = instance.z
3430 };
3431 instance.OnLeaveZone();
3432 Debug.Log(z);
3433 }
3434 EInput.Consume(consumeAxis: true);
3435 EClass.player.uidLastZone = currentZone.uid;
3437 {
3439 {
3440 Msg.Say("enterZone", z.Name);
3441 }
3442 else
3443 {
3444 if (z.IsRegion)
3445 {
3446 Msg.Say("leaveZone", currentZone.Name);
3447 }
3448 else if (z.id != currentZone.id)
3449 {
3450 Msg.Say("enterZone", z.Name);
3451 }
3452 EClass.player.lastZonePos = pos.Copy();
3453 }
3454 EClass.player.lastTransition = transition;
3455 }
3456 foreach (Chara item in EClass._map.charas.Where((Chara c) => c.IsPCPartyMinion && c.master != EClass.pc).ToList())
3457 {
3459 }
3460 EClass.player.listCarryoverMap = EClass._map.charas.Where((Chara c) => c.c_uidMaster != 0 && c.FindMaster() == EClass.pc && c.c_minionType == MinionType.Default).ToList();
3461 if (!z.IsRegion && (z is Zone_Tent || currentZone is Zone_Tent))
3462 {
3463 foreach (Chara chara in EClass._map.charas)
3464 {
3465 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))
3466 {
3467 EClass.player.listCarryoverMap.Add(chara);
3468 }
3469 }
3470 }
3471 foreach (Chara item2 in EClass.player.listCarryoverMap)
3472 {
3473 EClass._zone.RemoveCard(item2);
3474 }
3475 }
3476 if (party != null && party.leader == this)
3477 {
3478 foreach (Chara member in party.members)
3479 {
3480 if (member != this && !member.isDead && member.parent is Zone)
3481 {
3482 member.MoveZone(z);
3483 }
3484 }
3485 }
3486 if (global == null)
3487 {
3488 Debug.Log(base.Name);
3489 return;
3490 }
3491 transition.uidLastZone = currentZone?.uid ?? 0;
3492 global.transition = transition;
3493 if (z.IsActiveZone)
3494 {
3495 Point spawnPos = z.GetSpawnPos(this);
3496 global.transition = null;
3497 if (IsPC)
3498 {
3499 EClass.player.lastTransition = null;
3500 }
3501 z.AddCard(this, spawnPos);
3502 if (IsBranchMember())
3503 {
3505 }
3506 }
3507 else
3508 {
3509 z.AddCard(this);
3510 }
3511 }
MinionType c_minionType
Definition: Card.cs:1001
bool IsBranchMember()
Definition: Chara.cs:6726
GlobalData global
Definition: Chara.cs:76
Chara FindMaster()
Definition: Chara.cs:2462
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:1215
List< Chara > listCarryoverMap
Definition: Player.cs:1269
ReturnInfo returnInfo
Definition: Player.cs:909
bool simulatingZone
Definition: Player.cs:1225
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:1372

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

3384 {
3386 {
3387 state = state
3388 });
3389 }

◆ MutateRandom()

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

Definition at line 10191 of file Chara.cs.

10192 {
10193 if (!ether && vec >= 0 && HasElement(406) && EClass.rnd(5) != 0)
10194 {
10195 Say("resistMutation", this);
10196 return false;
10197 }
10198 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => a.category == (ether ? "ether" : "mutation") && !a.tag.Contains("noRandomMutation"));
10199 for (int i = 0; i < tries; i++)
10200 {
10201 SourceElement.Row row = ie.RandomItem();
10202 if (i == 0 && vec < 0 && ether && base.c_corruptionHistory != null && base.c_corruptionHistory.Count > 0)
10203 {
10204 if (EClass.sources.elements.map.ContainsKey(base.c_corruptionHistory.LastItem()))
10205 {
10206 row = EClass.sources.elements.map[base.c_corruptionHistory.LastItem()];
10207 }
10208 base.c_corruptionHistory.RemoveAt(base.c_corruptionHistory.Count - 1);
10209 if (base.c_corruptionHistory.Count == 0)
10210 {
10211 base.c_corruptionHistory = null;
10212 }
10213 }
10214 Element element = elements.GetElement(row.id);
10215 int num = 1;
10216 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))
10217 {
10218 continue;
10219 }
10220 if (element == null && !row.aliasParent.IsEmpty() && elements.Has(row.aliasParent))
10221 {
10222 row = EClass.sources.elements.alias[row.aliasParent];
10223 element = elements.GetElement(row.id);
10224 }
10225 bool flag = row.tag.Contains("neg");
10226 if (vec > 0)
10227 {
10228 if ((state >= BlessedState.Blessed && flag) || (state <= BlessedState.Cursed && !flag))
10229 {
10230 continue;
10231 }
10232 }
10233 else if (vec < 0 && ((state >= BlessedState.Blessed && !flag) || (state <= BlessedState.Cursed && flag)))
10234 {
10235 continue;
10236 }
10237 bool flag2 = true;
10238 if (element != null)
10239 {
10240 num = element.Value + ((vec != 0) ? vec : ((EClass.rnd(2) == 0) ? 1 : (-1)));
10241 if (num > element.source.max)
10242 {
10243 num = element.source.max - 1;
10244 }
10245 flag = (flag && num > element.Value) || (!flag && num < element.Value);
10246 flag2 = num > element.Value;
10247 if (vec > 0 && !flag2)
10248 {
10249 continue;
10250 }
10251 }
10252 Say(flag2 ? "mutation_gain" : "mutation_loose", this);
10253 SetFeat(row.id, num);
10254 if (flag2 && ether)
10255 {
10256 if (base.c_corruptionHistory == null)
10257 {
10258 base.c_corruptionHistory = new List<int>();
10259 }
10260 base.c_corruptionHistory.Add(row.id);
10261 if (IsPCFaction)
10262 {
10263 Element element2 = elements.GetElement(row.id);
10264 WidgetPopText.Say("popEther".lang(element2.Name, base.Name));
10265 }
10267 {
10268 EClass.player.flags.gotEtherDisease = true;
10269 Thing thing = ThingGen.Create("parchment");
10270 thing.SetStr(53, "letter_ether");
10271 Thing thing2 = ThingGen.Create("1165");
10272 thing2.SetBlessedState(BlessedState.Normal);
10273 Thing p = ThingGen.CreateParcel(null, thing2, thing);
10275 }
10276 }
10277 if (EClass.core.IsGameStarted && pos != null)
10278 {
10279 PlaySound(ether ? "mutation_ether" : "mutation");
10280 PlayEffect("mutation");
10282 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
10283 }
10284 return true;
10285 }
10286 Say("nothingHappens");
10287 return false;
10288 }
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:484
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 10340 of file Chara.cs.

10341 {
10342 if (_historyFood != null)
10343 {
10344 while (_historyFood.Count > 5)
10345 {
10346 _historyFood.RemoveAt(_historyFood.Count - 1);
10347 }
10348 if (_historyFood[0].Count > 0)
10349 {
10350 _historyFood.Insert(0, new List<string>());
10351 }
10352 }
10353 }

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:4361
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:6208
void ApplyBacker(int bid)
Definition: Card.cs:7228
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:2125
int happiness
Definition: Chara.cs:110
int contribution
Definition: Chara.cs:18
void CalculateMaxStamina()
Definition: Chara.cs:2057
bool isCreated
Definition: Chara.cs:138
int _idTimeTable
Definition: Chara.cs:343
void TryRestock(bool onCreate)
Definition: Chara.cs:4759
static List< SourceRace.Row > ListAdvRace
Definition: Chara.cs:168
void InitStats(bool onDeserialize=false)
Definition: Chara.cs:9428
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:3644
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 8560 of file Chara.cs.

8561 {
8562 Say("give_erohon", this);
8563 AddCondition<ConParalyze>(50, force: true);
8564 AddCondition<ConConfuse>(50, force: true);
8565 AddCondition<ConFear>(1000, force: true);
8566 ModAffinity(EClass.pc, 100);
8567 t.Destroy();
8568 Talk("pervert");
8569 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 8366 of file Chara.cs.

8367 {
8368 if (!isDead)
8369 {
8370 if (HasElement(1231))
8371 {
8372 Talk("insulted");
8373 AddCondition<ConEuphoric>(100 * Evalue(1231));
8374 }
8375 else if (EClass.rnd(20) == 0)
8376 {
8377 SetFeat(1231, 1, msg: true);
8378 }
8379 }
8380 }

References EClass.rnd().

Referenced by ActMoneySlap.Perform(), 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 9943 of file Chara.cs.

9944 {
9945 if (days < 1)
9946 {
9947 days = 1;
9948 }
9949 int num = power * days;
9950 if (stamina.value < 0)
9951 {
9952 stamina.Set(1);
9953 }
9954 if (isWeakToSunlight && isSunLit)
9955 {
9956 base.hp = 0;
9957 if (mana.value > 0)
9958 {
9959 mana.Set(0);
9960 }
9961 AddCondition<ConBurning>(1000, force: true);
9962 }
9963 else
9964 {
9965 HealHP(num);
9966 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9967 mana.Mod(num);
9968 }
9969 if (IsPCFaction)
9970 {
9971 hunger.Mod(20);
9972 }
9973 sleepiness.Set(0);
9974 if (!IsMinion)
9975 {
9976 interest = 100;
9977 }
9978 Cure(CureType.Sleep, power);
9979 }
virtual void HealHP(int a, HealSource origin=HealSource.None)
Definition: Card.cs:4089
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 9923 of file Chara.cs.

9924 {
9925 bool isSunLit = pos.IsSunLit;
9926 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9927 int num = bed?.Power ?? 20;
9928 if (traitPillow != null)
9929 {
9930 num += traitPillow.owner.Power / 2;
9931 }
9932 if (bed != null)
9933 {
9934 num += bed.Evalue(750) * 5;
9935 if (bed.trait is TraitBedCoffin)
9936 {
9937 isSunLit = false;
9938 }
9939 }
9940 OnSleep(num, days, isSunLit);
9941 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9923
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 2224 of file Chara.cs.

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

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 9386 of file Chara.cs.

9387 {
9388 Hobby hobby = new Hobby();
9389 hobby.id = session.id;
9390 WorkSummary workSummary = _workSummary;
9391 hobby.GetAI(this).OnPerformWork(IsRealTime);
9392 if (!isHobby)
9393 {
9394 workSummary.progress += EClass.rnd(5) + 5;
9395 }
9396 int num = PerformWork(hobby, 0, isHobby);
9397 int num2 = PerformWork(hobby, 1, isHobby);
9398 int num3 = PerformWork(hobby, 2, isHobby);
9399 int num4 = PerformWork(hobby, 3, isHobby);
9400 workSummary.money += num;
9401 workSummary.food += num2;
9402 workSummary.knowledge += num3;
9403 workSummary.material += num4;
9404 int PerformWork(Hobby work, int idx, bool isHobby)
9405 {
9406 if (idx >= work.source.resources.Length)
9407 {
9408 return 0;
9409 }
9410 int num5 = work.source.resources[idx];
9411 int num6 = num5;
9412 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
9413 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
9414 if (num6 > 0 && num5 <= 0)
9415 {
9416 num5 = 1;
9417 }
9418 return num5;
9419 }
9420 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:9386
AIWork GetAI(Chara c)
Definition: Hobby.cs:12
static int Range(int min, int max)
Definition: Rand.cs:49
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 4381 of file Chara.cs.

4382 {
4383 if (t.trait is TraitCard && t.isNew && EClass.game.config.autoCollectCard && !t.c_idRefCard.IsEmpty())
4384 {
4386 return t;
4387 }
4388 if (t.parent == this)
4389 {
4390 return t;
4391 }
4392 t = TryPoisonPotion(t);
4393 ThingContainer.DestData dest = things.GetDest(t, tryStack);
4394 if (!dest.IsValid)
4395 {
4396 if (t.parent != EClass._zone)
4397 {
4398 if (IsPC)
4399 {
4400 Say("backpack_full_drop", t);
4401 SE.Drop();
4402 }
4403 return EClass._zone.AddCard(t, pos).Thing;
4404 }
4405 if (IsPC)
4406 {
4407 Say("backpack_full", t);
4408 }
4409 return t;
4410 }
4411 if (dest.stack != null)
4412 {
4413 if (msg)
4414 {
4415 PlaySound("pick_thing");
4416 Say("pick_thing", this, t);
4417 }
4418 t.TryStackTo(dest.stack);
4419 return dest.stack;
4420 }
4421 TryAbsorbRod(t);
4422 if (msg)
4423 {
4424 PlaySound("pick_thing");
4425 Say("pick_thing", this, t);
4426 }
4428 return dest.container.AddThing(t, tryStack);
4429 }
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:4475
Thing TryPoisonPotion(Thing t)
Definition: Chara.cs:4431
void TryAbsorbRod(Thing t)
Definition: Chara.cs:4445
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 4600 of file Chara.cs.

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

4362 {
4363 if (num != 0)
4364 {
4365 PickOrDrop(p, ThingGen.Create(idThing, idMat).SetNum(num), msg);
4366 }
4367 }

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

4370 {
4371 if (things.GetDest(t).IsValid)
4372 {
4373 Pick(t, msg);
4374 }
4375 else
4376 {
4377 EClass._zone.AddCard(t, p);
4378 }
4379 }

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:2113
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 10404 of file Chara.cs.

10405 {
10406 if (faithElements != null)
10407 {
10409 }
10411 if (idFaith == "eyth" && !HasElement(1228))
10412 {
10413 return;
10414 }
10415 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
10416 if (row == null)
10417 {
10418 return;
10419 }
10421 if (!HasCondition<ConExcommunication>())
10422 {
10423 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
10424 if (row2 != null)
10425 {
10426 faithElements.SetBase(row2.id, 1);
10427 }
10428 int[] array = row.elements;
10429 int num = GetPietyValue() * (120 + Evalue(1407) * 15 + Evalue(1228) * 20) / 100;
10430 for (int i = 0; i < array.Length; i += 2)
10431 {
10432 int num2 = array[i + 1] * num / 50;
10433 if (array[i] == 79)
10434 {
10435 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
10436 }
10437 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10438 {
10439 num2 = 20;
10440 }
10441 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
10442 }
10443 }
10445 }
string idFaith
Definition: Chara.cs:233
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:10395
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 (currentZone != EClass._zone)
1908 {
1909 dirtySpeed = true;
1910 return;
1911 }
1912 if (ride != null && !ride.IsDeadOrSleeping)
1913 {
1915 _Speed = ride._Speed;
1916 info?.AddText("rideSpeed".lang(_Speed.ToString() ?? ""));
1917 }
1918 else if (host != null)
1919 {
1920 if (host.ride == this)
1921 {
1922 _Speed = Evalue(79);
1923 int a = Evalue(1423);
1924 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);
1925 _Speed = _Speed * 100 / Mathf.Clamp(value, 100, 1000);
1926 }
1927 else
1928 {
1929 _Speed = (Evalue(79) + host.Evalue(79)) / 2;
1930 }
1931 }
1932 else
1933 {
1934 _Speed = Evalue(79) + Evalue(407) / 2;
1935 }
1936 if (body.GetSlot(37, onlyEmpty: false)?.thing != null && HasElement(1209) && !HasElement(419))
1937 {
1938 _Speed -= 25L;
1939 info?.AddText(-25L, EClass.sources.elements.map[1209].GetName());
1940 }
1941 if (parasite != null)
1942 {
1943 long speed = _Speed;
1944 _Speed = _Speed * 100 / Mathf.Clamp(120 + parasite.LV * 2 - base.STR - Evalue(227) * 2, 100, 1000);
1945 info?.AddText(_Speed - speed, "parasiteSpeed".lang());
1946 }
1947 if (_Speed < elements.ValueWithoutLink(79) / 3)
1948 {
1950 info?.AddText("minSpeed".lang((elements.ValueWithoutLink(79) / 3).ToString() ?? ""));
1951 }
1952 int num = 100;
1953 if (EClass._zone.map != null && (EClass._zone.IsUnderwater || (base.Cell.IsTopWaterAndNoSnow && !base.Cell.isFloating)))
1954 {
1955 int num2 = Evalue(200);
1956 int num3 = Evalue(1252);
1957 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);
1958 if (info != null && num != 100)
1959 {
1960 info.AddFix(num - 100, EClass.sources.elements.map[200].GetName().ToTitleCase());
1961 }
1962 if (num3 > 0)
1963 {
1964 num += num3 * 20;
1965 info?.AddFix(num3 * 20, EClass.sources.elements.map[1252].GetName().ToTitleCase());
1966 }
1967 }
1968 if (IsPCFaction)
1969 {
1970 switch (burden.GetPhase())
1971 {
1972 case 1:
1973 num -= 10;
1974 info?.AddFix(-10, burden.GetPhaseStr());
1975 break;
1976 case 2:
1977 num -= 20;
1978 info?.AddFix(-20, burden.GetPhaseStr());
1979 break;
1980 case 3:
1981 num -= 30;
1982 info?.AddFix(-30, burden.GetPhaseStr());
1983 break;
1984 case 4:
1985 num -= (IsPC ? 50 : 100);
1986 info?.AddFix(IsPC ? (-50) : (-100), burden.GetPhaseStr());
1987 break;
1988 }
1989 if (IsPC)
1990 {
1991 switch (stamina.GetPhase())
1992 {
1993 case 1:
1994 num -= 10;
1995 info?.AddFix(-10, stamina.GetPhaseStr());
1996 break;
1997 case 0:
1998 num -= 20;
1999 info?.AddFix(-20, stamina.GetPhaseStr());
2000 break;
2001 }
2002 switch (sleepiness.GetPhase())
2003 {
2004 case 2:
2005 num -= 10;
2006 info?.AddFix(-10, sleepiness.GetPhaseStr());
2007 break;
2008 case 3:
2009 num -= 20;
2010 info?.AddFix(-20, sleepiness.GetPhaseStr());
2011 break;
2012 }
2013 switch (hunger.GetPhase())
2014 {
2015 case 3:
2016 case 4:
2017 num -= 10;
2018 info?.AddFix(-10, hunger.GetPhaseStr());
2019 break;
2020 case 5:
2021 num -= 30;
2022 info?.AddFix(-30, hunger.GetPhaseStr());
2023 break;
2024 }
2025 num += EClass.player.lastEmptyAlly * Evalue(1646);
2026 info?.AddFix(EClass.player.lastEmptyAlly * Evalue(1646), EClass.sources.elements.map[1646].GetName());
2027 }
2029 {
2030 num += EClass.player.lastEmptyAlly * 10 - 10;
2031 info?.AddFix(EClass.player.lastEmptyAlly * 10 - 10, "exceedParty".lang());
2032 }
2033 }
2034 else if (base.LV >= 1000 && !EClass.game.principal.disableVoidBlessing && !base.IsPCFactionOrMinion)
2035 {
2036 num += EClass.curve((base.LV - 900) / 100 * 10, 500, 100);
2037 info?.AddFix(EClass.curve((base.LV - 900) / 100 * 10, 500, 100), "enemySpeedBuff".lang());
2038 }
2039 if (HasCondition<ConGravity>())
2040 {
2041 num -= 30;
2042 info?.AddFix(-30, GetCondition<ConGravity>().Name);
2043 }
2044 if (_Speed < 10)
2045 {
2046 _Speed = 10L;
2047 }
2048 _Speed = _Speed * num / 100;
2049 if (_Speed < 10)
2050 {
2051 _Speed = 10L;
2052 info?.AddText("minSpeed".lang(10.ToString() ?? ""));
2053 }
2054 dirtySpeed = false;
2055 }
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:1239

References _Speed, EClass._zone, body, burden, currentZone, 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 9211 of file Chara.cs.

9212 {
9213 if (workElements != null)
9214 {
9216 }
9217 workElements = null;
9218 if (IsPCParty || homeBranch == null || homeBranch.owner == null)
9219 {
9220 return;
9221 }
9222 foreach (Hobby item in ListHobbies())
9223 {
9224 TryAdd(item);
9225 }
9226 foreach (Hobby item2 in ListWorks())
9227 {
9228 TryAdd(item2);
9229 }
9230 if (workElements != null)
9231 {
9233 }
9234 void TryAdd(Hobby h)
9235 {
9236 if (!h.source.elements.IsEmpty())
9237 {
9238 if (workElements == null)
9239 {
9241 }
9242 for (int i = 0; i < h.source.elements.Length; i += 2)
9243 {
9244 int num = h.source.elements[i];
9245 int num2 = h.source.elements[i + 1];
9246 int num3 = 100;
9247 if (num != 2115 && num != 2207)
9248 {
9249 num3 = h.GetEfficiency(this) * homeBranch.efficiency / 100;
9250 if (num3 <= 0)
9251 {
9252 continue;
9253 }
9254 }
9255 workElements.ModBase(num, (num2 < 0) ? (num2 / 10) : Mathf.Max(1, h.source.elements[i + 1] * num3 / 1000));
9256 }
9257 }
9258 }
9259 }
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 9828 of file Chara.cs.

9829 {
9830 for (int num = conditions.Count - 1; num >= 0; num--)
9831 {
9832 Condition condition = conditions[num];
9833 if (condition.Type == ConditionType.Stance)
9834 {
9835 condition.Kill();
9836 }
9837 }
9838 }

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

Referenced by CharaGenes.Remove().

◆ RemoveCondition< T >()

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

Definition at line 9679 of file Chara.cs.

9679 : Condition
9680 {
9681 for (int num = conditions.Count - 1; num >= 0; num--)
9682 {
9683 if (conditions[num] is T)
9684 {
9685 conditions[num].Kill();
9686 break;
9687 }
9688 }
9689 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 2252 of file Chara.cs.

2253 {
2254 if (body.slots.Count != 0)
2255 {
2256 BodySlot bodySlot = body.slots.LastItem();
2257 body.RemoveBodyPartAt(body.slots.Count - 1);
2258 if (msg)
2259 {
2260 Say("lose_bodyparts", this, Element.Get(bodySlot.elementId).GetName().ToLower());
2261 PlaySound("offering");
2262 }
2263 }
2264 }
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 8581 of file Chara.cs.

8582 {
8583 if (HasCondition<StanceTaunt>() || base.isRestrained || attacker == this)
8584 {
8585 return false;
8586 }
8587 if (host != null && host.isRestrained)
8588 {
8589 return false;
8590 }
8591 if (base.IsPCFactionOrMinion && attacker.IsPCFactionOrMinion)
8592 {
8593 return false;
8594 }
8595 bool flag = false;
8596 foreach (Chara chara in EClass._map.charas)
8597 {
8598 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))
8599 {
8600 continue;
8601 }
8602 bool flag2 = chara.HasElement(1225) && !chara.GetBool(126);
8603 if ((!flag2 && (flag || EClass.rnd(2) == 0 || !chara.HasCondition<StanceTaunt>())) || chara.HasCooldown(1225))
8604 {
8605 continue;
8606 }
8607 int num = Mathf.Max(chara.Evalue(1649), (!chara.IsPC) ? ((!flag2) ? 1 : 3) : 0);
8608 int num2 = Dist(chara);
8609 if (num2 > 25)
8610 {
8611 continue;
8612 }
8613 if (num2 > num || !chara.CanSeeLos(pos, num2))
8614 {
8615 if (!flag2)
8616 {
8617 continue;
8618 }
8619 Point nearestPoint = pos.GetNearestPoint(allowBlock: false, allowChara: false, allowInstalled: true, ignoreCenter: true);
8620 if (!nearestPoint.IsValid)
8621 {
8622 continue;
8623 }
8624 chara.Teleport(nearestPoint);
8625 chara.AddCooldown(1225, 10);
8626 num2 = Dist(chara);
8627 Say("intercept_loyal", chara, this);
8628 chara.SetEnemy(attacker);
8629 attacker.SetEnemy(chara);
8630 if (num2 > num || !chara.CanSeeLos(pos, num2))
8631 {
8632 continue;
8633 }
8634 }
8635 if (!flag && !HasElement(1225))
8636 {
8637 Say("intercept", chara, this);
8638 if (EClass.rnd(10) == 0)
8639 {
8640 chara.Talk("intercept", base.NameSimple);
8641 }
8642 if (attacker.enemy == this)
8643 {
8644 attacker.SetEnemy(chara);
8645 }
8646 action(chara);
8647 flag = true;
8648 }
8649 }
8650 return flag;
8651 }
void Teleport(Point point, bool silent=false, bool force=false)
Definition: Card.cs:5961
ConSuspend conSuspend
Definition: Chara.cs:104
void AddCooldown(int idEle, int turns=0)
Definition: Chara.cs:8862
bool HasCooldown(int idEle)
Definition: Chara.cs:8913

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

9306 {
9307 if (_hobbies != null && _works != null)
9308 {
9309 _hobbies.Clear();
9310 _works.Clear();
9311 }
9312 else
9313 {
9314 _hobbies = new List<int>();
9315 _works = new List<int>();
9316 }
9317 if (source.hobbies.IsEmpty())
9318 {
9319 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
9320 }
9321 else
9322 {
9323 string[] hobbies = source.hobbies;
9324 foreach (string key in hobbies)
9325 {
9326 AddHobby(EClass.sources.hobbies.alias[key].id);
9327 }
9328 }
9329 if (source.works.IsEmpty())
9330 {
9331 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
9332 }
9333 else
9334 {
9335 string[] hobbies = source.works;
9336 foreach (string key2 in hobbies)
9337 {
9338 AddWork(EClass.sources.hobbies.alias[key2].id);
9339 }
9340 }
9342 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:9344
void AddWork(int id)
Definition: Chara.cs:9293
void AddHobby(int id)
Definition: Chara.cs:9281
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 2266 of file Chara.cs.

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

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8747 of file Chara.cs.

8748 {
8749 _ = base.c_upgrades;
8750 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9885 of file Chara.cs.

9886 {
9887 if (con.power > 0 && resistCon != null)
9888 {
9889 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9890 if (1000 < EClass.rnd(a))
9891 {
9892 con.power = 0;
9893 }
9894 else if (500 < EClass.rnd(a))
9895 {
9896 con.power /= 5;
9897 }
9898 else if (200 < EClass.rnd(a))
9899 {
9900 con.power /= 3;
9901 }
9902 else if (100 < EClass.rnd(a))
9903 {
9904 con.power /= 2;
9905 }
9906 }
9907 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4769 of file Chara.cs.

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

References EClass._zone, Card.ChangeMaterial(), RenderRow.ContainsTag(), ThingGen.Create(), ThingGen.CreateFromCategory(), ThingGen.CreateSpellbook(), Zone.DangerLv, EClass.debug, Spatial.development, Card.elements, CoreDebug.enable, CharaBody.Equip(), SourceChara.Row.equip, SourceJob.Row.equip, Card.FameLv, CharaBody.HasWeapon(), SourceRace.Row.id, Spatial.influence, EClass.pc, EClass.rnd(), EClass.rndHalf(), 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 5090 of file Chara.cs.

5091 {
5092 switch (id)
5093 {
5094 case "lomias":
5095 if (ShouldRestock("_meat"))
5096 {
5097 AddCard(ThingGen.Create("_meat").MakeRefFrom("begger"));
5098 }
5099 break;
5100 case "fiama":
5101 Restock("book_story", 1);
5102 break;
5103 case "rock_thrower":
5104 Restock("stone", 10 + EClass.rnd(10));
5105 break;
5106 case "giant":
5107 Restock("rock", 2 + EClass.rnd(10));
5108 break;
5109 case "farris":
5110 Restock("lute", 1);
5111 Restock("book_story_home", 1);
5112 break;
5113 case "begger":
5114 break;
5115 }
5116 void Restock(string id, int num)
5117 {
5118 if (ShouldRestock(id))
5119 {
5120 AddCard(ThingGen.Create(id).SetNum(num));
5121 }
5122 }
5123 bool ShouldRestock(string id)
5124 {
5125 return things.Find(id) == null;
5126 }
5127 }

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

◆ Revive()

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

Definition at line 5242 of file Chara.cs.

5243 {
5244 if (!isDead)
5245 {
5246 return;
5247 }
5248 isDead = false;
5249 base.hp = MaxHP / 3;
5250 mana.value = 0;
5251 stamina.value = 0;
5252 if (hunger.value > 30)
5253 {
5254 hunger.value = 30;
5255 }
5256 sleepiness.value = 0;
5258 RemoveCondition<StanceTaunt>();
5259 if (id == "keeper_garden")
5260 {
5261 SaiyanRevive();
5262 }
5263 if (IsPC)
5264 {
5266 {
5267 Msg.Say("noDeathPenalty2", this);
5268 }
5270 {
5271 Msg.Say("noDeathPenalty", this);
5272 }
5273 else
5274 {
5276 }
5277 List<Thing> dropList = new List<Thing>();
5278 EClass.pc.things.Foreach(delegate(Thing t)
5279 {
5281 {
5282 t.ignoreAutoPick = true;
5283 dropList.Add(t);
5284 }
5285 }, onlyAccessible: false);
5286 foreach (Thing item in dropList)
5287 {
5289 Msg.Say("backpack_full_drop", item);
5290 }
5291 EClass.player.preventDeathPenalty = false;
5292 }
5293 if (IsPCFaction && homeBranch != null)
5294 {
5295 homeBranch.Log("bRevive", this);
5296 }
5297 if (p != null)
5298 {
5299 if (!p.IsInBounds)
5300 {
5302 }
5303 EClass._zone.AddCard(this, p);
5304 if (msg)
5305 {
5306 SE.Play("revive");
5307 Msg.Say("revive", this);
5308 PlayEffect("revive");
5309 }
5310 SetCensored(enable: false);
5311 }
5312 }
void SetCensored(bool enable)
Definition: Card.cs:7950
Card parentCard
Definition: Card.cs:104
void SaiyanRevive()
Definition: Chara.cs:5314
void ApplyDeathPenalty()
Definition: Chara.cs:5348
bool disableDeathPenaltyProtection
Point GetCenterPos()
Definition: MapBounds.cs:52
int days
Definition: Player.cs:75
bool preventDeathPenalty
Definition: Player.cs:1213
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 3583 of file Chara.cs.

3584 {
3585 if (renderer.hasActor)
3586 {
3587 base.dir = (base.dir + ((!reverse) ? 1 : (-1))).Clamp(0, 3, loop: true);
3588 }
3589 else
3590 {
3591 base.dir = ((base.dir == 0) ? 1 : 0);
3592 }
3593 UpdateAngle();
3595 }

Referenced by AI_Dance.Run().

◆ SaiyanRevive()

void Chara.SaiyanRevive ( )
inline

Definition at line 5314 of file Chara.cs.

5315 {
5316 ModCorruption(-100000);
5317 if (base.LV < 10000000)
5318 {
5319 SetLv(base.LV * 10 + 9);
5320 }
5321 Refresh();
5322 base.hp = MaxHP;
5323 mana.value = mana.max;
5324 stamina.value = stamina.max;
5325 bossText = true;
5326 }
void ModCorruption(int a)
Definition: Chara.cs:10032

References Stats.max, and Refresh().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 9081 of file Chara.cs.

9082 {
9083 if (IsPC)
9084 {
9086 }
9087 if (ai.IsRunning)
9088 {
9089 if (ai == g && ai.IsNoGoal)
9090 {
9091 return g;
9092 }
9093 ai.Cancel();
9094 if (ai == g)
9095 {
9096 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
9097 return g;
9098 }
9099 }
9100 if (HasCondition<ConWait>())
9101 {
9102 RemoveCondition<ConWait>();
9103 }
9104 ai = g;
9105 ai.SetOwner(this);
9106 if (IsPC)
9107 {
9109 }
9110 return g;
9111 }
virtual bool IsNoGoal
Definition: AIAct.cs:74
void SetOwner(Chara c)
Definition: AIAct.cs:189
QueueManager queues
Definition: Player.cs:1257
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 9071 of file Chara.cs.

9072 {
9073 SetAI(new GoalCombat());
9074 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 9067 of file Chara.cs.

9068 {
9069 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetCooldown()

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

Definition at line 8880 of file Chara.cs.

8881 {
8882 if (_cooldowns == null)
8883 {
8884 _cooldowns = new List<int>();
8885 }
8886 bool flag = false;
8887 for (int i = 0; i < _cooldowns.Count; i++)
8888 {
8889 if (_cooldowns[i] / 1000 == idEle)
8890 {
8891 if (turns == 0)
8892 {
8893 _cooldowns.RemoveAt(i);
8894 }
8895 else
8896 {
8897 _cooldowns[i] = idEle * 1000 + turns;
8898 }
8899 flag = true;
8900 break;
8901 }
8902 }
8903 if (!flag && turns > 0)
8904 {
8905 AddCooldown(idEle, turns);
8906 }
8907 if (_cooldowns.Count == 0)
8908 {
8909 _cooldowns = null;
8910 }
8911 }

Referenced by ConTransmuteBat.OnRemoved().

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3576 of file Chara.cs.

3577 {
3578 base.dir = d;
3579 UpdateAngle();
3581 }

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

6440 {
6441 enemy = c;
6442 if (c == null)
6443 {
6444 if (ai is GoalCombat)
6445 {
6446 ai.Cancel();
6447 }
6448 }
6449 else
6450 {
6451 calmCheckTurn = 10 + EClass.rnd(30);
6452 }
6453 return c;
6454 }

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

5130 {
5132 Rarity rarity = Rarity.Normal;
5133 int num = ((base.LV >= 1000) ? 7 : ((base.LV >= 500) ? 5 : ((base.LV >= 250) ? 3 : ((base.LV >= 100) ? 2 : ((base.LV >= 50) ? 1 : 0)))));
5134 Rarity rarity2 = base.rarity;
5135 if (id == "big_sister")
5136 {
5137 num = (isOnCreate ? 8 : 4);
5138 }
5139 if (!isOnCreate && EClass.rnd(10) != 0)
5140 {
5141 num /= 2;
5142 }
5143 if (rarity2 == Rarity.Superior && EClass.rnd(10) <= num)
5144 {
5145 rarity = Rarity.Superior;
5146 }
5147 else if (rarity2 == Rarity.Legendary)
5148 {
5149 rarity = ((EClass.rnd(10) <= num) ? Rarity.Legendary : ((EClass.rnd(5) <= num) ? Rarity.Superior : Rarity.Normal));
5150 }
5151 else if (rarity2 >= Rarity.Mythical)
5152 {
5153 rarity = ((EClass.rnd(30) <= num) ? Rarity.Mythical : ((EClass.rnd(10) > num) ? Rarity.Superior : Rarity.Legendary));
5154 }
5155 if (rarity == Rarity.Normal && EClass.rnd(1000) == 0)
5156 {
5157 rarity = Rarity.Legendary;
5158 }
5159 CardBlueprint.current.rarity = rarity;
5160 }
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 10090 of file Chara.cs.

10091 {
10092 Feat feat = elements.GetElement(id) as Feat;
10093 int num = 0;
10094 if (feat != null && feat.Value > 0)
10095 {
10096 if (value == feat.Value)
10097 {
10098 return;
10099 }
10100 num = feat.Value;
10101 feat.Apply(-feat.Value, elements);
10102 }
10103 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
10104 if (feat.Value != 0)
10105 {
10106 feat.Apply(feat.Value, elements);
10107 }
10109 {
10110 Refresh();
10112 }
10113 if (!msg)
10114 {
10115 return;
10116 }
10117 if (feat.source.textInc.IsEmpty())
10118 {
10119 PlaySound("ding_skill");
10121 Say("gainFeat", this, feat.FullName);
10122 }
10123 else
10124 {
10125 bool flag = value < num;
10126 if (feat.source.tag.Contains("neg"))
10127 {
10128 flag = !flag;
10129 }
10130 switch (id)
10131 {
10132 case 1270:
10133 if (!flag)
10134 {
10135 PlaySound("chime_angel");
10136 }
10137 break;
10138 case 1271:
10139 if (!flag)
10140 {
10141 PlaySound("chime_devil");
10142 }
10143 break;
10144 default:
10145 PlaySound("mutation");
10146 break;
10147 }
10149 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
10150 }
10152 }
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 2134 of file Chara.cs.

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

2126 {
2127 if (!id.StartsWith("ele"))
2128 {
2129 id = "ele" + id;
2130 }
2131 SetMainElement(EClass.sources.elements.alias[id].id, v, elemental);
2132 }

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

10155 {
10156 SourceElement.Row row = EClass.sources.elements.map[idEle];
10158 Element element = elements.GetElement(idEle);
10159 Element element2 = elements.GetElement(row2.id);
10160 int num = element?.Value ?? 0;
10161 if (a < 0)
10162 {
10163 a = 0;
10164 }
10165 if (a > row.max)
10166 {
10167 a = row.max;
10168 }
10169 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
10170 if (a == 0 && (element == null || element.Value == 0))
10171 {
10173 return;
10174 }
10175 if (element != null && element.Value == a)
10176 {
10178 return;
10179 }
10180 if (element2 != null && element2.Value > 0)
10181 {
10182 SetFeat(element2.id, 0);
10183 }
10184 SetFeat(idEle, a);
10185 PlaySound("mutation");
10186 PlayEffect("mutation");
10188 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
10189 }

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

9077 {
9078 return SetAI(_NoGoalPC);
9079 }
static NoGoal _NoGoalPC
Definition: Chara.cs:198

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6827 of file Chara.cs.

6828 {
6829 if (IsPCC)
6830 {
6831 PCC.Get(pccData).Build(state);
6832 }
6833 }

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

6876 {
6877 p.mat = base.material;
6878 p.matColor = base.colorInt;
6879 if (!renderer.usePass)
6880 {
6881 return;
6882 }
6883 if (renderer.replacer != null)
6884 {
6885 p.tile = renderer.replacer.tile * ((!flipX) ? 1 : (-1));
6886 if (renderer.replacer.mat != -1)
6887 {
6888 p.mat = EClass.sources.materials.rows.TryGet(renderer.replacer.mat, 0);
6889 p.matColor = BaseTileMap.GetColorInt(ref p.mat.matColor, 100);
6890 p.color -= 1048576f;
6891 }
6892 }
6893 else if (source._tiles_snow.Length != 0 && EClass._zone.IsSnowCovered)
6894 {
6895 if (source._tiles_snow.Length > 1)
6896 {
6897 int num = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % source._tiles_snow.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6898 p.tile = source._tiles_snow[(num < source._tiles_snow.Length) ? num : 0] * ((!flipX) ? 1 : (-1));
6899 }
6900 else
6901 {
6902 p.tile = source._tiles_snow[0] * ((!flipX) ? 1 : (-1));
6903 }
6904 }
6905 else if (sourceCard._tiles.Length > 1)
6906 {
6907 int num2 = ((base.idSkin != 0 || source.staticSkin) ? base.idSkin : (base.uid % sourceCard._tiles.Length / 2 * 2 + ((!base.IsMale) ? 1 : 0)));
6908 p.tile = sourceCard._tiles[(num2 >= 0 && num2 < sourceCard._tiles.Length) ? num2 : 0] * ((!flipX) ? 1 : (-1));
6909 }
6910 else
6911 {
6912 p.tile = sourceCard._tiles[0] * ((!flipX) ? 1 : (-1));
6913 }
6914 p.dir = base.dir;
6915 }
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 7450 of file Chara.cs.

7451 {
7452 switch (m)
7453 {
7454 case UIList.SortMode.ByJob:
7455 sortVal = job._index * 10000 + sourceCard._index;
7456 break;
7457 case UIList.SortMode.ByRace:
7458 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
7459 break;
7460 case UIList.SortMode.ByFeat:
7461 sortVal = -GetTotalFeat();
7462 break;
7463 case UIList.SortMode.ByPartyOrder:
7464 sortVal = EClass.pc.party.members.IndexOf(this);
7465 return;
7466 default:
7467 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7468 break;
7469 case UIList.SortMode.ByWorkk:
7470 break;
7471 }
7472 if (base.isFav)
7473 {
7474 sortVal -= 100000000;
7475 }
7476 }
int sortVal
Definition: Card.cs:102
int GetTotalFeat()
Definition: Chara.cs:8299
Definition: UIList.cs:9
SortMode
Definition: UIList.cs:27

References SourceData< T, T2 >.BaseRow._index, Party.members, party, and EClass.pc.

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

◆ SetSource()

override void Chara.SetSource ( )
inlinevirtual

Reimplemented from Card.

Definition at line 2113 of file Chara.cs.

2114 {
2115 source = EClass.sources.charas.map.TryGetValue(id);
2116 if (source == null)
2117 {
2118 Debug.LogWarning("Chara " + id + " not found");
2119 id = "chicken";
2120 source = EClass.sources.charas.map[id];
2121 }
2122 path.walker = this;
2123 }

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2456 of file Chara.cs.

2457 {
2458 base.c_summonDuration = duration;
2459 base.isSummon = true;
2460 }

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

7793 {
7794 if (t.IsRangedWeapon && t.category.slot == 0)
7795 {
7796 if (!CanEquipRanged(t))
7797 {
7798 return false;
7799 }
7800 int num = 0;
7801 foreach (Thing thing in things)
7802 {
7803 if (thing.IsRangedWeapon)
7804 {
7805 if (thing.category.slot != 0 && thing.isEquipped)
7806 {
7807 return false;
7808 }
7809 if (CanEquipRanged(thing) && thing.GetEquipValue() > num)
7810 {
7811 num = thing.GetEquipValue();
7812 }
7813 }
7814 }
7815 if (t.GetEquipValue() > num)
7816 {
7817 return true;
7818 }
7819 return false;
7820 }
7821 BodySlot bodySlot = body.GetSlot(t);
7822 if (bodySlot == null)
7823 {
7824 return false;
7825 }
7826 if (useFav)
7827 {
7828 switch (GetFavAttackStyle())
7829 {
7830 case AttackStyle.Default:
7831 case AttackStyle.TwoHand:
7832 if (t.IsMeleeWeapon)
7833 {
7834 bodySlot = body.slotMainHand;
7835 }
7836 else if (bodySlot.elementId == 35)
7837 {
7838 return false;
7839 }
7840 break;
7841 case AttackStyle.Shield:
7842 if (t.IsMeleeWeapon)
7843 {
7844 bodySlot = body.slotMainHand;
7845 }
7846 else if (bodySlot.elementId == 35 && t.IsMeleeWeapon)
7847 {
7848 return false;
7849 }
7850 break;
7851 case AttackStyle.TwoWield:
7852 if (bodySlot.elementId == 35 && !t.IsMeleeWeapon)
7853 {
7854 return false;
7855 }
7856 break;
7857 }
7858 }
7859 if (!body.IsEquippable(t, bodySlot, text: false))
7860 {
7861 return false;
7862 }
7863 if (bodySlot.thing != null && (bodySlot.thing.blessedState <= BlessedState.Cursed || bodySlot.thing.GetEquipValue() >= t.GetEquipValue()))
7864 {
7865 return false;
7866 }
7867 if (!base.IsPCFactionOrMinion)
7868 {
7869 int num2 = 0;
7870 foreach (Element value in t.elements.dict.Values)
7871 {
7872 if (value.Value <= 0)
7873 {
7874 int num3 = 100;
7875 switch (value.id)
7876 {
7877 case 418:
7878 num3 = 10;
7879 break;
7880 case 60:
7881 case 61:
7882 case 62:
7883 num3 = 200;
7884 break;
7885 case 962:
7886 num3 = 10000;
7887 break;
7888 }
7889 num2 += value.Value * num3 / 100;
7890 }
7891 }
7892 if (num2 < -40)
7893 {
7894 return false;
7895 }
7896 }
7897 if (t.HasTag(CTAG.gift) && t.c_uidAttune != base.uid)
7898 {
7899 return false;
7900 }
7901 return true;
7902 }
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:4725

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

8654 {
8655 if (IsPCFaction)
8656 {
8657 if (t.IsFood && t.category.id != "fish" && !t.IsDecayed)
8658 {
8659 return false;
8660 }
8661 if (t.trait.GetHealAction(this) != null)
8662 {
8663 return false;
8664 }
8665 if (t.IsThrownWeapon || t.IsRangedWeapon || t.IsAmmo)
8666 {
8667 return false;
8668 }
8669 if (t.trait is TraitBlanket || t.trait is TraitItemProc || t.trait is TraitBookSkill)
8670 {
8671 return false;
8672 }
8673 }
8674 if (t.isEquipped || t.rarity >= Rarity.Legendary || !t.trait.CanBeDestroyed || t.c_isImportant)
8675 {
8676 return false;
8677 }
8678 if (t.trait is TraitCurrency || t.trait is TraitTool)
8679 {
8680 return false;
8681 }
8682 switch (type)
8683 {
8684 case ClearInventoryType.SellAtTown:
8685 if (!t.isGifted && !t.isNPCProperty)
8686 {
8687 return false;
8688 }
8689 break;
8690 case ClearInventoryType.Purge:
8691 switch (t.category.id)
8692 {
8693 case "fish":
8694 if (EClass.rnd(3) == 0)
8695 {
8696 return true;
8697 }
8698 break;
8699 case "junk":
8700 case "garbage":
8701 if (EClass.rnd(3) != 0)
8702 {
8703 return true;
8704 }
8705 break;
8706 }
8707 if (t.id == "flyer")
8708 {
8709 return true;
8710 }
8711 if (!t.IsDecayed && EClass.rnd(3) == 0)
8712 {
8713 return false;
8714 }
8715 if (!things.IsFull() && t.IsRangedWeapon)
8716 {
8717 return false;
8718 }
8719 break;
8720 }
8721 return true;
8722 }
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 7193 of file Chara.cs.

7194 {
7195 Zone_Nymelle zone_Nymelle = EClass._zone as Zone_Nymelle;
7196 if (conSuspend != null && IsPCParty)
7197 {
7198 RemoveCondition<ConSuspend>();
7199 }
7200 if (LayerDrama.forceJump == null)
7201 {
7202 if (IsDeadOrSleeping)
7203 {
7204 ShowDialog("_chara", "sleep");
7205 return;
7206 }
7207 if (EClass.pc.isHidden && !CanSee(EClass.pc))
7208 {
7209 ShowDialog("_chara", "invisible");
7210 return;
7211 }
7213 {
7215 ShowDialog("_chara", "give_card");
7216 Thing thing = ThingGen.Create("figure");
7217 thing.MakeFigureFrom(id);
7218 EClass.player.DropReward(thing);
7219 thing = ThingGen.Create("figure3");
7220 thing.MakeFigureFrom(id);
7221 EClass.player.DropReward(thing);
7222 return;
7223 }
7224 if (GetInt(71) == -2)
7225 {
7226 ShowDialog("_chara", "give_lunch");
7227 Thing t = CraftUtil.MakeLoveLunch(this);
7229 SetInt(71, EClass.world.date.GetRaw() + 43200);
7230 return;
7231 }
7232 if (base.isRestrained)
7233 {
7234 ShowDialog("_chara", "strain");
7235 return;
7236 }
7237 if (IsEscorted())
7238 {
7239 ShowDialog("_chara", "escort");
7240 return;
7241 }
7243 {
7244 string step = ((!(EClass._zone is Zone_Wedding)) ? "party" : (IsPCParty ? "wedding_love" : ((IsMarried || affinity.IsWeddingHater) ? "wedding_hater" : "wedding")));
7245 if (EClass._zone is Zone_Wedding && IsPCParty && base.c_love != null && !base.c_love.gaveCutter)
7246 {
7247 step = "wedding_cutter";
7248 EClass.player.DropReward(ThingGen.Create("dagger_cakecutter"));
7249 base.c_love.gaveCutter = true;
7250 }
7251 ShowDialog("_chara", step);
7252 return;
7253 }
7254 if (EClass.game.quests.OnShowDialog(this))
7255 {
7256 return;
7257 }
7258 if (id == "nino")
7259 {
7261 }
7262 switch (id)
7263 {
7264 case "loytel":
7265 {
7267 {
7268 EClass.game.quests.Get("pre_debt_runaway").Complete();
7269 EClass.player.flags.loytelEscaped = false;
7270 EClass.game.quests.Add("debt", "loytel");
7271 ShowDialog("loytel", "loytelEscaped");
7272 return;
7273 }
7274 QuestDebt questDebt = EClass.game.quests.Get<QuestDebt>();
7275 if (questDebt != null && questDebt.paid)
7276 {
7277 questDebt.stage++;
7278 if (questDebt.stage > 7)
7279 {
7280 questDebt.stage = 7;
7281 }
7282 ShowDialog("loytel", "debt" + questDebt.stage);
7283 return;
7284 }
7285 break;
7286 }
7287 case "farris":
7288 if (EClass._zone.id == "startVillage" || EClass._zone.id == "startVillage3" || EClass.game.IsSurvival)
7289 {
7290 ShowDialog("farris");
7291 return;
7292 }
7294 {
7295 case -1:
7296 ShowDialog("farris", "nymelle_noQuest");
7297 break;
7298 case 0:
7299 ShowDialog("farris", "nymelle_first");
7300 break;
7301 case 1:
7302 ShowDialog("farris", "home_first");
7303 break;
7304 default:
7305 ShowDialog("farris");
7306 break;
7307 }
7308 return;
7309 case "ashland":
7310 ShowDialog("ashland");
7311 return;
7312 case "fiama":
7313 if (zone_Nymelle != null && zone_Nymelle.IsCrystalLv && EClass.game.quests.GetPhase<QuestExploration>() == 3)
7314 {
7315 SoundManager.ForceBGM();
7316 LayerDrama.ActivateMain("mono", "nymelle_crystal");
7317 }
7319 {
7321 {
7322 EClass.player.flags.fiamaFirstDream = true;
7323 ShowDialog("fiama", "firstDream");
7324 }
7326 {
7327 ShowDialog("fiama", "giveStoryBook").SetOnKill(delegate
7328 {
7329 EClass.player.flags.fiamaStoryBookGiven = true;
7330 EClass.player.DropReward(ThingGen.Create("book_story"));
7331 });
7332 }
7333 else
7334 {
7335 ShowDialog("fiama");
7336 }
7337 }
7338 else
7339 {
7340 ShowDialog("fiama");
7341 }
7342 return;
7343 case "big_sister":
7345 {
7346 ShowDialog("big_sister", "little_saved");
7347 EClass.player.flags.little_saved = false;
7348 return;
7349 }
7351 {
7352 ShowDialog("big_sister", "little_dead");
7353 EClass.player.flags.little_killed = false;
7354 return;
7355 }
7356 break;
7357 }
7358 if (trait is TraitGuildDoorman)
7359 {
7360 string tag = ((trait is TraitDoorman_Fighter) ? "fighter" : ((trait is TraitDoorman_Mage) ? "mage" : "thief"));
7361 ShowDialog("guild_doorman", "main", tag);
7362 return;
7363 }
7364 if (trait is TraitGuildClerk)
7365 {
7366 string tag2 = ((trait is TraitClerk_Fighter) ? "fighter" : ((trait is TraitClerk_Mage) ? "mage" : "thief"));
7367 ShowDialog("guild_clerk", "main", tag2);
7368 return;
7369 }
7370 }
7371 bool flag = true;
7372 if (id == "parttimer_jure" && (!EClass._zone.IsFestival || !(EClass._zone is Zone_Noyel) || EClass.pc.faith == EClass.game.religions.Healing))
7373 {
7374 flag = false;
7375 }
7376 if (flag && File.Exists(PackageIterator.GetFiles("Dialog/Drama/" + id + ".xlsx").LastOrDefault()?.FullName ?? (CorePath.DramaData + id + ".xlsx")))
7377 {
7378 ShowDialog(id);
7379 }
7380 else
7381 {
7382 ShowDialog("_chara");
7383 }
7384 }
bool CanGiveCard()
Definition: Affinity.cs:65
bool IsWeddingHater
Definition: Affinity.cs:36
void MakeFigureFrom(string id)
Definition: Card.cs:5799
void ShowDialog()
Definition: Chara.cs:7193
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:496
int storyFiama
Definition: Player.cs:640
bool little_saved
Definition: Player.cs:460
bool fiamaStoryBookGiven
Definition: Player.cs:316
bool fiamaFirstDream
Definition: Player.cs:328
bool little_killed
Definition: Player.cs:472
CodexManager codex
Definition: Player.cs:1158
bool EnableDreamStory
Definition: Player.cs:1316
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2618
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 7386 of file Chara.cs.

7387 {
7388 return _ShowDialog(book, null, step, tag);
7389 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:7391

References book.

◆ Slap()

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

Definition at line 6422 of file Chara.cs.

6423 {
6424 if (id == "olderyoungersister")
6425 {
6427 }
6428 PlaySound("whip");
6429 Say("slap", this, c);
6430 c.PlayAnime(AnimeID.Shiver);
6431 c.DamageHP(slapToDeath ? (c.MaxHP * 2) : (5 + EClass.rndHalf(EClass.pc.MaxHP / 3)), 919, 100, AttackSource.Condition);
6432 c.OnInsulted();
6433 if (slapToDeath && c.IsAliveInCurrentZone)
6434 {
6435 c.Die();
6436 }
6437 }
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6394
void OnInsulted()
Definition: Chara.cs:8366
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Chara.cs:5411

References Card.DamageHP(), Die(), Steam.GetAchievement(), 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 9909 of file Chara.cs.

9910 {
9911 RemoveCondition<ConAwakening>();
9912 AddCondition(Condition.Create(100, delegate(ConSleep con)
9913 {
9914 con.pcSleep = 15;
9915 con.pcBed = bed;
9916 con.pcPillow = pillow;
9917 con.pickup = pickup;
9918 con.posBed = posBed;
9919 con.posPillow = posPillow;
9920 }), force: true);
9921 }

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

8290 {
8291 Say("abCatSniff", this, c);
8292 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
8293 c.ShowEmo(Emo.angry);
8294 ShowEmo(Emo.love);
8295 Talk("sniff");
8296 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
8297 }

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

4661 {
4662 return held.Split(a);
4663 }

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

4002 {
4003 if (host != null)
4004 {
4005 host.SyncRide();
4006 }
4007 if (ride != null)
4008 {
4009 SyncRide(ride);
4010 }
4011 if (parasite != null)
4012 {
4014 }
4015 }

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

4018 {
4019 if (!c.pos.Equals(pos))
4020 {
4021 if (!pos.IsValid)
4022 {
4023 Debug.LogError("exception: pos is not valid:" + pos?.ToString() + "/" + this);
4024 pos = new Point();
4025 }
4026 EClass._map.MoveCard(pos, c);
4027 }
4028 }

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

◆ TalkTopic()

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

Definition at line 7122 of file Chara.cs.

7123 {
7124 if (host == null && !IsInActiveZone)
7125 {
7126 return null;
7127 }
7128 if (!isSynced && (host == null || !host.isSynced) && topic != "dead")
7129 {
7130 return null;
7131 }
7132 if (IsPCParty)
7133 {
7134 int num = EClass.pc.party.members.Count - 1;
7135 switch (topic)
7136 {
7137 case "calm":
7138 if (EClass.rnd(num * 5) != 0)
7139 {
7140 return null;
7141 }
7142 break;
7143 case "aggro":
7144 if (EClass.rnd(num * 10) != 0)
7145 {
7146 return null;
7147 }
7148 break;
7149 case "kill":
7150 if (EClass.rnd(num * 3) != 0)
7151 {
7152 return null;
7153 }
7154 break;
7155 case "fov":
7156 return null;
7157 }
7158 }
7159 string topicText = GetTopicText(topic);
7160 if (topicText.IsEmpty())
7161 {
7162 return null;
7163 }
7164 string text = "_bracketTalk".lang();
7165 bool flag = topicText.StartsWith("*");
7166 bool flag2 = topicText.StartsWith("(");
7167 bool flag3 = topicText.StartsWith(text) || (topicText.Length > 0 && topicText[0] == text[0]) || topicText[0] == '“';
7168 topicText = ApplyTone(topicText);
7169 topicText = topicText.Replace("~", "*");
7170 Msg.SetColor(flag2 ? Msg.colors.Thinking : (flag3 ? Msg.colors.Talk : Msg.colors.Ono));
7171 Msg.Say(StripTalkSpeiclaCharacters(topicText.Replace("&", "")));
7172 if (topic == "dead")
7173 {
7174 EClass.ui.popGame.PopText(ApplyNewLine(topicText.StripBrackets()), null, "PopTextDead", default(Color), pos.Position() + EClass.setting.render.tc.textPosDead);
7175 }
7176 else if (flag || flag3 || flag2)
7177 {
7178 (host ?? this).renderer.Say(ApplyNewLine(topicText.StripBrackets()), default(Color), IsPCParty ? 0.6f : 0f);
7179 }
7180 return topicText;
7181 }
void Say(string text, Color c=default(Color), float duration=0f)
string ApplyNewLine(string text)
Definition: Card.cs:7019
string StripTalkSpeiclaCharacters(string text)
Definition: Card.cs:7000
string ApplyTone(string text, bool stripPun=false)
Definition: Card.cs:7098
string GetTopicText(string topic="calm")
Definition: Chara.cs:7089
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 4030 of file Chara.cs.

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

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

8934 {
8935 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8936 {
8937 if (_cooldowns[num] % 1000 == 1)
8938 {
8939 _cooldowns.RemoveAt(num);
8940 }
8941 else
8942 {
8943 _cooldowns[num]--;
8944 }
8945 }
8946 if (_cooldowns.Count == 0)
8947 {
8948 _cooldowns = null;
8949 }
8950 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 9353 of file Chara.cs.

9354 {
9356 if (span != TimeTable.Span.Work && span != 0)
9357 {
9358 return;
9359 }
9360 WorkSummary workSummary = GetWorkSummary();
9361 if (span == TimeTable.Span.Work)
9362 {
9363 if (workSummary.work != null)
9364 {
9365 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
9366 }
9367 }
9368 else if (workSummary.hobbies.Count > 0)
9369 {
9370 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
9371 }
9372 }
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 4445 of file Chara.cs.

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

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

7506 {
7507 if (!IsPCFaction && !IsGuest())
7508 {
7509 return null;
7510 }
7511 foreach (Card item in EClass._map.props.installed.all)
7512 {
7513 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7514 {
7515 traitBed.AddHolder(this);
7516 Msg.Say("claimBed", this);
7517 return traitBed;
7518 }
7519 }
7520 return null;
7521 }
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 5733 of file Chara.cs.

5734 {
5736 {
5737 return;
5738 }
5739 int num = 0;
5740 bool flag = false;
5741 bool flag2 = false;
5742 Point point = pos.GetNearestPoint(allowBlock: true, allowChara: false, allowInstalled: false, ignoreCenter: true) ?? pos;
5743 TreasureType type = TreasureType.BossQuest;
5744 if (EClass._zone.Boss == this)
5745 {
5746 type = TreasureType.BossNefia;
5747 num = 2 + EClass.rnd(2);
5748 flag = (flag2 = true);
5749 EClass._zone.Boss = null;
5750 Msg.Say("boss_win", EClass._zone.Name);
5752 {
5753 Msg.Say("boss_win_void", EClass._zone.Name);
5754 EClass.player.flags.KilledBossInVoid = true;
5755 }
5756 if (EClass._zone.IsNefia)
5757 {
5760 SE.Play("Jingle/fanfare2");
5761 EClass._zone.SetBGM(114, refresh: true, 3f);
5762 }
5765 }
5766 switch (id)
5767 {
5768 case "azzrasizzle":
5769 num = 5;
5770 flag = (flag2 = true);
5771 EClass.Sound.StopBGM(3f);
5772 EClass._zone.SetBGM(1, refresh: false);
5774 {
5775 EClass.game.quests.Get<QuestIntoDarkness>().UpdateOnTalk();
5776 }
5777 break;
5778 case "vernis_boss":
5779 num = 5;
5780 flag = (flag2 = true);
5781 EClass.Sound.StopBGM(3f);
5782 EClass._zone.SetBGM(1, refresh: false);
5784 {
5785 EClass.game.quests.Get<QuestVernis>().UpdateOnTalk();
5786 }
5787 break;
5788 case "lurie_boss":
5789 if (!(EClass._zone is Zone_Exile))
5790 {
5791 num = 5;
5792 flag = (flag2 = true);
5793 EClass._zone.SetBGM(120, refresh: true, 3f);
5795 {
5796 EClass.game.quests.Get<QuestNegotiationDarkness>().ChangePhase(4);
5797 EClass.player.flags.killedDuponne = true;
5798 }
5799 }
5800 break;
5801 case "ungaga_pap":
5802 num = 5;
5803 flag = (flag2 = true);
5805 {
5806 EClass._zone.SetBGM(46, refresh: true, 3f);
5807 }
5808 break;
5809 case "melilith_boss":
5810 num = 5;
5811 flag = (flag2 = true);
5812 EClass.Sound.StopBGM(3f);
5813 EClass._zone.SetBGM(1, refresh: false);
5814 break;
5815 case "doga":
5816 {
5817 QuestCurry questCurry = EClass.game.quests.Get<QuestCurry>();
5818 if (questCurry != null)
5819 {
5820 num = 5;
5821 flag = (flag2 = true);
5822 EClass.Sound.StopBGM(3f);
5823 EClass._zone.SetBGM(1, refresh: false);
5824 questCurry.NextPhase();
5825 }
5826 break;
5827 }
5828 case "fairy_raina":
5829 case "fairy_poina":
5830 {
5831 bool num2 = EClass._map.FindChara((id == "fairy_raina") ? "fairy_poina" : "fairy_raina") == null;
5832 QuestNasu questNasu = EClass.game.quests.Get<QuestNasu>();
5833 if (num2 && questNasu != null && questNasu.phase <= 1)
5834 {
5835 if (questNasu.phase == 0)
5836 {
5837 questNasu.NextPhase();
5838 }
5839 num = 5;
5840 flag = (flag2 = true);
5841 EClass.Sound.StopBGM(3f);
5842 EClass._zone.SetBGM(1, refresh: false);
5843 EClass.player.DropReward(ThingGen.Create("backpack_holding"));
5844 questNasu.NextPhase();
5845 }
5846 break;
5847 }
5848 case "isygarad":
5849 {
5850 num = 5;
5851 flag = (flag2 = true);
5852 QuestExploration questExploration = EClass.game.quests.Get<QuestExploration>();
5853 if (questExploration != null)
5854 {
5855 SE.Play("kill_boss");
5856 questExploration.ChangePhase(3);
5857 EClass.Sound.StopBGM(3f);
5858 EClass._zone.SetBGM(1, refresh: false);
5859 }
5860 break;
5861 }
5862 case "swordkeeper":
5863 num = 10;
5864 flag = true;
5865 SE.Play("kill_boss");
5866 SoundManager.ForceBGM();
5867 LayerDrama.Activate("_event", "event", "swordkeeper_defeat");
5868 break;
5869 }
5870 if (flag)
5871 {
5872 SE.Play("kill_boss");
5873 }
5874 if (num != 0)
5875 {
5877 {
5878 EClass.player.stats.deepest = EClass._zone.DangerLv;
5879 Msg.Say("update_deepest", EClass.player.stats.deepest.ToString() ?? "");
5880 }
5882 {
5883 EClass.player.stats.deepestVoid = -EClass._zone.lv;
5884 Msg.Say("update_deepest_void", EClass.player.stats.deepestVoid.ToString() ?? "");
5885 }
5886 EClass.player.willAutoSave = true;
5887 Thing thing = ThingGen.CreateTreasure("chest_boss", base.LV, type);
5888 point.SetBlock();
5889 point.SetObj();
5890 EClass._zone.AddCard(thing, point).Install();
5891 ThingGen.TryLickChest(thing);
5892 }
5893 if (flag2)
5894 {
5896 }
5897 }
TreasureType
Definition: TreasureType.cs:2
bool KilledBossInVoid
Definition: Player.cs:436
int deepest
Definition: Player.cs:114
long nefiaBeaten
Definition: Player.cs:153
int deepestVoid
Definition: Player.cs:117
void ModFame(int a)
Definition: Player.cs:2142
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:3023
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 4665 of file Chara.cs.

4666 {
4667 if (held != null && held.trait.CanOnlyCarry)
4668 {
4669 DropHeld();
4670 }
4671 foreach (Thing item in things.List((Thing t) => t.trait.CanOnlyCarry))
4672 {
4673 DropThing(item);
4674 }
4675 }
void DropThing(Thing t, int num=-1)
Definition: Chara.cs:4697

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

◆ TryEquip()

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

Definition at line 7904 of file Chara.cs.

7905 {
7906 if (!ShouldEquip(t, useFav))
7907 {
7908 return false;
7909 }
7910 if (t.category.slot == 0)
7911 {
7912 return false;
7913 }
7914 if (useFav)
7915 {
7916 BodySlot slot = body.GetSlot(t);
7917 switch (GetFavAttackStyle())
7918 {
7919 case AttackStyle.Default:
7920 case AttackStyle.TwoHand:
7921 if (t.IsMeleeWeapon)
7922 {
7923 slot = body.slotMainHand;
7924 }
7925 break;
7926 case AttackStyle.Shield:
7927 if (t.IsMeleeWeapon)
7928 {
7929 slot = body.slotMainHand;
7930 }
7931 break;
7932 }
7933 body.Equip(t, slot);
7934 }
7935 else
7936 {
7937 body.Equip(t);
7938 }
7939 Say("equip", this, t);
7940 return true;
7941 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7792

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

8025 {
8026 if (IsPC)
8027 {
8029 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
8030 {
8031 ranged = thing;
8032 return true;
8033 }
8034 return false;
8035 }
8036 if (ranged != null && ranged.parent == this)
8037 {
8038 return true;
8039 }
8041 return ranged != null;
8042 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:8009

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

7949 {
7950 Thing dest = null;
7951 if (IsPC)
7952 {
7954 {
7955 return FindThrowable(hotbar: true);
7956 }
7957 return null;
7958 }
7959 things.Foreach(delegate(Thing t)
7960 {
7961 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7962 {
7963 dest = t;
7964 }
7965 });
7966 return dest;
7967 Thing FindThrowable(bool hotbar)
7968 {
7969 things.Foreach(delegate(Thing t)
7970 {
7971 if (dest == null)
7972 {
7973 if (t.IsHotItem)
7974 {
7975 if (!hotbar)
7976 {
7977 return;
7978 }
7979 }
7980 else if (hotbar)
7981 {
7982 return;
7983 }
7984 if (t.HasTag(CTAG.throwWeapon))
7985 {
7986 dest = t;
7987 }
7988 }
7989 });
7990 return dest;
7991 }
7992 }

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

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

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

8171 {
8172 int num = Evalue(289);
8173 if (num == 0)
8174 {
8175 return false;
8176 }
8177 int lV = t.LV;
8178 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
8179 {
8180 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
8181 int num2 = 50;
8182 if (lV > num)
8183 {
8184 num2 += (lV - num) * 10;
8185 }
8186 elements.ModExp(289, Mathf.Min(num2, 1000));
8187 return true;
8188 }
8189 return false;
8190 }
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 2755 of file Chara.cs.

2756 {
2757 foreach (Condition condition in conditions)
2758 {
2759 if (!condition.TryMove(newPoint))
2760 {
2761 return MoveResult.Fail;
2762 }
2763 }
2764 if (base.isRestrained)
2765 {
2766 if (!IsPC)
2767 {
2768 return MoveResult.Fail;
2769 }
2770 base.isRestrained = false;
2771 }
2772 if (!CanMoveTo(newPoint, allowDestroyPath))
2773 {
2774 return MoveResult.Fail;
2775 }
2776 return _Move(newPoint);
2777 }
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 2693 of file Chara.cs.

2694 {
2695 if (p.Equals(pos))
2696 {
2697 return MoveResult.Success;
2698 }
2700 {
2701 return MoveResult.Fail;
2702 }
2703 bool flag = true;
2704 Point point = null;
2705 _sharedPos.Set(p);
2706 if (CanDestroyPath())
2707 {
2709 {
2710 return MoveResult.Success;
2711 }
2712 Debug.Log(CanMoveTo(pos));
2714 }
2715 int num = pos.Distance(p);
2716 PathProgress pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 4, 1);
2717 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2718 {
2719 PathFinderNode pathFinderNode = pathProgress.nodes[pathProgress.nodes.Count - 1];
2720 if (TryMove(new Point(pathFinderNode.X, pathFinderNode.Z)) == MoveResult.Success)
2721 {
2722 return MoveResult.Success;
2723 }
2724 }
2725 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 4, 1);
2726 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 4)
2727 {
2728 PathFinderNode pathFinderNode2 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2729 if (TryMove(new Point(pathFinderNode2.X, pathFinderNode2.Z)) == MoveResult.Success)
2730 {
2731 return MoveResult.Success;
2732 }
2733 }
2734 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Default, num + 25, 2);
2735 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2736 {
2737 PathFinderNode pathFinderNode3 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2738 if (TryMove(new Point(pathFinderNode3.X, pathFinderNode3.Z)) == MoveResult.Success)
2739 {
2740 return MoveResult.Success;
2741 }
2742 }
2743 pathProgress = PathManager.Instance.RequestPathImmediate(pos, p, this, PathManager.MoveType.Combat, num + 25, 2);
2744 if (pathProgress.HasPath && pathProgress.nodes.Count < num + 25)
2745 {
2746 PathFinderNode pathFinderNode4 = pathProgress.nodes[pathProgress.nodes.Count - 1];
2747 if (TryMove(new Point(pathFinderNode4.X, pathFinderNode4.Z)) == MoveResult.Success)
2748 {
2749 return MoveResult.Success;
2750 }
2751 }
2752 return MoveResult.Fail;
2753 }
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:2629
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 9840 of file Chara.cs.

9841 {
9842 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9843 {
9844 return false;
9845 }
9846 if (TC.hp > (long)TC.MaxHP * (long)(Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) + Evalue(1426) * 5) / (TC.IsPowerful ? 200 : 100))
9847 {
9848 return false;
9849 }
9850 if (TC.HasElement(427))
9851 {
9852 return false;
9853 }
9854 if (TC.IsPC && EClass.player.invlunerable)
9855 {
9856 return false;
9857 }
9858 PlaySound("hit_finish");
9859 Say("finish");
9860 Say("finish2", this, TC);
9861 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9862 return false;
9863 }
@ harvest
bool invlunerable
Definition: Player.cs:1219
Definition: TC.cs:4

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

Referenced by ActEffect.Proc().

◆ TryNullifyCurse()

bool Chara.TryNullifyCurse ( )
inline

Definition at line 10314 of file Chara.cs.

10315 {
10316 if (IsPCParty)
10317 {
10318 foreach (Chara member in EClass.pc.party.members)
10319 {
10320 if (member.HasElement(1641) && EClass.rnd(3) != 0)
10321 {
10322 Msg.Say("curse_nullify", member);
10323 return true;
10324 }
10325 }
10326 }
10327 else if (HasElement(1641) && EClass.rnd(3) != 0)
10328 {
10329 Say("curse_nullify", this);
10330 return true;
10331 }
10332 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
10333 {
10334 Say("curse_nullify", this);
10335 return true;
10336 }
10337 return false;
10338 }

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

4500 {
4501 foreach (Card item in pos.ListCards())
4502 {
4503 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)))
4504 {
4505 Thing thing = Pick(item.Thing);
4506 if (thing != null && !IsPC)
4507 {
4508 thing.isNPCProperty = true;
4509 }
4510 break;
4511 }
4512 }
4513 }

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4431 of file Chara.cs.

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

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

4516 {
4517 if (!EClass._zone.TryAddThingInSharedContainer(t, containers) && dropIfFail)
4518 {
4519 EClass._zone.AddCard(t, pos);
4520 }
4521 }
bool TryAddThingInSharedContainer(Thing t, List< Thing > containers=null, bool add=true, bool msg=false, Chara chara=null, bool sharedOnly=true)
Definition: Zone.cs:2157

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

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

7524 {
7525 if (GetInt(113) != 0)
7526 {
7527 return;
7528 }
7529 _ListItems.Clear();
7530 Thing bestRangedWeapon = GetBestRangedWeapon();
7531 foreach (Thing thing in things)
7532 {
7533 if (!thing.IsAmmo && !thing.c_isImportant)
7534 {
7535 if (thing.category.slot != 0 && !thing.isEquipped && !thing.HasTag(CTAG.gift))
7536 {
7537 _ListItems.Add(thing);
7538 }
7539 else if (thing.IsRangedWeapon && thing.category.slot == 0 && bestRangedWeapon != thing)
7540 {
7541 _ListItems.Add(thing);
7542 }
7543 }
7544 }
7545 if (_ListItems.Count == 0)
7546 {
7547 return;
7548 }
7549 List<Thing> containers2 = containers.ToList();
7550 foreach (Thing listItem in _ListItems)
7551 {
7552 EClass._zone.TryAddThingInSharedContainer(listItem, containers2, add: true, msg: true, this);
7553 }
7554 }
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 4475 of file Chara.cs.

4476 {
4477 if (t.id == "axe")
4478 {
4479 Tutorial.Reserve("tool");
4480 }
4481 if (t.category.id == "mushroom")
4482 {
4483 Tutorial.Reserve("food");
4484 }
4485 if (t.category.id == "herb")
4486 {
4487 Tutorial.Reserve("herb");
4488 }
4489 if (t.id == "pasture")
4490 {
4491 Tutorial.Reserve("pasture");
4492 }
4493 if (t.id == "log")
4494 {
4495 Tutorial.Reserve("process");
4496 }
4497 }

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4759 of file Chara.cs.

4760 {
4761 isOnCreate = onCreate;
4762 if (onCreate || (!IsPCFaction && (base.IsUnique || trait is TraitAdventurer || trait is TraitGuard)))
4763 {
4764 RestockEquip((!EClass.core.IsGameStarted || !(EClass._zone is Zone_Music)) && onCreate);
4765 }
4766 RestockInventory(onCreate);
4767 }
void RestockInventory(bool onCreate)
Definition: Chara.cs:5090
void RestockEquip(bool onCreate)
Definition: Chara.cs:4769

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

6457 {
6458 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))
6459 {
6460 SetEnemy(c);
6461 }
6462 }

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

7562 {
7564 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7561

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

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

8753 {
8754 if (!EClass.debug.enable || IsPC || !IsGlobal || !IsPCFaction)
8755 {
8756 return;
8757 }
8758 for (int i = 0; i < 100; i++)
8759 {
8760 if (base.feat == 0)
8761 {
8762 break;
8763 }
8764 if (base.c_upgrades == null)
8765 {
8766 base.c_upgrades = new CharaUpgrade();
8767 }
8768 if (base.c_upgrades.halt)
8769 {
8770 break;
8771 }
8772 Rand.SetSeed(base.uid + base.c_upgrades.count);
8773 int num = EClass.rnd(100);
8774 int num2 = 0;
8775 int num3 = 1;
8776 int num4 = 0;
8777 bool flag = false;
8778 IEnumerable<SourceElement.Row> ie = EClass.sources.elements.rows.Where((SourceElement.Row a) => !elements.Has(a) && a.category == "skill" && !a.tag.Contains("noPet"));
8779 List<Element> list = ListAvailabeFeats(pet: true);
8780 if (num >= 90 && list.Count > 0)
8781 {
8782 Element element = list.RandomItem();
8783 num2 = element.id;
8784 num4 = element.CostLearn;
8785 }
8786 else if (num >= 60 && ie.Any())
8787 {
8788 num2 = ie.RandomItem().id;
8789 num4 = 3;
8790 }
8791 else
8792 {
8793 num2 = Element.List_MainAttributesMajor.RandomItem();
8794 num4 = 1;
8795 num3 = 2;
8796 flag = true;
8797 }
8798 Rand.SetSeed();
8799 if (num4 > base.feat)
8800 {
8801 break;
8802 }
8803 base.feat -= num4;
8804 base.c_upgrades.count++;
8805 base.c_upgrades.spent += num4;
8806 bool flag2 = false;
8807 if (flag)
8808 {
8809 foreach (CharaUpgrade.Item item in base.c_upgrades.items)
8810 {
8811 if (item.idEle == num2)
8812 {
8813 item.value += num3;
8814 item.cost += num4;
8815 flag2 = true;
8816 break;
8817 }
8818 }
8819 }
8820 if (!flag2)
8821 {
8822 base.c_upgrades.items.Add(new CharaUpgrade.Item
8823 {
8824 idEle = num2,
8825 value = num3,
8826 cost = num4
8827 });
8828 }
8829 SourceElement.Row row = EClass.sources.elements.map[num2];
8830 if (row.category == "feat")
8831 {
8832 SetFeat(num2, elements.ValueWithoutLink(num2) + 1, msg: true);
8833 }
8834 else if (elements.ValueWithoutLink(row.id) == 0)
8835 {
8836 elements.Learn(row.id);
8837 }
8838 else
8839 {
8840 elements.ModBase(num2, num3);
8841 }
8842 }
8843 }
List< Element > ListAvailabeFeats(bool pet=false, bool showAll=false)
Definition: Chara.cs:10075
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:44

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

8054 {
8055 if (t.id == "338" && t.blessedState >= BlessedState.Normal)
8056 {
8057 Thing thing = things.Find((Thing a) => a.IsEquipmentOrRanged && !a.isAcidproof);
8058 if (thing != null)
8059 {
8060 Say("dip", this, thing, t.GetName(NameStyle.Full, 1));
8061 SE.Change();
8062 t.trait.OnBlend(thing, this);
8063 return true;
8064 }
8065 return false;
8066 }
8067 if (t.IsNegativeGift || t.source.HasTag(CTAG.ignoreUse))
8068 {
8069 return false;
8070 }
8071 if (t.id == "cigar")
8072 {
8073 (t.trait as TraitItemProc).OnUse(this);
8074 return true;
8075 }
8076 if (t.trait.CanEat(this) && hunger.GetPhase() > ((IsPCFaction || IsPCFactionMinion) ? 2 : 0))
8077 {
8079 {
8080 target = t
8081 });
8082 return true;
8083 }
8084 if (t.trait.CanDrink(this))
8085 {
8086 Drink(t);
8087 return true;
8088 }
8089 if (t.trait.CanRead(this))
8090 {
8092 {
8093 target = t
8094 });
8095 return true;
8096 }
8097 if (base.hp < MaxHP * 90 / 100)
8098 {
8099 Action healAction = t.trait.GetHealAction(this);
8100 if (healAction != null)
8101 {
8102 healAction();
8103 return true;
8104 }
8105 }
8106 return false;
8107 }
bool isAcidproof
Definition: Card.cs:687
void SetAIImmediate(AIAct g)
Definition: Chara.cs:9113
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 9374 of file Chara.cs.

9375 {
9376 if (EClass.world.date.IsExpired(GetInt(51)))
9377 {
9378 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
9379 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
9380 homeBranch.expeditions.Add(expedition);
9381 return true;
9382 }
9383 return false;
9384 }
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 2411 of file Chara.cs.

2412 {
2413 base.c_uidMaster = 0;
2414 master = null;
2415 enemy = null;
2416 foreach (Chara chara in EClass._map.charas)
2417 {
2418 if (chara.enemy == this)
2419 {
2420 chara.SetEnemy();
2421 chara.ai.Cancel();
2422 }
2423 }
2424 ai.Cancel();
2425 Refresh();
2426 }

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

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

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3705 of file Chara.cs.

3706 {
3707 int num = 4;
3708 for (int i = -num; i < num + 1; i++)
3709 {
3710 for (int j = -num; j < num + 1; j++)
3711 {
3712 shared.Set(pos.x + i, pos.z + j);
3713 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3714 {
3715 _ = 1;
3716 }
3717 }
3718 }
3719 }
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 5909 of file Chara.cs.

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

5905 {
5906 return UseAbility(elements.GetElement(idAct)?.act ?? ACT.Create(idAct), tc, pos, pt);
5907 }

References ACT.Create().

◆ ValidateWorks()

void Chara.ValidateWorks ( )
inline

Definition at line 9422 of file Chara.cs.

9423 {
9424 _goalWork.FindWork(this, setAI: false);
9426 }
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 5375 of file Chara.cs.

5376 {
5377 base.c_vomit++;
5378 Say("vomit", this);
5379 PlaySound("vomit");
5380 if (!EClass._zone.IsRegion)
5381 {
5382 Thing thing = ThingGen.Create("731");
5384 {
5385 thing.MakeRefFrom(this);
5386 }
5387 EClass._zone.AddCard(thing, pos);
5388 }
5389 if (HasCondition<ConAnorexia>())
5390 {
5391 ModExp(70, -50);
5392 ModExp(71, -75);
5393 ModExp(77, -100);
5394 }
5395 else if (base.c_vomit > 10)
5396 {
5397 AddCondition<ConAnorexia>();
5398 }
5399 AddCondition<ConDim>();
5400 if (HasCondition<ConAnorexia>())
5401 {
5402 ModWeight(-1 * (1 + EClass.rnd(5)));
5403 }
5404 if (hunger.GetPhase() >= 4)
5405 {
5406 DamageHP(9999L, AttackSource.Hunger);
5407 }
5408 hunger.Mod(30);
5409 }
void ModWeight(int a, bool ignoreLimit=false)
Definition: Chara.cs:10003

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

3722 {
3723 for (int num = conditions.Count - 1; num >= 0; num--)
3724 {
3725 if (conditions[num].ConsumeTurn)
3726 {
3727 return true;
3728 }
3729 }
3730 return false;
3731 }

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

7441 {
7442 n.Clear();
7443 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
7444 SetImage(uIItem.image2);
7445 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
7446 n.AddText("");
7447 n.Build();
7448 }
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6316
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(), ListPeopleParty.JoinParty(), 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(), ListPeopleParty.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(), SetSortVal(), 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(), ListPeopleParty.CanJoinParty(), BaseGameScreen.Draw(), CoreDebug.Fix_RemoveDemitas(), BaseGameScreen.FocusPC(), GlobalGoalExplore.GetDestZone(), GlobalGoalVisitTown.GetDestZone(), Hobby.GetEfficiency(), IsEnemyOnPath(), Quest.IsVisibleOnQuestBoard(), ListPeopleParty.JoinParty(), CardManager.ListGlobalChara(), Region.ListTravelZones(), Player.MoveZone(), FactionBranch.OnAdvanceDay(), GlobalGoalAdv.OnAdvanceHour(), GlobalGoalVisitAndStay.OnAdvanceHour(), BaseListPeople.OnClick(), LayerNewZone.OnClickExit(), QuestDialog.OnDropReward(), Game.OnLoad(), Player.OnStartNewGame(), Scene.OnUpdate(), AM_BaseGameMode.OnUpdateInput(), ZoneEventWedding.OnVisit(), AttackProcess.PlayRangedAnime(), CoreDebug.QuickStart(), FactionBranch.Recruit(), ActorEx.Refresh(), ItemCulture.Refresh(), BaseGameScreen.RefreshPosition(), GameScreenElona.RefreshPosition(), WindowChara.RefreshProfile(), RefreshSpeed(), LayerGlobalMap.RefreshSummary(), ContentFaction.RefreshZones(), LayerFactions.RefreshZones(), LayerLocation.RefreshZones(), FactionBranch.RemoveMemeber(), ItemGeneral.SetChara(), ButtonChara.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(), UISearchPeople.Init(), 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(), ListPeopleParty.CanJoinParty(), 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(), 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(), ListPeopleParty.OnRefreshMenu(), 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(), Zone.OnActivate(), Zone_LittleGarden.OnActivate(), 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: