Elin Decompiled Documentation EA 23.285 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 6777 of file Chara.cs.

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

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

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

◆ _MakeAlly()

void Chara._MakeAlly ( )
inline

Definition at line 2352 of file Chara.cs.

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

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

Referenced by MakeAlly(), and MakePartyMemeber().

◆ _Move()

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

Reimplemented from Card.

Definition at line 2774 of file Chara.cs.

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

7383 {
7384 EClass.Sound.Play("pop_drama");
7385 if (book == "_chara" && IsPC)
7386 {
7387 step = "pc";
7388 }
7389 if (id == "lomias")
7390 {
7392 }
7393 return LayerDrama.Activate(book, sheet, step, this, null, tag);
7394 }
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 9447 of file Chara.cs.

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

9437 : Condition
9438 {
9439 return AddCondition(typeof(T).Name, p, force);
9440 }
string Name
Definition: Card.cs:2177

◆ AddCooldown()

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

Definition at line 8853 of file Chara.cs.

8854 {
8855 if (_cooldowns == null)
8856 {
8857 _cooldowns = new List<int>();
8858 }
8859 if (turns != 0)
8860 {
8861 _cooldowns.Add(idEle * 1000 + turns);
8862 return;
8863 }
8864 SourceElement.Row row = EClass.sources.elements.map[idEle];
8865 if (row.cooldown > 0)
8866 {
8867 _cooldowns.Add(idEle * 1000 + row.cooldown);
8868 }
8869 }
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 10346 of file Chara.cs.

10347 {
10348 if (!IsPCFaction || !IsGlobal)
10349 {
10350 _historyFood = null;
10351 return;
10352 }
10353 if (_historyFood == null)
10354 {
10355 _historyFood = new List<List<string>>
10356 {
10357 new List<string>()
10358 };
10359 }
10360 if (_historyFood[0].Count < 5)
10361 {
10362 _historyFood[0].Add(food.id);
10363 }
10364 }
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 9272 of file Chara.cs.

9273 {
9274 foreach (int hobby in _hobbies)
9275 {
9276 if (hobby == id)
9277 {
9278 return;
9279 }
9280 }
9281 _hobbies.Add(id);
9282 }
List< int > _hobbies
Definition: Chara.cs:49

◆ AddRandomBodyPart()

void Chara.AddRandomBodyPart ( bool  msg = false)
inline

Definition at line 2236 of file Chara.cs.

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

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

Referenced by Feat.Apply().

◆ AddResistCon()

void Chara.AddResistCon ( Condition  con)
inline

Definition at line 9856 of file Chara.cs.

9857 {
9858 if (con.power > 0 && con.GainResistFactor > 0)
9859 {
9860 int key = con.id;
9861 if (resistCon == null)
9862 {
9863 resistCon = new Dictionary<int, int>();
9864 }
9865 if (resistCon.ContainsKey(key))
9866 {
9867 resistCon[key] += con.power * con.GainResistFactor / 100;
9868 }
9869 else
9870 {
9871 resistCon[key] = con.power * con.GainResistFactor / 100;
9872 }
9873 }
9874 }
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 9284 of file Chara.cs.

9285 {
9286 foreach (int work in _works)
9287 {
9288 if (work == id)
9289 {
9290 return;
9291 }
9292 }
9293 _works.Add(id);
9294 }
List< int > _works
Definition: Chara.cs:52

◆ ApplyDeathPenalty()

void Chara.ApplyDeathPenalty ( )
inline

Definition at line 5343 of file Chara.cs.

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

References Lang._currency(), EClass._zone, Zone.AddCard(), ThingGen.CreateCurrency(), currency, ElementContainer.dict, Card.elements, Element.id, Element.IsMainAttribute, ElementContainer.ModExp(), EClass.pc, Card.pos, EClass.rnd(), and Msg.Say().

Referenced by Revive().

◆ ApplyEditorTags()

override void Chara.ApplyEditorTags ( EditorTag  tag)
inlinevirtual

Reimplemented from Card.

Definition at line 2071 of file Chara.cs.

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

References Card.bio, GetIdPortraitCat(), Portrait.GetRandomPortrait(), SetFeat(), and Biography.SetGender().

◆ ApplyJob()

void Chara.ApplyJob ( bool  remove = false)
inline

Definition at line 2198 of file Chara.cs.

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

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

Referenced by ChangeJob(), and OnCreate().

◆ ApplyRace()

void Chara.ApplyRace ( bool  remove = false)
inline

Definition at line 2284 of file Chara.cs.

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

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

Referenced by ChangeRace(), and OnCreate().

◆ Banish()

void Chara.Banish ( Chara  owner)
inline

Definition at line 2386 of file Chara.cs.

2387 {
2388 owner?.Say("summon_vanish", this);
2389 pos.PlayEffect("vanish");
2390 pos.PlaySound("vanish");
2391 pos.PlayEffect("teleport");
2392 Destroy();
2393 }
void Destroy()
Definition: Card.cs: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 2423 of file Chara.cs.

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

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

◆ CalcBurden()

void Chara.CalcBurden ( )
inline

Definition at line 1864 of file Chara.cs.

1865 {
1866 int num = base.ChildrenWeight * 100 / Mathf.Max(1, WeightLimit);
1867 if (num < 0)
1868 {
1869 num = 1000;
1870 }
1872 {
1873 num = 0;
1874 }
1875 burden.Set(num);
1876 SetDirtySpeed();
1877 }
override int WeightLimit
Definition: Chara.cs:724
bool ignoreWeight
Definition: CoreDebug.cs:187
static CoreDebug debug
Definition: EClass.cs:49
Stats Set(int[] _raw, int _rawIndex, Chara _CC)
Definition: Stats.cs:109

References burden, EClass.debug, CoreDebug.ignoreWeight, IsPC, Stats.Set(), SetDirtySpeed(), and WeightLimit.

Referenced by Scene.OnUpdate().

◆ CalcCastingChance()

int Chara.CalcCastingChance ( Element  e,
int  num = 1 
)
inline

Definition at line 6259 of file Chara.cs.

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

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

Referenced by Element._WriteNote().

◆ CalculateMaxStamina()

void Chara.CalculateMaxStamina ( )
inline

Definition at line 2052 of file Chara.cs.

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

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

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

◆ CallHelp()

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

Definition at line 6561 of file Chara.cs.

6562 {
6563 foreach (Chara chara in EClass._map.charas)
6564 {
6565 if (!chara.IsPCFaction && chara.OriginalHostility == OriginalHostility && (fanatic || Dist(chara) <= 6) && (EClass.rnd(3) != 0 || fanatic))
6566 {
6567 chara.GoHostile(tg);
6568 }
6569 }
6570 }
Hostility OriginalHostility
Definition: Chara.cs:473
void GoHostile(Card _tg)
Definition: Chara.cs:6455

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

8405 {
8406 if (things.IsFull())
8407 {
8408 return false;
8409 }
8410 if (t.c_isImportant)
8411 {
8412 return false;
8413 }
8414 if (t.id == "1084")
8415 {
8416 return true;
8417 }
8418 if (t.trait is TraitBookExp)
8419 {
8420 return true;
8421 }
8422 if (t.trait.CanOnlyCarry || !t.trait.CanBeDestroyed || t.trait.CanExtendBuild || t.rarity == Rarity.Artifact || t.IsContainer)
8423 {
8424 return false;
8425 }
8426 return true;
8427 }
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 8383 of file Chara.cs.

8384 {
8386 {
8387 return true;
8388 }
8389 if (!IsValidGiftWeight(t, num))
8390 {
8391 return false;
8392 }
8393 if (!skipImportantCheck && t.c_isImportant)
8394 {
8395 return false;
8396 }
8397 if ((t.category.IsChildOf("furniture") || t.category.IsChildOf("junk")) && !HasElement(1411))
8398 {
8399 return false;
8400 }
8401 return true;
8402 }
bool IsValidGiftWeight(Card t, int num=-1)
Definition: Chara.cs:8373

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

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

◆ CanAutoPick()

bool Chara.CanAutoPick ( Card  c)
inline

Definition at line 4333 of file Chara.cs.

4334 {
4335 return true;
4336 }

◆ CanBeTempAlly()

bool Chara.CanBeTempAlly ( Chara  c)
inline

Definition at line 2373 of file Chara.cs.

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

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

Referenced by GoalCombat.Run().

◆ CanBloom()

bool Chara.CanBloom ( )
inline

Definition at line 8836 of file Chara.cs.

8837 {
8838 if (IsPC || base.isScaled || HasElement(1273))
8839 {
8840 return false;
8841 }
8842 if (!EClass.debug.godMode)
8843 {
8844 if (base.c_daysWithPC > 360)
8845 {
8846 return affinity.CanSleepBeside();
8847 }
8848 return false;
8849 }
8850 return true;
8851 }
bool CanSleepBeside()
Definition: Affinity.cs:79
Affinity affinity
Definition: Chara.cs:316
bool godMode
Definition: CoreDebug.cs:173

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

Referenced by WindowCharaMini.Refresh().

◆ CanDestroyPath()

bool Chara.CanDestroyPath ( )
inline

Definition at line 2482 of file Chara.cs.

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

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

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

◆ CanDuplicate()

bool Chara.CanDuplicate ( )
inline

Definition at line 1792 of file Chara.cs.

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

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

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

◆ CanEat()

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

Definition at line 7762 of file Chara.cs.

7763 {
7764 if (t.IsDecayed && !HasElement(480))
7765 {
7766 return false;
7767 }
7768 if (HasElement(1250) && !t.HasElement(710))
7769 {
7770 return false;
7771 }
7772 if (shouldEat && (!(t.trait is TraitFoodPrepared) || t.c_isImportant))
7773 {
7774 return false;
7775 }
7776 if (!t.IsNegativeGift && !t.HasTag(CTAG.ignoreUse) && !t.isEquipped)
7777 {
7778 return t.trait.CanEat(this);
7779 }
7780 return false;
7781 }
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 7934 of file Chara.cs.

7935 {
7936 return !body.IsTooHeavyToEquip(t);
7937 }
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168

References CharaBody.IsTooHeavyToEquip().

Referenced by GoalAutoCombat.TryUseRanged().

◆ CanInsult()

bool Chara.CanInsult ( )
inline

Definition at line 8304 of file Chara.cs.

8305 {
8306 foreach (ActList.Item item in ability.list.items)
8307 {
8308 if (item.act.id == 6630)
8309 {
8310 return true;
8311 }
8312 }
8313 return false;
8314 }
List< Item > items
Definition: ActList.cs:14
ActList list
Definition: CharaAbility.cs:12
CharaAbility ability
Definition: Chara.cs:426

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

◆ CanInteractTo() [1/2]

bool Chara.CanInteractTo ( Card  c)
inline

Definition at line 2589 of file Chara.cs.

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

References CanInteractTo(), and Card.pos.

Referenced by ActPlan._Update(), CanInteractTo(), ActMelee.CanPerform(), AI_Goto.IsDestinationReached(), and ActPlan.Item.Perform().

◆ CanInteractTo() [2/2]

bool Chara.CanInteractTo ( Point  p)
inline

Definition at line 2594 of file Chara.cs.

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

References EClass._map, Algorithms.WeightCell.blocked, Map.cells, IsMultisize, Point.IsValid, Card.pos, Algorithms.WeightCell.weights, Point.x, and Point.z.

◆ CanLift()

bool Chara.CanLift ( Card  c)
inline

Definition at line 4328 of file Chara.cs.

4329 {
4330 return true;
4331 }

Referenced by HotItemNoItem._TrySetAct().

◆ CanMoveTo()

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

Definition at line 2495 of file Chara.cs.

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

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

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

◆ CanPick()

bool Chara.CanPick ( Card  c)
inline

Definition at line 4338 of file Chara.cs.

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

References Point.Distance(), Card.ExistsOnMap, Card.GetRootCard(), Card.isDestroyed, Card.pos, and Card.Thing.

Referenced by ActPlan._Update().

◆ CanReplace()

bool Chara.CanReplace ( Chara  c)
inline

Definition at line 3337 of file Chara.cs.

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

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

Referenced by _Move(), and CanMoveTo().

◆ CanRevive()

bool Chara.CanRevive ( )
inline

Definition at line 5211 of file Chara.cs.

5212 {
5213 return EClass.world.date.IsExpired(base.c_dateDeathLock);
5214 }
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 2207 of file Chara.cs.

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

References _job, ApplyJob(), IsPCC, and pccData.

Referenced by CoreDebug.ChangeJob(), CoreDebug.Fix_EtherDisease(), UICharaMaker.ListJob(), CoreDebug.QuickStart(), and UICharaMaker.RerollJob().

◆ ChangeMemberType()

void Chara.ChangeMemberType ( FactionMemberType  type)
inline

Definition at line 7179 of file Chara.cs.

7180 {
7181 memberType = type;
7182 }
FactionMemberType memberType
Definition: Chara.cs:46

◆ ChangeRace()

void Chara.ChangeRace ( string  idNew)
inline

Definition at line 2317 of file Chara.cs.

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

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

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

◆ ChangeRarity()

override void Chara.ChangeRarity ( Rarity  r)
inlinevirtual

Reimplemented from Card.

Definition at line 1440 of file Chara.cs.

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

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

Referenced by ZonePreEnterBout.Execute().

◆ ChooseNewGoal()

void Chara.ChooseNewGoal ( )
inline

Definition at line 8943 of file Chara.cs.

8944 {
8945 if (IsPC && EClass.AdvMode)
8946 {
8947 SetNoGoal();
8948 return;
8949 }
8950 if (IsPCParty || base.noMove)
8951 {
8952 SetAI(new GoalIdle());
8953 return;
8954 }
8955 if ((IsHomeMember() && IsInHomeZone()) || IsGuest())
8956 {
8957 Goal goalFromTimeTable = GetGoalFromTimeTable(EClass.world.date.hour);
8958 if (goalFromTimeTable != null)
8959 {
8960 SetAI(goalFromTimeTable);
8961 if (goalFromTimeTable is GoalWork)
8962 {
8963 goalFromTimeTable.Tick();
8964 }
8965 return;
8966 }
8967 }
8968 if (goalList.index == -2)
8969 {
8971 }
8972 SetAI(goalList.Next());
8973 }
Status Tick()
Definition: AIAct.cs:366
Goal GetGoalFromTimeTable(int hour)
Definition: Chara.cs:8975
GoalListType goalListType
Definition: Chara.cs:281
AIAct SetNoGoal()
Definition: Chara.cs:9067
bool IsHomeMember()
Definition: Chara.cs:6726
bool IsGuest()
Definition: Chara.cs:6751
GoalList goalList
Definition: Chara.cs:202
bool IsInHomeZone()
Definition: Chara.cs:6731
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 7469 of file Chara.cs.

7470 {
7471 if (map == null)
7472 {
7473 map = EClass._map;
7474 }
7475 foreach (Card item in map.props.installed.all)
7476 {
7477 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7478 {
7479 traitBed.RemoveHolder(this);
7480 }
7481 }
7482 }
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 8715 of file Chara.cs.

8716 {
8717 int num = 0;
8718 for (int num2 = things.Count - 1; num2 >= 0; num2--)
8719 {
8720 Thing thing = things[num2];
8721 if (ShouldThrowAway(thing, type))
8722 {
8723 num += thing.GetPrice(CurrencyType.Money, sell: true, PriceType.Default, this) * thing.Num;
8724 thing.Destroy();
8725 }
8726 }
8727 if (num > 0)
8728 {
8729 ModCurrency(num);
8730 if (type == ClearInventoryType.SellAtTown)
8731 {
8732 Msg.Say("party_sell", this, num.ToString() ?? "");
8733 PlaySound("pay");
8734 }
8735 }
8736 }
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:8644

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

10561 {
10562 if (tempElements != null)
10563 {
10565 tempElements = null;
10566 }
10567 }
ElementContainer tempElements
Definition: Chara.cs:36
void SetParent(Card c)

References ElementContainer.SetParent().

◆ CountDebuff()

int Chara.CountDebuff ( )
inline

Definition at line 9632 of file Chara.cs.

9633 {
9634 int num = 0;
9635 foreach (Condition condition in conditions)
9636 {
9637 if (condition.Type == ConditionType.Debuff)
9638 {
9639 num++;
9640 }
9641 }
9642 return num;
9643 }

References BaseStats.Type.

Referenced by GoalCombat.TryUseAbility().

◆ CountNumEaten()

int Chara.CountNumEaten ( Thing  food)
inline

Definition at line 10366 of file Chara.cs.

10367 {
10368 if (_historyFood == null)
10369 {
10370 return -1;
10371 }
10372 int num = 0;
10373 foreach (List<string> item in _historyFood)
10374 {
10375 foreach (string item2 in item)
10376 {
10377 if (item2 == food.id)
10378 {
10379 num++;
10380 }
10381 }
10382 }
10383 return num;
10384 }

References food, and item.

Referenced by FoodEffect.Proc().

◆ CreateReplacement()

Chara Chara.CreateReplacement ( )
inline

Definition at line 8183 of file Chara.cs.

8184 {
8185 Chara chara = CharaGen.Create(id);
8186 chara.c_originalHostility = base.c_originalHostility;
8187 if (chara.c_originalHostility != 0)
8188 {
8189 chara.hostility = chara.c_originalHostility;
8190 }
8191 if (orgPos != null)
8192 {
8193 chara.orgPos = orgPos.Copy();
8194 }
8195 chara.pos = pos.Copy();
8196 chara.isImported = true;
8197 chara.c_editorTags = base.c_editorTags;
8198 chara.c_editorTraitVal = base.c_editorTraitVal;
8199 chara.c_idTrait = base.c_idTrait;
8200 chara.homeZone = homeZone;
8201 return chara;
8202 }
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 6351 of file Chara.cs.

6352 {
6353 Talk("goodBoy");
6354 Say(headpat ? "headpat" : "cuddle", this, c);
6355 c.ShowEmo(Emo.love);
6356 if (EClass.rnd(IsPC ? 100 : 5000) == 0)
6357 {
6358 c.MakeEgg();
6359 }
6360 if (headpat && this != c)
6361 {
6362 if (c.interest > 0)
6363 {
6364 c.ModAffinity(EClass.pc, 1 + EClass.rnd(3));
6365 c.interest -= 20 + EClass.rnd(10);
6366 }
6368 {
6369 foreach (Chara member in party.members)
6370 {
6371 if (!member.IsPC && CanSeeLos(member))
6372 {
6373 member.AddCondition<ConEuphoric>(100 + Evalue(6904) * 5);
6374 }
6375 }
6376 }
6377 }
6378 if (c.Evalue(1221) > 0)
6379 {
6380 int ele = ((c.MainElement == Element.Void) ? 924 : c.MainElement.id);
6381 if (c.id == "hedgehog_ether")
6382 {
6383 ele = 922;
6384 }
6385 Say("reflect_thorne", this, c);
6386 DamageHP(10L, ele, Power, AttackSource.Condition);
6387 }
6388 }
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:8105
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 9695 of file Chara.cs.

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

9645 : Condition
9646 {
9647 T condition = GetCondition<T>();
9648 if (condition != null)
9649 {
9650 condition.value -= v;
9651 if (condition.value <= 0)
9652 {
9653 condition.Kill();
9654 }
9655 }
9656 }
override T GetCondition< T >()
Definition: Chara.cs:9658

◆ CureHost()

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

Definition at line 9682 of file Chara.cs.

9683 {
9684 if (parasite != null)
9685 {
9686 parasite.Cure(type, p, state);
9687 }
9688 if (ride != null)
9689 {
9690 ride.Cure(type, p, state);
9691 }
9692 Cure(type, p, state);
9693 }
void Cure(CureType type, int p=100, BlessedState state=BlessedState.Normal)
Definition: Chara.cs:9695

References Cure().

Referenced by FactionBranch.DailyOutcome().

◆ CureTempElements()

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

Definition at line 10530 of file Chara.cs.

10531 {
10532 if (tempElements != null)
10533 {
10534 if (body)
10535 {
10537 }
10538 if (mind)
10539 {
10541 }
10542 }
10543 void Cure(int[] eles)
10544 {
10545 foreach (int ele in eles)
10546 {
10547 if (tempElements == null)
10548 {
10549 break;
10550 }
10551 Element element = tempElements.GetElement(ele);
10552 if (element != null && element.vBase < 0)
10553 {
10554 ModTempElement(ele, Mathf.Clamp(p / 20 + EClass.rnd(p / 20), 1, -element.vBase));
10555 }
10556 }
10557 }
10558 }
void ModTempElement(int ele, int a, bool naturalDecay=false, bool onlyRenew=false)
Definition: Chara.cs:10438
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 10496 of file Chara.cs.

10497 {
10498 ModTempElement(ele, onlyRenew ? (-p / 20) : (-(p / 100 + EClass.rnd(p / 100 + 1) + 1)), naturalDecay: false, onlyRenew);
10499 }

References EClass.rnd().

◆ DamageTempElements()

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

Definition at line 10484 of file Chara.cs.

10485 {
10486 if (body)
10487 {
10488 DamageTempElement(Element.List_Body.RandomItem(), p, onlyRenew);
10489 }
10490 if (mind)
10491 {
10492 DamageTempElement(Element.List_Mind.RandomItem(), p, onlyRenew);
10493 }
10494 }
void DamageTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10496

References Element.List_Body, and Element.List_Mind.

◆ DestroyPath()

void Chara.DestroyPath ( Point  pos)
inline

Definition at line 3226 of file Chara.cs.

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

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

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

◆ Die()

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

Reimplemented from Card.

Definition at line 5406 of file Chara.cs.

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

References EClass._map, EClass._zone, ConfigAutoCombat.abortOnAllyDead, ConfigAutoCombat.abortOnEnemyDead, Zone.AddCard(), AddCondition(), Player.Stats.allyDeath, Game.Config.autoCombat, Game.cards, Map.charas, EClass.Colors, Game.config, CharaGen.Create(), CharaGen.CreateFromFilter(), Map.deadCharas, Player.deathMsg, Debug, Player.doneBackers, enemy, Zone.events, faith, ThingContainer.Find(), CardManager.GlobalCharaList.Find(), EClass.game, Effect.Get(), Steam.GetAchievement(), CardManager.globalCharas, LangGame.Has(), Party.HasElement(), Zone.HasLaw, SourceRace.Row.id, Zone.instance, IsHostile(), IsPCParty, Card.IsUnique, Player.little_dead, FactionBranch.Log(), Card.LV, MakeMinion(), ColorProfile.matColors, ModAffinity(), Player.ModKarma(), Spatial.Name, NameBraced, Religion.NameShort, ZoneEventManager.OnCharaDie(), OriginalHostility, GameLang.Parse(), party, EClass.pc, Effect.Play(), EClass.player, ActEffect.ProcAt(), Map.props, Religion.recentWrath, Zone.RefreshDeathSentense(), Party.RemoveMember(), FactionBranch.RemoveMemeber(), Tutorial.Reserve(), Zone.ResetHostility(), Religion.Revelation(), EClass.rnd(), PropsManager.sales, Msg.Say(), Card.Say(), WidgetPopText.Say(), ThirstPersonInfo.Set(), Msg.SetColor(), Card.SetLv(), AI_Slaughter.slaughtering, CellEffect.source, Player.stats, Card.things, Msg.thirdPerson1, Player.TryAbortAutoCombat(), ActRide.Unride(), and Element.Void.

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

◆ DiminishTempElements()

void Chara.DiminishTempElements ( int  a = 1)
inline

Definition at line 10515 of file Chara.cs.

10516 {
10517 if (tempElements == null)
10518 {
10519 return;
10520 }
10521 foreach (Element item in tempElements.dict.Values.ToList())
10522 {
10523 if (item.vBase > 0)
10524 {
10525 ModTempElement(item.id, -Mathf.Min(item.vBase * 5 / 100 + 1, item.vBase), naturalDecay: true);
10526 }
10527 }
10528 }

References ElementContainer.dict, and item.

◆ Divorce()

void Chara.Divorce ( Chara  c)
inline

Definition at line 8257 of file Chara.cs.

8258 {
8259 if (base.c_love != null)
8260 {
8261 base.c_love.dateMarriage = 0;
8262 base.c_love.dateWedding = 0;
8263 SetFeat(1275, 0);
8265 }
8266 }
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 6339 of file Chara.cs.

6340 {
6341 SetAI(new DynamicAIAct("", delegate
6342 {
6343 onPerform();
6344 return true;
6345 })
6346 {
6347 wait = wait
6348 });
6349 }

◆ DoHostileAction()

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

Definition at line 6479 of file Chara.cs.

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

5201 {
5202 Say("drink", this, t.Duplicate(1));
5203 Say("quaff");
5204 PlaySound("drink");
5205 hunger.Mod(-2);
5206 t.ModNum(-1);
5207 t.trait.OnDrink(this);
5208 _ = IsPC;
5209 }
Thing Duplicate(int num)
Definition: Card.cs:3526
void ModNum(int a, bool notify=true)
Definition: Card.cs:3597
Stats hunger
Definition: Chara.cs:1168
virtual void OnDrink(Chara c)
Definition: Trait.cs:1018

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

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

◆ DropHeld()

Card Chara.DropHeld ( Point  dropPos = null)
inline

Definition at line 4672 of file Chara.cs.

4673 {
4674 if (held == null)
4675 {
4676 return null;
4677 }
4678 if (IsPC)
4679 {
4680 WidgetHotbar.dirtyCurrentItem = true;
4682 }
4683 Card card = EClass._zone.AddCard(held, dropPos ?? pos);
4684 card.OnLand();
4685 if (card.trait.CanOnlyCarry)
4686 {
4687 card.SetPlaceState(PlaceState.installed);
4688 }
4689 return card;
4690 }
PlaceState
Definition: PlaceState.cs:2
Card held
Definition: Chara.cs:70
static void SetDirty(Thing t)

References EClass._zone, Zone.AddCard(), card, LayerInventory.SetDirty(), and Card.Thing.

Referenced by Card.Destroy(), TaskMoveInstalled.OnProgressComplete(), AI_Cook.Run(), AI_Offer.Run(), AI_ReleaseHeld.Run(), and AIAct.Start().

◆ DropThing()

void Chara.DropThing ( Thing  t,
int  num = -1 
)
inline

Definition at line 4692 of file Chara.cs.

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

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

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

◆ Duplicate()

Chara Chara.Duplicate ( )
inline

Definition at line 1817 of file Chara.cs.

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

10511 {
10512 ModTempElement(ele, onlyRenew ? (p / 20) : (p / 100 + EClass.rnd(p / 100 + 1)), naturalDecay: false, onlyRenew);
10513 }

References EClass.rnd().

◆ EnhanceTempElements()

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

Definition at line 10501 of file Chara.cs.

10502 {
10503 int[] array = (body ? Element.List_Body : Element.List_Mind);
10504 foreach (int ele in array)
10505 {
10506 EnhanceTempElement(ele, p, onlyRenew);
10507 }
10508 }
void EnhanceTempElement(int ele, int p, bool onlyRenew=false)
Definition: Chara.cs:10510

References Element.List_Mind.

◆ EQ_CAT()

void Chara.EQ_CAT ( string  s)
inline

Definition at line 5177 of file Chara.cs.

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

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

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

5194 {
5195 SetEQQuality();
5196 Thing t = ThingGen.Create(s, -1, base.LV).SetNum(num);
5197 AddThing(t);
5198 }
Thing SetNum(int a)
Definition: Card.cs:3577

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

◆ EvalueRiding()

int Chara.EvalueRiding ( )
inline

Definition at line 6250 of file Chara.cs.

6251 {
6252 if (ride != null && ride.HasCondition<ConTransmuteBroom>() && HasElement(1417))
6253 {
6254 return 25 + Evalue(226) * 125 / 100;
6255 }
6256 return Evalue(226);
6257 }

References HasCondition().

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

◆ FallFromZone()

void Chara.FallFromZone ( )
inline

Definition at line 3558 of file Chara.cs.

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

References EClass._zone, Spatial.FindZone(), Zone.GetTopZone(), Spatial.lv, Spatial.Name, EClass.pc, World.region, Msg.Say(), and EClass.world.

Referenced by ActPlan._Update(), and TaskDig.OnProgressComplete().

◆ FindAmmo()

Thing Chara.FindAmmo ( Thing  weapon)
inline

Definition at line 7985 of file Chara.cs.

7986 {
7987 TraitToolRange ranged = weapon.trait as TraitToolRange;
7988 Thing thing = (IsPC ? EClass.pc.things.Find<TraitQuiver>() : null);
7989 if (thing != null)
7990 {
7991 Thing thing2 = thing.things.Find((Thing t) => ranged.IsAmmo(t));
7992 if (thing2 != null)
7993 {
7994 return thing2;
7995 }
7996 }
7997 return things.Find((Thing t) => ranged.IsAmmo(t));
7998 }
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 7484 of file Chara.cs.

7485 {
7486 foreach (Card item in EClass._map.props.installed.all)
7487 {
7488 if (item.trait is TraitBed traitBed && traitBed.IsHolder(this))
7489 {
7490 return traitBed;
7491 }
7492 }
7493 return null;
7494 }

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

7717 {
7718 Thing result = null;
7719 int num = -1;
7720 if (IsPC)
7721 {
7722 return null;
7723 }
7724 foreach (Thing item in things.List((Thing t) => CanEat(t, shouldEat: true) && !t.c_isImportant, onlyAccessible: true))
7725 {
7726 int num2 = CountNumEaten(item);
7727 int num3 = 100 - num2 + (item.HasElement(757) ? 10 : 0);
7728 if (num3 > num)
7729 {
7730 result = item;
7731 num = num3;
7732 }
7733 }
7734 return result;
7735 }
bool CanEat(Thing t, bool shouldEat=false)
Definition: Chara.cs:7762
int CountNumEaten(Thing food)
Definition: Chara.cs:10366
List< Thing > List(Func< Thing, bool > func, bool onlyAccessible=false)

References Card.c_isImportant, and item.

Referenced by AI_Idle.Run().

◆ FindMaster()

Chara Chara.FindMaster ( )
inline

Definition at line 2457 of file Chara.cs.

2458 {
2459 if (IsMinion)
2460 {
2461 master = EClass._map.FindChara(base.c_uidMaster);
2462 }
2463 return master;
2464 }
Chara FindChara(string id)
Definition: Map.cs:2568

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

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

◆ FindNearestNewEnemy()

bool Chara.FindNearestNewEnemy ( )
inline

Definition at line 6645 of file Chara.cs.

6646 {
6647 for (int i = 0; i < EClass._map.charas.Count; i++)
6648 {
6649 Chara chara = EClass._map.charas[i];
6650 if (chara != this && chara != enemy && chara.mimicry == null && IsHostile(chara) && Dist(chara) <= 1 && CanInteractTo(chara.pos))
6651 {
6652 DoHostileAction(chara);
6653 enemy = chara;
6654 return true;
6655 }
6656 }
6657 return false;
6658 }
ConTransmuteMimic mimicry
Definition: Chara.cs:106
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6479

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

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

8101 {
8102 return FindBed()?.owner.pos.cell.room;
8103 }
TraitBed FindBed()
Definition: Chara.cs:7484

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

10282 {
10283 Element orCreateElement = elements.GetOrCreateElement(ele);
10284 if (orCreateElement.ValueWithoutLink == 0)
10285 {
10286 elements.ModBase(orCreateElement.id, 1);
10287 }
10288 if (orCreateElement is Spell)
10289 {
10290 int num = EClass.curve(Evalue(307), 50, 20) + (HasElement(307) ? 20 : 0);
10291 int num2 = origin?.Evalue(765) ?? 0;
10292 num = num * (100 - num2) / 100;
10293 int a = mtp * orCreateElement.source.charge * (100 + num) / 100 / 100;
10294 a = Mathf.Max(1, EClass.rndHalf(a));
10295 if (orCreateElement.source.charge == 1)
10296 {
10297 a = 1;
10298 }
10299 orCreateElement.vPotential += a;
10300 }
10301 Say("spell_gain", this, orCreateElement.Name);
10302 LayerAbility.SetDirty(orCreateElement);
10303 }
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 7421 of file Chara.cs.

7422 {
7423 string result = "?????";
7424 if (ai != null)
7425 {
7426 result = ai.GetCurrentActionText();
7427 }
7428 return result;
7429 }
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 8035 of file Chara.cs.

8036 {
8037 if (body.GetWeight(armorOnly: true) <= (HasElement(1204) ? 6000 : 30000))
8038 {
8039 return 120;
8040 }
8041 return 122;
8042 }
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 8000 of file Chara.cs.

8001 {
8002 Thing result = null;
8003 int num = 0;
8004 foreach (Thing thing in things)
8005 {
8006 if (thing.IsRangedWeapon && CanEquipRanged(thing) && thing.GetEquipValue() > num)
8007 {
8008 num = thing.GetEquipValue();
8009 result = thing;
8010 }
8011 }
8012 return result;
8013 }
int GetEquipValue()
Definition: Card.cs:7405
bool IsRangedWeapon
Definition: Card.cs:2283
bool CanEquipRanged(Thing t)
Definition: Chara.cs:7934

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

◆ GetBuffStats() [1/2]

Element Chara.GetBuffStats ( int  ele)
inline

Definition at line 9620 of file Chara.cs.

9621 {
9622 for (int i = 0; i < conditions.Count; i++)
9623 {
9624 if (conditions[i] is ConBuffStats conBuffStats && conBuffStats.refVal == ele)
9625 {
9626 return conBuffStats.elements.GetElement(ele);
9627 }
9628 }
9629 return null;
9630 }

References BaseCondition.refVal.

◆ GetBuffStats() [2/2]

Element Chara.GetBuffStats ( string  alias)
inline

Definition at line 9615 of file Chara.cs.

9616 {
9617 return GetBuffStats(EClass.sources.elements.alias[alias].id);
9618 }
Element GetBuffStats(string alias)
Definition: Chara.cs:9615

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

9659 {
9660 for (int i = 0; i < conditions.Count; i++)
9661 {
9662 if (conditions[i] is T)
9663 {
9664 return conditions[i] as T;
9665 }
9666 }
9667 return null;
9668 }

◆ GetCooldown()

int Chara.GetCooldown ( int  idEle)
inline

Definition at line 8909 of file Chara.cs.

8910 {
8911 if (_cooldowns != null)
8912 {
8913 for (int i = 0; i < _cooldowns.Count; i++)
8914 {
8915 if (_cooldowns[i] / 1000 == idEle)
8916 {
8917 return _cooldowns[i] % 1000;
8918 }
8919 }
8920 }
8921 return 0;
8922 }

Referenced by NotificationCooldown.OnRefresh().

◆ GetCurrentDir()

int Chara.GetCurrentDir ( )
inline

Definition at line 3678 of file Chara.cs.

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

References Debug.

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

◆ GetDestination()

Point Chara.GetDestination ( )
inline

Definition at line 7396 of file Chara.cs.

7397 {
7398 return (ai.IsRunning ? ai.GetDestination() : pos).Copy();
7399 }
virtual bool IsRunning
Definition: AIAct.cs:31
virtual Point GetDestination()
Definition: AIAct.cs:139

References Point.Copy(), AIAct.GetDestination(), and AIAct.IsRunning.

Referenced by AI_Idle.Run().

◆ GetFavArmorSkill()

Element Chara.GetFavArmorSkill ( )
inline

Definition at line 4745 of file Chara.cs.

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

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

◆ GetFavAttackStyle()

AttackStyle Chara.GetFavAttackStyle ( )
inline

Definition at line 4720 of file Chara.cs.

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

Referenced by WindowChara.RefreshNote().

◆ GetFavCat()

SourceCategory.Row Chara.GetFavCat ( )
inline

Definition at line 8224 of file Chara.cs.

8225 {
8226 SourceCategory.Row r = null;
8227 if (_listFavCat.Count == 0)
8228 {
8229 foreach (SourceCategory.Row row in EClass.sources.categories.rows)
8230 {
8231 if (row.gift > 0)
8232 {
8233 _listFavCat.Add(row);
8234 }
8235 }
8236 }
8237 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8238 {
8239 r = _listFavCat.RandomItem();
8240 });
8241 return r;
8242 }
static List< SourceCategory.Row > _listFavCat
Definition: Chara.cs:196
int seed
Definition: Game.cs:201
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:22

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

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

◆ GetFavFood()

SourceThing.Row Chara.GetFavFood ( )
inline

Definition at line 8204 of file Chara.cs.

8205 {
8206 if (_listFavFood.Count == 0)
8207 {
8208 foreach (SourceThing.Row row in EClass.sources.things.rows)
8209 {
8210 if (row._origin == "dish" && row.value != 0 && row.chance != 0)
8211 {
8212 _listFavFood.Add(row);
8213 }
8214 }
8215 }
8216 SourceThing.Row r = null;
8217 Rand.UseSeed(base.uid + EClass.game.seed, delegate
8218 {
8219 r = _listFavFood.RandomItem();
8220 });
8221 return r;
8222 }
static List< SourceThing.Row > _listFavFood
Definition: Chara.cs:194
SourceThing things

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

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

◆ GetFavWeaponSkill()

Element Chara.GetFavWeaponSkill ( )
inline

Definition at line 4740 of file Chara.cs.

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

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

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

◆ GetFirstStep()

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

Definition at line 2643 of file Chara.cs.

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

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

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

◆ GetGoalFromTimeTable()

Goal Chara.GetGoalFromTimeTable ( int  hour)
inline

Definition at line 8975 of file Chara.cs.

8976 {
8977 if (IsPC)
8978 {
8979 return null;
8980 }
8981 switch (TimeTable.GetSpan(idTimeTable, hour))
8982 {
8983 case TimeTable.Span.Sleep:
8985 {
8986 return new GoalSleep();
8987 }
8988 break;
8989 case TimeTable.Span.Eat:
8990 return new GoalIdle();
8991 case TimeTable.Span.Work:
8992 if (IsGuest())
8993 {
8994 return new GoalIdle();
8995 }
8996 return GetGoalWork();
8997 case TimeTable.Span.Free:
8998 if (IsGuest())
8999 {
9000 return new GoalIdle();
9001 }
9002 return GetGoalHobby();
9003 }
9004 return null;
9005 }
Goal GetGoalWork()
Definition: Chara.cs:9007
Goal GetGoalHobby()
Definition: Chara.cs:9020
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 9020 of file Chara.cs.

9021 {
9022 if (IsPrisoner)
9023 {
9024 return new GoalIdle();
9025 }
9026 if (memberType == FactionMemberType.Livestock)
9027 {
9028 return new GoalGraze();
9029 }
9030 return new GoalHobby();
9031 }
FactionMemberType
bool IsPrisoner
Definition: Chara.cs:1052

Referenced by Zone.Simulate().

◆ GetGoalWork()

Goal Chara.GetGoalWork ( )
inline

Definition at line 9007 of file Chara.cs.

9008 {
9009 if (IsPrisoner)
9010 {
9011 return new GoalIdle();
9012 }
9013 if (memberType == FactionMemberType.Livestock)
9014 {
9015 return new GoalGraze();
9016 }
9017 return new GoalWork();
9018 }

Referenced by Zone.Simulate().

◆ GetHappiness()

int Chara.GetHappiness ( )
inline

Definition at line 7406 of file Chara.cs.

7407 {
7408 int num = 50;
7409 if (FindBed() != null)
7410 {
7411 num += 50;
7412 }
7413 return num;
7414 }

◆ GetHireCost()

int Chara.GetHireCost ( )
inline

Definition at line 7401 of file Chara.cs.

7402 {
7403 return base.LV / 2 + 4;
7404 }

Referenced by CalcGold.Hire().

◆ GetHoverText()

override string Chara.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 6908 of file Chara.cs.

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

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

8331 {
8332 if (id == "olderyoungersister")
8333 {
8334 if (base.idSkin != 2)
8335 {
8336 return "UN_olderyoungersister";
8337 }
8338 return "UN_olderyoungersister_alt";
8339 }
8340 if (Portrait.allIds.Contains("UN_" + id + ".png"))
8341 {
8342 return "UN_" + id;
8343 }
8344 return base.c_idPortrait;
8345 }
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 8316 of file Chara.cs.

8317 {
8318 string text = race.id;
8319 if ((text == "mifu" || text == "nefu") && EClass.rnd(2) == 0)
8320 {
8321 return "foxfolk";
8322 }
8323 if (trait is TraitGuard)
8324 {
8325 return "guard";
8326 }
8327 return "";
8328 }

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

7175 {
7176 return GetSprite();
7177 }
override Sprite GetSprite(int dir=0)
Definition: Chara.cs:6826

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

8269 {
8270 using (List<Chara>.Enumerator enumerator = pos.ListCharasInRadius(this, 3, (Chara c) => c != this && c.race.id == "cat").GetEnumerator())
8271 {
8272 if (enumerator.MoveNext())
8273 {
8274 return enumerator.Current;
8275 }
8276 }
8277 return null;
8278 }
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 10386 of file Chara.cs.

10387 {
10388 if (base._IsPC)
10389 {
10390 return 10 + (int)(Mathf.Sqrt(base.c_daysWithGod) * 2f + (float)Evalue(85)) / 2;
10391 }
10392 return 10 + (int)(Mathf.Sqrt(base.LV) * 5f + (float)Evalue(306)) / 2;
10393 }

◆ GetRevived()

void Chara.GetRevived ( )
inline

Definition at line 5216 of file Chara.cs.

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

9115 {
9116 BaseArea result = null;
9117 foreach (Hobby item in ListWorks())
9118 {
9119 AIWork aI = item.GetAI(this);
9120 if (aI.SetDestination())
9121 {
9122 if (aI.destArea != null)
9123 {
9124 result = aI.destArea;
9125 }
9126 else if (aI.destThing != null)
9127 {
9128 result = aI.destThing.pos.cell.room;
9129 }
9130 break;
9131 }
9132 }
9133 return result;
9134 }
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 6826 of file Chara.cs.

6827 {
6828 if (IsPCC)
6829 {
6830 PCC pCC = PCC.Get(pccData);
6831 pCC.Build();
6832 return pCC.variation.idle[0, 0];
6833 }
6834 if (spriteReplacer != null)
6835 {
6836 return spriteReplacer.data.GetSprite();
6837 }
6838 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);
6839 }
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 6850 of file Chara.cs.

6851 {
6852 if (IsPCC)
6853 {
6855 {
6857 }
6858 }
6859 else if (conSleep != null && host == null && pos.Equals(EClass.pc.pos) && IsHuman && (GetBool(123) || affinity.CanSleepBeside()))
6860 {
6861 return EClass.setting.pass.subDead;
6862 }
6863 return SubPassData.Default;
6864 }
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 7416 of file Chara.cs.

7417 {
7418 return GetHappiness().ToString() ?? "";
7419 }
int GetHappiness()
Definition: Chara.cs:7406

◆ GetTextHobby()

string Chara.GetTextHobby ( bool  simple = false)
inline

Definition at line 9252 of file Chara.cs.

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

References item.

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

◆ GetTextWork()

string Chara.GetTextWork ( bool  simple = false)
inline

Definition at line 9262 of file Chara.cs.

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

References item.

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

◆ GetTopicText()

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

Definition at line 7080 of file Chara.cs.

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

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

◆ GetTotalFeat()

int Chara.GetTotalFeat ( )
inline

Definition at line 8290 of file Chara.cs.

8291 {
8292 int num = 0;
8293 if (base.c_upgrades != null)
8294 {
8295 num += base.c_upgrades.spent;
8296 }
8297 if (base.c_genes != null)
8298 {
8299 num += base.c_genes.GetTotalCost();
8300 }
8301 return num + base.feat;
8302 }

◆ GetWork()

Hobby Chara.GetWork ( string  id)
inline

Definition at line 9183 of file Chara.cs.

9184 {
9185 foreach (Hobby item in ListWorks())
9186 {
9187 if (item.source.alias == id)
9188 {
9189 return item;
9190 }
9191 }
9192 foreach (Hobby item2 in ListHobbies())
9193 {
9194 if (item2.source.alias == id)
9195 {
9196 return item2;
9197 }
9198 }
9199 return null;
9200 }
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 9335 of file Chara.cs.

9336 {
9337 if (_workSummary == null)
9338 {
9339 _workSummary = new WorkSummary();
9340 }
9341 return _workSummary;
9342 }
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 8429 of file Chara.cs.

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

8563 {
8564 c.Say("give_love", c, t);
8565 c.PlaySound(t.material.GetSoundDead());
8566 c.ShowEmo(Emo.angry);
8567 c.ModAffinity(EClass.pc, -20, show: false);
8568 c.Talk("pervert");
8569 t.Destroy();
8570 }

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

6456 {
6457 if (enemy == null && !IsPC)
6458 {
6459 if (GetInt(106) == 0)
6460 {
6461 TalkTopic("aggro");
6462 }
6463 if (OriginalHostility != Hostility.Enemy)
6464 {
6465 ShowEmo(Emo.angry);
6466 }
6467 SetEnemy(_tg.Chara);
6468 }
6470 {
6471 if (hostility >= Hostility.Neutral)
6472 {
6473 Say("angry", this);
6474 }
6475 hostility = Hostility.Enemy;
6476 }
6477 }
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 9603 of file Chara.cs.

9604 {
9605 for (int i = 0; i < conditions.Count; i++)
9606 {
9607 if (conditions[i].source.alias == alias)
9608 {
9609 return true;
9610 }
9611 }
9612 return false;
9613 }

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

9592 {
9593 for (int i = 0; i < conditions.Count; i++)
9594 {
9595 if (conditions[i] is T)
9596 {
9597 return true;
9598 }
9599 }
9600 return false;
9601 }

◆ HasCooldown()

bool Chara.HasCooldown ( int  idEle)
inline

Definition at line 8904 of file Chara.cs.

8905 {
8906 return GetCooldown(idEle) != 0;
8907 }
int GetCooldown(int idEle)
Definition: Chara.cs:8909

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

9034 {
9035 int num = EClass.sources.hobbies.alias.TryGetValue(alias)?.id ?? 0;
9036 listHobby.Clear();
9037 if (_works == null || _hobbies == null)
9038 {
9039 RerollHobby();
9040 }
9041 foreach (int work in _works)
9042 {
9043 if (work == num)
9044 {
9045 return true;
9046 }
9047 }
9048 foreach (int hobby in _hobbies)
9049 {
9050 if (hobby == num)
9051 {
9052 return true;
9053 }
9054 }
9055 return false;
9056 }
static List< Hobby > listHobby
Definition: Chara.cs:13
void RerollHobby(bool extraSlotChance=true)
Definition: Chara.cs:9296
SourceHobby hobbies

References SourceManager.hobbies, and EClass.sources.

Referenced by AI_Idle.Run().

◆ HasMinion()

bool Chara.HasMinion ( string  id)
inline

Definition at line 2439 of file Chara.cs.

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

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

Referenced by ActEffect.ProcAt().

◆ HealAll()

void Chara.HealAll ( )
inline

Definition at line 1750 of file Chara.cs.

1751 {
1752 Cure(CureType.HealComplete);
1753 base.hp = MaxHP;
1754 mana.value = mana.max;
1755 stamina.value = stamina.max;
1756 Refresh();
1757 }
virtual int max
Definition: Stats.cs:68

References Cure(), mana, Stats.max, MaxHP, Refresh(), and stamina.

Referenced by ZoneInstanceBout.OnLeaveZone().

◆ HoldCard()

void Chara.HoldCard ( Card  t,
int  num = -1 
)
inline

Definition at line 4540 of file Chara.cs.

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

References BaseCard.GetBool(), Card.GetLightRadius(), Card.GetRootCard(), Card.IsAliveInCurrentZone, Card.isChara, Card.isDestroyed, Card.isNPCProperty, Player.ModKarma(), Card.Num, Pick, EClass.player, EClass.rnd(), LayerInventory.SetDirty(), Card.ShowEmo(), Card.Split(), and Card.Thing.

Referenced by HotItemNoItem._TrySetAct(), Recipe.Craft(), RecipeCard.Craft(), HotItemHeld.OnSetCurrentItem(), UIInventory.RefreshList(), AI_Drink.Run(), AI_Eat.Run(), AI_Read.Run(), Player.SetCurrentHotItem(), and InvOwner.TryHold().

◆ InitStats()

void Chara.InitStats ( bool  onDeserialize = false)
inline

Definition at line 9419 of file Chara.cs.

9420 {
9421 if (!onDeserialize)
9422 {
9423 _cints[10] = 20;
9424 _cints[11] = 70;
9425 _cints[13] = 70;
9426 _cints[14] = 70;
9427 _cints[15] = 70;
9428 _cints[17] = 0;
9429 _cints[18] = 0;
9430 }
9431 foreach (Condition condition in conditions)
9432 {
9433 condition.SetOwner(this, onDeserialize);
9434 }
9435 }
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 7737 of file Chara.cs.

7738 {
7739 if (t == null)
7740 {
7741 t = FindBestFoodToEat();
7742 }
7743 if (t == null)
7744 {
7745 t = things.Find((Thing a) => CanEat(a, shouldEat: true) && !a.c_isImportant);
7746 }
7747 if (t == null)
7748 {
7749 t = things.Find((Thing a) => CanEat(a) && !a.c_isImportant);
7750 }
7751 if (t != null)
7752 {
7753 Say("eat_start", this, t.Duplicate(1));
7754 if (sound)
7755 {
7756 PlaySound("eat");
7757 }
7758 FoodEffect.Proc(this, t);
7759 }
7760 }
Thing FindBestFoodToEat()
Definition: Chara.cs:7716
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 6717 of file Chara.cs.

6718 {
6719 if (faction == EClass.Home)
6720 {
6721 return homeZone == EClass.game.activeZone;
6722 }
6723 return false;
6724 }
Faction faction
Definition: Chara.cs:429
Zone activeZone
Definition: Game.cs:252

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

◆ IsCriticallyWounded()

bool Chara.IsCriticallyWounded ( bool  includeRide = false)
inline

Definition at line 1203 of file Chara.cs.

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

References Card.Evalue(), host, mana, Stats.max, and MaxHP.

Referenced by AM_Adv._OnUpdateInput(), GoalAutoCombat.GetActPlanColor(), GoalAutoCombat.GoalAutoCombat(), and Party.IsCriticallyWounded().

◆ IsEnemyOnPath()

bool Chara.IsEnemyOnPath ( Point  p,
bool  cancelAI = true 
)
inline

Definition at line 2566 of file Chara.cs.

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

References ai, TraitChara.CanBePushed, AIAct.Cancel(), CellDetail.charas, currentZone, Point.detail, IsHostile(), Spatial.IsRegion, Point.IsValid, mimicry, EClass.pc, and trait.

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

◆ IsEscorted()

bool Chara.IsEscorted ( )
inline

Definition at line 2466 of file Chara.cs.

2467 {
2468 if (!IsPCPartyMinion)
2469 {
2470 return false;
2471 }
2472 foreach (Quest item in EClass.game.quests.list)
2473 {
2474 if (item is QuestEscort questEscort && questEscort.uidChara == base.uid)
2475 {
2476 return true;
2477 }
2478 }
2479 return false;
2480 }
int uidChara
Definition: QuestEscort.cs:6

References EClass.game, IsPCPartyMinion, item, QuestManager.list, Game.quests, and QuestEscort.uidChara.

Referenced by ActPlan._Update(), and QuestManager.HasFarAwayEscort().

◆ IsFriendOrAbove() [1/2]

bool Chara.IsFriendOrAbove ( )
inline

◆ IsFriendOrAbove() [2/2]

bool Chara.IsFriendOrAbove ( Chara  c)
inline

Definition at line 6761 of file Chara.cs.

6762 {
6763 if (base.IsPCFactionOrMinion || IsFriendOrAbove())
6764 {
6766 {
6767 return true;
6768 }
6769 }
6770 else if (IsHostile() && c.IsHostile())
6771 {
6772 return true;
6773 }
6774 return false;
6775 }

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

◆ IsGuest()

◆ IsHomeMember()

◆ IsHostile() [1/2]

◆ IsHostile() [2/2]

bool Chara.IsHostile ( Chara  c)
inline

Definition at line 6665 of file Chara.cs.

6666 {
6667 if (c == null)
6668 {
6669 return false;
6670 }
6671 if (base.IsPCFactionOrMinion)
6672 {
6673 if ((c == EClass.pc.enemy && !c.IsPCFactionOrMinion) || c.hostility <= Hostility.Enemy)
6674 {
6675 return true;
6676 }
6677 }
6678 else
6679 {
6681 {
6682 return true;
6683 }
6684 if (OriginalHostility >= Hostility.Friend)
6685 {
6686 if (hostility <= Hostility.Enemy && c.IsPCFactionOrMinion)
6687 {
6688 return true;
6689 }
6690 if (c.hostility <= Hostility.Enemy && c.OriginalHostility == Hostility.Enemy)
6691 {
6692 return true;
6693 }
6694 }
6695 else if (OriginalHostility <= Hostility.Enemy && (c.IsPCFactionOrMinion || (c.OriginalHostility != Hostility.Enemy && c.hostility >= Hostility.Friend)))
6696 {
6697 return true;
6698 }
6699 }
6700 if (id == "unicorn" && (Evalue(418) < 0 || (c.HasElement(1216) && c.Evalue(418) < 1)))
6701 {
6702 return true;
6703 }
6704 return false;
6705 }
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 6731 of file Chara.cs.

6732 {
6733 return EClass.game.activeZone == currentZone;
6734 }

Referenced by BaseListPeople.IsDisabled().

◆ IsInSpot< T >()

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

Definition at line 6736 of file Chara.cs.

6736 : TraitSpot
6737 {
6738 foreach (T item in EClass._map.props.installed.traits.List<T>())
6739 {
6740 foreach (Point item2 in item.ListPoints())
6741 {
6742 if (pos.Equals(item2))
6743 {
6744 return true;
6745 }
6746 }
6747 }
6748 return false;
6749 }
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 6707 of file Chara.cs.

6708 {
6709 return hostility == Hostility.Neutral;
6710 }

Referenced by ActPlan._Update().

◆ IsNeutralOrAbove()

bool Chara.IsNeutralOrAbove ( )
inline

◆ IsValidGiftWeight()

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

Definition at line 8373 of file Chara.cs.

8374 {
8375 int num2 = ((!HasElement(1411)) ? 1 : 3);
8376 if (GetBurden(t, num) >= num2)
8377 {
8378 return false;
8379 }
8380 return true;
8381 }
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 6390 of file Chara.cs.

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

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

9164 {
9165 listHobby.Clear();
9166 if (!useMemberType || memberType != FactionMemberType.Livestock)
9167 {
9168 if (_hobbies == null)
9169 {
9170 RerollHobby();
9171 }
9172 foreach (int hobby in _hobbies)
9173 {
9174 listHobby.Add(new Hobby
9175 {
9176 id = hobby
9177 });
9178 }
9179 }
9180 return listHobby;
9181 }

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

9137 {
9138 listHobby.Clear();
9139 if (useMemberType && memberType == FactionMemberType.Livestock)
9140 {
9141 listHobby.Add(new Hobby
9142 {
9143 id = 45
9144 });
9145 }
9146 else
9147 {
9148 if (_works == null)
9149 {
9150 RerollHobby();
9151 }
9152 foreach (int work in _works)
9153 {
9154 listHobby.Add(new Hobby
9155 {
9156 id = work
9157 });
9158 }
9159 }
9160 return listHobby;
9161 }

Referenced by FactionBranch.DailyOutcome(), FactionBranch.GetResidentTax(), GoalWork.GetWorks(), FactionBranch.RefreshEfficiency(), UIHomeInfo.RefreshReport(), and TraitWhipLove.TrySetHeldAct().

◆ LookAt() [1/2]

◆ LookAt() [2/2]

override void Chara.LookAt ( Point  p)
inlinevirtual

Reimplemented from Card.

Definition at line 3597 of file Chara.cs.

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

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

◆ MakeAlly()

void Chara.MakeAlly ( bool  msg = true)
inline

Definition at line 2332 of file Chara.cs.

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

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

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

◆ MakeBraineCell()

Thing Chara.MakeBraineCell ( )
inline

Definition at line 8352 of file Chara.cs.

8353 {
8354 return DNA.GenerateGene(this, DNA.Type.Brain);
8355 }
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 8347 of file Chara.cs.

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

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

5324 {
5325 if (!EClass._zone.IsRegion)
5326 {
5327 List<string> list = new List<string> { "930", "931", "947", "948", "949", "950", "951", "952" };
5328 if (IsPC && EClass.rnd(2) == 0 && EClass.pc.things.Find("letter_will") != null)
5329 {
5330 list = new List<string> { "944", "946", "backerGrave", "backerGrave2" };
5331 }
5332 Thing thing = ThingGen.Create(list.RandomItem());
5333 thing.MakeRefFrom(this);
5334 if (!lastword.IsEmpty())
5335 {
5336 thing.c_note = lastword;
5337 }
5338 thing.isModified = true;
5339 EClass._zone.AddCard(thing, pos).Install();
5340 }
5341 }
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 2395 of file Chara.cs.

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

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

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

◆ MakePartyMemeber()

void Chara.MakePartyMemeber ( )
inline

Definition at line 2326 of file Chara.cs.

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

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

◆ Marry()

void Chara.Marry ( Chara  c)
inline

Definition at line 8244 of file Chara.cs.

8245 {
8246 if (base.c_love == null)
8247 {
8248 base.c_love = new LoveData();
8249 }
8250 base.c_love.dateMarriage = EClass.world.date.GetRaw();
8251 base.c_love.uidZoneMarriage = EClass._zone.uid;
8252 base.c_love.nameZoneMarriage = EClass._zone.Name;
8253 SetFeat(1275, 1, msg: true);
8255 }
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 8105 of file Chara.cs.

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

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

9973 {
9974 if (!HasElement(450))
9975 {
9976 long num = bio.height;
9977 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
9978 if (num < 1)
9979 {
9980 num = 1L;
9981 }
9982 if (num > 999999999)
9983 {
9984 num = 999999999L;
9985 }
9986 if (num != bio.height)
9987 {
9988 bio.height = (int)num;
9989 Say((a > 0) ? "height_gain" : "height_lose", this);
9990 }
9991 }
9992 }
int height
Definition: Biography.cs:53

◆ ModTempElement()

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

Definition at line 10438 of file Chara.cs.

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

9995 {
9996 if (HasElement(450) || a == 0)
9997 {
9998 return;
9999 }
10000 long num = bio.weight;
10001 long num2 = bio.height;
10002 long num3 = num2 * num2 * 18 / 25000;
10003 long num4 = num2 * num2 * 24 / 10000;
10004 if (ignoreLimit || (num > num3 && num < num4))
10005 {
10006 num = num * (100 + a) / 100 + ((a > 0) ? 1 : (-1));
10007 if (num < 1)
10008 {
10009 num = 1L;
10010 }
10011 if (num > 999999999)
10012 {
10013 num = 999999999L;
10014 }
10015 if (num != bio.weight)
10016 {
10017 bio.weight = (int)num;
10018 Say((a > 0) ? "weight_gain" : "weight_lose", this);
10019 }
10020 }
10021 }
int weight
Definition: Biography.cs:41

Referenced by FoodEffect.Proc().

◆ MoveByForce()

void Chara.MoveByForce ( Point  newPoint,
Card  c = null,
bool  checkWall = false 
)
inline

Definition at line 2680 of file Chara.cs.

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

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

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

◆ MoveHome() [1/2]

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

◆ MoveHome() [2/2]

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

Definition at line 3513 of file Chara.cs.

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

References Zone.AddCard(), Point.GetNearestPoint(), Zone.IsActiveZone, party, EClass.pc, FactionBranch.policies, Party.RemoveMember(), Revive, PolicyManager.Validate(), and Point.x.

◆ MoveNeighborDefinitely()

bool Chara.MoveNeighborDefinitely ( )
inline

Definition at line 2662 of file Chara.cs.

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

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

Referenced by AI_Idle.Run().

◆ MoveRandom()

bool Chara.MoveRandom ( )
inline

Definition at line 2648 of file Chara.cs.

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

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

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

◆ MoveZone() [1/3]

◆ MoveZone() [2/3]

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

Definition at line 3386 of file Chara.cs.

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

References EClass._map, EClass._zone, Zone.AddCard(), RoomManager.AssignCharas(), Card.c_minionType, Card.c_uidMaster, Map.charas, EInput.Consume(), Player.deathZoneMove, EClass.debug, Debug, Card.Dist(), enemy, SpatialManager.Find(), FindMaster(), EClass.game, Zone.GetSpawnPos(), Zone.GetTopZone(), homeZone, Card.id, Spatial.id, CoreDebug.ignoreAutoSave, Zone.instance, Zone.IsActiveZone, isDead, IsGlobal, Card.isNPCProperty, Zone.IsPCFaction, Card.IsPCFactionOrMinion, IsPCPartyMinion, Spatial.IsRegion, item, Party.leader, Player.listCarryoverMap, master, Party.members, MoveZone(), Spatial.Name, ZoneInstance.OnLeaveZone(), Card.parent, EClass.pc, EClass.player, Zone.RemoveCard(), Player.returnInfo, ZoneInstance.ReturnState, Map.rooms, Game.Save(), Msg.Say(), Player.simulatingZone, Game.spatials, ZoneInstance.uidZone, Zone.WillAutoSave, and ZoneInstance.x.

◆ MoveZone() [3/3]

void Chara.MoveZone ( Zone  z,
ZoneTransition::EnterState  state = ZoneTransition::EnterState::Auto 
)
inline

Definition at line 3378 of file Chara.cs.

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

◆ MutateRandom()

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

Definition at line 10182 of file Chara.cs.

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

10332 {
10333 if (_historyFood != null)
10334 {
10335 while (_historyFood.Count > 5)
10336 {
10337 _historyFood.RemoveAt(_historyFood.Count - 1);
10338 }
10339 if (_historyFood[0].Count > 0)
10340 {
10341 _historyFood.Insert(0, new List<string>());
10342 }
10343 }
10344 }

Referenced by GameDate.AdvanceDay().

◆ OnBanish()

void Chara.OnBanish ( )
inline

Definition at line 1475 of file Chara.cs.

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

References Debug, SpatialManager.Find(), EClass.game, Card.HasTag(), IsGlobal, item, ThingContainer.List(), Region.ListTowns(), SpatialManager.map, memberType, MoveHome(), MoveZone(), EClass.pc, PickOrDrop(), Card.pos, World.region, SetHomeZone(), Game.spatials, Card.things, trait, UniqueData.uidZone, EClass.world, UniqueData.x, and UniqueData.y.

Referenced by FactionBranch.BanishMember().

◆ OnBeforeCreate()

override void Chara.OnBeforeCreate ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1542 of file Chara.cs.

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

References Card.bp, CardBlueprint.idJob, CardBlueprint.idRace, SourceManager.jobs, source, and EClass.sources.

◆ OnCreate()

override void Chara.OnCreate ( int  genLv)
inlinevirtual

Reimplemented from Card.

Definition at line 1558 of file Chara.cs.

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

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

◆ OnDeserialized()

override void Chara.OnDeserialized ( )
inlineprotectedvirtual

Reimplemented from Card.

Definition at line 1353 of file Chara.cs.

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

References _cints, ElementContainer.ApplyElementMap(), body, bossText, Card.elements, global, GlobalData.goal, InitStats(), isCreated, IsPCC, job, race, Refresh(), RefreshFaithElement(), EClass.rnd(), GlobalGoal.SetOwner(), CharaBody.SetOwner(), ElementContainer.SetParent(), sharedCheckTurn, source, tempElements, and UpdateAngle().

◆ OnGiveErohon()

void Chara.OnGiveErohon ( Thing  t)
inline

Definition at line 8551 of file Chara.cs.

8552 {
8553 Say("give_erohon", this);
8554 AddCondition<ConParalyze>(50, force: true);
8555 AddCondition<ConConfuse>(50, force: true);
8556 AddCondition<ConFear>(1000, force: true);
8557 ModAffinity(EClass.pc, 100);
8558 t.Destroy();
8559 Talk("pervert");
8560 }

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

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

◆ OnInsulted()

void Chara.OnInsulted ( )
inline

Definition at line 8357 of file Chara.cs.

8358 {
8359 if (!isDead)
8360 {
8361 if (HasElement(1231))
8362 {
8363 Talk("insulted");
8364 AddCondition<ConEuphoric>(100 * Evalue(1231));
8365 }
8366 else if (EClass.rnd(20) == 0)
8367 {
8368 SetFeat(1231, 1, msg: true);
8369 }
8370 }
8371 }

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

9935 {
9936 if (days < 1)
9937 {
9938 days = 1;
9939 }
9940 int num = power * days;
9941 if (stamina.value < 0)
9942 {
9943 stamina.Set(1);
9944 }
9945 if (isWeakToSunlight && isSunLit)
9946 {
9947 base.hp = 0;
9948 if (mana.value > 0)
9949 {
9950 mana.Set(0);
9951 }
9952 AddCondition<ConBurning>(1000, force: true);
9953 }
9954 else
9955 {
9956 HealHP(num);
9957 stamina.Mod(10 + 25 * num / 100 * (100 + elements.GetFeatRef(1642)) / 100);
9958 mana.Mod(num);
9959 }
9960 if (IsPCFaction)
9961 {
9962 hunger.Mod(20);
9963 }
9964 sleepiness.Set(0);
9965 if (!IsMinion)
9966 {
9967 interest = 100;
9968 }
9969 Cure(CureType.Sleep, power);
9970 }
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 9914 of file Chara.cs.

9915 {
9916 bool isSunLit = pos.IsSunLit;
9917 TraitPillow traitPillow = pos.FindThing<TraitPillow>();
9918 int num = bed?.Power ?? 20;
9919 if (traitPillow != null)
9920 {
9921 num += traitPillow.owner.Power / 2;
9922 }
9923 if (bed != null)
9924 {
9925 num += bed.Evalue(750) * 5;
9926 if (bed.trait is TraitBedCoffin)
9927 {
9928 isSunLit = false;
9929 }
9930 }
9931 OnSleep(num, days, isSunLit);
9932 }
void OnSleep(Thing bed=null, int days=1)
Definition: Chara.cs:9914
Thing FindThing(Func< Thing, bool > func)
Definition: Point.cs:1140

References bed.

Referenced by LayerSleep.Advance().

◆ ParseBodySlot()

int Chara.ParseBodySlot ( string  s)
inlineprivate

Definition at line 2219 of file Chara.cs.

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

Referenced by ApplyRace(), and ResetBody().

◆ PerformWork()

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

Definition at line 9377 of file Chara.cs.

9378 {
9379 Hobby hobby = new Hobby();
9380 hobby.id = session.id;
9381 WorkSummary workSummary = _workSummary;
9382 hobby.GetAI(this).OnPerformWork(IsRealTime);
9383 if (!isHobby)
9384 {
9385 workSummary.progress += EClass.rnd(5) + 5;
9386 }
9387 int num = PerformWork(hobby, 0, isHobby);
9388 int num2 = PerformWork(hobby, 1, isHobby);
9389 int num3 = PerformWork(hobby, 2, isHobby);
9390 int num4 = PerformWork(hobby, 3, isHobby);
9391 workSummary.money += num;
9392 workSummary.food += num2;
9393 workSummary.knowledge += num3;
9394 workSummary.material += num4;
9395 int PerformWork(Hobby work, int idx, bool isHobby)
9396 {
9397 if (idx >= work.source.resources.Length)
9398 {
9399 return 0;
9400 }
9401 int num5 = work.source.resources[idx];
9402 int num6 = num5;
9403 num5 = Rand.Range(num5 * (100 - work.source.resources[idx]) / 100, num5);
9404 num5 = num5 * (isHobby ? 50 : 100) * session.efficiency / 10000;
9405 if (num6 > 0 && num5 <= 0)
9406 {
9407 num5 = 1;
9408 }
9409 return num5;
9410 }
9411 }
virtual void OnPerformWork(bool realtime)
Definition: AIWork.cs:150
void PerformWork(WorkSession session, bool isHobby=false, bool IsRealTime=false)
Definition: Chara.cs:9377
AIWork GetAI(Chara c)
Definition: Hobby.cs:12
static int Range(int min, int max)
Definition: Rand.cs:42
int efficiency
Definition: WorkSession.cs:28

References WorkSession.efficiency, Hobby.GetAI(), WorkSession.id, if(), AIWork.OnPerformWork(), Rand.Range(), EClass.rnd(), and Hobby.source.

◆ Pick()

Thing Chara.Pick ( Thing  t,
bool  msg = true,
bool  tryStack = true 
)
inline

Definition at line 4376 of file Chara.cs.

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

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

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

◆ PickHeld()

void Chara.PickHeld ( bool  msg = false)
inline

Definition at line 4595 of file Chara.cs.

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

References Trait.CanOnlyCarry, card, Card.GetRootCard(), Card.invY, Card.isChara, Card.IsHotItem, EClass.pc, Pick, LayerInventory.SetDirty(), Card.Thing, Card.trait, and Card.TryStack().

Referenced by ActPlan._Update(), AIAct.Cancel(), HotItemHeld.OnUnselect(), Player.ResetCurrentHotItem(), AI_Idle.Run(), Player.SetCurrentHotItem(), AIAct.Start(), and InvOwner.TryHold().

◆ PickOrDrop() [1/2]

void Chara.PickOrDrop ( Point  p,
string  idThing,
int  idMat = -1,
int  num = 1,
bool  msg = true 
)
inline

Definition at line 4356 of file Chara.cs.

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

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

Referenced by Map.MineObj(), OnBanish(), TraitBook.OnRead(), ConSuspend.OnRemoved(), TraitMannequin.OnUse(), FoodEffect.Proc(), TraitCanvas.TrySetAct(), and Map.TrySmoothPick().

◆ PickOrDrop() [2/2]

void Chara.PickOrDrop ( Point  p,
Thing  t,
bool  msg = true 
)
inline

Definition at line 4364 of file Chara.cs.

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

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

◆ Refresh()

void Chara.Refresh ( bool  calledRecursive = false)
inline

Definition at line 1759 of file Chara.cs.

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

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

Referenced by ElementContainerFaction.CheckDirty(), CharaBody.Equip(), Condition.Kill(), Game.OnLoad(), Player.OnLoad(), Player.OnStartNewGame(), Refresh(), CharaGenes.Remove(), ActRide.Ride(), CharaBody.Unequip(), and ActRide.Unride().

◆ RefreshFaithElement()

void Chara.RefreshFaithElement ( )
inline

Definition at line 10395 of file Chara.cs.

10396 {
10397 if (faithElements != null)
10398 {
10400 }
10402 if (idFaith == "eyth" && !HasElement(1228))
10403 {
10404 return;
10405 }
10406 SourceReligion.Row row = EClass.sources.religions.map.TryGetValue(idFaith);
10407 if (row == null)
10408 {
10409 return;
10410 }
10412 if (!HasCondition<ConExcommunication>())
10413 {
10414 SourceElement.Row row2 = EClass.sources.elements.alias.TryGetValue("featGod_" + row.id + "1");
10415 if (row2 != null)
10416 {
10417 faithElements.SetBase(row2.id, 1);
10418 }
10419 int[] array = row.elements;
10420 int num = GetPietyValue() * (120 + Evalue(1407) * 15 + Evalue(1228) * 20) / 100;
10421 for (int i = 0; i < array.Length; i += 2)
10422 {
10423 int num2 = array[i + 1] * num / 50;
10424 if (array[i] == 79)
10425 {
10426 num2 = EClass.curve(num2, array[i + 1] * 2, 10, 50);
10427 }
10428 if (num2 >= 20 && array[i] >= 950 && array[i] < 970)
10429 {
10430 num2 = 20;
10431 }
10432 faithElements.SetBase(array[i], Mathf.Max(num2, 1));
10433 }
10434 }
10436 }
string idFaith
Definition: Chara.cs:233
ElementContainer faithElements
Definition: Chara.cs:38
int GetPietyValue()
Definition: Chara.cs:10386
Element SetBase(string alias, int v, int potential=0)
SourceReligion religions

References EClass.curve(), SourceManager.elements, SourceReligion.Row.elements, SourceElement.Row.id, SourceReligion.Row.id, SourceManager.religions, ElementContainer.SetBase(), ElementContainer.SetParent(), and EClass.sources.

Referenced by TraitAltar._OnOffer(), Religion.JoinFaith(), Religion.LeaveFaith(), Player.OnAdvanceDay(), Skill.OnChangeValue(), Player.OnCreateGame(), OnDeserialized(), ConExcommunication.OnRefresh(), ConExcommunication.OnRemoved(), and SetFaith().

◆ RefreshSpeed()

void Chara.RefreshSpeed ( Element::BonusInfo  info = null)
inline

Definition at line 1905 of file Chara.cs.

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

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

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

◆ RefreshWorkElements()

void Chara.RefreshWorkElements ( ElementContainer  parent = null)
inline

Definition at line 9202 of file Chara.cs.

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

9820 {
9821 for (int num = conditions.Count - 1; num >= 0; num--)
9822 {
9823 Condition condition = conditions[num];
9824 if (condition.Type == ConditionType.Stance)
9825 {
9826 condition.Kill();
9827 }
9828 }
9829 }

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

Referenced by CharaGenes.Remove().

◆ RemoveCondition< T >()

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

Definition at line 9670 of file Chara.cs.

9670 : Condition
9671 {
9672 for (int num = conditions.Count - 1; num >= 0; num--)
9673 {
9674 if (conditions[num] is T)
9675 {
9676 conditions[num].Kill();
9677 break;
9678 }
9679 }
9680 }

References Condition.Kill().

◆ RemoveGlobal()

void Chara.RemoveGlobal ( )
inline

◆ RemoveLastBodyPart()

void Chara.RemoveLastBodyPart ( bool  msg = false)
inline

Definition at line 2247 of file Chara.cs.

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

References body, BodySlot.elementId, Element.Get(), Card.PlaySound(), CharaBody.RemoveBodyPartAt(), Card.Say(), and CharaBody.slots.

Referenced by TraitFoodEggFertilized.Incubate().

◆ RequestProtection()

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

Definition at line 8572 of file Chara.cs.

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

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

9297 {
9298 if (_hobbies != null && _works != null)
9299 {
9300 _hobbies.Clear();
9301 _works.Clear();
9302 }
9303 else
9304 {
9305 _hobbies = new List<int>();
9306 _works = new List<int>();
9307 }
9308 if (source.hobbies.IsEmpty())
9309 {
9310 AddHobby(EClass.sources.hobbies.listHobbies.RandomItem().id);
9311 }
9312 else
9313 {
9314 string[] hobbies = source.hobbies;
9315 foreach (string key in hobbies)
9316 {
9317 AddHobby(EClass.sources.hobbies.alias[key].id);
9318 }
9319 }
9320 if (source.works.IsEmpty())
9321 {
9322 AddWork(EClass.sources.hobbies.listWorks.RandomItem().id);
9323 }
9324 else
9325 {
9326 string[] hobbies = source.works;
9327 foreach (string key2 in hobbies)
9328 {
9329 AddWork(EClass.sources.hobbies.alias[key2].id);
9330 }
9331 }
9333 }
WorkSummary GetWorkSummary()
Definition: Chara.cs:9335
void AddWork(int id)
Definition: Chara.cs:9284
void AddHobby(int id)
Definition: Chara.cs:9272
List< Row > listWorks
Definition: SourceHobby.cs:64
List< Row > listHobbies
Definition: SourceHobby.cs:61
void Reset()
Definition: WorkSummary.cs:78

References SourceChara.Row.hobbies, SourceManager.hobbies, SourceHobby.listHobbies, SourceHobby.listWorks, EClass.sources, and SourceChara.Row.works.

Referenced by OnCreate().

◆ ResetBody()

void Chara.ResetBody ( )
inline

Definition at line 2261 of file Chara.cs.

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

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

◆ ResetUpgrade()

void Chara.ResetUpgrade ( )
inline

Definition at line 8738 of file Chara.cs.

8739 {
8740 _ = base.c_upgrades;
8741 }

Referenced by CoreDebug.ResetPetUpgrades().

◆ ResistCon()

void Chara.ResistCon ( Condition  con)
inline

Definition at line 9876 of file Chara.cs.

9877 {
9878 if (con.power > 0 && resistCon != null)
9879 {
9880 int a = ClassExtension.TryGetValue<int, int>((IDictionary<int, int>)resistCon, con.id, 0);
9881 if (1000 < EClass.rnd(a))
9882 {
9883 con.power = 0;
9884 }
9885 else if (500 < EClass.rnd(a))
9886 {
9887 con.power /= 5;
9888 }
9889 else if (200 < EClass.rnd(a))
9890 {
9891 con.power /= 3;
9892 }
9893 else if (100 < EClass.rnd(a))
9894 {
9895 con.power /= 2;
9896 }
9897 }
9898 }

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

◆ RestockEquip()

void Chara.RestockEquip ( bool  onCreate)
inline

Definition at line 4764 of file Chara.cs.

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

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

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

◆ Revive()

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

Definition at line 5237 of file Chara.cs.

5238 {
5239 if (!isDead)
5240 {
5241 return;
5242 }
5243 isDead = false;
5244 base.hp = MaxHP / 3;
5245 mana.value = 0;
5246 stamina.value = 0;
5247 if (hunger.value > 30)
5248 {
5249 hunger.value = 30;
5250 }
5251 sleepiness.value = 0;
5253 RemoveCondition<StanceTaunt>();
5254 if (id == "keeper_garden")
5255 {
5256 SaiyanRevive();
5257 }
5258 if (IsPC)
5259 {
5261 {
5262 Msg.Say("noDeathPenalty2", this);
5263 }
5265 {
5266 Msg.Say("noDeathPenalty", this);
5267 }
5268 else
5269 {
5271 }
5272 List<Thing> dropList = new List<Thing>();
5273 EClass.pc.things.Foreach(delegate(Thing t)
5274 {
5276 {
5277 t.ignoreAutoPick = true;
5278 dropList.Add(t);
5279 }
5280 }, onlyAccessible: false);
5281 foreach (Thing item in dropList)
5282 {
5284 Msg.Say("backpack_full_drop", item);
5285 }
5286 EClass.player.preventDeathPenalty = false;
5287 }
5288 if (IsPCFaction && homeBranch != null)
5289 {
5290 homeBranch.Log("bRevive", this);
5291 }
5292 if (p != null)
5293 {
5294 if (!p.IsInBounds)
5295 {
5297 }
5298 EClass._zone.AddCard(this, p);
5299 if (msg)
5300 {
5301 SE.Play("revive");
5302 Msg.Say("revive", this);
5303 PlayEffect("revive");
5304 }
5305 SetCensored(enable: false);
5306 }
5307 }
void SetCensored(bool enable)
Definition: Card.cs:7948
Card parentCard
Definition: Card.cs:104
void SaiyanRevive()
Definition: Chara.cs:5309
void ApplyDeathPenalty()
Definition: Chara.cs:5343
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 3578 of file Chara.cs.

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

Referenced by AI_Dance.Run().

◆ SaiyanRevive()

void Chara.SaiyanRevive ( )
inline

Definition at line 5309 of file Chara.cs.

5310 {
5311 ModCorruption(-100000);
5312 if (base.LV < 10000000)
5313 {
5314 SetLv(base.LV * 10 + 9);
5315 }
5316 Refresh();
5317 base.hp = MaxHP;
5318 mana.value = mana.max;
5319 stamina.value = stamina.max;
5320 bossText = true;
5321 }
void ModCorruption(int a)
Definition: Chara.cs:10023

References Stats.max, and Refresh().

◆ ScaleByPrincipal()

Chara Chara.ScaleByPrincipal ( )
inline

◆ SetAI()

AIAct Chara.SetAI ( AIAct  g)
inline

Definition at line 9072 of file Chara.cs.

9073 {
9074 if (IsPC)
9075 {
9077 }
9078 if (ai.IsRunning)
9079 {
9080 if (ai == g && ai.IsNoGoal)
9081 {
9082 return g;
9083 }
9084 ai.Cancel();
9085 if (ai == g)
9086 {
9087 Debug.Log("goal is g:" + ai?.ToString() + "/" + this);
9088 return g;
9089 }
9090 }
9091 if (HasCondition<ConWait>())
9092 {
9093 RemoveCondition<ConWait>();
9094 }
9095 ai = g;
9096 ai.SetOwner(this);
9097 if (IsPC)
9098 {
9100 }
9101 return g;
9102 }
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 9062 of file Chara.cs.

9063 {
9064 SetAI(new GoalCombat());
9065 }

Referenced by ZoneEventQuest.AggroEnemy().

◆ SetAIIdle()

void Chara.SetAIIdle ( )
inline

Definition at line 9058 of file Chara.cs.

9059 {
9060 }

◆ SetAIImmediate()

void Chara.SetAIImmediate ( AIAct  g)
inline

◆ SetCooldown()

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

Definition at line 8871 of file Chara.cs.

8872 {
8873 if (_cooldowns == null)
8874 {
8875 _cooldowns = new List<int>();
8876 }
8877 bool flag = false;
8878 for (int i = 0; i < _cooldowns.Count; i++)
8879 {
8880 if (_cooldowns[i] / 1000 == idEle)
8881 {
8882 if (turns == 0)
8883 {
8884 _cooldowns.RemoveAt(i);
8885 }
8886 else
8887 {
8888 _cooldowns[i] = idEle * 1000 + turns;
8889 }
8890 flag = true;
8891 break;
8892 }
8893 }
8894 if (!flag && turns > 0)
8895 {
8896 AddCooldown(idEle, turns);
8897 }
8898 if (_cooldowns.Count == 0)
8899 {
8900 _cooldowns = null;
8901 }
8902 }

Referenced by ConTransmuteBat.OnRemoved().

◆ SetDir()

override void Chara.SetDir ( int  d)
inlinevirtual

Reimplemented from Card.

Definition at line 3571 of file Chara.cs.

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

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

◆ SetDirtySpeed()

void Chara.SetDirtySpeed ( )
inline

Definition at line 1896 of file Chara.cs.

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

References dirtySpeed, host, and SetDirtySpeed().

Referenced by CalcBurden(), Condition.Kill(), AttbMain.OnChangeValue(), Refresh(), Party.RemoveMember(), ActRide.Ride(), SetDirtySpeed(), and ActRide.Unride().

◆ SetEnemy()

Chara Chara.SetEnemy ( Chara  c = null)
inline

Definition at line 6430 of file Chara.cs.

6431 {
6432 enemy = c;
6433 if (c == null)
6434 {
6435 if (ai is GoalCombat)
6436 {
6437 ai.Cancel();
6438 }
6439 }
6440 else
6441 {
6442 calmCheckTurn = 10 + EClass.rnd(30);
6443 }
6444 return c;
6445 }

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

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

10082 {
10083 Feat feat = elements.GetElement(id) as Feat;
10084 int num = 0;
10085 if (feat != null && feat.Value > 0)
10086 {
10087 if (value == feat.Value)
10088 {
10089 return;
10090 }
10091 num = feat.Value;
10092 feat.Apply(-feat.Value, elements);
10093 }
10094 feat = elements.SetBase(id, value - (feat?.vSource ?? 0)) as Feat;
10095 if (feat.Value != 0)
10096 {
10097 feat.Apply(feat.Value, elements);
10098 }
10100 {
10101 Refresh();
10103 }
10104 if (!msg)
10105 {
10106 return;
10107 }
10108 if (feat.source.textInc.IsEmpty())
10109 {
10110 PlaySound("ding_skill");
10112 Say("gainFeat", this, feat.FullName);
10113 }
10114 else
10115 {
10116 bool flag = value < num;
10117 if (feat.source.tag.Contains("neg"))
10118 {
10119 flag = !flag;
10120 }
10121 switch (id)
10122 {
10123 case 1270:
10124 if (!flag)
10125 {
10126 PlaySound("chime_angel");
10127 }
10128 break;
10129 case 1271:
10130 if (!flag)
10131 {
10132 PlaySound("chime_devil");
10133 }
10134 break;
10135 default:
10136 PlaySound("mutation");
10137 break;
10138 }
10140 Say((value > num) ? feat.source.GetText("textInc") : feat.source.GetText("textDec"), this, feat.FullName);
10141 }
10143 }
Color Negative
Definition: MsgColors.cs:15
Color Ding
Definition: MsgColors.cs:11

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

Referenced by Card._OnDeserialized(), LayerWorldSetting.Apply(), DNA.Apply(), ApplyEditorTags(), ApplyRace(), Card.LevelUp(), TraitFoodEggFertilized.MakeBaby(), Zone_Casino.OnActivate(), OnCreate(), TraitDrinkMilkMother.OnDrink(), ConSleep.OnRemoved(), FoodEffect.Proc(), CoreDebug.SetElement(), DramaOutcome.upgrade_miscreation(), and DramaOutcome.wedding_setup().

◆ SetGlobal() [1/2]

Chara Chara.SetGlobal ( )
inline

Definition at line 1520 of file Chara.cs.

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

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

Referenced by _MakeAlly(), SetGlobal(), and SetHomeZone().

◆ SetGlobal() [2/2]

Chara Chara.SetGlobal ( Zone  _home,
int  x,
int  z 
)
inline

Definition at line 1505 of file Chara.cs.

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

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

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

◆ SetHomeZone()

Chara Chara.SetHomeZone ( Zone  zone)
inline

Definition at line 1461 of file Chara.cs.

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

References homeZone, and SetGlobal().

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

◆ SetHostility()

Chara Chara.SetHostility ( Hostility  h)
inline

Definition at line 1468 of file Chara.cs.

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

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

◆ SetMainElement() [1/2]

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

Definition at line 2129 of file Chara.cs.

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

References _ability, Card._colorInt, Color, Card.elements, GameSetting.elements, SourceManager.elements, Card.id, MainElement, ElementContainer.ModBase(), ElementContainer.SetBase(), EClass.setting, Element.source, and EClass.sources.

◆ SetMainElement() [2/2]

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

Definition at line 2120 of file Chara.cs.

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

References SourceManager.elements, Card.id, SetMainElement(), and EClass.sources.

Referenced by TraitFoodEggFertilized.Incubate(), OnCreate(), ActEffect.ProcAt(), SerializedCards.Restore(), and SetMainElement().

◆ SetMutation()

void Chara.SetMutation ( int  idEle,
int  a = 0 
)
inline

Definition at line 10145 of file Chara.cs.

10146 {
10147 SourceElement.Row row = EClass.sources.elements.map[idEle];
10149 Element element = elements.GetElement(idEle);
10150 Element element2 = elements.GetElement(row2.id);
10151 int num = element?.Value ?? 0;
10152 if (a < 0)
10153 {
10154 a = 0;
10155 }
10156 if (a > row.max)
10157 {
10158 a = row.max;
10159 }
10160 bool flag = (row.tag.Contains("neg") ? (a > num) : (a < num));
10161 if (a == 0 && (element == null || element.Value == 0))
10162 {
10164 return;
10165 }
10166 if (element != null && element.Value == a)
10167 {
10169 return;
10170 }
10171 if (element2 != null && element2.Value > 0)
10172 {
10173 SetFeat(element2.id, 0);
10174 }
10175 SetFeat(idEle, a);
10176 PlaySound("mutation");
10177 PlayEffect("mutation");
10179 Say(row.GetText(flag ? "textDec" : "textInc", returnNull: true) ?? row.alias, this);
10180 }

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

9068 {
9069 return SetAI(_NoGoalPC);
9070 }
static NoGoal _NoGoalPC
Definition: Chara.cs:198

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

◆ SetPCCState()

void Chara.SetPCCState ( PCCState  state)
inline

Definition at line 6818 of file Chara.cs.

6819 {
6820 if (IsPCC)
6821 {
6822 PCC.Get(pccData).Build(state);
6823 }
6824 }

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

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

7442 {
7443 switch (m)
7444 {
7445 case UIList.SortMode.ByJob:
7446 sortVal = job._index * 10000 + sourceCard._index;
7447 break;
7448 case UIList.SortMode.ByRace:
7449 sortVal = race._index * 10000 * ((!IsHuman) ? 1 : (-1)) + sourceCard._index;
7450 break;
7451 case UIList.SortMode.ByFeat:
7452 sortVal = -GetTotalFeat();
7453 break;
7454 case UIList.SortMode.ByPartyOrder:
7455 sortVal = EClass.pc.party.members.IndexOf(this);
7456 return;
7457 default:
7458 sortVal = sourceCard._index * ((!IsHuman) ? 1 : (-1));
7459 break;
7460 case UIList.SortMode.ByWorkk:
7461 break;
7462 }
7463 if (base.isFav)
7464 {
7465 sortVal -= 100000000;
7466 }
7467 }
int sortVal
Definition: Card.cs:102
int GetTotalFeat()
Definition: Chara.cs:8290
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 2108 of file Chara.cs.

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

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

Referenced by Refresh().

◆ SetSummon()

void Chara.SetSummon ( int  duration)
inline

Definition at line 2451 of file Chara.cs.

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

Referenced by ActEffect.ProcAt(), and QuestEscort.ReleaseEscort().

◆ SetTempHand()

void Chara.SetTempHand ( int  right = 0,
int  left = 0 
)
inline

◆ ShouldEquip()

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

Definition at line 7783 of file Chara.cs.

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

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

◆ ShouldThrowAway()

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

Definition at line 8644 of file Chara.cs.

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

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

7378 {
7379 return _ShowDialog(book, null, step, tag);
7380 }
LayerDrama _ShowDialog(string book, string sheet, string step="main", string tag="")
Definition: Chara.cs:7382

References book.

◆ Slap()

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

Definition at line 6417 of file Chara.cs.

6418 {
6419 PlaySound("whip");
6420 Say("slap", this, c);
6421 c.PlayAnime(AnimeID.Shiver);
6422 c.DamageHP(slapToDeath ? (c.MaxHP * 2) : (5 + EClass.rndHalf(EClass.pc.MaxHP / 3)), 919, 100, AttackSource.Condition);
6423 c.OnInsulted();
6424 if (slapToDeath && c.IsAliveInCurrentZone)
6425 {
6426 c.Die();
6427 }
6428 }
void PlayAnime(AnimeID id, bool force=false)
Definition: Card.cs:6394
void OnInsulted()
Definition: Chara.cs:8357
override void Die(Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
Definition: Chara.cs:5406

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

Referenced by DramaOutcome.wedding_fail().

◆ Sleep()

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

Definition at line 9900 of file Chara.cs.

9901 {
9902 RemoveCondition<ConAwakening>();
9903 AddCondition(Condition.Create(100, delegate(ConSleep con)
9904 {
9905 con.pcSleep = 15;
9906 con.pcBed = bed;
9907 con.pcPillow = pillow;
9908 con.pickup = pickup;
9909 con.posBed = posBed;
9910 con.posPillow = posPillow;
9911 }), force: true);
9912 }

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

8281 {
8282 Say("abCatSniff", this, c);
8283 AddCondition<ConHOT>(EClass.curve(50 + c.CHA * 5, 400, 100));
8284 c.ShowEmo(Emo.angry);
8285 ShowEmo(Emo.love);
8286 Talk("sniff");
8287 c.Talk(new string[4] { "labor", "disgust", "scold", "callGuards" }.RandomItem());
8288 }

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

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

◆ SplitHeld()

Card Chara.SplitHeld ( int  a)
inline

Definition at line 4655 of file Chara.cs.

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

References Card.Split().

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

◆ Stumble()

void Chara.Stumble ( int  mtp = 100)
inline

Definition at line 1879 of file Chara.cs.

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

References EClass._map, Card.DamageHP(), Point.Equals(), Card.Evalue(), Map.FindThing(), Card.IsInstalled, mana, Stats.max, MaxHP, EClass.pc, Card.pos, Card.Say(), Card.trait, and WeightLimit.

Referenced by TraitTrap.OnActivateTrap(), and Scene.OnUpdate().

◆ SyncRide() [1/2]

void Chara.SyncRide ( )
inline

Definition at line 3996 of file Chara.cs.

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

References SyncRide().

Referenced by _Move(), Card._Move(), Card.MoveImmediate(), ActRide.Ride(), and SyncRide().

◆ SyncRide() [2/2]

void Chara.SyncRide ( Chara  c)
inline

Definition at line 4012 of file Chara.cs.

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

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

◆ TalkTopic()

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

Definition at line 7113 of file Chara.cs.

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

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

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

◆ Tick()

override void Chara.Tick ( )
inlinevirtual

Reimplemented from Card.

Definition at line 4025 of file Chara.cs.

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

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

8925 {
8926 for (int num = _cooldowns.Count - 1; num >= 0; num--)
8927 {
8928 if (_cooldowns[num] % 1000 == 1)
8929 {
8930 _cooldowns.RemoveAt(num);
8931 }
8932 else
8933 {
8934 _cooldowns[num]--;
8935 }
8936 }
8937 if (_cooldowns.Count == 0)
8938 {
8939 _cooldowns = null;
8940 }
8941 }

◆ TickWork()

void Chara.TickWork ( VirtualDate  date)
inline

Definition at line 9344 of file Chara.cs.

9345 {
9347 if (span != TimeTable.Span.Work && span != 0)
9348 {
9349 return;
9350 }
9351 WorkSummary workSummary = GetWorkSummary();
9352 if (span == TimeTable.Span.Work)
9353 {
9354 if (workSummary.work != null)
9355 {
9356 PerformWork(workSummary.work, isHobby: false, date.IsRealTime);
9357 }
9358 }
9359 else if (workSummary.hobbies.Count > 0)
9360 {
9361 PerformWork(workSummary.hobbies.RandomItem(), isHobby: true, date.IsRealTime);
9362 }
9363 }
bool IsRealTime
Definition: VirtualDate.cs:7
WorkSession work
Definition: WorkSummary.cs:10
List< WorkSession > hobbies
Definition: WorkSummary.cs:13

References TimeTable.GetSpan(), WorkSummary.hobbies, Date.hour, VirtualDate.IsRealTime, and WorkSummary.work.

◆ ToString()

override string Chara.ToString ( )
inline

Definition at line 1198 of file Chara.cs.

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

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

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

◆ TryAbsorbRod()

void Chara.TryAbsorbRod ( Thing  t)
inline

Definition at line 4440 of file Chara.cs.

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

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

7497 {
7498 if (!IsPCFaction && !IsGuest())
7499 {
7500 return null;
7501 }
7502 foreach (Card item in EClass._map.props.installed.all)
7503 {
7504 if (item.trait is TraitBed traitBed && traitBed.CanAssign(this))
7505 {
7506 traitBed.AddHolder(this);
7507 Msg.Say("claimBed", this);
7508 return traitBed;
7509 }
7510 }
7511 return null;
7512 }
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 5728 of file Chara.cs.

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

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

Referenced by ActEffect.Proc().

◆ TryDropCarryOnly()

void Chara.TryDropCarryOnly ( )
inline

Definition at line 4660 of file Chara.cs.

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

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

◆ TryEquip()

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

Definition at line 7895 of file Chara.cs.

7896 {
7897 if (!ShouldEquip(t, useFav))
7898 {
7899 return false;
7900 }
7901 if (t.category.slot == 0)
7902 {
7903 return false;
7904 }
7905 if (useFav)
7906 {
7907 BodySlot slot = body.GetSlot(t);
7908 switch (GetFavAttackStyle())
7909 {
7910 case AttackStyle.Default:
7911 case AttackStyle.TwoHand:
7912 if (t.IsMeleeWeapon)
7913 {
7914 slot = body.slotMainHand;
7915 }
7916 break;
7917 case AttackStyle.Shield:
7918 if (t.IsMeleeWeapon)
7919 {
7920 slot = body.slotMainHand;
7921 }
7922 break;
7923 }
7924 body.Equip(t, slot);
7925 }
7926 else
7927 {
7928 body.Equip(t);
7929 }
7930 Say("equip", this, t);
7931 return true;
7932 }
bool ShouldEquip(Thing t, bool useFav=false)
Definition: Chara.cs:7783

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

8016 {
8017 if (IsPC)
8018 {
8020 if (thing?.trait is TraitToolRange && CanEquipRanged(thing))
8021 {
8022 ranged = thing;
8023 return true;
8024 }
8025 return false;
8026 }
8027 if (ranged != null && ranged.parent == this)
8028 {
8029 return true;
8030 }
8032 return ranged != null;
8033 }
Thing GetBestRangedWeapon()
Definition: Chara.cs:8000

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

7940 {
7941 Thing dest = null;
7942 if (IsPC)
7943 {
7945 {
7946 return FindThrowable(hotbar: true);
7947 }
7948 return null;
7949 }
7950 things.Foreach(delegate(Thing t)
7951 {
7952 if (t.HasTag(CTAG.throwWeapon) || (!base.IsPCFactionOrMinion && t.HasTag(CTAG.throwWeaponEnemy)))
7953 {
7954 dest = t;
7955 }
7956 });
7957 return dest;
7958 Thing FindThrowable(bool hotbar)
7959 {
7960 things.Foreach(delegate(Thing t)
7961 {
7962 if (dest == null)
7963 {
7964 if (t.IsHotItem)
7965 {
7966 if (!hotbar)
7967 {
7968 return;
7969 }
7970 }
7971 else if (hotbar)
7972 {
7973 return;
7974 }
7975 if (t.HasTag(CTAG.throwWeapon))
7976 {
7977 dest = t;
7978 }
7979 }
7980 });
7981 return dest;
7982 }
7983 }

References Game.Config.autoCombat, ConfigAutoCombat.bUseHotBar, Game.config, EClass.game, Card.HasTag(), and Card.IsHotItem.

Referenced by AI_PlayMusic.ThrowReward(), and GoalCombat.TryThrow().

◆ TryHoldCard()

bool Chara.TryHoldCard ( Card  t,
int  num = -1,
bool  pickHeld = false 
)
inline

Definition at line 4518 of file Chara.cs.

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

References EClass._zone, Zone.AddCard(), Card.isDestroyed, Card.Num, and Card.parent.

Referenced by Trait.OnUse(), AI_Grab< T >.Run(), and AI_Paint.Run().

◆ TryIdentify()

bool Chara.TryIdentify ( Thing  t,
int  count = 1,
bool  show = true 
)
inline

Definition at line 8161 of file Chara.cs.

8162 {
8163 int num = Evalue(289);
8164 if (num == 0)
8165 {
8166 return false;
8167 }
8168 int lV = t.LV;
8169 if (EClass.rnd(num * num + 5) > EClass.rnd(lV * lV) * 20)
8170 {
8171 t.Identify(show, (num >= 20) ? IDTSource.SkillHigh : IDTSource.Skill);
8172 int num2 = 50;
8173 if (lV > num)
8174 {
8175 num2 += (lV - num) * 10;
8176 }
8177 elements.ModExp(289, Mathf.Min(num2, 1000));
8178 return true;
8179 }
8180 return false;
8181 }
IDTSource
Definition: IDTSource.cs:2
Thing Identify(bool show=true, IDTSource idtSource=IDTSource.Identify)
Definition: Thing.cs:2102

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

Referenced by Player.OnAdvanceHour().

◆ TryMove()

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

Reimplemented from Card.

Definition at line 2750 of file Chara.cs.

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

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

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

◆ TryMoveTowards()

MoveResult Chara.TryMoveTowards ( Point  p)
inline

Definition at line 2688 of file Chara.cs.

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

9832 {
9833 if (TC == null || TC.HasCondition<ConInvulnerable>() || TC.Evalue(1421) > 0 || !TC.ExistsOnMap)
9834 {
9835 return false;
9836 }
9837 if (TC.hp > (long)TC.MaxHP * (long)(Mathf.Min(5 + (int)Mathf.Sqrt(power), harvest ? 35 : 25) + Evalue(1426) * 5) / (TC.IsPowerful ? 200 : 100))
9838 {
9839 return false;
9840 }
9841 if (TC.HasElement(427))
9842 {
9843 return false;
9844 }
9845 if (TC.IsPC && EClass.player.invlunerable)
9846 {
9847 return false;
9848 }
9849 PlaySound("hit_finish");
9850 Say("finish");
9851 Say("finish2", this, TC);
9852 TC.DamageHP(TC.MaxHP, AttackSource.Finish, this);
9853 return false;
9854 }
@ 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 10305 of file Chara.cs.

10306 {
10307 if (IsPCParty)
10308 {
10309 foreach (Chara member in EClass.pc.party.members)
10310 {
10311 if (member.HasElement(1641) && EClass.rnd(3) != 0)
10312 {
10313 Msg.Say("curse_nullify", member);
10314 return true;
10315 }
10316 }
10317 }
10318 else if (HasElement(1641) && EClass.rnd(3) != 0)
10319 {
10320 Say("curse_nullify", this);
10321 return true;
10322 }
10323 if (GetCondition<ConHolyVeil>() != null && EClass.rnd(5) != 0)
10324 {
10325 Say("curse_nullify", this);
10326 return true;
10327 }
10328 return false;
10329 }

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

◆ TryPickGroundItem()

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

Definition at line 4494 of file Chara.cs.

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

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

Referenced by AI_Fish.Run().

◆ TryPoisonPotion()

Thing Chara.TryPoisonPotion ( Thing  t)
inline

Definition at line 4426 of file Chara.cs.

4427 {
4428 if (t.trait is TraitPotion && t.id != "1165" && !t.source.tag.Contains("neg") && EClass.rnd(2) == 0 && HasElement(1565))
4429 {
4430 string text = EClass.sources.things.rows.Where((SourceThing.Row a) => a._origin == "potion" && a.tag.Contains("neg") && a.chance > 100).ToList().RandomItemWeighted((SourceThing.Row a) => a.chance)
4431 .id;
4432 Say("poisonDrip", this);
4433 int num = t.Num;
4434 t.Destroy();
4435 t = ThingGen.Create(text).SetNum(num);
4436 }
4437 return t;
4438 }
SourceThing.Row source
Definition: Thing.cs:11

References ThingGen.Create(), Card.Destroy(), Card.id, Card.Num, EClass.rnd(), Card.SetNum(), Thing.source, EClass.sources, SourceManager.things, and Card.trait.

◆ TryPush()

void Chara.TryPush ( Point  point)
inline

Definition at line 3270 of file Chara.cs.

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

References EClass._zone, ai, TraitChara.CanBePushed, if(), IsHumanSpeak, AIAct.IsMoveAI, IsPC, Card.IsPCFactionOrMinion, IsPCParty, Spatial.IsRegion, isSynced, Card.IsUnique, Point.ListCharas(), Card.ModCurrency(), MoveByForce(), Card.noMove, Card.PlayEffect(), Card.PlaySound(), EClass.rnd(), EClass.rndHalf(), Card.Talk(), and trait.

Referenced by _Move().

◆ TryPutShared()

void Chara.TryPutShared ( Thing  t,
List< Thing containers = null,
bool  dropIfFail = true 
)
inline

Definition at line 4510 of file Chara.cs.

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

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

Referenced by FactionBranch.DailyOutcome().

◆ TryPutSharedItems() [1/2]

void Chara.TryPutSharedItems ( bool  msg = true)
inline

Definition at line 7547 of file Chara.cs.

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

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

References EClass._zone, Card.c_isImportant, Card.category, Card.HasTag(), Card.IsAmmo, Thing.isEquipped, Card.IsRangedWeapon, and Zone.TryAddThingInSharedContainer().

Referenced by AI_Idle.Run().

◆ TryReservePickupTutorial()

void Chara.TryReservePickupTutorial ( Thing  t)
inline

Definition at line 4470 of file Chara.cs.

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

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

◆ TryRestock()

void Chara.TryRestock ( bool  onCreate)
inline

Definition at line 4754 of file Chara.cs.

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

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

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

◆ TrySetEnemy()

void Chara.TrySetEnemy ( Chara  c)
inline

Definition at line 6447 of file Chara.cs.

6448 {
6449 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))
6450 {
6451 SetEnemy(c);
6452 }
6453 }

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

7553 {
7555 }
void TryTakeSharedItems(bool msg=true)
Definition: Chara.cs:7552

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

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

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

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

Referenced by WindowCharaMini.Refresh().

◆ TryUse()

bool Chara.TryUse ( Thing  t)
inline

Definition at line 8044 of file Chara.cs.

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

9366 {
9367 if (EClass.world.date.IsExpired(GetInt(51)))
9368 {
9369 Expedition expedition = Expedition.Create(this, sourceWork.expedition.ToEnum<ExpeditionType>());
9370 SetInt(51, EClass.world.date.GetRaw() + 60 * (expedition.hours + 24));
9371 homeBranch.expeditions.Add(expedition);
9372 return true;
9373 }
9374 return false;
9375 }
ExpeditionType
void Add(Expedition ex)
static Expedition Create(Chara c, ExpeditionType type)
Definition: Expedition.cs:112
int hours
Definition: Expedition.cs:6
ExpeditionManager expeditions
string expedition
Definition: SourceHobby.cs:29

References ExpeditionManager.Add(), Expedition.Create(), World.date, FactionBranch.expeditions, Date.GetRaw(), Expedition.hours, Date.IsExpired(), and EClass.world.

◆ UnmakeMinion()

void Chara.UnmakeMinion ( )
inline

Definition at line 2406 of file Chara.cs.

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

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

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

◆ UpdateAngle()

void Chara.UpdateAngle ( )
inline

Definition at line 3639 of file Chara.cs.

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

Referenced by OnDeserialized().

◆ UpdateSight()

void Chara.UpdateSight ( )
inline

Definition at line 3700 of file Chara.cs.

3701 {
3702 int num = 4;
3703 for (int i = -num; i < num + 1; i++)
3704 {
3705 for (int j = -num; j < num + 1; j++)
3706 {
3707 shared.Set(pos.x + i, pos.z + j);
3708 if (shared.IsValid && !shared.cell.isSeen && i >= -1 && i <= 1 && j >= -1)
3709 {
3710 _ = 1;
3711 }
3712 }
3713 }
3714 }
bool isSeen
Definition: Cell.cs:282
static Point shared
Definition: Chara.cs:11

References Point.cell, Cell.isSeen, Point.IsValid, and Point.Set().

◆ UseAbility() [1/3]

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

Definition at line 5904 of file Chara.cs.

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

5900 {
5901 return UseAbility(elements.GetElement(idAct)?.act ?? ACT.Create(idAct), tc, pos, pt);
5902 }

References ACT.Create().

◆ ValidateWorks()

void Chara.ValidateWorks ( )
inline

Definition at line 9413 of file Chara.cs.

9414 {
9415 _goalWork.FindWork(this, setAI: false);
9417 }
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 5370 of file Chara.cs.

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

References EClass._zone, Zone.AddCard(), ThingGen.Create(), Stats.GetPhase(), Zone.IsPCFaction, Spatial.IsRegion, Card.MakeRefFrom(), Stats.Mod(), and EClass.rnd().

Referenced by FoodEffect.Proc(), and ConDrunk.Tick().

◆ WillConsumeTurn()

bool Chara.WillConsumeTurn ( )
inline

Definition at line 3716 of file Chara.cs.

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

Referenced by AM_Adv._OnUpdateInput(), UIAutoTurn._Update(), and Player.CanAcceptInput().

◆ WriteNote()

override void Chara.WriteNote ( UINote  n,
Action< UINote onWriteNote = null,
IInspect::NoteMode  mode = IInspect::NoteMode::Default,
Recipe  recipe = null 
)
inlinevirtual

Reimplemented from Card.

Definition at line 7431 of file Chara.cs.

7432 {
7433 n.Clear();
7434 UIItem uIItem = n.AddHeaderCard(base.Name.ToTitleCase());
7435 SetImage(uIItem.image2);
7436 uIItem.text2.SetText(race.GetText().ToTitleCase(wholeText: true) + " " + job.GetText().ToTitleCase(wholeText: true));
7437 n.AddText("");
7438 n.Build();
7439 }
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(), 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_EternalGarden.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: