Elin Decompiled Documentation EA 23.349 Nightly
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 ()
 
override int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
List< Element > ListLimitedValidTraits (bool limit)
 
List< Element > ListValidTraits (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 ()
 
void Attune (Chara c)
 
Thing Identify (bool show=true, IDTSource idtSource=IDTSource.Identify)
 
override bool MatchEncSearch (string s)
 
- Public Member Functions inherited from Card
bool GetBool (string id)
 
void SetBool (string id, bool enable)
 
int GetInt (string id, int? defaultInt=null)
 
void AddInt (string id, int value)
 
void SetInt (string id, int value=0)
 
string GetStr (string id, string defaultStr=null)
 
void SetStr (string id, string value=null)
 
T GetObj< T > (string id)
 
void SetObj (string id, object o)
 
T SetObj< T > (string id, object o)
 
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (Recipe.Ingredient ing)
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
void ModExpParty (int ele, int a)
 
bool IsChildOf (Card c)
 
T FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a, bool applyMod=true)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void PurgeEythArtifact ()
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (long a, HealSource origin=HealSource.None)
 
virtual void HealHP (long a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual long ApplyProtection (long dmg, int mod=100)
 
int GetResistPenetrationLevel (int idEle, AttackSource attackSource, Card origin=null)
 
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, int resistPenetrationLevel=0)
 
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, bool makeRef=true)
 
void MakeFoodRef (Card c1, Card c2=null)
 
string TryGetFoodName (Card c)
 
string GetFoodName (string s)
 
void MakeFigureFrom (string id)
 
Card MakeRefFrom (string id)
 
void MakeRefFrom (Card c1, Card c2=null, bool simple=false)
 
Thing MakeEgg (bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
 
Thing MakeMilk (bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
 
Thing GiveBirth (Thing t, bool effect)
 
void HatchEgg ()
 
Card SetHidden (bool hide=true)
 
virtual MoveResult _Move (Point p, MoveType type=MoveType.Walk)
 
void MoveImmediate (Point p, bool focus=true, bool cancelAI=true)
 
void Teleport (Point point, bool silent=false, bool force=false)
 
virtual void OnLand ()
 
MoveResult TryMoveFrom (Point p)
 
virtual MoveResult TryMove (Point newPoint, bool allowDestroyPath=true)
 
void Kick (Point p, bool ignoreSelf=false, bool checkWall=true)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, bool includeNagative=false)
 
bool HasElement (int ele, int req)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
int 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 StripTalkSpecialCharacters (string text)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< Element > ListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
virtual T GetCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
T GetObj< T > (int id)
 
void SetObj (int id, object o)
 
T 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 (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 

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()
 
Point lastPos = 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]
 
override RenderRow TileRow [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 isFav [get, set]
 
bool isHatchling [get, set]
 
bool isBackerContent [get]
 
SourceBacker.Row sourceBacker [get]
 
BedType c_bedType [get, set]
 
int c_equippedSlot [get, set]
 
int c_lockLv [get, set]
 
Hostility c_originalHostility [get, set]
 
MinionType c_minionType [get, set]
 
int c_vomit [get, set]
 
bool c_wasInPcParty [get, set]
 
bool c_isImportant [get, set]
 
bool c_lockedHard [get, set]
 
bool c_revealLock [get, set]
 
bool c_isTrained [get, set]
 
bool c_isPrayed [get, set]
 
bool c_isDisableStockUse [get, set]
 
int c_lightColor [get, set]
 
Color LightColor [get]
 
int c_uidZone [get, set]
 
int c_uidRefCard [get, set]
 
int c_priceFix [get, set]
 
int c_priceAdd [get, set]
 
int c_priceCopy [get, set]
 
int c_fixedValue [get, set]
 
int c_uidAttune [get, set]
 
int c_dyeMat [get, set]
 
VisitorState visitorState [get, set]
 
RescueState c_rescueState [get, set]
 
BossType c_bossType [get, set]
 
int c_dateStockExpire [get, set]
 
int c_dateDeathLock [get, set]
 
int c_IDTState [get, set]
 
int c_charges [get, set]
 
int c_bill [get, set]
 
int c_invest [get, set]
 
int c_seed [get, set]
 
int c_allowance [get, set]
 
int c_fur [get, set]
 
int c_dateCooked [get, set]
 
int c_lockedAge [get, set]
 
int c_containerSize [get, set]
 
int c_weight [get, set]
 
int c_diceDim [get, set]
 
int c_indexContainerIcon [get, set]
 
int c_idMainElement [get, set]
 
int c_summonDuration [get, set]
 
int c_idBacker [get, set]
 
int c_uidMaster [get, set]
 
int c_ammo [get, set]
 
int c_daysWithGod [get, set]
 
int c_daysWithPC [get, set]
 
string c_idPortrait [get, set]
 
string c_idRace [get, set]
 
string c_idJob [get, set]
 
string c_idTone [get, set]
 
string c_color [get, set]
 
string c_idSpriteReplacer [get, set]
 
string c_idTalk [get, set]
 
string c_idDeity [get, set]
 
string c_altName [get, set]
 
string c_altName2 [get, set]
 
string c_extraNameRef [get, set]
 
string c_refText [get, set]
 
string c_idRefName [get, set]
 
string c_idRidePCC [get, set]
 
string c_idAbility [get, set]
 
string c_context [get, set]
 
string c_idEditor [get, set]
 
string c_editorTags [get, set]
 
string c_editorTraitVal [get, set]
 
string c_idTrait [get, set]
 
string c_idRefCard [get, set]
 
string c_idRefCard2 [get, set]
 
string c_note [get, set]
 
UniqueData c_uniqueData [get, set]
 
Thing ammoData [get, set]
 
List< SocketData > socketList [get, set]
 
Thing c_copyContainer [get, set]
 
Window.SaveData c_windowSaveData [get, set]
 
CharaUpgrade c_upgrades [get, set]
 
LoveData c_love [get, set]
 
CharaGenes c_genes [get, set]
 
List< int > c_corruptionHistory [get, set]
 
ContainerUpgrade c_containerUpgrade [get, set]
 
DNA c_DNA [get, set]
 
CharaList c_charaList [get, set]
 
MixedFoodData c_mixedFoodData [get, set]
 
Thing c_bloodData [get, set]
 
byte[] c_textureData [get, set]
 
SourceMaterial.Row DyeMat [get]
 
int invX [get, set]
 
int invY [get, set]
 
CardRow refCard [get]
 
CardRow refCard2 [get]
 
int ExpToNext [get]
 
int DefaultLV [get]
 
int ChildrenWeight [get]
 
int ChildrenAndSelfWeight [get]
 
int ChildrenAndSelfWeightSingle [get]
 
virtual int SelfWeight [get]
 
virtual int WeightLimit [get]
 
SourceCategory.Row category [get]
 
SourceMaterial.Row material [get]
 
virtual string AliasMaterialOnCreate [get]
 
Cell Cell [get]
 
virtual Thing Thing [get]
 
virtual Chara Chara [get]
 
virtual bool isThing [get]
 
virtual bool isChara [get]
 
bool ExistsOnMap [get]
 
virtual bool isSynced [get]
 
bool IsContainer [get]
 
bool IsUnique [get]
 
bool IsPowerful [get]
 
bool IsImportant [get]
 
virtual SourcePref Pref [get]
 
virtual bool IsDeadOrSleeping [get]
 
virtual bool IsDisabled [get]
 
virtual bool IsMoving [get]
 
virtual bool flipX [get]
 
virtual bool IsAliveInCurrentZone [get]
 
virtual string actorPrefab [get]
 
virtual CardRow sourceCard [get]
 
virtual CardRow sourceRenderCard [get]
 
virtual RenderRow TileRow [get]
 
TileType TileType [get]
 
string Name [get]
 
string NameSimple [get]
 
string NameOne [get]
 
virtual bool IsPC [get]
 
bool _IsPC [get]
 
virtual bool IsPCC [get]
 
virtual bool IsPCParty [get]
 
virtual bool IsMinion [get]
 
virtual bool IsPCPartyMinion [get]
 
virtual bool IsPCFactionMinion [get]
 
virtual bool IsMultisize [get]
 
bool IsToolbelt [get]
 
bool IsLightsource [get]
 
bool IsEquipment [get]
 
bool IsFood [get]
 
bool IsInheritFoodTraits [get]
 
bool ShowFoodEnc [get]
 
bool IsWeapon [get]
 
bool IsEquipmentOrRanged [get]
 
bool IsEquipmentOrRangedOrAmmo [get]
 
bool IsMeleeWeapon [get]
 
bool IsRangedWeapon [get]
 
bool IsThrownWeapon [get]
 
bool IsAmmo [get]
 
bool IsAgent [get]
 
bool IsFurniture [get]
 
bool IsBlessed [get]
 
bool IsCursed [get]
 
bool IsSlimeEvolvable [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 , Event }
 
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 1525 of file Thing.cs.

1526 {
1527 n.AddHeader("headerAttackEval");
1528 int num = 0;
1529 foreach (BodySlot slot in chara.body.slots)
1530 {
1531 if (slot.thing == null || slot.elementId != 35 || slot.thing.source.offense.Length < 2)
1532 {
1533 continue;
1534 }
1535 AttackProcess.Current.Prepare(chara, slot.thing, null, null, num);
1536 string text = AttackProcess.Current.GetText();
1537 if (slot.thing == current)
1538 {
1539 text = text.TagColor(() => true);
1540 }
1541 n.AddText(text);
1542 num++;
1543 }
1544 AttackProcess.Current.Prepare(chara, null);
1545 string text2 = AttackProcess.Current.GetText();
1546 if (num == 0)
1547 {
1548 text2 = text2.TagColor(() => true);
1549 }
1550 n.AddText(text2);
1551 }
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(), AttackProcess.Current, BodySlot.elementId, AttackProcess.GetText(), AttackProcess.Prepare(), source, and BodySlot.thing.

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

◆ AddEnchant()

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

Definition at line 2131 of file Thing.cs.

2132 {
2133 if (base.IsToolbelt || base.IsLightsource)
2134 {
2135 return null;
2136 }
2137 Tuple<SourceElement.Row, int> enchant = GetEnchant(lv, (SourceElement.Row r) => r.IsEncAppliable(base.category), base.IsCursed);
2138 if (enchant == null)
2139 {
2140 return null;
2141 }
2142 return elements.ModBase(enchant.Item1.id, enchant.Item2);
2143 }
ElementContainerCard elements
Definition: Card.cs:42
Element ModBase(int ele, int v)
static Tuple< SourceElement.Row, int > GetEnchant(long lv, Func< SourceElement.Row, bool > func, bool neg)
Definition: Thing.cs:2044

Referenced by OnCreate().

◆ ApplyMaterial()

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

Reimplemented from Card.

Definition at line 355 of file Thing.cs.

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

338 {
339 Chara chara = null;
341 {
342 chara = GetRootCard()?.Chara;
343 if (chara != null)
344 {
346 }
347 }
348 elements.ApplyMaterialElementMap(this, remove);
349 if (chara != null)
350 {
351 elements.SetParent(chara);
352 }
353 }
virtual Chara Chara
Definition: Card.cs:2122
Card GetRootCard()
Definition: Card.cs:3607
Definition: Chara.cs:10
bool IsGameStarted
Definition: Core.cs:87
static Core core
Definition: EClass.cs:7
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().

◆ Attune()

void Thing.Attune ( Chara  c)
inline

Definition at line 2149 of file Thing.cs.

2150 {
2151 Msg.Say("attuned", this, c);
2152 base.c_uidAttune = c.uid;
2153 }
int uid
Definition: Card.cs:125
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58

References Msg.Say(), and Card.uid.

◆ CanAutoFire()

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

Definition at line 126 of file Thing.cs.

127 {
128 if (GetRootCard() != c)
129 {
130 return false;
131 }
132 if (HasTag(CTAG.throwWeapon))
133 {
134 return true;
135 }
136 if (!trait.CanAutofire)
137 {
138 return false;
139 }
140 if (trait is TraitToolRange)
141 {
142 if ((c.IsPCFaction && c.body.IsTooHeavyToEquip(this)) || reloading)
143 {
144 return false;
145 }
146 }
147 else if (trait is TraitAbility && c.IsPC)
148 {
149 Act act = (trait as TraitAbility).act;
150 Element element = c.elements.GetElement(act.id);
151 if (act is Spell && (element == null || (element.vPotential == 0 && !EClass.pc.ability.Has(element.id))))
152 {
153 return false;
154 }
155 }
156 return true;
157 }
Definition: ACT.cs:62
bool HasTag(CTAG tag)
Definition: Card.cs:2728
Trait trait
Definition: Card.cs:54
bool Has(int id)
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:187
override bool IsPC
Definition: Chara.cs:630
override bool IsPCFaction
Definition: Chara.cs:689
CharaAbility ability
Definition: Chara.cs:428
static Chara pc
Definition: EClass.cs:15
Element GetElement(string alias)
int id
Definition: ELEMENT.cs:259
int vPotential
Definition: ELEMENT.cs:265
Definition: SPELL.cs:710
virtual bool CanAutofire
Definition: Trait.cs:145

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

Referenced by AM_Adv._OnUpdateInput().

◆ CanStackTo()

override bool Thing.CanStackTo ( Thing  to)
inlinevirtual

Reimplemented from Card.

Definition at line 1718 of file Thing.cs.

1719 {
1720 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)
1721 {
1722 return false;
1723 }
1724 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1725 {
1726 return false;
1727 }
1728 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1729 {
1730 return false;
1731 }
1732 if (base.IsDecayed != to.IsDecayed)
1733 {
1734 return false;
1735 }
1736 if (!trait.CanStackTo(to))
1737 {
1738 return false;
1739 }
1740 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1741 {
1742 return false;
1743 }
1744 if (base.isStolen != to.isStolen)
1745 {
1746 return false;
1747 }
1748 if (base.isCrafted != to.isCrafted)
1749 {
1750 return false;
1751 }
1752 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1753 {
1754 return false;
1755 }
1756 if (to.c_IDTState != base.c_IDTState)
1757 {
1758 return false;
1759 }
1760 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1761 {
1762 return false;
1763 }
1764 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1765 {
1766 return false;
1767 }
1768 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1769 {
1770 return false;
1771 }
1772 if (base.c_altName != to.c_altName)
1773 {
1774 return false;
1775 }
1776 if (base.Num + to.Num <= 0)
1777 {
1778 return false;
1779 }
1780 bool flag = false;
1781 if (to.parent is Card)
1782 {
1783 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1784 if (windowSaveData != null && windowSaveData.compress)
1785 {
1786 flag = true;
1787 }
1788 }
1789 if (flag)
1790 {
1791 if (base.encLV != to.encLV && !base.IsFood)
1792 {
1793 return false;
1794 }
1795 if (elements.dict.Count() != to.elements.dict.Count())
1796 {
1797 return false;
1798 }
1799 foreach (Element value in elements.dict.Values)
1800 {
1801 Element element = to.elements.GetElement(value.id);
1802 if (element == null)
1803 {
1804 return false;
1805 }
1806 if (element.Value != value.Value)
1807 {
1808 _ = value.id;
1809 _ = 770;
1810 }
1811 }
1812 int num = (to.encLV = Mathf.CeilToInt(MathEx.ClampToInt(((long)base.encLV * (long)base.Num + (long)to.encLV * (long)to.Num) / ((long)base.Num + (long)to.Num))));
1813 base.encLV = num;
1814 foreach (Element value2 in elements.dict.Values)
1815 {
1816 Element element2 = to.elements.GetElement(value2.id);
1817 value2.vBase = (element2.vBase = MathEx.ClampToInt(((long)value2.vBase * (long)base.Num + (long)element2.vBase * (long)to.Num) / ((long)base.Num + (long)to.Num)));
1818 }
1819 return true;
1820 }
1821 if (base.encLV != to.encLV)
1822 {
1823 return false;
1824 }
1825 if (elements.dict.Count() != to.elements.dict.Count())
1826 {
1827 return false;
1828 }
1829 foreach (Element value3 in elements.dict.Values)
1830 {
1831 Element element3 = to.elements.GetElement(value3.id);
1832 if (element3 == null || value3.vBase / 10 * 10 != element3.vBase / 10 * 10)
1833 {
1834 return false;
1835 }
1836 }
1837 return true;
1838 }
Definition: Card.cs:11
int c_priceFix
Definition: Card.cs:1164
bool isCrafted
Definition: Card.cs:797
int tier
Definition: Card.cs:413
bool IsDecayed
Definition: Card.cs:2357
int idMaterial
Definition: Card.cs:137
string id
Definition: Card.cs:36
bool noSell
Definition: Card.cs:833
bool isCopy
Definition: Card.cs:881
string c_altName
Definition: Card.cs:1633
int c_priceAdd
Definition: Card.cs:1176
int c_dyeMat
Definition: Card.cs:1225
ICardParent parent
Definition: Card.cs:56
int c_priceCopy
Definition: Card.cs:1188
int c_IDTState
Definition: Card.cs:1297
string c_idRefCard2
Definition: Card.cs:1789
int refVal
Definition: Card.cs:209
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2649
int encLV
Definition: Card.cs:329
bool isDyed
Definition: Card.cs:461
bool isWeightChanged
Definition: Card.cs:665
int rarityLv
Definition: Card.cs:305
int idSkin
Definition: Card.cs:365
bool isGifted
Definition: Card.cs:785
BlessedState blessedState
Definition: Card.cs:281
bool isStolen
Definition: Card.cs:857
int ChildrenAndSelfWeight
Definition: Card.cs:2093
bool isModified
Definition: Card.cs:473
int Num
Definition: Card.cs:161
int c_charges
Definition: Card.cs:1309
string c_idRefCard
Definition: Card.cs:1777
Dictionary< int, Element > dict
int vBase
Definition: ELEMENT.cs:261
int Value
Definition: ELEMENT.cs:301
Definition: MathEx.cs:2
static int ClampToInt(long a)
Definition: MathEx.cs:25
override int SelfWeight
Definition: Thing.cs:64
virtual bool CanStackTo(Thing to)
Definition: Trait.cs:629
virtual bool HasCharges
Definition: Trait.cs:341
bool IsRequireFuel
Definition: Trait.cs:479
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, MathEx.ClampToInt(), 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, Element.Value, and Element.vBase.

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

◆ Disassemble()

void Thing.Disassemble ( )
inline

Definition at line 1877 of file Thing.cs.

1878 {
1879 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 2026 of file Thing.cs.

2027 {
2028 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
2029 {
2030 SE.Beep();
2031 return;
2032 }
2033 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
2034 if (act.IsAct)
2035 {
2036 act.Perform(EClass.pc);
2037 return;
2038 }
2039 AIAct aI = act as AIAct;
2040 EClass.pc.SetAI(aI);
2042 }
Definition: AIAct.cs:6
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1091
virtual bool Perform()
Definition: ACT.cs:266
virtual bool LocalAct
Definition: ACT.cs:173
virtual bool IsAct
Definition: ACT.cs:101
static AM_Adv Adv
Definition: ActionMode.cs:15
AIAct SetAI(AIAct g)
Definition: Chara.cs:9490
bool HasNoGoal
Definition: Chara.cs:1047
static Zone _zone
Definition: EClass.cs:21
static Player player
Definition: EClass.cs:13
HotItem currentHotItem
Definition: Player.cs:1170
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().

Referenced by Trait.OnListInteraction().

◆ GetDisassembles()

void Thing.GetDisassembles ( List< Thing >  list)
inline

Definition at line 1873 of file Thing.cs.

1874 {
1875 }

Referenced by RecipeUpdater.RunDisassemble().

◆ GetEfficiency()

int Thing.GetEfficiency ( )
inline

Definition at line 159 of file Thing.cs.

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

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 2044 of file Thing.cs.

2045 {
2046 List<SourceElement.Row> list = new List<SourceElement.Row>();
2047 int num = 0;
2048 long num2 = lv + 5 + EClass.rndSqrt(10);
2049 foreach (SourceElement.Row row in EClass.sources.elements.rows)
2050 {
2051 if ((!neg || !row.tag.Contains("flag")) && func(row) && row.LV < num2)
2052 {
2053 list.Add(row);
2054 num += row.chance;
2055 }
2056 }
2057 if (num == 0)
2058 {
2059 return null;
2060 }
2061 int num3 = EClass.rnd(num);
2062 int num4 = 0;
2063 foreach (SourceElement.Row item in list)
2064 {
2065 num4 += item.chance;
2066 if (num3 < num4)
2067 {
2068 string text = EClass.sources.elements.map[item.id].category;
2069 bool flag = text == "skill" || text == "attribute" || text == "resist";
2070 float num5 = 3f + Mathf.Min(lv / 10, 15f) + Mathf.Sqrt(lv * item.encFactor / 100);
2071 int num6 = (item.mtp + EClass.rnd(item.mtp + (int)num5)) / item.mtp * ((!(flag && neg)) ? 1 : (-1));
2072 if (item.encFactor == 0 && num6 > 25)
2073 {
2074 num6 = 25;
2075 }
2076 return new Tuple<SourceElement.Row, int>(item, num6);
2077 }
2078 }
2079 return null;
2080 }
static int rndSqrt(int a)
Definition: EClass.cs:107
static SourceManager sources
Definition: EClass.cs:43
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 804 of file Thing.cs.

805 {
806 string text = "";
807 if (trait.ShowChildrenNumber && base.c_lockLv == 0 && EClass._zone.IsPCFactionOrTent)
808 {
809 if (things.Count > 0)
810 {
811 text += "childCount".lang(things.Count.ToString() ?? "");
812 }
813 else if (trait.CanOpenContainer)
814 {
815 text += "empty".lang();
816 }
817 }
819 {
820 Room room = pos.cell.room;
821 if (EClass.debug.enable && room != null && room.data.group != 0)
822 {
823 text = text + " #" + room.data.group;
824 }
825 }
826 return text;
827 }
int group
Definition: AreaData.cs:18
AreaData data
Definition: BaseArea.cs:29
Point pos
Definition: Card.cs:60
ThingContainer things
Definition: Card.cs:39
Room room
Definition: Cell.cs:122
bool enable
Definition: CoreDebug.cs:302
static CoreDebug debug
Definition: EClass.cs:49
bool IsValid
Definition: Point.cs:88
Cell cell
Definition: Point.cs:51
Definition: Room.cs:4
virtual bool ShowChildrenNumber
Definition: Trait.cs:345
virtual bool CanOpenContainer
Definition: Trait.cs:246
bool IsPCFactionOrTent
Definition: Zone.cs:483

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

◆ GetHoverText()

override string Thing.GetHoverText ( )
inlinevirtual

Reimplemented from Card.

Definition at line 787 of file Thing.cs.

788 {
789 string text = "";
790 text = text + " <size=14>(" + Lang._weight(base.ChildrenAndSelfWeight) + ")</size> ";
792 {
793 text += Environment.NewLine;
794 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;
795 }
796 string hoverText = trait.GetHoverText();
797 if (!hoverText.IsEmpty())
798 {
799 text = text + Environment.NewLine + hoverText;
800 }
801 return base.GetHoverText() + text;
802 }
bool showExtra
Definition: CoreDebug.cs:184
Definition: Lang.cs:7
static string _weight(int a, int b, bool showUnit=true, int unitSize=0)
Definition: Lang.cs:171
virtual string GetHoverText()
Definition: Trait.cs:634

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

◆ GetIngredients()

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

Definition at line 1840 of file Thing.cs.

1841 {
1842 if (ing.CanSetThing(this))
1843 {
1844 list.Add(this);
1845 }
1846 if (things.Count <= 0 || base.c_lockLv != 0 || base.isNPCProperty)
1847 {
1848 return;
1849 }
1850 foreach (Thing thing in things)
1851 {
1852 thing.GetIngredients(ing, list);
1853 }
1854 }
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:1840

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 532 of file Thing.cs.

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

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, Card.GetBool(), Card.GetInt(), Lang.GetList(), Trait.GetName(), GetPrice(), Card.GetRootCard(), Card.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(), FactionBranch.AutoClean(), DramaCustomSequence.Build(), Zone.FindSharedContainer(), QuestDeliver.IsDestThing(), ActMoneySlap.Perform(), ThingContainer.RefreshGrid(), AI_OpenGambleChest.Run(), UIMagicChest.Search(), CoreExtension.Sort(), ActThrow.Throw(), Zone.TryAddThingInSharedContainer(), and Chara.TryUse().

◆ GetPrice()

override int Thing.GetPrice ( CurrencyType  currency = CurrencyType::Money,
bool  sell = false,
PriceType  priceType = PriceType::Default,
Chara  c = null 
)
inlinevirtual

Reimplemented from Card.

Definition at line 829 of file Thing.cs.

830 {
831 int price = base.GetPrice(currency, sell, priceType, c);
832 string str = GetStr("price_calc_override");
833 if (!str.IsEmpty())
834 {
835 var args = new
836 {
837 @base = price,
838 lv = base.LV,
839 rarity = base.rarityLv
840 };
841 if (str.TryEvaluateAsCalc(out int result, (object)args))
842 {
843 return result;
844 }
845 }
846 return price;
847 }
@ currency
Rarity rarity
Definition: Card.cs:317

References currency.

Referenced by InvOwnerRecycle._OnProcess(), Chara.ClearInventory(), ZonePreEnterBoutWin.Execute(), QuestSupply.GetBonus(), QuestSupplySpecific.GetBonus(), GetName(), TraitTicketFurniture.GetPrice(), HomeResourceWorth.GetPrice(), ShopTransaction.GetPrice(), InvOwner.ListInteractions(), Trait.OnBarter(), Affinity.OnGift(), ShopTransaction.Process(), UIInventory.RefreshList(), PartialMap.Save(), GameDate.ShipGoods(), and ActEffect.Wish().

◆ GetRecipes()

void Thing.GetRecipes ( HashSet< Recipe >  recipes)
inline

Definition at line 1869 of file Thing.cs.

1870 {
1871 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1704 of file Thing.cs.

1705 {
1706 Chara chara = GetRootCard() as Chara;
1707 if ((!trait.ShowAsTool || (chara == EClass.pc && HotItemHeld.disableTool)) && (chara?.held == this || (!base.isRoofItem && placeState != PlaceState.installed && renderer.data.subCrate.enable && parent is Zone)))
1708 {
1710 {
1711 return EClass.setting.pass.subCrate;
1712 }
1713 return renderer.data.subCrate;
1714 }
1715 return SubPassData.Default;
1716 }
if(!match.Success)
PlaceState
Definition: PlaceState.cs:2
bool isRoofItem
Definition: Card.cs:581
PlaceState placeState
Definition: Card.cs:86
CardRenderer renderer
Definition: Card.cs:64
static GameSetting setting
Definition: EClass.cs:35
PassSetting pass
Definition: GameSetting.cs:350
SubPassData subCrate
Definition: RenderData.cs:47
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 2155 of file Thing.cs.

2156 {
2157 if (base.IsIdentified)
2158 {
2159 return this;
2160 }
2161 string @ref = "";
2162 string text = "";
2163 if (show)
2164 {
2165 @ref = GetName(NameStyle.Full, base.Num);
2166 }
2167 Rarity rarity = idtSource switch
2168 {
2169 IDTSource.SkillHigh => Rarity.Legendary,
2170 IDTSource.Skill => Rarity.Superior,
2171 _ => Rarity.Normal,
2172 };
2173 if (rarity != Rarity.Normal && ((base.IsEquipmentOrRangedOrAmmo && base.rarity >= rarity) || base.rarity >= Rarity.Mythical))
2174 {
2175 base.c_IDTState = 3;
2176 }
2177 else if (base.rarity >= Rarity.Mythical && idtSource != IDTSource.SuperiorIdentify)
2178 {
2179 base.c_IDTState = 1;
2180 }
2181 else
2182 {
2183 base.c_IDTState = 0;
2184 }
2185 if (show)
2186 {
2187 text = GetName(NameStyle.Full, base.Num);
2188 if (base.c_IDTState == 0)
2189 {
2190 Msg.Say("identified", @ref, text);
2191 }
2192 else
2193 {
2194 Msg.Say((idtSource == IDTSource.Skill) ? "identified3" : "identified2", @ref, text, base.TextRarity);
2195 }
2196 }
2197 if (base.IsIdentified)
2198 {
2199 GetRootCard()?.TryStack(this);
2200 }
2202 return this;
2203 }
IDTSource
Definition: IDTSource.cs:2
void TryStack(Thing t)
Definition: Card.cs:7484
static void SetDirty(Thing t)
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:532

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 1856 of file Thing.cs.

1857 {
1858 if (isDestroyed)
1859 {
1860 return false;
1861 }
1862 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1863 {
1864 return false;
1865 }
1866 return true;
1867 }
bool isDestroyed
Definition: Card.cs:78
int Dist(Card c)
Definition: Card.cs:8205

References EClass.pc.

Referenced by DropdownGrid.BuildIngredients().

◆ ListLimitedValidTraits()

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

Definition at line 849 of file Thing.cs.

850 {
851 List<Element> list = new List<Element>();
852 if (base.ShowFoodEnc)
853 {
854 foreach (Element value in elements.dict.Values)
855 {
856 if (value.IsFoodTraitMain && value.Value > 0)
857 {
858 list.Add(value);
859 }
860 }
862 if (limit && list.Count > 5)
863 {
864 int num = list.Count - 5;
865 for (int num2 = 0; num2 < num; num2++)
866 {
867 list.RemoveAt(list.Count - 1);
868 }
869 }
870 }
871 return list;
872 }
static int GetSortVal(Element a)
bool IsFoodTraitMain
Definition: ELEMENT.cs:376

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

◆ ListValidTraits()

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

Definition at line 874 of file Thing.cs.

875 {
876 List<Element> list = ListLimitedValidTraits(limit);
877 bool showFoodEnc = base.ShowFoodEnc;
878 bool flag = EClass.debug.enable || EClass.pc.HasElement(1650);
879 if (showFoodEnc)
880 {
881 foreach (Element value in elements.dict.Values)
882 {
883 if (value.IsFoodTrait && !list.Contains(value) && (isCraft || flag || value.IsFoodTraitMain) && (!value.IsFoodTraitMain || value.Value < 0))
884 {
885 list.Add(value);
886 }
887 }
888 }
889 foreach (Element value2 in elements.dict.Values)
890 {
891 if ((isCraft || flag || ((!value2.IsFoodTrait || value2.IsFoodTraitMain) && (!showFoodEnc || !value2.IsTrait || value2.Value >= 0))) && !list.Contains(value2) && (value2.IsTrait || (value2.IsFoodTrait && !value2.IsFoodTraitMain)))
892 {
893 list.Add(value2);
894 }
895 }
896 return list;
897 }
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6383
bool IsFoodTrait
Definition: ELEMENT.cs:373
bool IsTrait
Definition: ELEMENT.cs:371
List< Element > ListLimitedValidTraits(bool limit)
Definition: Thing.cs:849

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 2205 of file Thing.cs.

2206 {
2207 if (trait is TraitGene)
2208 {
2209 DNA dNA = base.c_DNA;
2210 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2211 {
2212 return false;
2213 }
2214 for (int i = 0; i < dNA.vals.Count; i += 2)
2215 {
2216 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2217 if (row.name.ToLower().Contains(s))
2218 {
2219 return true;
2220 }
2221 if (row.GetName().ToLower().Contains(s))
2222 {
2223 return true;
2224 }
2225 }
2226 }
2227 else
2228 {
2229 if (!base.IsIdentified)
2230 {
2231 return false;
2232 }
2233 foreach (Element value in elements.dict.Values)
2234 {
2235 if (value.Value != 0)
2236 {
2237 if (value.source.name.ToLower().Contains(s))
2238 {
2239 return true;
2240 }
2241 if (value.source.GetName().ToLower().Contains(s))
2242 {
2243 return true;
2244 }
2245 }
2246 }
2247 }
2248 return false;
2249 }
Definition: DNA.cs:9
Type type
Definition: DNA.cs:31
Type
Definition: DNA.cs:11
List< int > vals
Definition: DNA.cs:26
SourceElement.Row source
Definition: ELEMENT.cs:282
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 180 of file Thing.cs.

181 {
182 if (bp.blesstedState.HasValue)
183 {
184 SetBlessedState(bp.blesstedState.GetValueOrDefault());
185 }
186 else if (base.category.ignoreBless == 0 && bp.rarity == Rarity.Random && base.rarity != Rarity.Artifact)
187 {
188 if (EClass.rnd(25) == 0)
189 {
191 }
192 else if (EClass.rnd(25) == 0)
193 {
195 }
196 else if (EClass.rnd(50) == 0 && base.category.slot != 0)
197 {
199 }
200 }
201 if (!EClass.debug.autoIdentify && (!source.unknown_JP.IsEmpty() || (base.category.slot != 0 && base.rarity >= Rarity.Superior)))
202 {
203 base.c_IDTState = 5;
204 }
205 string text = id;
206 if (text == "bill_tax" || text == "bill")
207 {
208 base.c_bill = 100 + EClass.rnd(100);
209 }
210 if (base.category.slot != 0)
211 {
212 int num = 0;
213 if (base.rarity == Rarity.Superior)
214 {
215 num = EClass.rnd(3);
216 }
217 else if (base.rarity == Rarity.Legendary)
218 {
219 num = EClass.rnd(4) + 2;
220 }
221 else if (base.rarity == Rarity.Mythical)
222 {
223 num = EClass.rnd(3) + 5;
224 }
225 else if (base.rarity >= Rarity.Artifact)
226 {
227 num = EClass.rnd(2) + 1;
228 }
229 if (num > 0 && !HasTag(CTAG.godArtifact) && !HasTag(CTAG.noRandomEnc))
230 {
231 for (int i = 0; i < num; i++)
232 {
234 }
235 }
236 }
237 if (base.IsRangedWeapon && !IsMeleeWithAmmo)
238 {
239 if (HasTag(CTAG.godArtifact))
240 {
241 AddSocket();
242 AddSocket();
243 }
244 else
245 {
246 int num2 = 1;
247 int num3 = ((EClass.rnd(10) == 0) ? 1 : 0);
248 if (base.rarity == Rarity.Superior)
249 {
250 num2 = 2 + num3;
251 }
252 else if (base.rarity == Rarity.Legendary)
253 {
254 num2 = EClass.rnd(2) + 3 + num3;
255 }
256 else if (base.rarity == Rarity.Mythical)
257 {
258 num2 = EClass.rnd(2) + 4 + num3;
259 }
260 else if (base.rarity >= Rarity.Artifact)
261 {
262 num2 = EClass.rnd(2) + 1;
263 }
264 if (id == "bow_vindale")
265 {
266 num2 = 4;
267 }
268 if (num2 > 0)
269 {
270 for (int j = 0; j < num2; j++)
271 {
272 AddSocket();
273 }
274 if (!bp.isCraft)
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 }
288 if (id == "shield_flower")
289 {
291 elements.SetBase(randomElement.alias.Replace("ele", "miasma_"), 20);
292 }
293 if ((bp.rarity != Rarity.Normal || bp.qualityBonus != 0) && base.rarity < Rarity.Artifact && base.category.tag.Contains("enc"))
294 {
295 int num4 = 0;
296 if (EClass.rnd(6) == 0)
297 {
298 if (bp.qualityBonus == 0)
299 {
300 num4 = EClass.rnd(EClass.rnd(14) + 1);
301 if (num4 == 1 && EClass.rnd(3) != 0)
302 {
303 num4 = 0;
304 }
305 if (num4 > 0)
306 {
308 }
309 }
310 else if (bp.qualityBonus < 0)
311 {
312 if (EClass.rnd(3) == 0)
313 {
314 num4 = 1;
315 }
316 }
317 else if (bp.qualityBonus >= 10)
318 {
319 num4 = Mathf.Min(bp.qualityBonus / 10 + 2, 8) + EClass.rnd(EClass.rnd(5) + 1);
320 }
321 }
322 if (num4 > 0)
323 {
324 if (num4 > 12)
325 {
326 num4 = 12;
327 }
328 SetEncLv(num4);
329 }
330 }
331 if (HasTag(CTAG.randomSkin))
332 {
333 base.idSkin = EClass.rnd(source.skins.Length + 1);
334 }
335 }
BlessedState? blesstedState
void AddSocket()
Definition: Card.cs:3722
CardBlueprint bp
Definition: Card.cs:80
void ApplySocket(Thing t)
Definition: Card.cs:3731
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:4076
void SetEncLv(int a)
Definition: Card.cs:4045
int genLv
Definition: Card.cs:197
bool autoIdentify
Definition: CoreDebug.cs:205
static SourceElement.Row GetRandomElement(int lv=1, bool useWeight=true)
Definition: ELEMENT.cs:593
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:2131
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, CardBlueprint.isCraft, 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 2145 of file Thing.cs.

2146 {
2147 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1553 of file Thing.cs.

1554 {
1555 p.matColor = base.colorInt;
1556 p.mat = base.material;
1557 if (!renderer.usePass)
1558 {
1559 return;
1560 }
1561 switch (trait.tileMode)
1562 {
1563 case Trait.TileMode.DefaultNoAnime:
1564 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1565 {
1566 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1567 }
1568 else
1569 {
1570 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1571 }
1572 break;
1573 case Trait.TileMode.FakeBlock:
1574 {
1575 SourceBlock.Row row2 = EClass.sources.blocks[base.refVal];
1576 p.tile = row2._tiles[base.dir % row2._tiles.Length];
1577 if (row2.tileType.IsFullBlock)
1578 {
1579 p.color += 1572864f;
1580 }
1581 break;
1582 }
1583 case Trait.TileMode.FakeObj:
1584 {
1585 SourceObj.Row row = EClass.sources.objs[base.refVal];
1586 p.tile = row._tiles[base.dir % row._tiles.Length];
1587 break;
1588 }
1589 case Trait.TileMode.SignalAnime:
1590 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1591 {
1592 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1593 }
1594 else
1595 {
1596 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1597 }
1598 if (animeCounter > 0f && source.anime.Length != 0)
1599 {
1600 animeCounter += Time.deltaTime;
1601 int num3 = (int)(animeCounter / (0.001f * (float)source.anime[1]));
1602 if (num3 > ((source.anime.Length > 2) ? source.anime[2] : source.anime[0]))
1603 {
1604 animeCounter = 0f;
1605 }
1606 else
1607 {
1608 p.tile += num3 % source.anime[0] * ((!flipX) ? 1 : (-1));
1609 }
1610 }
1611 break;
1612 case Trait.TileMode.Illumination:
1613 if (base.isOn || base.isRoofItem)
1614 {
1615 int num4 = (int)((float)base.uid + Time.realtimeSinceStartup * 5f);
1616 int num5 = (int)(Time.realtimeSinceStartup * 5f);
1617 p.tile = (sourceCard._tiles[base.dir % sourceCard._tiles.Length] + num4 % 3 + 1) * ((!flipX) ? 1 : (-1));
1618 if (num5 % 16 == 0)
1619 {
1620 p.color = 5242880f;
1621 }
1622 else if (num5 % 11 == 0)
1623 {
1624 p.color = 7864320f;
1625 }
1626 else
1627 {
1628 p.color = 13107200f;
1629 }
1630 }
1631 else
1632 {
1633 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1634 }
1635 break;
1636 case Trait.TileMode.Door:
1637 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1638 {
1639 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1640 }
1641 else
1642 {
1643 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1644 }
1645 if (parent is Zone && pos.cell.HasFullBlock)
1646 {
1647 p.tile += ((p.tile < 0f) ? (-64) : 64);
1648 }
1649 if (trait is TraitDoorSwing traitDoorSwing && traitDoorSwing.IsOpen())
1650 {
1651 p.tile += ((!(p.tile < 0f)) ? 1 : (-1));
1652 }
1653 break;
1654 default:
1655 {
1656 if (source._altTiles.Length != 0 && trait.UseAltTiles)
1657 {
1658 p.tile = source._altTiles[base.dir % source._altTiles.Length] * ((!flipX) ? 1 : (-1));
1659 }
1660 else
1661 {
1662 p.tile = sourceCard._tiles[base.dir % sourceCard._tiles.Length] * ((!flipX) ? 1 : (-1));
1663 }
1664 float time = Time.realtimeSinceStartup;
1665 if (source.animeNoSync)
1666 {
1667 Rand.UseSeed(base.uid, delegate
1668 {
1669 time += EClass.rnd(1000);
1670 });
1671 }
1672 if (source.anime.Length == 0 || !trait.IsAnimeOn)
1673 {
1674 break;
1675 }
1676 if (source.anime.Length > 2)
1677 {
1678 int num = (int)(time * 1000f / (float)source.anime[1] % (float)source.anime[2]);
1679 if (num == source.anime[0] - 1 && source.anime.Length > 3)
1680 {
1681 PlaySound("anime_sound" + source.anime[3]);
1682 }
1683 if (num < source.anime[0])
1684 {
1685 p.tile += num * ((!(p.tile < 0f)) ? 1 : (-1));
1686 }
1687 }
1688 else
1689 {
1690 int num2 = (int)(time * 1000f / (float)source.anime[1] % (float)source.anime[0]);
1691 p.tile += num2 * ((!(p.tile < 0f)) ? 1 : (-1));
1692 }
1693 break;
1694 }
1695 }
1696 if (trait.IdSkin != 0 && sourceCard.skins.Length != 0)
1697 {
1698 int num6 = sourceCard.skins.TryGet(trait.IdSkin - 1);
1699 num6 = num6 / 100 * (int)source.renderData.pass.pmesh.tiling.x + num6 % 100;
1700 p.tile += ((p.tile < 0f) ? (-num6) : num6);
1701 }
1702 }
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6645
float animeCounter
Definition: Card.cs:76
virtual bool flipX
Definition: Card.cs:2168
bool HasFullBlock
Definition: Cell.cs:853
TileType tileType
Definition: RenderRow.cs:77
int[] skins
Definition: RenderRow.cs:14
int[] _tiles
Definition: RenderRow.cs:12
SourceObj objs
SourceBlock blocks
virtual bool IsFullBlock
Definition: TileType.cs:177
override bool IsOpen()
Definition: Trait.cs:7
virtual TileMode tileMode
Definition: Trait.cs:449
virtual bool UseAltTiles
Definition: Trait.cs:451
TileMode
Definition: Trait.cs:9
virtual int IdSkin
Definition: Trait.cs:46
virtual bool IsAnimeOn
Definition: Trait.cs:388

References SourceThing.Row._altTiles, RenderRow._tiles, SourceThing.Row.anime, SourceThing.Row.animeNoSync, SourceManager.blocks, TileType.IsFullBlock, TraitDoorSwing.IsOpen(), SourceManager.objs, EClass.rnd(), EClass.sources, RenderRow.tileType, and Rand.UseSeed().

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

◆ SetSource()

override void Thing.SetSource ( )
inlinevirtual

Reimplemented from Card.

Definition at line 164 of file Thing.cs.

165 {
166 source = EClass.sources.things.map.TryGetValue(id);
167 if (source != null && source.isOrigin)
168 {
170 id = source.id;
171 }
172 if (source == null)
173 {
174 Debug.LogWarning("Thing " + id + " not found");
175 id = "ash3";
177 }
178 }
Dictionary< string, CardRow > firstVariations
Definition: SourceCard.cs:11
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 1881 of file Thing.cs.

1882 {
1883 int count = 1;
1884 UIContextMenu m = EClass.ui.CreateContextMenuInteraction();
1885 bool buy = trans != null;
1886 UIButton buttonBuy = null;
1887 UIItem itemSlider = null;
1888 itemSlider = m.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1889 {
1890 count = (int)b;
1891 if (trans != null)
1892 {
1893 trans.num = count;
1894 }
1895 UpdateButton();
1896 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1897 if (buy)
1898 {
1899 buttonBuy = m.AddButton("invBuy", delegate
1900 {
1901 Process();
1902 });
1903 }
1904 m.onDestroy = delegate
1905 {
1906 if ((!buy || Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !m.wasCanceled)
1907 {
1908 Process();
1909 }
1910 };
1911 m.Show();
1912 if ((bool)buttonBuy)
1913 {
1914 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1915 }
1916 UpdateButton();
1917 void Process()
1918 {
1919 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1920 {
1921 Debug.Log("Split bug1");
1922 }
1923 else if (button.card.isDestroyed || button.card.Num < count)
1924 {
1925 Debug.Log("Split bug2");
1926 }
1927 else if (EClass.pc.isDead)
1928 {
1929 Debug.Log("Split bug3");
1930 }
1931 else if (count != 0 && !Input.GetMouseButton(1))
1932 {
1933 if (trans != null)
1934 {
1935 trans.Process(startTransaction: true);
1936 }
1937 else
1938 {
1939 DragItemCard dragItemCard = new DragItemCard(button);
1940 if (count != base.Num)
1941 {
1942 Thing thing = button.card.Split(base.Num - count);
1943 button.invOwner.Container.AddThing(thing, tryStack: false);
1944 thing.invX = dragItemCard.from.invX;
1945 thing.invY = dragItemCard.from.invY;
1946 thing.posInvX = button.card.Thing.posInvX;
1947 thing.posInvY = button.card.Thing.posInvY;
1948 }
1949 EClass.ui.StartDrag(dragItemCard);
1950 }
1951 }
1952 }
1953 void UpdateButton()
1954 {
1955 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1956 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1957 if ((bool)buttonBuy)
1958 {
1959 buttonBuy.mainText.SetText(trans.GetTextDetail());
1960 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1961 buttonBuy.interactable = trans.IsValid();
1962 buttonBuy.RebuildLayout(recursive: true);
1963 buttonBuy.gameObject.GetComponent<CanvasGroup>().alpha = (trans.IsValid() ? 1f : 0.9f);
1964 }
1965 }
1966 }
Card card
Definition: ButtonGrid.cs:24
InvOwner invOwner
Definition: ButtonGrid.cs:28
int posInvY
Definition: Card.cs:353
Thing Split(int a)
Definition: Card.cs:3665
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3280
virtual Thing Thing
Definition: Card.cs:2110
int posInvX
Definition: Card.cs:341
bool isDead
Definition: Chara.cs:393
DragInfo from
Definition: DragItemCard.cs:54
static UI ui
Definition: EClass.cs:17
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 1968 of file Thing.cs.

1969 {
1970 int count = 1;
1971 UIContextMenu m = EClass.ui.CreateContextMenuInteraction();
1972 UIButton buttonBuy = null;
1973 UIItem itemSlider = null;
1974 itemSlider = m.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1975 {
1976 count = (int)b;
1977 UpdateButton();
1978 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1979 buttonBuy = m.AddButton("invBuy", delegate
1980 {
1981 Process();
1982 });
1983 m.onDestroy = delegate
1984 {
1985 if ((Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !m.wasCanceled)
1986 {
1987 Process();
1988 }
1989 };
1990 m.Show();
1991 if ((bool)buttonBuy)
1992 {
1993 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1994 }
1995 UpdateButton();
1996 void Process()
1997 {
1998 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1999 {
2000 Debug.Log("Split bug1");
2001 }
2002 else if (button.card.isDestroyed || button.card.Num < count)
2003 {
2004 Debug.Log("Split bug2");
2005 }
2006 else if (EClass.pc.isDead)
2007 {
2008 Debug.Log("Split bug3");
2009 }
2010 else if (count != 0 && !Input.GetMouseButton(1))
2011 {
2012 onSplit?.Invoke(count);
2013 }
2014 }
2015 void UpdateButton()
2016 {
2017 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
2018 itemSlider.text2.text = Lang._weight(SelfWeight * count);
2019 buttonBuy.mainText.SetText(lang.lang(count.ToString() ?? ""));
2020 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
2021 buttonBuy.interactable = true;
2022 buttonBuy.RebuildLayout(recursive: true);
2023 }
2024 }

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(), EClass.ui, and UIContextMenu.wasCanceled.

Referenced by UIDragGridIngredients.Update().

◆ TryLickEnchant()

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

Definition at line 2082 of file Thing.cs.

2083 {
2084 if (!base.IsEquipment || base.IsCursed || base.rarity <= Rarity.Normal || GetInt(107) > 0)
2085 {
2086 return;
2087 }
2088 SetInt(107, 1);
2089 if (tg == null)
2090 {
2091 Rand.SetSeed(EClass.world.date.day + source._index + c.uid);
2092 if (msg)
2093 {
2094 c.Say("lick", c, this);
2095 PlaySound("offering");
2096 PlayEffect("mutation");
2097 }
2098 Element element = AddEnchant(base.LV);
2099 if (element != null)
2100 {
2101 SetInt(107, element.id);
2102 }
2103 }
2104 else
2105 {
2106 Rand.SetSeed(base.uid);
2107 List<Element> list = new List<Element>();
2108 foreach (Element value in elements.dict.Values)
2109 {
2110 if (value.id != 67 && value.id != 66 && value.id != 64 && value.id != 65)
2111 {
2112 list.Add(value);
2113 }
2114 }
2115 if (list.Count > 0)
2116 {
2117 Element element2 = list.RandomItem();
2118 elements.ModBase(element2.id, Mathf.Max(EClass.rnd(Mathf.Abs(element2.vBase / 5)), 1));
2119 SetInt(107, element2.id);
2120 }
2121 if (msg)
2122 {
2123 c.Say("lick2", c, tg, slot.name.ToLower());
2124 tg.PlaySound("offering");
2125 tg.PlayEffect("mutation");
2126 }
2127 }
2128 Rand.SetSeed();
2129 }
string name
Definition: BodySlot.cs:14
void SetInt(string id, int value=0)
Definition: Card.cs:2586
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6679
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7324
int day
Definition: Date.cs:62
static World world
Definition: EClass.cs:41
static void SetSeed(int a=-1)
Definition: Rand.cs:44
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 899 of file Thing.cs.

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

References CardRow._origin, Element._WriteNote(), UINote.AddHeaderCard(), UINote.AddText(), Game.cards, 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, CardManager.GlobalCharaList.Find(), ReligionManager.Find(), EClass.game, Element.Get(), ElementContainer.GetOrCreateElement(), AttackProcess.GetTwoHandEncBonus(), CardManager.globalCharas, 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, Card.NameSimple, 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 97 of file Thing.cs.

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

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 109 of file Thing.cs.

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

Referenced by AI_Shopping.Buy(), QuestSharedContainer.CanUpdateOnTalk(), Zone.FindSharedContainer(), AI_Idle.Run(), TraitBaseContainer.SetName(), 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 SourcePref pref = trait.GetPref();
54 if (pref != null)
55 {
56 return pref;
57 }
58 CardRow cardRow = ((source.origin != null && !source.pref.UsePref) ? source.origin : source);
59 return cardRow.replacer.data?.pref ?? cardRow.pref;
60 }
61 }
SpriteReplacer replacer
Definition: RenderRow.cs:89
SourcePref pref
Definition: RenderRow.cs:68
SourcePref pref
Definition: SpriteData.cs:32
SpriteData data
virtual SourcePref GetPref()
Definition: Trait.cs:609

Referenced by Chara._Move(), BaseTileMap.DrawTile(), Cell.GetSurfaceHeight(), BaseTileMap.GetThingPosition(), CharaActorPCC.OnRender(), HotItemHeld.OnSetCurrentItem(), TCOrbitThing.OnSetOwner(), 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 63 of file Thing.cs.

64 {
65 get
66 {
67 if (!base.IsUnique)
68 {
69 return (int)((long)(base.isWeightChanged ? base.c_weight : source.weight) * (long)base.material.weight / 100);
70 }
71 if (!base.isWeightChanged)
72 {
73 return source.weight;
74 }
75 return base.c_weight;
76 }
77 }

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

◆ sourceCard

◆ TileRow

override RenderRow Thing.TileRow
get

Definition at line 81 of file Thing.cs.

82 {
83 get
84 {
85 if (trait is TraitFakeTile)
86 {
87 if (trait is TraitFakeBlock)
88 {
89 return EClass.sources.blocks[base.refVal];
90 }
91 return EClass.sources.objs[base.refVal];
92 }
93 return base.TileRow;
94 }
95 }

◆ Tiles

override int [] Thing.Tiles
get

Definition at line 79 of file Thing.cs.


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