Elin Decompiled Documentation EA 23.239 Nightly Patch 1
Loading...
Searching...
No Matches
Thing Class Reference
Inheritance diagram for Thing:
Card BaseCard IReservable ICardParent IRenderSource IGlobalValue IInspect EClass

Public Member Functions

bool CanAutoFire (Chara c, Card tg, bool reloading=false)
 
int GetEfficiency ()
 
override void SetSource ()
 
override void OnCreate (int genLv)
 
override void ApplyMaterialElements (bool remove)
 
override void ApplyMaterial (bool remove=false)
 
override string GetName (NameStyle style, int _num=-1)
 
override string GetHoverText ()
 
override string GetExtraName ()
 
List< ElementListLimitedValidTraits (bool limit)
 
List< ElementListValidTraits (bool isCraft, bool limit)
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetRenderParam (RenderParam p)
 
override SubPassData GetSubPassData ()
 
override bool CanStackTo (Thing to)
 
void GetIngredients (Recipe.Ingredient ing, List< Thing > list)
 
bool IsValidIngredient (Recipe.Ingredient ing)
 
void GetRecipes (HashSet< Recipe > recipes)
 
void GetDisassembles (List< Thing > list)
 
void Disassemble ()
 
void ShowSplitMenu (ButtonGrid button, InvOwner.Transaction trans=null)
 
void ShowSplitMenu2 (ButtonGrid button, string lang, Action< int > onSplit=null)
 
void DoAct (Act act)
 
void TryLickEnchant (Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
 
Element AddEnchant (int lv=-1)
 
void RemoveEnchant ()
 
Thing Identify (bool show=true, IDTSource idtSource=IDTSource.Identify)
 
override bool MatchEncSearch (string s)
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (Recipe.Ingredient ing)
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
bool IsChildOf (Card c)
 
FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void 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)
 
Thing MakeEgg (bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
 
Thing MakeMilk (bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
 
Thing GiveBirth (Thing t, bool effect)
 
Card SetHidden (bool hide=true)
 
virtual MoveResult _Move (Point p, MoveType type=MoveType.Walk)
 
void MoveImmediate (Point p, bool focus=true, bool cancelAI=true)
 
void Teleport (Point point, bool silent=false, bool force=false)
 
virtual void OnLand ()
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, int req=1)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
void RefreshColor ()
 
ref Color GetRandomColor ()
 
virtual Sprite GetSprite (int dir=0)
 
virtual Sprite GetImageSprite ()
 
void SetImage (Image image, int dir, int idSkin=0)
 
virtual void SetImage (Image image)
 
void ShowEmo (Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
 
void PlaySoundHold (bool spatial=true)
 
void PlaySoundDrop (bool spatial=true)
 
void PlaySoundImpact (bool spatial=true)
 
void PlaySoundDead (bool spatial=true)
 
SoundSource PlaySound (string id, float v=1f, bool spatial=true)
 
void KillAnime ()
 
void PlayAnime (AnimeID id, bool force=false)
 
void PlayAnime (AnimeID id, Point dest, bool force=false)
 
void PlayAnimeLoot ()
 
Effect PlayEffect (string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
 
void PlayEffect (int ele, bool useRenderPos=true, float range=0f)
 
virtual void SetDir (int d)
 
void SetRandomDir ()
 
virtual void LookAt (Card c)
 
virtual void LookAt (Point p)
 
virtual void Rotate (bool reverse=false)
 
void ChangeAltitude (int a)
 
virtual SubPassData GetSubPassData ()
 
void SetFreePos (Point point)
 
void RenderMarker (Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
 
void RecalculateFOV ()
 
bool HasLight ()
 
float GetLightPower ()
 
int GetHearingRadius ()
 
int GetSightRadius ()
 
int GetLightRadius ()
 
void CalculateFOV ()
 
void SetRandomLightColors ()
 
Fov CreateFov ()
 
void ClearFOV ()
 
virtual void OnSimulateHour (VirtualDate date)
 
void DecayNatural (int hour=1)
 
void CheckJustCooked ()
 
void Decay (int a=10)
 
bool HasTalk (string idTopic)
 
void Talk (string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
 
void TalkRaw (string text, string ref1=null, string ref2=null, bool forceSync=false)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

Static Public Member Functions

static void AddAttackEvaluation (UINote n, Chara chara, Thing current=null)
 
static Tuple< SourceElement.Row, int > GetEnchant (long lv, Func< SourceElement.Row, bool > func, bool neg)
 
- Static Public Member Functions inherited from Card
static string ApplyTone (Chara c, ref string text, string _tones, int gender, bool stripPun=false)
 
static int GetTilePrice (TileRow row, SourceMaterial.Row mat)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (int a, int start, int step, int rate=75)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

Public Attributes

SourceThing.Row source
 
int stackOrder
 
string tempName
 
- 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

const int MaxFurnitureEnc = 12
 
- 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
 

Properties

bool isEquipped [get]
 
bool IsMeleeWithAmmo [get]
 
int range [get]
 
int Penetration [get]
 
override bool isThing [get]
 
override CardRow sourceCard [get]
 
override SourcePref Pref [get]
 
override int SelfWeight [get]
 
override int[] Tiles [get]
 
bool CanSearchContents [get]
 
bool IsSharedContainer [get]
 
- Properties inherited from Card
Card parentCard [get]
 
Thing parentThing [get]
 
int colorInt [get]
 
bool IsHotItem [get]
 
int uid [get, set]
 
int idMaterial [get, set]
 
int dir [get, set]
 
int Num [get, set]
 
int _x [get, set]
 
int _z [get, set]
 
int genLv [get, set]
 
int refVal [get, set]
 
int decay [get, set]
 
int altitude [get, set]
 
int hp [get, set]
 
float fx [get, set]
 
float fy [get, set]
 
BlessedState blessedState [get, set]
 
PlaceState _placeState [get, set]
 
int rarityLv [get, set]
 
Rarity rarity [get, set]
 
int encLV [get, set]
 
int posInvX [get, set]
 
int posInvY [get, set]
 
int idSkin [get, set]
 
int feat [get, set]
 
int LV [get, set]
 
int exp [get, set]
 
int tier [get, set]
 
int version [get, set]
 
bool isCensored [get, set]
 
bool isDeconstructing [get, set]
 
bool isDyed [get, set]
 
bool isModified [get, set]
 
bool isNew [get, set]
 
bool isPlayerCreation [get, set]
 
bool ignoreAutoPick [get, set]
 
bool freePos [get, set]
 
bool isHidden [get, set]
 
bool isOn [get, set]
 
bool isNPCProperty [get, set]
 
bool isRestrained [get, set]
 
bool isRoofItem [get, set]
 
bool isMasked [get, set]
 
bool disableAutoToggle [get, set]
 
bool isImported [get, set]
 
bool autoRefuel [get, set]
 
bool ignoreStackHeight [get, set]
 
bool isFloating [get, set]
 
bool isWeightChanged [get, set]
 
bool isFireproof [get, set]
 
bool isAcidproof [get, set]
 
bool isReplica [get, set]
 
bool isSummon [get, set]
 
bool isElemental [get, set]
 
bool isBroken [get, set]
 
bool isSubsetCard [get, set]
 
bool noSnow [get, set]
 
bool noMove [get, set]
 
bool isGifted [get, set]
 
bool isCrafted [get, set]
 
bool isLostProperty [get, set]
 
bool noShadow [get, set]
 
bool noSell [get, set]
 
bool isLeashed [get, set]
 
bool isStolen [get, set]
 
bool isSale [get, set]
 
bool isCopy [get, set]
 
bool isRestocking [get, set]
 
bool hasSpawned [get, set]
 
bool isScaled [get, set]
 
bool isBackerContent [get]
 
SourceBacker.Row sourceBacker [get]
 
BedType c_bedType [get, set]
 
int c_equippedSlot [get, set]
 
int c_lockLv [get, set]
 
Hostility c_originalHostility [get, set]
 
MinionType c_minionType [get, set]
 
int c_vomit [get, set]
 
bool c_wasInPcParty [get, set]
 
bool c_isImportant [get, set]
 
bool c_lockedHard [get, set]
 
bool c_revealLock [get, set]
 
bool c_isTrained [get, set]
 
bool c_isPrayed [get, set]
 
bool c_isDisableStockUse [get, set]
 
int c_lightColor [get, set]
 
Color LightColor [get]
 
int c_uidZone [get, set]
 
int c_uidRefCard [get, set]
 
int c_priceFix [get, set]
 
int c_priceAdd [get, set]
 
int c_priceCopy [get, set]
 
int c_fixedValue [get, set]
 
int c_dyeMat [get, set]
 
VisitorState visitorState [get, set]
 
RescueState c_rescueState [get, set]
 
BossType c_bossType [get, set]
 
int c_dateStockExpire [get, set]
 
int c_dateDeathLock [get, set]
 
int c_IDTState [get, set]
 
int c_charges [get, set]
 
int c_bill [get, set]
 
int c_invest [get, set]
 
int c_seed [get, set]
 
int c_allowance [get, set]
 
int c_fur [get, set]
 
int c_dateCooked [get, set]
 
int c_lockedAge [get, set]
 
int c_containerSize [get, set]
 
int c_weight [get, set]
 
int c_diceDim [get, set]
 
int c_indexContainerIcon [get, set]
 
int c_idMainElement [get, set]
 
int c_summonDuration [get, set]
 
int c_idBacker [get, set]
 
int c_uidMaster [get, set]
 
int c_ammo [get, set]
 
int c_daysWithGod [get, set]
 
int c_daysWithPC [get, set]
 
string c_idPortrait [get, set]
 
string c_idRace [get, set]
 
string c_idJob [get, set]
 
string c_idTone [get, set]
 
string c_color [get, set]
 
string c_idSpriteReplacer [get, set]
 
string c_idTalk [get, set]
 
string c_idDeity [get, set]
 
string c_altName [get, set]
 
string c_altName2 [get, set]
 
string c_extraNameRef [get, set]
 
string c_refText [get, set]
 
string c_idRefName [get, set]
 
string c_idRidePCC [get, set]
 
string c_idAbility [get, set]
 
string c_context [get, set]
 
string c_idEditor [get, set]
 
string c_editorTags [get, set]
 
string c_editorTraitVal [get, set]
 
string c_idTrait [get, set]
 
string c_idRefCard [get, set]
 
string c_idRefCard2 [get, set]
 
string c_note [get, set]
 
UniqueData c_uniqueData [get, set]
 
Thing ammoData [get, set]
 
List< SocketDatasocketList [get, set]
 
Thing c_copyContainer [get, set]
 
Window.SaveData c_windowSaveData [get, set]
 
CharaUpgrade c_upgrades [get, set]
 
CharaGenes c_genes [get, set]
 
List< int > c_corruptionHistory [get, set]
 
ContainerUpgrade c_containerUpgrade [get, set]
 
DNA c_DNA [get, set]
 
CharaList c_charaList [get, set]
 
MixedFoodData c_mixedFoodData [get, set]
 
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]
 
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]
 

Additional Inherited Members

- Public Types inherited from Card
enum  MoveResult { Fail , Success , Door }
 
enum  MoveType { Walk , Force }
 
- Public Types inherited from IInspect
enum  NoteMode { Default , Recipe , Product , Info }
 
- Protected Member Functions inherited from Card
virtual void OnSerializing ()
 
virtual void OnDeserialized ()
 

Detailed Description

Definition at line 7 of file Thing.cs.

Member Function Documentation

◆ AddAttackEvaluation()

static void Thing.AddAttackEvaluation ( UINote  n,
Chara  chara,
Thing  current = null 
)
inlinestatic

Definition at line 1460 of file Thing.cs.

1461 {
1462 n.AddHeader("headerAttackEval");
1463 int num = 0;
1464 foreach (BodySlot slot in chara.body.slots)
1465 {
1466 if (slot.thing == null || slot.elementId != 35 || slot.thing.source.offense.Length < 2)
1467 {
1468 continue;
1469 }
1470 AttackProcess.Current.Prepare(chara, slot.thing, null, null, num);
1471 string text = AttackProcess.Current.GetText();
1472 if (slot.thing == current)
1473 {
1474 text = text.TagColor(() => true);
1475 }
1476 n.AddText(text);
1477 num++;
1478 }
1479 AttackProcess.Current.Prepare(chara, null);
1480 string text2 = AttackProcess.Current.GetText();
1481 if (num == 0)
1482 {
1483 text2 = text2.TagColor(() => true);
1484 }
1485 n.AddText(text2);
1486 }
void Prepare(Chara _CC, Thing _weapon, Card _TC=null, Point _TP=null, int _attackIndex=0, bool _isThrow=false)
static AttackProcess Current
Definition: AttackProcess.cs:8
string GetText()
int elementId
Definition: BodySlot.cs:6
Thing thing
Definition: BodySlot.cs:8
List< BodySlot > slots
Definition: CharaBody.cs:8
CharaBody body
Definition: Chara.cs:94
SourceThing.Row source
Definition: Thing.cs:11
UIItem AddHeader(string text, Sprite sprite=null)
Definition: UINote.cs:79
UIItem AddText(string text, FontColor color=FontColor.DontChange)
Definition: UINote.cs:113

References UINote.AddHeader(), Chara.body, AttackProcess.Current, BodySlot.elementId, AttackProcess.GetText(), AttackProcess.Prepare(), CharaBody.slots, source, and BodySlot.thing.

Referenced by InvOwnerEquip.OnWriteNote(), WindowCharaMini.RefreshEquipment(), and WindowChara.RefreshEquipment().

◆ AddEnchant()

Element Thing.AddEnchant ( int  lv = -1)
inline

Definition at line 2047 of file Thing.cs.

2048 {
2049 if (base.IsToolbelt || base.IsLightsource)
2050 {
2051 return null;
2052 }
2053 Tuple<SourceElement.Row, int> enchant = GetEnchant(lv, (SourceElement.Row r) => r.IsEncAppliable(base.category), base.IsCursed);
2054 if (enchant == null)
2055 {
2056 return null;
2057 }
2058 return elements.ModBase(enchant.Item1.id, enchant.Item2);
2059 }
ElementContainerCard elements
Definition: Card.cs:41
Element ModBase(int ele, int v)
static Tuple< SourceElement.Row, int > GetEnchant(long lv, Func< SourceElement.Row, bool > func, bool neg)
Definition: Thing.cs:1960

Referenced by OnCreate().

◆ ApplyMaterial()

override void Thing.ApplyMaterial ( bool  remove = false)
inlinevirtual

Reimplemented from Card.

Definition at line 354 of file Thing.cs.

355 {
356 if (source.HasTag(CTAG.replica))
357 {
358 base.isReplica = true;
359 }
360 if (remove)
361 {
362 ApplyMaterialElements(remove: true);
363 bool flag2 = (base.isFireproof = false);
364 base.isAcidproof = flag2;
365 return;
366 }
367 bool pvSet = false;
368 bool dmgSet = false;
369 bool hitSet = false;
370 if (sourceCard.quality == 4)
371 {
372 if (source.offense.Length != 0)
373 {
374 base.c_diceDim = source.offense[1];
375 }
376 if (source.offense.Length > 2)
377 {
378 SetBase(66, source.offense[2]);
379 }
380 if (source.offense.Length > 3)
381 {
382 SetBase(67, source.offense[3]);
383 }
384 if (source.defense.Length != 0)
385 {
386 SetBase(64, source.defense[0]);
387 }
388 if (source.defense.Length > 1)
389 {
390 SetBase(65, source.defense[1]);
391 }
392 }
393 else
394 {
395 int num = 120;
396 bool flag3 = !base.IsAmmo;
397 if (base.rarity <= Rarity.Crude)
398 {
399 num = 150;
400 }
401 else if (base.rarity == Rarity.Superior)
402 {
403 num = 100;
404 }
405 else if (base.rarity >= Rarity.Legendary)
406 {
407 num = 80;
408 }
409 if (source.offense.Length != 0)
410 {
411 base.c_diceDim = source.offense[1] * base.material.dice / (num + (flag3 ? EClass.rnd(25) : 0));
412 }
413 if (source.offense.Length > 2)
414 {
415 SetBase(66, source.offense[2] * base.material.atk * 9 / (num - (flag3 ? EClass.rnd(30) : 0)));
416 }
417 if (source.offense.Length > 3)
418 {
419 SetBase(67, source.offense[3] * base.material.dmg * 5 / (num - (flag3 ? EClass.rnd(30) : 0)));
420 }
421 if (source.defense.Length != 0)
422 {
423 SetBase(64, source.defense[0] * base.material.dv * 7 / (num - (flag3 ? EClass.rnd(30) : 0)));
424 }
425 if (source.defense.Length > 1)
426 {
427 SetBase(65, source.defense[1] * base.material.pv * 9 / (num - (flag3 ? EClass.rnd(30) : 0)));
428 }
429 }
430 if (base.isReplica)
431 {
432 if (source.offense.Length != 0)
433 {
434 base.c_diceDim = Mathf.Max(source.offense[1] / 3, 1);
435 }
436 if (source.offense.Length > 2)
437 {
438 SetBase(66, source.offense[2] / 3);
439 }
440 if (source.offense.Length > 3)
441 {
442 SetBase(67, source.offense[3] / 3);
443 }
444 if (source.defense.Length != 0)
445 {
446 SetBase(64, source.defense[0] / 3);
447 }
448 if (source.defense.Length > 1)
449 {
450 SetBase(65, source.defense[1] / 3);
451 }
452 }
453 if (base.IsEquipmentOrRangedOrAmmo)
454 {
455 if (base.IsWeapon || base.IsAmmo)
456 {
457 if (dmgSet)
458 {
459 elements.ModBase(67, base.encLV + ((base.blessedState == BlessedState.Blessed) ? 1 : 0));
460 }
461 }
462 else if (pvSet)
463 {
464 elements.ModBase(65, (base.encLV + ((base.blessedState == BlessedState.Blessed) ? 1 : 0)) * 2);
465 }
466 }
467 if (sockets != null)
468 {
469 for (int i = 0; i < sockets.Count; i++)
470 {
471 int num2 = sockets[i];
472 int num3 = num2 / 1000;
473 if (num3 == 67 && dmgSet)
474 {
475 elements.ModBase(67, num2 % 1000);
476 }
477 if (num3 == 66 && hitSet)
478 {
479 elements.ModBase(66, num2 % 1000);
480 }
481 if (num3 == 65 && pvSet)
482 {
483 elements.ModBase(65, num2 % 1000);
484 }
485 }
486 }
487 if (base.material == null || base.material.elements == null)
488 {
489 Debug.Log(base.idMaterial + "/" + base.material?.name + "/" + base.material?.elements);
490 }
491 ApplyMaterialElements(remove: false);
492 string[] bits = base.material.bits;
493 foreach (string text in bits)
494 {
495 if (!(text == "fire"))
496 {
497 if (text == "acid")
498 {
499 base.isAcidproof = true;
500 }
501 }
502 else
503 {
504 base.isFireproof = true;
505 }
506 }
507 if (base.rarity >= Rarity.Artifact)
508 {
509 bool flag2 = (base.isFireproof = true);
510 base.isAcidproof = flag2;
511 }
512 _colorInt = 0;
513 void SetBase(int ele, int a)
514 {
515 elements.SetBase(ele, a);
516 if (ele == 67)
517 {
518 dmgSet = true;
519 }
520 if (ele == 65)
521 {
522 pvSet = true;
523 }
524 if (ele == 66)
525 {
526 hitSet = true;
527 }
528 }
529 }
BlessedState
Definition: BlessedState.cs:2
CTAG
Definition: CTAG.cs:2
Rarity
Definition: Rarity.cs:2
int quality
Definition: CardRow.cs:19
int _colorInt
Definition: Card.cs:67
List< int > sockets
Definition: Card.cs:47
Definition: EClass.cs:5
static int rnd(long a)
Definition: EClass.cs:58
Element SetBase(string alias, int v, int potential=0)
override void ApplyMaterialElements(bool remove)
Definition: Thing.cs:336
override CardRow sourceCard
Definition: Thing.cs:47

References Card._colorInt, ApplyMaterialElements(), Debug, Card.elements, ElementContainer.ModBase(), CardRow.quality, EClass.rnd(), ElementContainer.SetBase(), Card.sockets, source, and sourceCard.

◆ ApplyMaterialElements()

override void Thing.ApplyMaterialElements ( bool  remove)
inlinevirtual

Reimplemented from Card.

Definition at line 336 of file Thing.cs.

337 {
338 Chara chara = null;
340 {
341 chara = GetRootCard()?.Chara;
342 if (chara != null)
343 {
345 }
346 }
347 elements.ApplyMaterialElementMap(this, remove);
348 if (chara != null)
349 {
350 elements.SetParent(chara);
351 }
352 }
virtual Chara Chara
Definition: Card.cs:2070
Card GetRootCard()
Definition: Card.cs:3423
Definition: Chara.cs:10
bool IsGameStarted
Definition: Core.cs:84
static Core core
Definition: EClass.cs:6
void SetParent(Card c)
void ApplyMaterialElementMap(Thing t, bool invert=false)
bool isEquipped
Definition: Thing.cs:17

References ElementContainer.ApplyMaterialElementMap(), Card.Chara, EClass.core, Card.elements, Card.GetRootCard(), isEquipped, Core.IsGameStarted, and ElementContainer.SetParent().

Referenced by ApplyMaterial().

◆ CanAutoFire()

bool Thing.CanAutoFire ( Chara  c,
Card  tg,
bool  reloading = false 
)
inline

Definition at line 128 of file Thing.cs.

129 {
130 if (GetRootCard() != c)
131 {
132 return false;
133 }
134 if (HasTag(CTAG.throwWeapon))
135 {
136 return true;
137 }
138 if (!trait.CanAutofire)
139 {
140 return false;
141 }
142 if (trait is TraitToolRange)
143 {
144 if ((c.IsPCFaction && c.body.IsTooHeavyToEquip(this)) || reloading)
145 {
146 return false;
147 }
148 }
149 else if (trait is TraitAbility && c.IsPC)
150 {
151 Act act = (trait as TraitAbility).act;
152 Element element = c.elements.GetElement(act.id);
153 if (act is Spell && (element == null || element.vPotential == 0))
154 {
155 return false;
156 }
157 }
158 return true;
159 }
Definition: ACT.cs:62
bool HasTag(CTAG tag)
Definition: Card.cs:2595
Trait trait
Definition: Card.cs:53
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:156
override bool IsPC
Definition: Chara.cs:612
override bool IsPCFaction
Definition: Chara.cs:671
Element GetElement(string alias)
int id
Definition: ELEMENT.cs:250
int vPotential
Definition: ELEMENT.cs:256
Definition: SPELL.cs:617
virtual bool CanAutofire
Definition: Trait.cs:142

References Chara.body, Trait.CanAutofire, Card.elements, ElementContainer.GetElement(), Card.GetRootCard(), Card.HasTag(), Element.id, Chara.IsPC, Chara.IsPCFaction, CharaBody.IsTooHeavyToEquip(), Card.trait, and Element.vPotential.

Referenced by AM_Adv._OnUpdateInput().

◆ CanStackTo()

override bool Thing.CanStackTo ( Thing  to)
inlinevirtual

Reimplemented from Card.

Definition at line 1644 of file Thing.cs.

1645 {
1646 if (trait.HasCharges || to.isEquipped || base.isModified || to.isModified || to.id != id || to.idMaterial != base.idMaterial || to.refVal != base.refVal || to.blessedState != base.blessedState || to.rarityLv != base.rarityLv || to.tier != base.tier || to.idSkin != base.idSkin || to.isGifted != base.isGifted)
1647 {
1648 return false;
1649 }
1650 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1651 {
1652 return false;
1653 }
1654 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1655 {
1656 return false;
1657 }
1658 if (base.IsDecayed != to.IsDecayed)
1659 {
1660 return false;
1661 }
1662 if (!trait.CanStackTo(to))
1663 {
1664 return false;
1665 }
1666 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1667 {
1668 return false;
1669 }
1670 if (base.isStolen != to.isStolen)
1671 {
1672 return false;
1673 }
1674 if (base.isCrafted != to.isCrafted)
1675 {
1676 return false;
1677 }
1678 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1679 {
1680 return false;
1681 }
1682 if (to.c_IDTState != base.c_IDTState)
1683 {
1684 return false;
1685 }
1686 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1687 {
1688 return false;
1689 }
1690 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1691 {
1692 return false;
1693 }
1694 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1695 {
1696 return false;
1697 }
1698 if (base.c_altName != to.c_altName)
1699 {
1700 return false;
1701 }
1702 if (base.Num + to.Num <= 0)
1703 {
1704 return false;
1705 }
1706 bool flag = false;
1707 if (to.parent is Card)
1708 {
1709 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1710 if (windowSaveData != null && windowSaveData.compress)
1711 {
1712 flag = true;
1713 }
1714 }
1715 if (flag)
1716 {
1717 if (base.encLV != to.encLV && !base.IsFood)
1718 {
1719 return false;
1720 }
1721 if (elements.dict.Count() != to.elements.dict.Count())
1722 {
1723 return false;
1724 }
1725 foreach (Element value in elements.dict.Values)
1726 {
1727 if (to.elements.GetElement(value.id) == null)
1728 {
1729 return false;
1730 }
1731 }
1732 int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
1733 base.encLV = num2;
1734 foreach (Element value2 in elements.dict.Values)
1735 {
1736 Element element = to.elements.GetElement(value2.id);
1737 value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num));
1738 }
1739 return true;
1740 }
1741 if (base.encLV != to.encLV)
1742 {
1743 return false;
1744 }
1745 if (elements.dict.Count() != to.elements.dict.Count())
1746 {
1747 return false;
1748 }
1749 foreach (Element value3 in elements.dict.Values)
1750 {
1751 Element element2 = to.elements.GetElement(value3.id);
1752 if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10)
1753 {
1754 return false;
1755 }
1756 }
1757 return true;
1758 }
Definition: Card.cs:11
int c_priceFix
Definition: Card.cs:1137
bool isCrafted
Definition: Card.cs:794
int tier
Definition: Card.cs:410
bool IsDecayed
Definition: Card.cs:2287
int idMaterial
Definition: Card.cs:134
string id
Definition: Card.cs:35
bool noSell
Definition: Card.cs:830
bool isCopy
Definition: Card.cs:878
string c_altName
Definition: Card.cs:1593
int c_priceAdd
Definition: Card.cs:1149
int c_dyeMat
Definition: Card.cs:1185
ICardParent parent
Definition: Card.cs:55
int c_priceCopy
Definition: Card.cs:1161
int c_IDTState
Definition: Card.cs:1257
string c_idRefCard2
Definition: Card.cs:1749
int refVal
Definition: Card.cs:206
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2516
int encLV
Definition: Card.cs:326
bool isDyed
Definition: Card.cs:458
bool isWeightChanged
Definition: Card.cs:662
int rarityLv
Definition: Card.cs:302
int idSkin
Definition: Card.cs:362
bool isGifted
Definition: Card.cs:782
BlessedState blessedState
Definition: Card.cs:278
bool isStolen
Definition: Card.cs:854
int ChildrenAndSelfWeight
Definition: Card.cs:2041
bool isModified
Definition: Card.cs:470
int Num
Definition: Card.cs:158
int c_charges
Definition: Card.cs:1269
string c_idRefCard
Definition: Card.cs:1737
Dictionary< int, Element > dict
int vBase
Definition: ELEMENT.cs:252
override int SelfWeight
Definition: Thing.cs:82
virtual bool CanStackTo(Thing to)
Definition: Trait.cs:592
virtual bool HasCharges
Definition: Trait.cs:328
bool IsRequireFuel
Definition: Trait.cs:464
bool compress
Definition: Window.cs:415

References Card.blessedState, Card.c_altName, Card.c_charges, Card.c_dyeMat, Card.c_idRefCard, Card.c_idRefCard2, Card.c_IDTState, Card.c_priceAdd, Card.c_priceCopy, Card.c_priceFix, Card.ChildrenAndSelfWeight, Window.SaveData.compress, ElementContainer.dict, Card.elements, Card.encLV, ElementContainer.GetElement(), Card.id, Element.id, Card.idMaterial, Card.idSkin, Card.isCopy, Card.isCrafted, Card.IsDecayed, Card.isDyed, isEquipped, Card.isGifted, Card.isModified, Card.isStolen, Card.isWeightChanged, Card.noSell, Card.Num, Card.parent, Card.rarityLv, Card.refVal, SelfWeight, Card.tier, and Element.vBase.

Referenced by ThingContainer.CanStack(), InvOwner.OnDrag(), and DragItemCard.OnDragSpecial().

◆ Disassemble()

void Thing.Disassemble ( )
inline

Definition at line 1797 of file Thing.cs.

1798 {
1799 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 1942 of file Thing.cs.

1943 {
1944 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
1945 {
1946 SE.Beep();
1947 return;
1948 }
1949 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
1950 if (act.IsAct)
1951 {
1952 act.Perform(EClass.pc);
1953 return;
1954 }
1955 AIAct aI = act as AIAct;
1956 EClass.pc.SetAI(aI);
1958 }
Definition: AIAct.cs:6
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
virtual bool Perform()
Definition: ACT.cs:266
virtual bool LocalAct
Definition: ACT.cs:171
virtual bool IsAct
Definition: ACT.cs:101
static AM_Adv Adv
Definition: ActionMode.cs:15
AIAct SetAI(AIAct g)
Definition: Chara.cs:8776
bool HasNoGoal
Definition: Chara.cs:1000
static Zone _zone
Definition: EClass.cs:20
static Player player
Definition: EClass.cs:12
static Chara pc
Definition: EClass.cs:14
HotItem currentHotItem
Definition: Player.cs:1100
virtual bool IsRegion
Definition: Spatial.cs:515

References EClass._zone, ActionMode.Adv, Player.currentHotItem, Chara.HasNoGoal, Act.IsAct, Spatial.IsRegion, Act.LocalAct, EClass.pc, Act.Perform(), EClass.player, Chara.SetAI(), and AM_Adv.SetTurbo().

◆ GetDisassembles()

void Thing.GetDisassembles ( List< Thing list)
inline

Definition at line 1793 of file Thing.cs.

1794 {
1795 }

Referenced by RecipeUpdater.RunDisassemble().

◆ GetEfficiency()

int Thing.GetEfficiency ( )
inline

Definition at line 161 of file Thing.cs.

162 {
163 return 50 + base.LV * 10 + base.encLV * 10 + (int)base.rarity * 10 + (int)base.blessedState * 10;
164 }

Referenced by AIWork.GetSession().

◆ GetEnchant()

static Tuple< SourceElement.Row, int > Thing.GetEnchant ( long  lv,
Func< SourceElement::Row, bool >  func,
bool  neg 
)
inlinestatic

Definition at line 1960 of file Thing.cs.

1961 {
1962 List<SourceElement.Row> list = new List<SourceElement.Row>();
1963 int num = 0;
1964 long num2 = lv + 5 + EClass.rndSqrt(10);
1965 foreach (SourceElement.Row row in EClass.sources.elements.rows)
1966 {
1967 if ((!neg || !row.tag.Contains("flag")) && func(row) && row.LV < num2)
1968 {
1969 list.Add(row);
1970 num += row.chance;
1971 }
1972 }
1973 if (num == 0)
1974 {
1975 return null;
1976 }
1977 int num3 = EClass.rnd(num);
1978 int num4 = 0;
1979 foreach (SourceElement.Row item in list)
1980 {
1981 num4 += item.chance;
1982 if (num3 < num4)
1983 {
1984 string text = EClass.sources.elements.map[item.id].category;
1985 bool flag = text == "skill" || text == "attribute" || text == "resist";
1986 float num5 = 3f + Mathf.Min(lv / 10, 15f) + Mathf.Sqrt(lv * item.encFactor / 100);
1987 int num6 = (item.mtp + EClass.rnd(item.mtp + (int)num5)) / item.mtp * ((!(flag && neg)) ? 1 : (-1));
1988 if (item.encFactor == 0 && num6 > 25)
1989 {
1990 num6 = 25;
1991 }
1992 return new Tuple<SourceElement.Row, int>(item, num6);
1993 }
1994 }
1995 return null;
1996 }
static int rndSqrt(int a)
Definition: EClass.cs:97
static SourceManager sources
Definition: EClass.cs:42
SourceElement elements

References SourceManager.elements, item, neg, EClass.rnd(), EClass.rndSqrt(), and EClass.sources.

Referenced by OnCreate(), and TraitMod.OnCreate().

◆ GetExtraName()

override string Thing.GetExtraName ( )
inlinevirtual

Reimplemented from Card.

Definition at line 803 of file Thing.cs.

804 {
805 string text = "";
806 if (trait.ShowChildrenNumber && base.c_lockLv == 0)
807 {
808 if (things.Count > 0)
809 {
810 text += "childCount".lang(things.Count.ToString() ?? "");
811 }
812 else if (trait.CanOpenContainer)
813 {
814 text += "empty".lang();
815 }
816 }
818 {
819 Room room = pos.cell.room;
820 if (EClass.debug.enable && room != null && room.data.group != 0)
821 {
822 text = text + " #" + room.data.group;
823 }
824 }
825 return text;
826 }
int group
Definition: AreaData.cs:18
AreaData data
Definition: BaseArea.cs:29
Point pos
Definition: Card.cs:59
ThingContainer things
Definition: Card.cs:38
Room room
Definition: Cell.cs:102
bool enable
Definition: CoreDebug.cs:286
static CoreDebug debug
Definition: EClass.cs:48
bool IsValid
Definition: Point.cs:88
Cell cell
Definition: Point.cs:51
Definition: Room.cs:4
virtual bool ShowChildrenNumber
Definition: Trait.cs:332
virtual bool CanOpenContainer
Definition: Trait.cs:233

References BaseArea.data, EClass.debug, CoreDebug.enable, and AreaData.group.

◆ GetHoverText()

override string Thing.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 786 of file Thing.cs.

787 {
788 string text = "";
789 text = text + " <size=14>(" + Lang._weight(base.ChildrenAndSelfWeight) + ")</size> ";
791 {
792 text += Environment.NewLine;
793 text = text + "id:" + id + " tile:" + source.idRenderData + "/" + ((source.tiles.Length != 0) ? ((object)source.tiles[0]) : "-")?.ToString() + " num:" + base.Num + " lv:" + base.LV + " enc:" + base.encLV + " / " + base.material.alias;
794 }
795 string hoverText = trait.GetHoverText();
796 if (!hoverText.IsEmpty())
797 {
798 text = text + Environment.NewLine + hoverText;
799 }
800 return base.GetHoverText() + text;
801 }
bool showExtra
Definition: CoreDebug.cs:168
Definition: Lang.cs:6
static string _weight(int a, int b, bool showUnit=true, int unitSize=0)
Definition: Lang.cs:172
virtual string GetHoverText()
Definition: Trait.cs:597

References Lang._weight(), EClass.debug, CoreDebug.showExtra, and RenderRow.tiles.

◆ GetIngredients()

void Thing.GetIngredients ( Recipe::Ingredient  ing,
List< Thing list 
)
inline

Definition at line 1760 of file Thing.cs.

1761 {
1762 if (ing.CanSetThing(this))
1763 {
1764 list.Add(this);
1765 }
1766 if (things.Count <= 0 || base.c_lockLv != 0 || base.isNPCProperty)
1767 {
1768 return;
1769 }
1770 foreach (Thing thing in things)
1771 {
1772 thing.GetIngredients(ing, list);
1773 }
1774 }
void Add(Act a, string s="")
Definition: ActPlan.cs:11
bool CanSetThing(Thing t)
Definition: Recipe.cs:89
Definition: Thing.cs:8
void GetIngredients(Recipe.Ingredient ing, List< Thing > list)
Definition: Thing.cs:1760

References GetIngredients().

Referenced by GetIngredients(), and LayerCraftFloat.ShowContextMenu().

◆ GetName()

override string Thing.GetName ( NameStyle  style,
int  _num = -1 
)
inlinevirtual

Reimplemented from Card.

Definition at line 531 of file Thing.cs.

532 {
533 int num = ((_num == -1) ? base.Num : _num);
534 string text = "";
535 string text2 = "";
536 string text3 = "";
537 string text4 = "";
538 string sig = "";
539 string text5 = "";
540 string text6 = source.GetText("unit");
541 ArticleStyle style2 = ((style == NameStyle.FullNoArticle) ? ArticleStyle.None : ArticleStyle.Default);
542 bool num2 = base.IsIdentified || source.unknown.IsEmpty();
543 bool isEquipmentOrRangedOrAmmo = base.IsEquipmentOrRangedOrAmmo;
544 bool flag = Lang.setting.nameStyle == 0;
545 if (num2)
546 {
547 if (base.c_idRefCard.IsEmpty() && !base.c_altName.IsEmpty())
548 {
549 text = base.c_altName;
550 }
551 else
552 {
553 string[] array = trait.GetName().Split(',');
554 text = array[0];
555 if (array.Length > 1)
556 {
557 text6 = array[1];
558 }
559 }
560 if (text.IsEmpty())
561 {
562 text = id;
563 }
564 if (isEquipmentOrRangedOrAmmo && base.IsIdentified && base.rarity >= Rarity.Legendary)
565 {
566 if (base.rarity != Rarity.Artifact && !base.material.GetTextArray("altName").IsEmpty())
567 {
568 text = base.material.GetTextArray("altName")[0] + Lang.space + text;
569 }
570 goto IL_0215;
571 }
572 if (source.naming == "m" || (source.naming == "ms" && base.material != source.DefaultMaterial))
573 {
574 if (isEquipmentOrRangedOrAmmo)
575 {
576 string[] textArray = base.material.GetTextArray("altName");
577 if (textArray != null && textArray.Length >= 2)
578 {
579 text = base.material.GetTextArray("altName")[1] + Lang.space + text;
580 goto IL_01f2;
581 }
582 }
583 text = "_of2".lang(base.material.GetName(), text);
584 }
585 goto IL_01f2;
586 }
587 text = "unknown";
588 string idUnknown = source.GetText("unknown");
589 if (idUnknown.StartsWith("#"))
590 {
591 Rand.UseSeed(EClass.game.seed + (trait.CanStack ? sourceCard._index : base.uid) + base.refVal, delegate
592 {
593 idUnknown = Lang.GetList(idUnknown.Remove(0, 1)).RandomItem();
594 });
595 }
596 text = idUnknown;
597 goto IL_047d;
598 IL_047d:
599 if (GetBool(125))
600 {
601 text = "_halfeaten".lang(text);
602 }
603 if (base.c_bill != 0)
604 {
605 text = "_of".lang(Lang._currency(base.c_bill, showUnit: true, 0), text);
606 }
607 trait.SetName(ref text);
608 if (base.tier > 0)
609 {
610 text = Lang.GetList((base.category.id == "fish") ? "quality_fish" : "quality_general")[Mathf.Clamp(base.tier, 0, 3)] + text;
611 }
612 switch (style)
613 {
614 case NameStyle.Simple:
615 return text;
616 case NameStyle.Ref:
617 return text;
618 default:
619 {
620 if (!base.c_refText.IsEmpty())
621 {
622 text = "_named".lang(base.c_refText, text);
623 }
624 if (base.IsIdentified)
625 {
626 int hIT = base.HIT;
627 int dMG = base.DMG;
628 if ((base.IsMeleeWeapon || base.IsRangedWeapon || base.IsAmmo || hIT != 0 || dMG != 0) && source.offense.Length != 0)
629 {
630 string text7 = "";
631 if (source.offense[0] != 0)
632 {
633 text7 = text7 + source.offense[0] + "d" + base.c_diceDim;
634 }
635 if (dMG != 0)
636 {
637 text7 += ((base.IsMeleeWeapon || base.IsRangedWeapon || base.IsAmmo) ? dMG.ToText() : (dMG.ToString() ?? ""));
638 }
639 if (hIT != 0)
640 {
641 text7 = text7 + ((dMG != 0 || source.offense[0] != 0) ? ", " : "") + hIT;
642 }
643 text2 = text2 + " (" + text7.IsEmpty(" - ") + ") ";
644 }
645 int dV = DV;
646 int pV = PV;
647 if (dV != 0 || pV != 0)
648 {
649 text2 += " [";
650 text2 = text2 + dV + ", " + pV;
651 text2 += "] ";
652 }
654 {
655 text2 = text2 + " " + "itemCharges".lang(base.c_charges.ToString() ?? "");
656 }
657 }
658 else if (base.c_IDTState == 3 || base.c_IDTState == 1)
659 {
660 text2 = Lang.space + "(" + base.TextRarity.ToTitleCase() + ")";
661 }
662 if (base.IsDecayed)
663 {
664 text = "rotten".lang() + text;
665 }
666 else if (base.IsRotting)
667 {
668 text = "rotting".lang() + text;
669 }
670 if (base.IsIdentified)
671 {
672 if (base.blessedState != 0)
673 {
674 text4 = ("bs" + base.blessedState).lang();
675 }
676 switch (base.rarity)
677 {
678 case Rarity.Artifact:
679 style2 = ArticleStyle.None;
680 text3 = "★";
681 text = (isEquipmentOrRangedOrAmmo ? text.Bracket(3) : text);
682 break;
683 case Rarity.Legendary:
684 case Rarity.Mythical:
685 style2 = ArticleStyle.The;
686 text3 = "☆";
687 if (isEquipmentOrRangedOrAmmo)
688 {
689 Rand.UseSeed(base.uid + EClass.game.seed, delegate
690 {
691 sig = AliasGen.GetRandomAlias().Bracket((base.rarity == Rarity.Mythical) ? 3 : 2);
692 });
693 sig = Lang.space + sig;
694 }
695 break;
696 }
697 }
698 if (base.encLV != 0)
699 {
700 if (base.category.tag.Contains("enc"))
701 {
702 if (base.c_altName.IsEmpty())
703 {
704 string[] list = Lang.GetList("quality_furniture");
705 text = "_qualityFurniture".lang(list[Mathf.Clamp(base.encLV - 1, 0, list.Length - 1)], text);
706 }
707 }
708 else
709 {
710 sig = sig + Lang.space + ((base.encLV > 0) ? ("+" + base.encLV) : (base.encLV.ToString() ?? ""));
711 }
712 }
713 if (base.c_lockLv != 0 && base.c_revealLock)
714 {
715 sig = sig + Lang.space + "+" + base.c_lockLv;
716 }
717 if (base.isLostProperty)
718 {
719 text = "_lostproperty".lang(text);
720 }
722 {
723 text5 += "equippedItem".lang();
724 }
725 if (!base.c_note.IsEmpty() && (!base.isBackerContent || EClass.core.config.backer.Show(base.c_note)))
726 {
727 string text8 = base.c_note;
728 if (text8.StartsWith('@'))
729 {
730 text8 = Lang.Note.map.TryGetValue(text8.TrimStart('@'))?.GetText("text") ?? base.c_note;
731 }
732 string text9 = (base.category.IsChildOf("book") ? "_written" : "_engraved");
733 if (id == "grave_dagger1" || id == "grave_dagger2")
734 {
735 text9 = "_daggerGrave";
736 }
737 text = ((!text8.Contains("_bracketLeft".lang())) ? text9.lang(text8, text) : (text9 + "Alt").lang(text8, text));
738 }
739 text = (flag ? ((num <= 1) ? (text4 + text) : "_unit".lang(num.ToFormat() ?? "", text4 + text, text6)) : ((trait is TraitAbility) ? text.ToTitleCase(wholeText: true) : ((!text6.IsEmpty() && (base.IsIdentified || source.unknown.IsEmpty())) ? "_unit".lang((num == 1) ? "" : (num.ToFormat() ?? ""), text, (text4 + text6).AddArticle(num, style2, source.unit)) : (text4 + text).AddArticle(num, style2, source.name))));
740 if (base.rarity >= Rarity.Legendary)
741 {
742 text = text.ToTitleCase(wholeText: true);
743 }
744 string text10 = ((base.isSale && things.Count > 0) ? "forSale2".lang() : ((base.isSale || (base.parentThing != null && base.parentThing.isSale && TraitSalesTag.CanTagSale(this, insideContainer: true))) ? "forSale".lang(Lang._currency(GetPrice(CurrencyType.Money, sell: true, PriceType.PlayerShop), "money")) : ""));
745 if (trait is TraitSalesTag && base.isOn && !GetStr(11).IsEmpty())
746 {
747 text10 += "soldOut".lang(EClass.sources.categories.map[GetStr(11)].GetName());
748 }
749 if (GetInt(101) != 0)
750 {
751 text5 = "_limitedStock".lang(text5);
752 }
753 return text5 + text3 + text + sig + text2 + text10;
754 }
755 }
756 IL_01f2:
757 if (source.naming == "ma")
758 {
759 text = base.material.GetName();
760 }
761 goto IL_0215;
762 IL_0215:
763 if (!base.c_idRefCard.IsEmpty() && trait.RefCardName != RefCardName.None)
764 {
765 string text11 = base.c_altName.IsEmpty(base.refCard.GetName());
766 if (!base.c_idRefCard2.IsEmpty())
767 {
768 text11 = "_and".lang(text11, base.c_altName2.IsEmpty(base.refCard2.GetName()));
769 }
770 if (!(text11 == "*r"))
771 {
772 text = ((!source.name2.IsEmpty()) ? source.GetTextArray("name2")[0].Replace("#1b", base.c_extraNameRef.IsEmpty((base.refCard == null) ? text11 : (base.refCard.isChara ? base.refCard.GetName() : base.refCard.GetText()))).Replace("#1", base.c_extraNameRef.IsEmpty(text11)) : (source.naming.Contains("last") ? (text + Lang.space + text11) : (source.naming.Contains("first") ? (text11 + Lang.space + text) : ((!source.naming.Contains("of")) ? (text6.IsEmpty() ? "_of3" : "_of2").lang(text11, text) : "_of".lang(text11, text)))));
773 }
774 else
775 {
776 string text12 = base.refCard.GetText("aka");
777 if (!text12.IsEmpty())
778 {
779 text = "_of".lang(text12, text);
780 }
781 }
782 }
783 goto IL_047d;
784 }
ArticleStyle
Definition: ArticleStyle.cs:2
CurrencyType
Definition: CurrencyType.cs:2
NameStyle
Definition: NameStyle.cs:2
PriceType
Definition: PriceType.cs:2
RefCardName
Definition: RefCardName.cs:2
string GetStr(int id, string defaultStr=null)
Definition: BaseCard.cs:54
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
bool GetBool(int id)
Definition: BaseCard.cs:15
virtual int PV
Definition: Card.cs:2327
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
Definition: Card.cs:7233
virtual int DV
Definition: Card.cs:2325
override string ToString()
Definition: Card.cs:2487
bool IsIdentified
Definition: Card.cs:2377
BackerContentConfig backer
Definition: CoreConfig.cs:613
CoreConfig config
Definition: Core.cs:70
static Game game
Definition: EClass.cs:8
int seed
Definition: Game.cs:200
static LangNote Note
Definition: Lang.cs:50
static string[] GetList(string id)
Definition: Lang.cs:114
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:162
Thing eqBait
Definition: Player.cs:1106
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:22
SourceCategory categories
static bool CanTagSale(Card t, bool insideContainer=false)
Definition: TraitSalesTag.cs:9
virtual string GetName()
Definition: Trait.cs:695
virtual bool ShowCharges
Definition: Trait.cs:330
virtual bool CanStack
Definition: Trait.cs:150
virtual void SetName(ref string s)
Definition: Trait.cs:700

References Lang._currency(), SourceData< T, T2 >.BaseRow._index, CoreConfig.backer, Trait.CanStack, TraitSalesTag.CanTagSale(), SourceManager.categories, Core.config, EClass.core, Card.DV, Player.eqBait, EClass.game, BaseCard.GetBool(), BaseCard.GetInt(), Lang.GetList(), Trait.GetName(), Card.GetPrice(), Card.GetRootCard(), BaseCard.GetStr(), Trait.HasCharges, Card.id, Lang.Note, EClass.pc, EClass.player, Card.PV, Game.seed, Trait.SetName(), CoreConfig.BackerContentConfig.Show(), Trait.ShowCharges, source, sourceCard, EClass.sources, Card.trait, and Rand.UseSeed().

Referenced by WidgetPopText._SayPick(), DramaCustomSequence.Build(), QuestDeliver.IsDestThing(), ThingContainer.RefreshGrid(), AI_OpenGambleChest.Run(), UIMagicChest.Search(), CoreExtension.Sort(), ActThrow.Throw(), Zone.TryAddThingInSharedContainer(), and Chara.TryUse().

◆ GetRecipes()

void Thing.GetRecipes ( HashSet< Recipe recipes)
inline

Definition at line 1789 of file Thing.cs.

1790 {
1791 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1630 of file Thing.cs.

1631 {
1632 Chara chara = GetRootCard() as Chara;
1633 if ((!trait.ShowAsTool || (chara == EClass.pc && HotItemHeld.disableTool)) && (chara?.held == this || (!base.isRoofItem && placeState != PlaceState.installed && renderer.data.subCrate.enable && parent is Zone)))
1634 {
1636 {
1637 return EClass.setting.pass.subCrate;
1638 }
1639 return renderer.data.subCrate;
1640 }
1641 return SubPassData.Default;
1642 }
PlaceState
Definition: PlaceState.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool isRoofItem
Definition: Card.cs:578
PlaceState placeState
Definition: Card.cs:83
CardRenderer renderer
Definition: Card.cs:61
static GameSetting setting
Definition: EClass.cs:34
PassSetting pass
Definition: GameSetting.cs:303
SubPassData subCrate
Definition: RenderData.cs:46
RenderData data
Definition: RenderObject.cs:34
static SubPassData Default
Definition: SubPassData.cs:7
Definition: Zone.cs:12

References SubPassData.Default, HotItemHeld.disableTool, Chara.held, GameSetting.pass, EClass.pc, EClass.setting, and GameSetting.PassSetting.subCrate.

◆ Identify()

Thing Thing.Identify ( bool  show = true,
IDTSource  idtSource = IDTSource::Identify 
)
inline

Definition at line 2065 of file Thing.cs.

2066 {
2067 if (base.IsIdentified)
2068 {
2069 return this;
2070 }
2071 string @ref = "";
2072 string text = "";
2073 if (show)
2074 {
2075 @ref = GetName(NameStyle.Full, base.Num);
2076 }
2077 Rarity rarity = idtSource switch
2078 {
2079 IDTSource.SkillHigh => Rarity.Legendary,
2080 IDTSource.Skill => Rarity.Superior,
2081 _ => Rarity.Normal,
2082 };
2083 if (rarity != 0 && ((base.IsEquipmentOrRangedOrAmmo && base.rarity >= rarity) || base.rarity >= Rarity.Mythical))
2084 {
2085 base.c_IDTState = 3;
2086 }
2087 else if (base.rarity >= Rarity.Mythical && idtSource != IDTSource.SuperiorIdentify)
2088 {
2089 base.c_IDTState = 1;
2090 }
2091 else
2092 {
2093 base.c_IDTState = 0;
2094 }
2095 if (show)
2096 {
2097 text = GetName(NameStyle.Full, base.Num);
2098 if (base.c_IDTState == 0)
2099 {
2100 Msg.Say("identified", @ref, text);
2101 }
2102 else
2103 {
2104 Msg.Say((idtSource == IDTSource.Skill) ? "identified3" : "identified2", @ref, text, base.TextRarity);
2105 }
2106 }
2107 if (base.IsIdentified)
2108 {
2109 GetRootCard()?.TryStack(this);
2110 }
2112 return this;
2113 }
IDTSource
Definition: IDTSource.cs:2
Rarity rarity
Definition: Card.cs:314
void TryStack(Thing t)
Definition: Card.cs:6940
static void SetDirty(Thing t)
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:531

References Msg.Say(), and LayerInventory.SetDirty().

Referenced by RecipeCard.Craft(), TraitAltar.OnOffer(), TraitBaseSpellbook.OnRead(), AI_Read.OnSetOwner(), QuestDeliver.OnStart(), ActZap.Perform(), ActEffect.Proc(), InvOwner.Transaction.Process(), DramaOutcome.QuestExploration_AfterCrystal(), AI_UseCrafter.Run(), and Chara.TryIdentify().

◆ IsValidIngredient()

bool Thing.IsValidIngredient ( Recipe::Ingredient  ing)
inline

Definition at line 1776 of file Thing.cs.

1777 {
1778 if (isDestroyed)
1779 {
1780 return false;
1781 }
1782 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1783 {
1784 return false;
1785 }
1786 return true;
1787 }
bool isDestroyed
Definition: Card.cs:75
int Dist(Card c)
Definition: Card.cs:7630

References EClass.pc.

Referenced by DropdownGrid.BuildIngredients().

◆ ListLimitedValidTraits()

List< Element > Thing.ListLimitedValidTraits ( bool  limit)
inline

Definition at line 828 of file Thing.cs.

829 {
830 List<Element> list = new List<Element>();
831 if (base.ShowFoodEnc)
832 {
833 foreach (Element value in elements.dict.Values)
834 {
835 if (value.IsFoodTraitMain && value.Value > 0)
836 {
837 list.Add(value);
838 }
839 }
841 if (limit && list.Count > 5)
842 {
843 int num = list.Count - 5;
844 for (int i = 0; i < num; i++)
845 {
846 list.RemoveAt(list.Count - 1);
847 }
848 }
849 }
850 return list;
851 }
static int GetSortVal(Element a)
int Value
Definition: ELEMENT.cs:292
bool IsFoodTraitMain
Definition: ELEMENT.cs:367

References ElementContainer.GetSortVal(), Element.IsFoodTraitMain, and Element.Value.

◆ ListValidTraits()

List< Element > Thing.ListValidTraits ( bool  isCraft,
bool  limit 
)
inline

Definition at line 853 of file Thing.cs.

854 {
855 List<Element> list = ListLimitedValidTraits(limit);
856 bool showFoodEnc = base.ShowFoodEnc;
857 bool flag = EClass.debug.enable || EClass.pc.HasElement(1650);
858 if (showFoodEnc)
859 {
860 foreach (Element value in elements.dict.Values)
861 {
862 if (value.IsFoodTrait && !list.Contains(value) && (isCraft || flag || value.IsFoodTraitMain) && (!value.IsFoodTraitMain || value.Value < 0))
863 {
864 list.Add(value);
865 }
866 }
867 }
868 foreach (Element value2 in elements.dict.Values)
869 {
870 if ((isCraft || flag || ((!value2.IsFoodTrait || value2.IsFoodTraitMain) && (!showFoodEnc || !value2.IsTrait || value2.Value >= 0))) && !list.Contains(value2) && (value2.IsTrait || (value2.IsFoodTrait && !value2.IsFoodTraitMain)))
871 {
872 list.Add(value2);
873 }
874 }
875 return list;
876 }
bool HasElement(int ele, int req=1)
Definition: Card.cs:5897
bool IsFoodTrait
Definition: ELEMENT.cs:364
bool IsTrait
Definition: ELEMENT.cs:362
List< Element > ListLimitedValidTraits(bool limit)
Definition: Thing.cs:828

References Card.HasElement(), Element.IsFoodTrait, Element.IsFoodTraitMain, Element.IsTrait, EClass.pc, and Element.Value.

◆ MatchEncSearch()

override bool Thing.MatchEncSearch ( string  s)
inlinevirtual

Reimplemented from Card.

Definition at line 2115 of file Thing.cs.

2116 {
2117 if (trait is TraitGene)
2118 {
2119 DNA dNA = base.c_DNA;
2120 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2121 {
2122 return false;
2123 }
2124 for (int i = 0; i < dNA.vals.Count; i += 2)
2125 {
2126 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2127 if (row.name.ToLower().Contains(s))
2128 {
2129 return true;
2130 }
2131 if (row.GetName().ToLower().Contains(s))
2132 {
2133 return true;
2134 }
2135 }
2136 }
2137 else
2138 {
2139 if (!base.IsIdentified)
2140 {
2141 return false;
2142 }
2143 foreach (Element value in elements.dict.Values)
2144 {
2145 if (value.Value != 0)
2146 {
2147 if (value.source.name.ToLower().Contains(s))
2148 {
2149 return true;
2150 }
2151 if (value.source.GetName().ToLower().Contains(s))
2152 {
2153 return true;
2154 }
2155 }
2156 }
2157 }
2158 return false;
2159 }
Definition: DNA.cs:8
Type type
Definition: DNA.cs:29
Type
Definition: DNA.cs:10
List< int > vals
Definition: DNA.cs:24
SourceElement.Row source
Definition: ELEMENT.cs:273
override string GetName()

References SourceManager.elements, SourceElement.Row.GetName(), SourceElement.Row.name, Element.source, EClass.sources, DNA.type, DNA.vals, and Element.Value.

Referenced by ThingContainer.RefreshGrid(), and WidgetSearch.Search().

◆ OnCreate()

override void Thing.OnCreate ( int  genLv)
inlinevirtual

Reimplemented from Card.

Definition at line 182 of file Thing.cs.

183 {
184 if (bp.blesstedState.HasValue)
185 {
186 SetBlessedState(bp.blesstedState.GetValueOrDefault());
187 }
188 else if (base.category.ignoreBless == 0 && bp.rarity == Rarity.Random && base.rarity != Rarity.Artifact)
189 {
190 if (EClass.rnd(25) == 0)
191 {
193 }
194 else if (EClass.rnd(25) == 0)
195 {
197 }
198 else if (EClass.rnd(50) == 0 && base.category.slot != 0)
199 {
201 }
202 }
203 if (!EClass.debug.autoIdentify && (!source.unknown_JP.IsEmpty() || (base.category.slot != 0 && base.rarity >= Rarity.Superior)))
204 {
205 base.c_IDTState = 5;
206 }
207 string text = id;
208 if (text == "bill_tax" || text == "bill")
209 {
210 base.c_bill = 100 + EClass.rnd(100);
211 }
212 if (base.category.slot != 0)
213 {
214 int num = 0;
215 if (base.rarity == Rarity.Superior)
216 {
217 num = EClass.rnd(3);
218 }
219 else if (base.rarity == Rarity.Legendary)
220 {
221 num = EClass.rnd(4) + 2;
222 }
223 else if (base.rarity == Rarity.Mythical)
224 {
225 num = EClass.rnd(3) + 5;
226 }
227 else if (base.rarity >= Rarity.Artifact)
228 {
229 num = EClass.rnd(2) + 1;
230 }
231 if (num > 0 && !HasTag(CTAG.godArtifact) && !HasTag(CTAG.noRandomEnc))
232 {
233 for (int i = 0; i < num; i++)
234 {
236 }
237 }
238 }
239 if (base.IsRangedWeapon && !IsMeleeWithAmmo)
240 {
241 if (HasTag(CTAG.godArtifact))
242 {
243 AddSocket();
244 AddSocket();
245 }
246 else
247 {
248 int num2 = 1;
249 int num3 = ((EClass.rnd(10) == 0) ? 1 : 0);
250 if (base.rarity == Rarity.Superior)
251 {
252 num2 = 2 + num3;
253 }
254 else if (base.rarity == Rarity.Legendary)
255 {
256 num2 = EClass.rnd(2) + 3 + num3;
257 }
258 else if (base.rarity == Rarity.Mythical)
259 {
260 num2 = EClass.rnd(2) + 4 + num3;
261 }
262 else if (base.rarity >= Rarity.Artifact)
263 {
264 num2 = EClass.rnd(2) + 1;
265 }
266 if (id == "bow_vindale")
267 {
268 num2 = 4;
269 }
270 if (num2 > 0)
271 {
272 for (int j = 0; j < num2; j++)
273 {
274 AddSocket();
275 }
276 for (int k = 0; k < EClass.rnd(num2 + 1); k++)
277 {
278 Tuple<SourceElement.Row, int> enchant = GetEnchant(genLv, (SourceElement.Row r) => r.tag.Contains("modRanged"), neg: false);
279 if (enchant != null && InvOwnerMod.IsValidRangedMod(this, enchant.Item1))
280 {
281 ApplySocket(enchant.Item1.id, enchant.Item2);
282 }
283 }
284 }
285 }
286 }
287 if (id == "shield_flower")
288 {
290 elements.SetBase(randomElement.alias.Replace("ele", "miasma_"), 20);
291 }
292 if ((bp.rarity != 0 || bp.qualityBonus != 0) && base.rarity < Rarity.Artifact && base.category.tag.Contains("enc"))
293 {
294 int num4 = 0;
295 if (EClass.rnd(6) == 0)
296 {
297 if (bp.qualityBonus == 0)
298 {
299 num4 = EClass.rnd(EClass.rnd(14) + 1);
300 if (num4 == 1 && EClass.rnd(3) != 0)
301 {
302 num4 = 0;
303 }
304 if (num4 > 0)
305 {
307 }
308 }
309 else if (bp.qualityBonus < 0)
310 {
311 if (EClass.rnd(3) == 0)
312 {
313 num4 = 1;
314 }
315 }
316 else if (bp.qualityBonus >= 10)
317 {
318 num4 = Mathf.Min(bp.qualityBonus / 10 + 2, 8) + EClass.rnd(EClass.rnd(5) + 1);
319 }
320 }
321 if (num4 > 0)
322 {
323 if (num4 > 12)
324 {
325 num4 = 12;
326 }
327 SetEncLv(num4);
328 }
329 }
330 if (HasTag(CTAG.randomSkin))
331 {
332 base.idSkin = EClass.rnd(source.skins.Length + 1);
333 }
334 }
BlessedState? blesstedState
void AddSocket()
Definition: Card.cs:3538
CardBlueprint bp
Definition: Card.cs:77
void ApplySocket(Thing t)
Definition: Card.cs:3547
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3892
void SetEncLv(int a)
Definition: Card.cs:3861
int genLv
Definition: Card.cs:194
bool autoIdentify
Definition: CoreDebug.cs:189
static SourceElement.Row GetRandomElement(int lv=1, bool useWeight=true)
Definition: ELEMENT.cs:556
int FurnitureBonus()
Definition: GuildThief.cs:26
Definition: Guild.cs:2
static GuildThief Thief
Definition: Guild.cs:60
static bool IsValidRangedMod(Thing t, SourceElement.Row row)
Definition: InvOwnerMod.cs:9
Element AddEnchant(int lv=-1)
Definition: Thing.cs:2047
bool IsMeleeWithAmmo
Definition: Thing.cs:20

References AddEnchant(), Card.AddSocket(), SourceElement.Row.alias, Card.ApplySocket(), CoreDebug.autoIdentify, CardBlueprint.blesstedState, Card.bp, EClass.debug, Card.elements, GuildThief.FurnitureBonus(), Card.genLv, GetEnchant(), Element.GetRandomElement(), Card.HasTag(), Card.id, IsMeleeWithAmmo, InvOwnerMod.IsValidRangedMod(), neg, CardBlueprint.qualityBonus, CardBlueprint.rarity, EClass.rnd(), ElementContainer.SetBase(), Card.SetBlessedState(), Card.SetEncLv(), source, and Guild.Thief.

◆ RemoveEnchant()

void Thing.RemoveEnchant ( )
inline

Definition at line 2061 of file Thing.cs.

2062 {
2063 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1488 of file Thing.cs.

1489 {
1490 p.matColor = base.colorInt;
1491 p.mat = base.material;
1492 if (!renderer.usePass)
1493 {
1494 return;
1495 }
1496 switch (trait.tileMode)
1497 {
1498 case Trait.TileMode.DefaultNoAnime:
1499 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1500 {
1501 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1502 }
1503 else
1504 {
1505 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1506 }
1507 break;
1508 case Trait.TileMode.FakeBlock:
1509 {
1510 p.color += 1572864f;
1511 SourceBlock.Row row = EClass.sources.blocks.map[base.refVal];
1512 p.tile = row._tiles[base.dir % row._tiles.Length];
1513 break;
1514 }
1515 case Trait.TileMode.SignalAnime:
1516 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1517 {
1518 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1519 }
1520 else
1521 {
1522 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1523 }
1524 if (animeCounter > 0f && source.anime.Length != 0)
1525 {
1526 animeCounter += Time.deltaTime;
1527 int num3 = (int)(animeCounter / (0.001f * (float)source.anime[1]));
1528 if (num3 > ((source.anime.Length > 2) ? source.anime[2] : source.anime[0]))
1529 {
1530 animeCounter = 0f;
1531 }
1532 else
1533 {
1534 p.tile += num3 % source.anime[0] * ((!flipX) ? 1 : (-1));
1535 }
1536 }
1537 break;
1538 case Trait.TileMode.Illumination:
1539 if (base.isOn || base.isRoofItem)
1540 {
1541 int num4 = (int)((float)base.uid + Time.realtimeSinceStartup * 5f);
1542 int num5 = (int)(Time.realtimeSinceStartup * 5f);
1543 p.tile = (sourceCard._tiles[base.dir % sourceCard._tiles.Length] + num4 % 3 + 1) * ((!flipX) ? 1 : (-1));
1544 if (num5 % 16 == 0)
1545 {
1546 p.color = 5242880f;
1547 }
1548 else if (num5 % 11 == 0)
1549 {
1550 p.color = 7864320f;
1551 }
1552 else
1553 {
1554 p.color = 13107200f;
1555 }
1556 }
1557 else
1558 {
1559 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1560 }
1561 break;
1562 case Trait.TileMode.Door:
1563 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1564 {
1565 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1566 }
1567 else
1568 {
1569 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1570 }
1571 if (parent is Zone && pos.cell.HasFullBlock)
1572 {
1573 p.tile += ((p.tile < 0f) ? (-64) : 64);
1574 }
1575 if (trait is TraitDoorSwing traitDoorSwing && traitDoorSwing.IsOpen())
1576 {
1577 p.tile += ((!(p.tile < 0f)) ? 1 : (-1));
1578 }
1579 break;
1580 default:
1581 {
1582 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1583 {
1584 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1585 }
1586 else
1587 {
1588 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1589 }
1590 float time = Time.realtimeSinceStartup;
1591 if (source.animeNoSync)
1592 {
1593 Rand.UseSeed(base.uid, delegate
1594 {
1595 time += EClass.rnd(1000);
1596 });
1597 }
1598 if (source.anime.Length == 0 || !trait.IsAnimeOn)
1599 {
1600 break;
1601 }
1602 if (source.anime.Length > 2)
1603 {
1604 float num = time * 1000f / (float)source.anime[1] % (float)source.anime[2];
1605 if ((int)num == source.anime[0] - 1 && source.anime.Length > 3)
1606 {
1607 PlaySound("anime_sound" + source.anime[3]);
1608 }
1609 if (!(num >= (float)source.anime[0]))
1610 {
1611 p.tile += num * (float)((!(p.tile < 0f)) ? 1 : (-1));
1612 }
1613 }
1614 else
1615 {
1616 float num2 = time * 1000f / (float)source.anime[1] % (float)source.anime[0];
1617 p.tile += num2 * (float)((!(p.tile < 0f)) ? 1 : (-1));
1618 }
1619 break;
1620 }
1621 }
1622 if (trait.IdSkin != 0 && sourceCard.skins.Length != 0)
1623 {
1624 int num6 = sourceCard.skins.TryGet(trait.IdSkin - 1);
1625 num6 = num6 / 100 * (int)source.renderData.pass.pmesh.tiling.x + num6 % 100;
1626 p.tile += ((p.tile < 0f) ? (-num6) : num6);
1627 }
1628 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6129
float animeCounter
Definition: Card.cs:73
virtual bool flipX
Definition: Card.cs:2116
bool HasFullBlock
Definition: Cell.cs:817
int[] skins
Definition: RenderRow.cs:14
int[] _tiles
Definition: RenderRow.cs:12
SourceBlock blocks
override bool IsOpen()
Definition: Trait.cs:7
virtual TileMode tileMode
Definition: Trait.cs:436
virtual bool UseAltTiles
Definition: Trait.cs:438
TileMode
Definition: Trait.cs:9
virtual int IdSkin
Definition: Trait.cs:45
virtual bool IsAnimeOn
Definition: Trait.cs:375

References SourceThing.Row._altTiles, RenderRow._tiles, SourceThing.Row.anime, SourceThing.Row.animeNoSync, SourceManager.blocks, TraitDoorSwing.IsOpen(), EClass.rnd(), EClass.sources, MeshPassParam.tile, and Rand.UseSeed().

Referenced by BaseTileMap.DrawTile(), TileMapElona.DrawTile(), and CharaActorPCC.OnRender().

◆ SetSource()

override void Thing.SetSource ( )
inlinevirtual

Reimplemented from Card.

Definition at line 166 of file Thing.cs.

167 {
168 source = EClass.sources.things.map.TryGetValue(id);
169 if (source != null && source.isOrigin)
170 {
172 id = source.id;
173 }
174 if (source == null)
175 {
176 Debug.LogWarning("Thing " + id + " not found");
177 id = "ash3";
179 }
180 }
Dictionary< string, CardRow > firstVariations
Definition: SourceCard.cs:10
SourceCard cards
SourceThing things

References SourceManager.cards, Debug, SourceCard.firstVariations, Card.id, source, EClass.sources, and SourceManager.things.

◆ ShowSplitMenu()

void Thing.ShowSplitMenu ( ButtonGrid  button,
InvOwner::Transaction  trans = null 
)
inline

Definition at line 1801 of file Thing.cs.

1802 {
1803 int count = 1;
1804 UIContextMenu i = EClass.ui.CreateContextMenuInteraction();
1805 bool buy = trans != null;
1806 UIButton buttonBuy = null;
1807 UIItem itemSlider = null;
1808 itemSlider = i.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1809 {
1810 count = (int)b;
1811 if (trans != null)
1812 {
1813 trans.num = count;
1814 }
1815 UpdateButton();
1816 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1817 if (buy)
1818 {
1819 buttonBuy = i.AddButton("invBuy", delegate
1820 {
1821 Process();
1822 });
1823 }
1824 i.onDestroy = delegate
1825 {
1826 if (!buy && !i.wasCanceled)
1827 {
1828 Process();
1829 }
1830 };
1831 i.Show();
1832 if ((bool)buttonBuy)
1833 {
1834 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1835 }
1836 UpdateButton();
1837 void Process()
1838 {
1839 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1840 {
1841 Debug.Log("Split bug1");
1842 }
1843 else if (button.card.isDestroyed || button.card.Num < count)
1844 {
1845 Debug.Log("Split bug2");
1846 }
1847 else if (EClass.pc.isDead)
1848 {
1849 Debug.Log("Split bug3");
1850 }
1851 else if (count != 0 && !Input.GetMouseButton(1))
1852 {
1853 if (trans != null)
1854 {
1855 trans.Process(startTransaction: true);
1856 }
1857 else
1858 {
1859 DragItemCard dragItemCard = new DragItemCard(button);
1860 if (count != base.Num)
1861 {
1862 Thing thing = button.card.Split(base.Num - count);
1863 button.invOwner.Container.AddThing(thing, tryStack: false);
1864 thing.invX = dragItemCard.from.invX;
1865 thing.invY = dragItemCard.from.invY;
1866 thing.posInvX = button.card.Thing.posInvX;
1867 thing.posInvY = button.card.Thing.posInvY;
1868 }
1869 EClass.ui.StartDrag(dragItemCard);
1870 }
1871 }
1872 }
1873 void UpdateButton()
1874 {
1875 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1876 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1877 if ((bool)buttonBuy)
1878 {
1879 buttonBuy.mainText.SetText(trans.GetTextDetail());
1880 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1881 buttonBuy.interactable = trans.IsValid();
1882 buttonBuy.RebuildLayout(recursive: true);
1883 buttonBuy.gameObject.GetComponent<CanvasGroup>().alpha = (trans.IsValid() ? 1f : 0.9f);
1884 }
1885 }
1886 }
Card card
Definition: ButtonGrid.cs:24
InvOwner invOwner
Definition: ButtonGrid.cs:28
int posInvY
Definition: Card.cs:350
Thing Split(int a)
Definition: Card.cs:3481
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3101
virtual Thing Thing
Definition: Card.cs:2058
int posInvX
Definition: Card.cs:338
bool isDead
Definition: Chara.cs:389
DragInfo from
Definition: DragItemCard.cs:54
static UI ui
Definition: EClass.cs:16
string GetTextDetail()
Definition: InvOwner.cs:447
bool Process(bool startTransaction=false)
Definition: InvOwner.cs:135
Card Container
Definition: InvOwner.cs:535
void Show(UIItem i)
UIContextMenuItem AddSlider(string text, Func< float, string > textFunc, float value, Action< float > action, float min=0f, float max=1f, bool isInt=false, bool hideOther=true, bool useInput=false)
void AddButton(Func< string > funcText, UnityAction action=null)
Definition: UIItem.cs:5

References Lang._weight(), UIContextMenu.AddButton(), UIContextMenu.AddSlider(), Card.AddThing(), ButtonGrid.card, InvOwner.Container, EClass.core, Debug, DragItemCard.from, ButtonGrid.invOwner, DragItemCard.DragInfo.invX, DragItemCard.DragInfo.invY, Chara.isDead, Card.isDestroyed, Core.IsGameStarted, Card.Num, EClass.pc, Card.posInvX, Card.posInvY, UIContextMenu.Show(), Card.Split(), Card.Thing, EClass.ui, and UIContextMenu.wasCanceled.

Referenced by InvOwner.OnCtrlClick().

◆ ShowSplitMenu2()

void Thing.ShowSplitMenu2 ( ButtonGrid  button,
string  lang,
Action< int >  onSplit = null 
)
inline

Definition at line 1888 of file Thing.cs.

1889 {
1890 int count = 1;
1891 UIContextMenu uIContextMenu = EClass.ui.CreateContextMenuInteraction();
1892 UIButton buttonBuy = null;
1893 UIItem itemSlider = null;
1894 itemSlider = uIContextMenu.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1895 {
1896 count = (int)b;
1897 UpdateButton();
1898 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1899 buttonBuy = uIContextMenu.AddButton("invBuy", delegate
1900 {
1901 Process();
1902 });
1903 uIContextMenu.onDestroy = delegate
1904 {
1905 };
1906 uIContextMenu.Show();
1907 if ((bool)buttonBuy)
1908 {
1909 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1910 }
1911 UpdateButton();
1912 void Process()
1913 {
1914 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1915 {
1916 Debug.Log("Split bug1");
1917 }
1918 else if (button.card.isDestroyed || button.card.Num < count)
1919 {
1920 Debug.Log("Split bug2");
1921 }
1922 else if (EClass.pc.isDead)
1923 {
1924 Debug.Log("Split bug3");
1925 }
1926 else if (count != 0 && !Input.GetMouseButton(1))
1927 {
1928 onSplit?.Invoke(count);
1929 }
1930 }
1931 void UpdateButton()
1932 {
1933 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1934 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1935 buttonBuy.mainText.SetText(lang.lang(count.ToString() ?? ""));
1936 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1937 buttonBuy.interactable = true;
1938 buttonBuy.RebuildLayout(recursive: true);
1939 }
1940 }
UIText mainText
Definition: UIButton.cs:102
void SetText(string s)
Definition: UIText.cs:159

References Lang._weight(), UIContextMenu.AddButton(), UIContextMenu.AddSlider(), ButtonGrid.card, EClass.core, Debug, Chara.isDead, Card.isDestroyed, Core.IsGameStarted, UIButton.mainText, Card.Num, EClass.pc, UIText.SetText(), UIContextMenu.Show(), and EClass.ui.

Referenced by UIDragGridIngredients.Update().

◆ TryLickEnchant()

void Thing.TryLickEnchant ( Chara  c,
bool  msg = true,
Chara  tg = null,
BodySlot  slot = null 
)
inline

Definition at line 1998 of file Thing.cs.

1999 {
2000 if (!base.IsEquipment || base.IsCursed || base.rarity <= Rarity.Normal || GetInt(107) > 0)
2001 {
2002 return;
2003 }
2004 SetInt(107, 1);
2005 if (tg == null)
2006 {
2007 Rand.SetSeed(EClass.world.date.day + source._index + c.uid);
2008 if (msg)
2009 {
2010 c.Say("lick", c, this);
2011 PlaySound("offering");
2012 PlayEffect("mutation");
2013 }
2014 Element element = AddEnchant(base.LV);
2015 if (element != null)
2016 {
2017 SetInt(107, element.id);
2018 }
2019 }
2020 else
2021 {
2022 Rand.SetSeed(base.uid);
2023 List<Element> list = new List<Element>();
2024 foreach (Element value in elements.dict.Values)
2025 {
2026 if (value.id != 67 && value.id != 66 && value.id != 64 && value.id != 65)
2027 {
2028 list.Add(value);
2029 }
2030 }
2031 if (list.Count > 0)
2032 {
2033 Element element2 = list.RandomItem();
2034 elements.ModBase(element2.id, Mathf.Max(EClass.rnd(Mathf.Abs(element2.vBase / 5)), 1));
2035 SetInt(107, element2.id);
2036 }
2037 if (msg)
2038 {
2039 c.Say("lick2", c, tg, slot.name.ToLower());
2040 tg.PlaySound("offering");
2041 tg.PlayEffect("mutation");
2042 }
2043 }
2044 Rand.SetSeed();
2045 }
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
string name
Definition: BodySlot.cs:14
int uid
Definition: Card.cs:122
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6163
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:6781
int day
Definition: Date.cs:62
static World world
Definition: EClass.cs:40
static void SetSeed(int a=-1)
Definition: Rand.cs:37
GameDate date
Definition: World.cs:6

References SourceData< T, T2 >.BaseRow._index, World.date, Date.day, Element.id, BodySlot.name, EClass.rnd(), Card.Say(), Rand.SetSeed(), Card.uid, Element.vBase, and EClass.world.

Referenced by Card.SpawnLoot(), and ThingGen.TryLickChest().

◆ WriteNote()

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

Reimplemented from Card.

Definition at line 878 of file Thing.cs.

879 {
880 if (sourceCard._origin == "dish")
881 {
883 }
884 string text2 = ((trait is TraitLunchLove) ? "_heart".lang().TagColor(FontColor.Bad) : "");
885 n.Clear();
886 string text3 = "";
887 TraitAbility traitAbility = trait as TraitAbility;
888 bool showEQStats = base.IsEquipmentOrRangedOrAmmo;
889 bool flag = mode == IInspect.NoteMode.Product;
890 bool flag2 = base.IsIdentified || flag;
891 text3 = base.Name;
892 if (base.rarity == Rarity.Legendary || base.rarity == Rarity.Mythical)
893 {
894 string text4 = (text3.Contains("『") ? "『" : (text3.Contains("《") ? "《" : ""));
895 if (text4 != "")
896 {
897 string[] array = text3.Split(text4);
898 text3 = array[0] + Environment.NewLine + text4 + array[1];
899 }
900 }
901 if (flag)
902 {
903 if (!(trait is TraitPotionAlchemy))
904 {
905 text3 = recipe.GetName();
906 }
907 if (trait.CraftNum > 1)
908 {
909 text3 = text3 + " x " + trait.CraftNum;
910 }
911 }
912 if (mode != IInspect.NoteMode.Recipe)
913 {
914 if (trait is TraitAbility)
915 {
916 EClass.pc.elements.GetOrCreateElement((trait as TraitAbility).act.id).AddHeaderAbility(n);
917 }
918 else
919 {
920 UIItem uIItem = n.AddHeaderCard(text3);
921 SetImage(uIItem.image2);
922 uIItem.image2.Rect().pivot = new Vector2(0.5f, 0.5f);
923 string text5 = base.Num.ToFormat() ?? "";
924 string text6 = (Mathf.Ceil(0.01f * (float)base.ChildrenAndSelfWeight) * 0.1f).ToString("F1") + "s";
925 if (things.Count > 0)
926 {
927 text5 = text5 + " (" + things.Count + ")";
928 }
929 if (base.ChildrenAndSelfWeight != SelfWeight)
930 {
931 text6 = text6 + " (" + (Mathf.Ceil(0.01f * (float)SelfWeight) * 0.1f).ToString("F1") + "s)";
932 }
933 text3 = "_quantity".lang(text5 ?? "", text6);
934 if (flag && recipe != null && (bool)LayerCraft.Instance)
935 {
936 text3 = text3 + " " + "_recipe_lv".lang(recipe.RecipeLv.ToString() ?? "");
937 }
938 uIItem.text2.SetText(text3);
939 if (showEQStats && flag2)
940 {
941 text3 = "";
942 if (DV != 0 || PV != 0 || base.HIT != 0 || base.DMG != 0 || Penetration != 0)
943 {
944 if (base.DMG != 0)
945 {
946 text3 = text3 + "DMG".lang() + ((base.DMG > 0) ? "+" : "") + base.DMG + ", ";
947 }
948 if (base.HIT != 0)
949 {
950 text3 = text3 + "HIT".lang() + ((base.HIT > 0) ? "+" : "") + base.HIT + ", ";
951 }
952 if (DV != 0)
953 {
954 text3 = text3 + "DV".lang() + ((DV > 0) ? "+" : "") + DV + ", ";
955 }
956 if (PV != 0)
957 {
958 text3 = text3 + "PV".lang() + ((PV > 0) ? "+" : "") + PV + ", ";
959 }
960 if (Penetration != 0)
961 {
962 text3 = text3 + "PEN".lang() + ((Penetration > 0) ? "+" : "") + Penetration + "%, ";
963 }
964 text3 = text3.TrimEnd(' ').TrimEnd(',');
965 }
966 if (!text3.IsEmpty())
967 {
968 n.AddText("NoteText_eqstats", text3);
969 }
970 if (trait is TraitToolRange traitToolRange)
971 {
972 n.AddText("NoteText_eqstats", "tip_range".lang(traitToolRange.BestDist.ToString() ?? ""));
973 }
974 }
975 else
976 {
977 string text7 = "";
979 {
980 int totalQuality = GetTotalQuality();
981 int totalQuality2 = GetTotalQuality(applyBonus: false);
982 text7 = text7 + "Lv. " + base.LV + " TQ. " + GetTotalQuality() + ((totalQuality == totalQuality2) ? "" : (" (" + totalQuality2 + ")"));
983 }
984 if (HasElement(10))
985 {
986 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_nutrition".lang(Evalue(10).ToFormat() ?? "");
987 }
988 if ((base.category.IsChildOf("throw") || base.category.IsChildOf("resource") || trait.IsTool) && !(trait is TraitAbility))
989 {
990 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_hardness".lang(base.material.hardness.ToString() ?? "");
991 }
992 if (flag && recipe != null && (bool)LayerCraft.Instance)
993 {
994 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_max_quality".lang(recipe.GetQualityBonus().ToString() ?? "");
995 }
996 if (!text7.IsEmpty())
997 {
998 n.AddText("NoteText_eqstats", text7);
999 }
1000 }
1001 }
1002 string detail = GetDetail();
1003 if (!detail.IsEmpty())
1004 {
1005 LayoutElement component = n.AddText("NoteText_flavor", detail).GetComponent<LayoutElement>();
1006 if (flag)
1007 {
1008 component.preferredWidth = 400f;
1009 }
1010 n.Space(8);
1011 }
1012 }
1013 if (trait is TraitBookPlan)
1014 {
1015 TraitBookPlan traitBookPlan = trait as TraitBookPlan;
1016 n.AddText("NoteText_flavor", traitBookPlan.source.GetDetail());
1017 n.Space(8);
1018 }
1019 if (traitAbility != null)
1020 {
1021 n.Space(8);
1022 Act act = traitAbility.CreateAct();
1023 Element orCreateElement = EClass.pc.elements.GetOrCreateElement(act.source.id);
1024 orCreateElement._WriteNote(n, EClass.pc.elements, null, isRef: false, addHeader: false);
1025 orCreateElement._WriteNote(n, EClass.pc, act);
1026 return;
1027 }
1029 {
1030 n.AddText("(id:" + id + " tile:" + (source.tiles.IsEmpty() ? "-" : ((object)source.tiles[0]))?.ToString() + ") lv:" + base.LV + " price:" + GetPrice());
1031 }
1032 Card root = GetRootCard();
1033 if (root != null && root != EClass.pc && root != this && root.ExistsOnMap && !((parent as Thing)?.trait is TraitChestMerchant))
1034 {
1035 n.AddText("isChildOf".lang(GetRootCard().Name), FontColor.ItemName);
1036 }
1037 if (flag2)
1038 {
1039 AddTextWithIcon("isMadeOf".lang(base.material.GetText(), base.material.hardness.ToString() ?? ""), EClass.core.refs.icons.enc.mat, FontColor.Default);
1040 }
1041 AddText("isCategorized".lang(base.category.GetText()), FontColor.Default);
1042 if (base.category.skill != 0)
1043 {
1044 int key = base.category.skill;
1045 int key2 = 132;
1046 if (base.IsRangedWeapon && !base.IsMeleeWeapon)
1047 {
1048 key2 = 133;
1049 }
1051 {
1052 key2 = 304;
1053 }
1054 if (Evalue(482) > 0)
1055 {
1056 key = 305;
1057 key2 = 304;
1058 }
1059 AddText("isUseSkill".lang(EClass.sources.elements.map[key].GetName().ToTitleCase(wholeText: true), EClass.sources.elements.map[key2].GetName().ToTitleCase(wholeText: true)), FontColor.Default);
1060 }
1061 if (base.IsContainer)
1062 {
1063 AddText("isContainer".lang(things.MaxCapacity.ToString() ?? ""), FontColor.Default);
1064 }
1065 if (base.c_lockLv != 0)
1066 {
1067 AddText((base.c_lockedHard ? "isLockedHard" : "isLocked").lang(base.c_lockLv.ToString() ?? ""), FontColor.Warning);
1068 }
1069 if (base.isCrafted && recipe == null)
1070 {
1071 AddText("isCrafted".lang(), FontColor.Default);
1072 }
1073 if (trait.Decay > 0)
1074 {
1075 string text8 = "";
1076 text8 = (base.IsDecayed ? "isRotten" : (base.IsRotting ? "isRotting" : ((!base.IsFresn) ? "isNotFresh" : "isFresh")));
1077 AddText(text8.lang(), FontColor.Default);
1078 }
1079 if (base.isDyed)
1080 {
1081 AddText("isDyed".lang(base.DyeMat.GetName() ?? ""), FontColor.Default);
1082 }
1083 if (base.IsEquipment)
1084 {
1085 text3 = "isEquipable".lang(Element.Get(base.category.slot).GetText());
1086 AddText(text3, FontColor.Default);
1087 }
1088 if (base.isFireproof)
1089 {
1090 AddText("isFreproof", FontColor.Default);
1091 }
1092 if (base.isAcidproof)
1093 {
1094 AddText("isAcidproof", FontColor.Default);
1095 }
1096 if (trait.Electricity > 0)
1097 {
1098 AddText("isGenerateElectricity".lang(trait.Electricity.ToString() ?? ""), FontColor.Default);
1099 }
1100 if (trait.Electricity < 0)
1101 {
1102 AddText("isConsumeElectricity".lang(Mathf.Abs(trait.Electricity).ToString() ?? ""), FontColor.Default);
1103 }
1104 if (base.IsUnique)
1105 {
1106 AddText("isPrecious", FontColor.Default);
1107 }
1108 if (base.isCopy)
1109 {
1110 AddText("isCopy", FontColor.Default);
1111 }
1112 if (flag && HasTag(CTAG.noMix))
1113 {
1114 AddText("isNoMix", FontColor.Default);
1115 }
1116 if (!trait.CanBeDestroyed)
1117 {
1118 AddText("isIndestructable", FontColor.Default);
1119 }
1120 if (GetInt(107) > 0)
1121 {
1122 AddText("isLicked", FontColor.Great);
1123 }
1124 if (HasRune())
1125 {
1126 AddTextWithIcon("isRuneAdded", EClass.core.refs.icons.enc.rune, FontColor.Great);
1127 }
1128 if (!base.c_idDeity.IsEmpty())
1129 {
1131 AddText("isDeity".lang(religion.Name), FontColor.Myth);
1132 }
1133 if (base.isGifted && GetRoot() != EClass.pc)
1134 {
1135 AddText("isGifted", FontColor.Ether);
1136 }
1137 if (base.isNPCProperty)
1138 {
1139 AddText("isNPCProperty", FontColor.Ether);
1140 }
1141 if (base.c_priceFix != 0)
1142 {
1143 AddText(((base.c_priceFix > 0) ? "isPriceUp" : "isPriceDown").lang(Mathf.Abs(base.c_priceFix).ToString() ?? ""), FontColor.Ether);
1144 }
1145 if (base.noSell)
1146 {
1147 AddText("isNoSell", FontColor.Ether);
1148 }
1150 {
1151 AddText("isOnlyUsableByPC", FontColor.Ether);
1152 }
1153 if (base.isStolen)
1154 {
1155 AddText("isStolen", FontColor.Ether);
1156 }
1157 if (base.c_isImportant)
1158 {
1159 AddText("isMarkedImportant", FontColor.Ether);
1160 }
1161 if (GetInt(25) != 0)
1162 {
1163 AddText("isDangerLv".lang((GetInt(25) + 1).ToString() ?? "", (EClass.pc.FameLv + 10).ToString() ?? ""), FontColor.Default);
1164 }
1165 FontColor col2 = FontColor.Util;
1166 if (trait is TraitTool && !(trait is TraitToolRange))
1167 {
1168 if (HasElement(220))
1169 {
1170 AddText("canMine".lang(), col2);
1171 }
1172 if (HasElement(225))
1173 {
1174 AddText("canLumberjack".lang(), col2);
1175 AddText("canLumberjack2".lang(), col2);
1176 }
1177 if (HasElement(230))
1178 {
1179 AddText("canDig", col2);
1180 }
1181 if (HasElement(286))
1182 {
1183 AddText("canFarm", col2);
1184 }
1185 if (HasElement(245))
1186 {
1187 AddText("canFish", col2);
1188 }
1189 if (HasElement(237))
1190 {
1191 AddText("canTame", col2);
1192 }
1193 }
1194 if (trait is TraitToolMusic)
1195 {
1196 AddText("canPlayMusic".lang(), col2);
1197 }
1198 if (Lang.Has("hint_" + trait.ToString()))
1199 {
1200 AddText("hint_" + trait.ToString(), FontColor.Util);
1201 }
1202 if (Lang.Has("hint_" + trait.ToString() + "2"))
1203 {
1204 AddText("hint_" + trait.ToString() + "2", FontColor.Util);
1205 }
1206 if (HasTag(CTAG.tourism))
1207 {
1208 AddText("isTourism", FontColor.Util);
1209 }
1210 string langPlaceType = base.TileType.LangPlaceType;
1211 if (langPlaceType == "place_Door" || langPlaceType == "place_WallMount")
1212 {
1213 AddText(base.TileType.LangPlaceType + "_hint".lang(), FontColor.Util);
1214 }
1215 if (trait.IsHomeItem)
1216 {
1217 AddText("isHomeItem".lang(), FontColor.Util);
1218 }
1219 if (HasTag(CTAG.throwWeapon))
1220 {
1221 AddText("isThrowWeapon", FontColor.Default);
1222 }
1223 if (EClass.debug.showExtra && HasTag(CTAG.throwWeaponEnemy))
1224 {
1225 AddText("isThrowWeaponEnemy", FontColor.Default);
1226 }
1228 {
1229 AddText("isNoProcessIng", FontColor.Default);
1230 }
1231 if (HasElement(10))
1232 {
1233 AddText("isEdible", FontColor.Default);
1234 }
1235 if (FoodEffect.IsLeftoverable(this))
1236 {
1237 AddText("isLeftoverable", FontColor.Default);
1238 }
1239 if (HasTag(CTAG.rareResource))
1240 {
1241 AddText("isRareResource", FontColor.Great);
1242 }
1243 if (trait is TraitBed traitBed)
1244 {
1245 AddText("isBed".lang(traitBed.MaxHolders.ToString() ?? ""), FontColor.Default);
1246 }
1247 bool flag3 = base.IsEquipmentOrRangedOrAmmo || base.IsThrownWeapon || trait is TraitToolMusic;
1248 bool showTraits = !flag3 || base.ShowFoodEnc;
1249 bool infoMode = mode == IInspect.NoteMode.Info;
1250 List<Element> listTrait = ListValidTraits(isCraft: false, !infoMode);
1251 List<Element> list = ListValidTraits(isCraft: false, limit: false);
1252 if (list.Count - listTrait.Count <= 1)
1253 {
1254 listTrait = list;
1255 }
1256 if (flag2)
1257 {
1258 Element element = elements.GetElement(653);
1259 if (element != null)
1260 {
1261 AddText("isAlive".lang(element.vBase.ToString() ?? "", (element.vExp / 10).ToString() ?? "", (element.ExpToNext / 10).ToString() ?? ""), FontColor.Great);
1262 }
1263 if (flag3)
1264 {
1265 string[] rangedSubCats = new string[2] { "eleConvert", "eleAttack" };
1266 elements.AddNote(n, delegate(Element e)
1267 {
1268 if (trait is TraitToolRange && base.category.slot == 0 && !(e is Ability) && !rangedSubCats.Contains(e.source.categorySub) && !e.HasTag("modRanged"))
1269 {
1270 return false;
1271 }
1272 if (e.IsTrait || (showTraits && listTrait.Contains(e)))
1273 {
1274 return false;
1275 }
1276 if (!e.IsGlobalElement)
1277 {
1278 if (e.source.tag.Contains("weaponEnc") && !base.IsWeapon && !base.IsRangedWeapon && !base.IsAmmo && !base.IsThrownWeapon && !(trait is TraitToolMusic))
1279 {
1280 return false;
1281 }
1282 if (e.source.IsWeaponEnc && !base.category.IsChildOf("shield") && !base.IsWeapon && !base.IsRangedWeapon && !base.IsAmmo && !base.IsThrownWeapon && !(trait is TraitToolMusic))
1283 {
1284 return false;
1285 }
1286 }
1287 return (!showEQStats || (e.id != 64 && e.id != 65 && e.id != 66 && e.id != 67)) ? true : false;
1288 }, null, ElementContainer.NoteMode.Default, addRaceFeat: false, delegate(Element e, string s)
1289 {
1290 if (mode != IInspect.NoteMode.Info)
1291 {
1292 return s;
1293 }
1294 int num3 = e.Value;
1295 if (e.source.IsWeaponEnc && (!e.source.tag.Contains("modRanged") || e.id == 609) && isEquipped && root.isChara)
1296 {
1297 int num4 = e.id;
1298 if (num4 != 482 && (uint)(num4 - 660) > 2u && num4 != 666)
1299 {
1300 num3 = num3 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara, this)) / 100;
1301 }
1302 }
1303 string text13 = " (" + e.Value + ((e.Value == num3) ? "" : (" → " + num3)) + ")";
1304 string text14 = "_bracketLeft3".lang() + e.Name + "_bracketRight3".lang();
1305 return s + text13 + " " + text14;
1306 });
1307 }
1308 if (sockets != null)
1309 {
1310 foreach (int socket in sockets)
1311 {
1312 AddText((socket == 0) ? "emptySocket".lang() : "socket".lang(EClass.sources.elements.map[socket / 1000].GetName(), (socket % 1000).ToString() ?? ""), FontColor.Gray);
1313 }
1314 }
1315 }
1316 trait.WriteNote(n, flag2);
1317 if (flag2)
1318 {
1319 if (showTraits)
1320 {
1321 elements.AddNote(n, (Element e) => listTrait.Contains(e), null, ElementContainer.NoteMode.BonusTrait, addRaceFeat: false, (Element e, string s) => s + GetTextTrait(e), delegate
1322 {
1323 });
1324 if (listTrait.Count != list.Count)
1325 {
1326 AddText("traitOther".lang((list.Count - listTrait.Count).ToString() ?? ""), FontColor.Default);
1327 }
1328 }
1329 if (base.c_mixedFoodData != null)
1330 {
1331 n.AddHeader("isMixedFood");
1332 foreach (string text15 in base.c_mixedFoodData.texts)
1333 {
1334 AddText("_bullet".lang() + text15 + text2, FontColor.Default);
1335 }
1336 }
1337 }
1338 else
1339 {
1340 AddText("isUnidentified".lang(), FontColor.Flavor);
1341 if (base.c_IDTState == 1)
1342 {
1343 AddText("isUnidentified2".lang(), FontColor.Flavor);
1344 }
1345 }
1346 if (mode == IInspect.NoteMode.Product && HasCraftBonusTrait())
1347 {
1348 n.AddHeader("HeaderAdditionalTrait", "additional_trait");
1349 foreach (Element item in ListCraftBonusTraits())
1350 {
1351 item.AddEncNote(n, this, ElementContainer.NoteMode.BonusTrait, (Element e, string s) => s + GetTextTrait(e));
1352 }
1353 }
1355 {
1356 n.AddText("decay:" + base.decay);
1357 n.AddText(base.isDyed + "/" + id + "/" + base.refVal + "/" + base.LV + "/" + trait);
1358 if (source.origin != null)
1359 {
1360 n.AddText(source.origin.id);
1361 }
1362 }
1363 if (id == "statue_weird")
1364 {
1365 AddText("weirdStatue", FontColor.Default);
1366 }
1367 if (base.isReplica)
1368 {
1369 AddText("isReplica", FontColor.Passive);
1370 }
1371 if (flag2 && mode != IInspect.NoteMode.Product)
1372 {
1373 Chara chara = GetRootCard() as Chara;
1375 {
1376 chara = null;
1377 }
1378 if (base.c_equippedSlot != 0 && base.category.slot == 35 && chara != null)
1379 {
1380 AddAttackEvaluation(n, chara, this);
1381 }
1382 if (base.IsThrownWeapon || base.IsRangedWeapon || (base.IsMeleeWeapon && base.c_equippedSlot == 0))
1383 {
1384 n.AddHeader("headerAttackEval");
1385 AttackProcess.Current.Prepare(chara ?? EClass.pc, this, null, null, 0, base.IsThrownWeapon);
1386 string text9 = AttackProcess.Current.GetText();
1387 text9 = text9.TagColor(() => true);
1388 n.AddText(text9);
1389 }
1390 }
1391 if (base.ammoData != null)
1392 {
1393 n.AddHeader("headerAttackAmmo");
1394 n.AddText(base.ammoData.Name);
1395 }
1396 onWriteNote?.Invoke(n);
1397 if (mode == IInspect.NoteMode.Product && base.IsEquipmentOrRangedOrAmmo)
1398 {
1399 AddText("isProductWarning", FontColor.Default);
1400 }
1401 if ((bool)LayerDragGrid.Instance)
1402 {
1404 }
1406 {
1407 foreach (Element value in elements.dict.Values)
1408 {
1409 n.AddText(value.source.alias + "/" + value.Value + "/" + value.vBase + "/" + value.vSource);
1410 }
1411 }
1412 n.Build();
1413 void AddText(string text, FontColor col)
1414 {
1415 n.AddText("NoteText_enc", text, col);
1416 }
1417 void AddTextWithIcon(string text, Sprite sprite, FontColor col)
1418 {
1419 UIItem uIItem2 = n.AddText("NoteText_enc", text, col);
1420 uIItem2.image1.SetActive(enable: true);
1421 uIItem2.image1.sprite = sprite;
1422 }
1423 string GetTextTrait(Element e)
1424 {
1425 string text10 = e.source.GetText("textExtra");
1426 if (text10.IsEmpty())
1427 {
1428 return "";
1429 }
1430 if (e.id == 710)
1431 {
1432 text10 = text10.Replace("#1", $"{0.1f * (float)(e.Value + 10):F1}");
1433 }
1434 string text11 = "";
1435 if (e.id == 2 && mode == IInspect.NoteMode.Product)
1436 {
1437 int num = recipe.GetQualityBonus() / 10;
1438 if (num >= 0)
1439 {
1440 num++;
1441 }
1442 text11 = "qualityLimit".lang(num.ToString() ?? "");
1443 }
1444 int num2 = e.Value / 10;
1445 num2 = ((e.Value < 0) ? (num2 - 1) : (num2 + 1));
1446 string text12 = num2.ToString() ?? "";
1447 if (EClass.pc.HasElement(1250) && HasElement(710) && e.IsFoodTrait && e.id != 710)
1448 {
1449 text12 = (int)((float)num2 * 0.1f * (float)(Evalue(710) + 10)) + " (" + num2 + ")";
1450 }
1451 text10 = "Lv." + text12 + text11 + " " + text10;
1452 if (infoMode && e.IsFoodTraitMain)
1453 {
1454 text10 += "traitAdditive".lang();
1455 }
1456 return (" <size=12>" + text10 + "</size>").TagColor(FontColor.Passive);
1457 }
1458 }
FontColor
Definition: FontColor.cs:2
static int GetTwoHandEncBonus(Chara CC, Thing w)
string _origin
Definition: CardRow.cs:15
int FameLv
Definition: Card.cs:2298
bool HasRune()
Definition: Card.cs:3724
ICardParent GetRoot()
Definition: Card.cs:3414
bool IsThrownWeapon
Definition: Card.cs:2245
virtual string GetDetail()
Definition: Card.cs:2625
string Name
Definition: Card.cs:2137
bool ExistsOnMap
Definition: Card.cs:2085
bool HasCraftBonusTrait()
Definition: Card.cs:6919
virtual bool isChara
Definition: Card.cs:2083
int Evalue(int ele)
Definition: Card.cs:2571
void CheckJustCooked()
Definition: Card.cs:6587
Card parentCard
Definition: Card.cs:103
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6070
List< Element > ListCraftBonusTraits()
Definition: Card.cs:6924
int GetTotalQuality(bool applyBonus=true)
Definition: Card.cs:3833
Icons icons
Definition: CoreRef.cs:355
CoreRef refs
Definition: Core.cs:51
void AddNote(UINote n, Func< Element, bool > isValid=null, Action onAdd=null, NoteMode mode=NoteMode.Default, bool addRaceFeat=false, Func< Element, string, string > funcText=null, Action< UINote, Element > onAddNote=null)
Element GetOrCreateElement(Element ele)
int vExp
Definition: ELEMENT.cs:254
void _WriteNote(UINote n, Chara c, Act act)
Definition: ELEMENT.cs:606
static SourceElement.Row Get(int id)
Definition: ELEMENT.cs:401
bool HasTag(string tag)
Definition: ELEMENT.cs:473
int vSource
Definition: ELEMENT.cs:262
bool IsGlobalElement
Definition: ELEMENT.cs:345
virtual int ExpToNext
Definition: ELEMENT.cs:308
static bool IsLeftoverable(Thing food)
Definition: FoodEffect.cs:6
ReligionManager religions
Definition: Game.cs:158
virtual void OnWriteNote(Thing t, UINote n)
static bool Has(string id)
Definition: Lang.cs:100
static LayerCraft Instance
Definition: LayerCraft.cs:8
InvOwnerDraglet owner
static LayerDragGrid Instance
int RecipeLv
Definition: Recipe.cs:240
int GetQualityBonus()
Definition: Recipe.cs:397
string GetName()
Definition: Recipe.cs:777
Religion Find(string id)
ReligionEyth Eyth
int Penetration
Definition: Thing.cs:34
static void AddAttackEvaluation(UINote n, Chara chara, Thing current=null)
Definition: Thing.cs:1460
List< Element > ListValidTraits(bool isCraft, bool limit)
Definition: Thing.cs:853
override Act CreateAct()
Definition: TraitAbility.cs:13
override SourceElement.Row source
virtual bool Contains(RecipeSource r)
Definition: Trait.cs:582
virtual void WriteNote(UINote n, bool identified)
Definition: Trait.cs:953
virtual bool IsTool
Definition: Trait.cs:366
virtual bool CanBeDestroyed
Definition: Trait.cs:294
virtual int CraftNum
Definition: Trait.cs:132
virtual bool IsOnlyUsableByPc
Definition: Trait.cs:69
virtual bool IsHomeItem
Definition: Trait.cs:252
virtual int Electricity
Definition: Trait.cs:102
virtual int Decay
Definition: Trait.cs:120
Image image2
Definition: UIItem.cs:16
Image image1
Definition: UIItem.cs:14
UIText text2
Definition: UIItem.cs:8
UIItem AddHeaderCard(string text, Sprite sprite=null)
Definition: UINote.cs:84
void Clear()
Definition: UINote.cs:35
void Space(int sizeY=0, int sizeX=1)
Definition: UINote.cs:62
void Build()
Definition: UINote.cs:49
NoteMode
Definition: IInspect.cs:7

References CardRow._origin, Element._WriteNote(), UINote.AddHeaderCard(), UINote.AddText(), Card.Chara, UINote.Clear(), Trait.Contains(), EClass.core, TraitAbility.CreateAct(), EClass.debug, Card.elements, SourceManager.elements, CoreRef.Icons.enc, Card.ExistsOnMap, Element.ExpToNext, ReligionManager.Eyth, Card.FameLv, ReligionManager.Find(), EClass.game, Element.Get(), ElementContainer.GetOrCreateElement(), AttackProcess.GetTwoHandEncBonus(), Lang.Has(), Element.HasTag(), CoreRef.icons, Element.id, if(), UIItem.image2, LayerCraft.Instance, Card.isChara, Element.IsGlobalElement, FoodEffect.IsLeftoverable(), Element.IsTrait, CoreRef.Icons.Enc.mat, EClass.pc, Core.refs, religion, Game.religions, CoreRef.Icons.Enc.rune, UIText.SetText(), CoreDebug.showExtra, Element.source, TraitBookSkill.source, EClass.sources, UINote.Space(), UIItem.text2, RenderRow.tiles, Element.Value, Element.vBase, and Element.vExp.

Referenced by DramaCustomSequence.Build(), WindowCharaMini.RefreshEquipment(), WindowChara.RefreshEquipment(), LayerCraft.RefreshProduct(), GridItemCardSource.SetButton(), and UICardInfo.SetThing().

Member Data Documentation

◆ MaxFurnitureEnc

const int Thing.MaxFurnitureEnc = 12
static

Definition at line 9 of file Thing.cs.

◆ source

◆ stackOrder

int Thing.stackOrder

Definition at line 13 of file Thing.cs.

Referenced by Map.Save().

◆ tempName

string Thing.tempName

Definition at line 15 of file Thing.cs.

Referenced by ThingContainer.RefreshGrid().

Property Documentation

◆ CanSearchContents

bool Thing.CanSearchContents
get

Definition at line 99 of file Thing.cs.

100 {
101 get
102 {
103 if (base.IsContainer && base.c_lockLv == 0 && !base.isNPCProperty)
104 {
105 return trait.CanSearchContent;
106 }
107 return false;
108 }
109 }
virtual bool CanSearchContent
Definition: Trait.cs:217

Referenced by ThingContainer._ListCurrency(), ThingContainer.AddFactory(), Card.AddThing(), ThingContainer.Find(), ThingContainer.Find< T >(), ThingContainer.Foreach(), ThingContainer.GetCurrency(), ThingContainer.GetDest(), ThingContainer.GetThingStack(), TaskDump.IsValidContainer(), LayerInventory.TryShowGuide(), and ThingContainer.TryStack().

◆ isEquipped

◆ IsMeleeWithAmmo

bool Thing.IsMeleeWithAmmo
get

Definition at line 19 of file Thing.cs.

20 {
21 get
22 {
23 if (trait is TraitToolRange)
24 {
25 return isEquipped;
26 }
27 return false;
28 }
29 }

Referenced by ActMelee.Attack(), and OnCreate().

◆ IsSharedContainer

bool Thing.IsSharedContainer
get

Definition at line 111 of file Thing.cs.

112 {
113 get
114 {
115 if (base.IsContainer && base.c_lockLv == 0 && !base.isNPCProperty)
116 {
117 Window.SaveData obj = GetObj<Window.SaveData>(2);
118 if (obj == null)
119 {
120 return false;
121 }
122 return obj.sharedType == ContainerSharedType.Shared;
123 }
124 return false;
125 }
126 }
ContainerSharedType
Definition: Window.cs:13

Referenced by AI_Shopping.Buy(), QuestSharedContainer.CanUpdateOnTalk(), AI_Idle.Run(), TraitBaseContainer.SetName(), Zone.TryAddThingInSharedContainer(), Zone.TryGetThingFromSharedContainer(), and Chara.TryTakeSharedItems().

◆ isThing

override bool Thing.isThing
get

Definition at line 45 of file Thing.cs.

◆ Penetration

int Thing.Penetration
get

Definition at line 33 of file Thing.cs.

34 {
35 get
36 {
37 if (source.substats.Length == 0)
38 {
39 return 0;
40 }
41 return source.substats[0];
42 }
43 }

Referenced by AttackProcess.Prepare().

◆ Pref

override SourcePref Thing.Pref
get

Definition at line 49 of file Thing.cs.

50 {
51 get
52 {
53 if (trait is TraitFakeBlock)
54 {
55 TileType tileType = EClass.sources.blocks.map[base.refVal].tileType;
56 if (tileType is TileTypePillar)
57 {
59 }
60 if (tileType is TileTypeFence)
61 {
63 }
64 if (tileType is TileTypeStairs)
65 {
67 }
68 if (tileType is TileTypeWall)
69 {
71 }
72 }
73 if (source.origin == null || source.pref.UsePref)
74 {
75 return source.pref;
76 }
77 return source.origin.pref;
78 }
79 }
SourcePref blockWall
Definition: CoreRef.cs:336
SourcePref blockPillar
Definition: CoreRef.cs:338
SourcePref blockFence
Definition: CoreRef.cs:332
SourcePref blockStairs
Definition: CoreRef.cs:334
PrefData prefs
Definition: CoreRef.cs:415

Referenced by Chara._Move(), BaseTileMap.DrawTile(), Cell.GetSurfaceHeight(), BaseTileMap.GetThingPosition(), and CoreDebug.UpdateInput().

◆ range

int Thing.range
get

Definition at line 31 of file Thing.cs.

Referenced by TraitTrainingDummy.IdleUse().

◆ SelfWeight

override int Thing.SelfWeight
get

Definition at line 81 of file Thing.cs.

82 {
83 get
84 {
85 if (!base.IsUnique)
86 {
87 return (int)((long)(base.isWeightChanged ? base.c_weight : source.weight) * (long)base.material.weight / 100);
88 }
89 if (!base.isWeightChanged)
90 {
91 return source.weight;
92 }
93 return base.c_weight;
94 }
95 }

Referenced by InvOwnerDeliver._OnProcess(), CanStackTo(), RecipeCard.Craft(), ThingGen.CreateTreasureContent(), Religion.GetOfferingValue(), CraftUtil.MixIngredients(), TraitBrewery.OnChildDecay(), AttackProcess.Prepare(), and Chara.Revive().

◆ sourceCard

◆ Tiles

override int [] Thing.Tiles
get

Definition at line 97 of file Thing.cs.


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