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

Public Member Functions

bool CanAutoFire (Chara c, Card tg, bool reloading=false)
 
int GetEfficiency ()
 
override void SetSource ()
 
override void OnCreate (int genLv)
 
override void ApplyMaterialElements (bool remove)
 
override void ApplyMaterial (bool remove=false)
 
override string GetName (NameStyle style, int _num=-1)
 
override string GetHoverText ()
 
override string GetExtraName ()
 
override int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
List< ElementListLimitedValidTraits (bool limit)
 
List< ElementListValidTraits (bool isCraft, bool limit)
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetRenderParam (RenderParam p)
 
override SubPassData GetSubPassData ()
 
override bool CanStackTo (Thing to)
 
void GetIngredients (Recipe.Ingredient ing, List< Thing > list)
 
bool IsValidIngredient (Recipe.Ingredient ing)
 
void GetRecipes (HashSet< Recipe > recipes)
 
void GetDisassembles (List< Thing > list)
 
void Disassemble ()
 
void ShowSplitMenu (ButtonGrid button, InvOwner.Transaction trans=null)
 
void ShowSplitMenu2 (ButtonGrid button, string lang, Action< int > onSplit=null)
 
void DoAct (Act act)
 
void TryLickEnchant (Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
 
Element AddEnchant (int lv=-1)
 
void RemoveEnchant ()
 
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)
 
GetObj< T > (string id)
 
void SetObj (string id, object o)
 
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)
 
FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a, bool applyMod=true)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void PurgeEythArtifact ()
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (int a, HealSource origin=HealSource.None)
 
virtual void HealHP (int a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual long ApplyProtection (long dmg, int mod=100)
 
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< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
virtual T GetCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

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< SocketDatasocketList [get, set]
 
Thing c_copyContainer [get, set]
 
Window.SaveData c_windowSaveData [get, set]
 
CharaUpgrade c_upgrades [get, set]
 
LoveData c_love [get, set]
 
CharaGenes c_genes [get, set]
 
List< int > c_corruptionHistory [get, set]
 
ContainerUpgrade c_containerUpgrade [get, set]
 
DNA c_DNA [get, set]
 
CharaList c_charaList [get, set]
 
MixedFoodData c_mixedFoodData [get, set]
 
Thing c_bloodData [get, set]
 
byte[] c_textureData [get, set]
 
SourceMaterial.Row DyeMat [get]
 
int invX [get, set]
 
int invY [get, set]
 
CardRow refCard [get]
 
CardRow refCard2 [get]
 
int ExpToNext [get]
 
int DefaultLV [get]
 
int ChildrenWeight [get]
 
int ChildrenAndSelfWeight [get]
 
int ChildrenAndSelfWeightSingle [get]
 
virtual int SelfWeight [get]
 
virtual int WeightLimit [get]
 
SourceCategory.Row category [get]
 
SourceMaterial.Row material [get]
 
virtual string AliasMaterialOnCreate [get]
 
Cell Cell [get]
 
virtual Thing Thing [get]
 
virtual Chara Chara [get]
 
virtual bool isThing [get]
 
virtual bool isChara [get]
 
bool ExistsOnMap [get]
 
virtual bool isSynced [get]
 
bool IsContainer [get]
 
bool IsUnique [get]
 
bool IsPowerful [get]
 
bool IsImportant [get]
 
virtual SourcePref Pref [get]
 
virtual bool IsDeadOrSleeping [get]
 
virtual bool IsDisabled [get]
 
virtual bool IsMoving [get]
 
virtual bool flipX [get]
 
virtual bool IsAliveInCurrentZone [get]
 
virtual string actorPrefab [get]
 
virtual CardRow sourceCard [get]
 
virtual CardRow sourceRenderCard [get]
 
virtual RenderRow TileRow [get]
 
TileType TileType [get]
 
string Name [get]
 
string NameSimple [get]
 
string NameOne [get]
 
virtual bool IsPC [get]
 
bool _IsPC [get]
 
virtual bool IsPCC [get]
 
virtual bool IsPCParty [get]
 
virtual bool IsMinion [get]
 
virtual bool IsPCPartyMinion [get]
 
virtual bool IsPCFactionMinion [get]
 
virtual bool IsMultisize [get]
 
bool IsToolbelt [get]
 
bool IsLightsource [get]
 
bool IsEquipment [get]
 
bool IsFood [get]
 
bool IsInheritFoodTraits [get]
 
bool ShowFoodEnc [get]
 
bool IsWeapon [get]
 
bool IsEquipmentOrRanged [get]
 
bool IsEquipmentOrRangedOrAmmo [get]
 
bool IsMeleeWeapon [get]
 
bool IsRangedWeapon [get]
 
bool IsThrownWeapon [get]
 
bool IsAmmo [get]
 
bool IsAgent [get]
 
bool IsFurniture [get]
 
bool IsBlessed [get]
 
bool IsCursed [get]
 
bool 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 1508 of file Thing.cs.

1509 {
1510 n.AddHeader("headerAttackEval");
1511 int num = 0;
1512 foreach (BodySlot slot in chara.body.slots)
1513 {
1514 if (slot.thing == null || slot.elementId != 35 || slot.thing.source.offense.Length < 2)
1515 {
1516 continue;
1517 }
1518 AttackProcess.Current.Prepare(chara, slot.thing, null, null, num);
1519 string text = AttackProcess.Current.GetText();
1520 if (slot.thing == current)
1521 {
1522 text = text.TagColor(() => true);
1523 }
1524 n.AddText(text);
1525 num++;
1526 }
1527 AttackProcess.Current.Prepare(chara, null);
1528 string text2 = AttackProcess.Current.GetText();
1529 if (num == 0)
1530 {
1531 text2 = text2.TagColor(() => true);
1532 }
1533 n.AddText(text2);
1534 }
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 2108 of file Thing.cs.

2109 {
2110 if (base.IsToolbelt || base.IsLightsource)
2111 {
2112 return null;
2113 }
2114 Tuple<SourceElement.Row, int> enchant = GetEnchant(lv, (SourceElement.Row r) => r.IsEncAppliable(base.category), base.IsCursed);
2115 if (enchant == null)
2116 {
2117 return null;
2118 }
2119 return elements.ModBase(enchant.Item1.id, enchant.Item2);
2120 }
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:2021

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 flag2 = (base.isFireproof = false);
365 base.isAcidproof = flag2;
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 flag2 = (base.isFireproof = true);
511 base.isAcidproof = flag2;
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:3600
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 2126 of file Thing.cs.

2127 {
2128 Msg.Say("attuned", this, c);
2129 base.c_uidAttune = c.uid;
2130 }
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))
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 IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168
override bool IsPC
Definition: Chara.cs:630
override bool IsPCFaction
Definition: Chara.cs:689
Element GetElement(string alias)
int id
Definition: ELEMENT.cs:257
int vPotential
Definition: ELEMENT.cs:263
Definition: SPELL.cs:630
virtual bool CanAutofire
Definition: Trait.cs:145

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

Referenced by AM_Adv._OnUpdateInput().

◆ CanStackTo()

override bool Thing.CanStackTo ( Thing  to)
inlinevirtual

Reimplemented from Card.

Definition at line 1701 of file Thing.cs.

1702 {
1703 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)
1704 {
1705 return false;
1706 }
1707 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1708 {
1709 return false;
1710 }
1711 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1712 {
1713 return false;
1714 }
1715 if (base.IsDecayed != to.IsDecayed)
1716 {
1717 return false;
1718 }
1719 if (!trait.CanStackTo(to))
1720 {
1721 return false;
1722 }
1723 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1724 {
1725 return false;
1726 }
1727 if (base.isStolen != to.isStolen)
1728 {
1729 return false;
1730 }
1731 if (base.isCrafted != to.isCrafted)
1732 {
1733 return false;
1734 }
1735 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1736 {
1737 return false;
1738 }
1739 if (to.c_IDTState != base.c_IDTState)
1740 {
1741 return false;
1742 }
1743 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1744 {
1745 return false;
1746 }
1747 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1748 {
1749 return false;
1750 }
1751 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1752 {
1753 return false;
1754 }
1755 if (base.c_altName != to.c_altName)
1756 {
1757 return false;
1758 }
1759 if (base.Num + to.Num <= 0)
1760 {
1761 return false;
1762 }
1763 bool flag = false;
1764 if (to.parent is Card)
1765 {
1766 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1767 if (windowSaveData != null && windowSaveData.compress)
1768 {
1769 flag = true;
1770 }
1771 }
1772 if (flag)
1773 {
1774 if (base.encLV != to.encLV && !base.IsFood)
1775 {
1776 return false;
1777 }
1778 if (elements.dict.Count() != to.elements.dict.Count())
1779 {
1780 return false;
1781 }
1782 foreach (Element value in elements.dict.Values)
1783 {
1784 if (to.elements.GetElement(value.id) == null)
1785 {
1786 return false;
1787 }
1788 }
1789 int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
1790 base.encLV = num2;
1791 foreach (Element value2 in elements.dict.Values)
1792 {
1793 Element element = to.elements.GetElement(value2.id);
1794 value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num));
1795 }
1796 return true;
1797 }
1798 if (base.encLV != to.encLV)
1799 {
1800 return false;
1801 }
1802 if (elements.dict.Count() != to.elements.dict.Count())
1803 {
1804 return false;
1805 }
1806 foreach (Element value3 in elements.dict.Values)
1807 {
1808 Element element2 = to.elements.GetElement(value3.id);
1809 if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10)
1810 {
1811 return false;
1812 }
1813 }
1814 return true;
1815 }
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:259
override int SelfWeight
Definition: Thing.cs:64
virtual bool CanStackTo(Thing to)
Definition: Trait.cs:625
virtual bool HasCharges
Definition: Trait.cs:341
bool IsRequireFuel
Definition: Trait.cs:477
bool compress
Definition: Window.cs:415

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

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

◆ Disassemble()

void Thing.Disassemble ( )
inline

Definition at line 1854 of file Thing.cs.

1855 {
1856 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 2003 of file Thing.cs.

2004 {
2005 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
2006 {
2007 SE.Beep();
2008 return;
2009 }
2010 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
2011 if (act.IsAct)
2012 {
2013 act.Perform(EClass.pc);
2014 return;
2015 }
2016 AIAct aI = act as AIAct;
2017 EClass.pc.SetAI(aI);
2019 }
Definition: AIAct.cs:6
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1086
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:9321
bool HasNoGoal
Definition: Chara.cs:1023
static Zone _zone
Definition: EClass.cs:21
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
HotItem currentHotItem
Definition: Player.cs:1167
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 1850 of file Thing.cs.

1851 {
1852 }

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

2022 {
2023 List<SourceElement.Row> list = new List<SourceElement.Row>();
2024 int num = 0;
2025 long num2 = lv + 5 + EClass.rndSqrt(10);
2026 foreach (SourceElement.Row row in EClass.sources.elements.rows)
2027 {
2028 if ((!neg || !row.tag.Contains("flag")) && func(row) && row.LV < num2)
2029 {
2030 list.Add(row);
2031 num += row.chance;
2032 }
2033 }
2034 if (num == 0)
2035 {
2036 return null;
2037 }
2038 int num3 = EClass.rnd(num);
2039 int num4 = 0;
2040 foreach (SourceElement.Row item in list)
2041 {
2042 num4 += item.chance;
2043 if (num3 < num4)
2044 {
2045 string text = EClass.sources.elements.map[item.id].category;
2046 bool flag = text == "skill" || text == "attribute" || text == "resist";
2047 float num5 = 3f + Mathf.Min(lv / 10, 15f) + Mathf.Sqrt(lv * item.encFactor / 100);
2048 int num6 = (item.mtp + EClass.rnd(item.mtp + (int)num5)) / item.mtp * ((!(flag && neg)) ? 1 : (-1));
2049 if (item.encFactor == 0 && num6 > 25)
2050 {
2051 num6 = 25;
2052 }
2053 return new Tuple<SourceElement.Row, int>(item, num6);
2054 }
2055 }
2056 return null;
2057 }
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:110
bool enable
Definition: CoreDebug.cs:301
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:480

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:183
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:630

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

◆ GetIngredients()

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

Definition at line 1817 of file Thing.cs.

1818 {
1819 if (ing.CanSetThing(this))
1820 {
1821 list.Add(this);
1822 }
1823 if (things.Count <= 0 || base.c_lockLv != 0 || base.isNPCProperty)
1824 {
1825 return;
1826 }
1827 foreach (Thing thing in things)
1828 {
1829 thing.GetIngredients(ing, list);
1830 }
1831 }
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:1817

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 != 0)
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:621
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:1173
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:24
virtual string NameShort
Definition: Religion.cs:48
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:728
virtual bool ShowCharges
Definition: Trait.cs:343
virtual bool CanStack
Definition: Trait.cs:163
virtual void SetName(ref string s)
Definition: Trait.cs:733

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(), DramaCustomSequence.Build(), 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 1846 of file Thing.cs.

1847 {
1848 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1687 of file Thing.cs.

1688 {
1689 Chara chara = GetRootCard() as Chara;
1690 if ((!trait.ShowAsTool || (chara == EClass.pc && HotItemHeld.disableTool)) && (chara?.held == this || (!base.isRoofItem && placeState != PlaceState.installed && renderer.data.subCrate.enable && parent is Zone)))
1691 {
1693 {
1694 return EClass.setting.pass.subCrate;
1695 }
1696 return renderer.data.subCrate;
1697 }
1698 return SubPassData.Default;
1699 }
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:305
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 2132 of file Thing.cs.

2133 {
2134 if (base.IsIdentified)
2135 {
2136 return this;
2137 }
2138 string @ref = "";
2139 string text = "";
2140 if (show)
2141 {
2142 @ref = GetName(NameStyle.Full, base.Num);
2143 }
2144 Rarity rarity = idtSource switch
2145 {
2146 IDTSource.SkillHigh => Rarity.Legendary,
2147 IDTSource.Skill => Rarity.Superior,
2148 _ => Rarity.Normal,
2149 };
2150 if (rarity != 0 && ((base.IsEquipmentOrRangedOrAmmo && base.rarity >= rarity) || base.rarity >= Rarity.Mythical))
2151 {
2152 base.c_IDTState = 3;
2153 }
2154 else if (base.rarity >= Rarity.Mythical && idtSource != IDTSource.SuperiorIdentify)
2155 {
2156 base.c_IDTState = 1;
2157 }
2158 else
2159 {
2160 base.c_IDTState = 0;
2161 }
2162 if (show)
2163 {
2164 text = GetName(NameStyle.Full, base.Num);
2165 if (base.c_IDTState == 0)
2166 {
2167 Msg.Say("identified", @ref, text);
2168 }
2169 else
2170 {
2171 Msg.Say((idtSource == IDTSource.Skill) ? "identified3" : "identified2", @ref, text, base.TextRarity);
2172 }
2173 }
2174 if (base.IsIdentified)
2175 {
2176 GetRootCard()?.TryStack(this);
2177 }
2179 return this;
2180 }
IDTSource
Definition: IDTSource.cs:2
void TryStack(Thing t)
Definition: Card.cs:7416
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 1833 of file Thing.cs.

1834 {
1835 if (isDestroyed)
1836 {
1837 return false;
1838 }
1839 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1840 {
1841 return false;
1842 }
1843 return true;
1844 }
bool isDestroyed
Definition: Card.cs:78
int Dist(Card c)
Definition: Card.cs:8131

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 i = 0; i < num; i++)
866 {
867 list.RemoveAt(list.Count - 1);
868 }
869 }
870 }
871 return list;
872 }
static int GetSortVal(Element a)
int Value
Definition: ELEMENT.cs:299
bool IsFoodTraitMain
Definition: ELEMENT.cs:374

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:6320
bool IsFoodTrait
Definition: ELEMENT.cs:371
bool IsTrait
Definition: ELEMENT.cs:369
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 2182 of file Thing.cs.

2183 {
2184 if (trait is TraitGene)
2185 {
2186 DNA dNA = base.c_DNA;
2187 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2188 {
2189 return false;
2190 }
2191 for (int i = 0; i < dNA.vals.Count; i += 2)
2192 {
2193 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2194 if (row.name.ToLower().Contains(s))
2195 {
2196 return true;
2197 }
2198 if (row.GetName().ToLower().Contains(s))
2199 {
2200 return true;
2201 }
2202 }
2203 }
2204 else
2205 {
2206 if (!base.IsIdentified)
2207 {
2208 return false;
2209 }
2210 foreach (Element value in elements.dict.Values)
2211 {
2212 if (value.Value != 0)
2213 {
2214 if (value.source.name.ToLower().Contains(s))
2215 {
2216 return true;
2217 }
2218 if (value.source.GetName().ToLower().Contains(s))
2219 {
2220 return true;
2221 }
2222 }
2223 }
2224 }
2225 return false;
2226 }
Definition: DNA.cs:8
Type type
Definition: DNA.cs:29
Type
Definition: DNA.cs:10
List< int > vals
Definition: DNA.cs:24
SourceElement.Row source
Definition: ELEMENT.cs:280
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 != 0 || 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:3715
CardBlueprint bp
Definition: Card.cs:80
void ApplySocket(Thing t)
Definition: Card.cs:3724
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:4069
void SetEncLv(int a)
Definition: Card.cs:4038
int genLv
Definition: Card.cs:197
bool autoIdentify
Definition: CoreDebug.cs:204
static SourceElement.Row GetRandomElement(int lv=1, bool useWeight=true)
Definition: ELEMENT.cs:563
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:2108
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 2122 of file Thing.cs.

2123 {
2124 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1536 of file Thing.cs.

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

1859 {
1860 int count = 1;
1861 UIContextMenu i = EClass.ui.CreateContextMenuInteraction();
1862 bool buy = trans != null;
1863 UIButton buttonBuy = null;
1864 UIItem itemSlider = null;
1865 itemSlider = i.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1866 {
1867 count = (int)b;
1868 if (trans != null)
1869 {
1870 trans.num = count;
1871 }
1872 UpdateButton();
1873 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1874 if (buy)
1875 {
1876 buttonBuy = i.AddButton("invBuy", delegate
1877 {
1878 Process();
1879 });
1880 }
1881 i.onDestroy = delegate
1882 {
1883 if ((!buy || Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !i.wasCanceled)
1884 {
1885 Process();
1886 }
1887 };
1888 i.Show();
1889 if ((bool)buttonBuy)
1890 {
1891 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1892 }
1893 UpdateButton();
1894 void Process()
1895 {
1896 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1897 {
1898 Debug.Log("Split bug1");
1899 }
1900 else if (button.card.isDestroyed || button.card.Num < count)
1901 {
1902 Debug.Log("Split bug2");
1903 }
1904 else if (EClass.pc.isDead)
1905 {
1906 Debug.Log("Split bug3");
1907 }
1908 else if (count != 0 && !Input.GetMouseButton(1))
1909 {
1910 if (trans != null)
1911 {
1912 trans.Process(startTransaction: true);
1913 }
1914 else
1915 {
1916 DragItemCard dragItemCard = new DragItemCard(button);
1917 if (count != base.Num)
1918 {
1919 Thing thing = button.card.Split(base.Num - count);
1920 button.invOwner.Container.AddThing(thing, tryStack: false);
1921 thing.invX = dragItemCard.from.invX;
1922 thing.invY = dragItemCard.from.invY;
1923 thing.posInvX = button.card.Thing.posInvX;
1924 thing.posInvY = button.card.Thing.posInvY;
1925 }
1926 EClass.ui.StartDrag(dragItemCard);
1927 }
1928 }
1929 }
1930 void UpdateButton()
1931 {
1932 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1933 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1934 if ((bool)buttonBuy)
1935 {
1936 buttonBuy.mainText.SetText(trans.GetTextDetail());
1937 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1938 buttonBuy.interactable = trans.IsValid();
1939 buttonBuy.RebuildLayout(recursive: true);
1940 buttonBuy.gameObject.GetComponent<CanvasGroup>().alpha = (trans.IsValid() ? 1f : 0.9f);
1941 }
1942 }
1943 }
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:3658
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3273
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 1945 of file Thing.cs.

1946 {
1947 int count = 1;
1948 UIContextMenu i = EClass.ui.CreateContextMenuInteraction();
1949 UIButton buttonBuy = null;
1950 UIItem itemSlider = null;
1951 itemSlider = i.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1952 {
1953 count = (int)b;
1954 UpdateButton();
1955 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1956 buttonBuy = i.AddButton("invBuy", delegate
1957 {
1958 Process();
1959 });
1960 i.onDestroy = delegate
1961 {
1962 if ((Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !i.wasCanceled)
1963 {
1964 Process();
1965 }
1966 };
1967 i.Show();
1968 if ((bool)buttonBuy)
1969 {
1970 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1971 }
1972 UpdateButton();
1973 void Process()
1974 {
1975 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1976 {
1977 Debug.Log("Split bug1");
1978 }
1979 else if (button.card.isDestroyed || button.card.Num < count)
1980 {
1981 Debug.Log("Split bug2");
1982 }
1983 else if (EClass.pc.isDead)
1984 {
1985 Debug.Log("Split bug3");
1986 }
1987 else if (count != 0 && !Input.GetMouseButton(1))
1988 {
1989 onSplit?.Invoke(count);
1990 }
1991 }
1992 void UpdateButton()
1993 {
1994 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1995 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1996 buttonBuy.mainText.SetText(lang.lang(count.ToString() ?? ""));
1997 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1998 buttonBuy.interactable = true;
1999 buttonBuy.RebuildLayout(recursive: true);
2000 }
2001 }

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

2060 {
2061 if (!base.IsEquipment || base.IsCursed || base.rarity <= Rarity.Normal || GetInt(107) > 0)
2062 {
2063 return;
2064 }
2065 SetInt(107, 1);
2066 if (tg == null)
2067 {
2068 Rand.SetSeed(EClass.world.date.day + source._index + c.uid);
2069 if (msg)
2070 {
2071 c.Say("lick", c, this);
2072 PlaySound("offering");
2073 PlayEffect("mutation");
2074 }
2075 Element element = AddEnchant(base.LV);
2076 if (element != null)
2077 {
2078 SetInt(107, element.id);
2079 }
2080 }
2081 else
2082 {
2083 Rand.SetSeed(base.uid);
2084 List<Element> list = new List<Element>();
2085 foreach (Element value in elements.dict.Values)
2086 {
2087 if (value.id != 67 && value.id != 66 && value.id != 64 && value.id != 65)
2088 {
2089 list.Add(value);
2090 }
2091 }
2092 if (list.Count > 0)
2093 {
2094 Element element2 = list.RandomItem();
2095 elements.ModBase(element2.id, Mathf.Max(EClass.rnd(Mathf.Abs(element2.vBase / 5)), 1));
2096 SetInt(107, element2.id);
2097 }
2098 if (msg)
2099 {
2100 c.Say("lick2", c, tg, slot.name.ToLower());
2101 tg.PlaySound("offering");
2102 tg.PlayEffect("mutation");
2103 }
2104 }
2105 Rand.SetSeed();
2106 }
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:6612
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7256
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 text2 = ((trait is TraitLunchLove) ? "_heart".lang().TagColor(FontColor.Bad) : "");
906 n.Clear();
907 string text3 = "";
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 text3 = base.Name;
913 if (base.rarity == Rarity.Legendary || base.rarity == Rarity.Mythical)
914 {
915 string text4 = (text3.Contains("『") ? "『" : (text3.Contains("《") ? "《" : ""));
916 if (text4 != "")
917 {
918 string[] array = text3.Split(text4);
919 text3 = array[0] + Environment.NewLine + text4 + array[1];
920 }
921 }
922 if (flag)
923 {
924 if (!(trait is TraitPotionAlchemy))
925 {
926 text3 = recipe.GetName();
927 }
928 if (trait.CraftNum > 1)
929 {
930 text3 = text3 + " 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(text3);
942 SetImage(uIItem.image2);
943 uIItem.image2.Rect().pivot = new Vector2(0.5f, 0.5f);
944 string text5 = base.Num.ToFormat() ?? "";
945 string text6 = (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 text5 = text5 + " (" + things.Count + ")";
949 }
950 if (base.ChildrenAndSelfWeight != SelfWeight)
951 {
952 text6 = text6 + " (" + (Mathf.Ceil(0.01f * (float)SelfWeight) * 0.1f).ToString("F1") + "s)";
953 }
954 text3 = "_quantity".lang(text5 ?? "", text6);
956 {
957 text3 = text3 + "(" + base.ChildrenAndSelfWeight + ")";
958 }
959 if (flag && recipe != null && (bool)LayerCraft.Instance)
960 {
961 text3 = text3 + " " + "_recipe_lv".lang(recipe.RecipeLv.ToString() ?? "");
962 }
963 uIItem.text2.SetText(text3);
964 if (showEQStats && flag2)
965 {
966 text3 = "";
967 if (DV != 0 || PV != 0 || base.HIT != 0 || base.DMG != 0 || Penetration != 0)
968 {
969 if (base.DMG != 0)
970 {
971 text3 = text3 + "DMG".lang() + ((base.DMG > 0) ? "+" : "") + base.DMG + ", ";
972 }
973 if (base.HIT != 0)
974 {
975 text3 = text3 + "HIT".lang() + ((base.HIT > 0) ? "+" : "") + base.HIT + ", ";
976 }
977 if (DV != 0)
978 {
979 text3 = text3 + "DV".lang() + ((DV > 0) ? "+" : "") + DV + ", ";
980 }
981 if (PV != 0)
982 {
983 text3 = text3 + "PV".lang() + ((PV > 0) ? "+" : "") + PV + ", ";
984 }
985 if (Penetration != 0)
986 {
987 text3 = text3 + "PEN".lang() + ((Penetration > 0) ? "+" : "") + Penetration + "%, ";
988 }
989 text3 = text3.TrimEnd(' ').TrimEnd(',');
990 }
991 if (!text3.IsEmpty())
992 {
993 n.AddText("NoteText_eqstats", text3);
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 text7 = "";
1004 {
1005 int totalQuality = GetTotalQuality();
1006 int totalQuality2 = GetTotalQuality(applyBonus: false);
1007 text7 = text7 + "Lv. " + base.LV + " TQ. " + GetTotalQuality() + ((totalQuality == totalQuality2) ? "" : (" (" + totalQuality2 + ")"));
1008 }
1009 if (HasElement(10))
1010 {
1011 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_nutrition".lang(Evalue(10).ToFormat() ?? "");
1012 }
1013 if ((base.category.IsChildOf("throw") || base.category.IsChildOf("resource") || trait.IsTool) && !(trait is TraitAbility))
1014 {
1015 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_hardness".lang(base.material.hardness.ToString() ?? "");
1016 }
1017 if (flag && recipe != null && (bool)LayerCraft.Instance)
1018 {
1019 text7 = text7 + (text7.IsEmpty() ? "" : " ") + "_max_quality".lang(recipe.GetQualityBonus().ToString() ?? "");
1020 }
1021 if (!text7.IsEmpty())
1022 {
1023 n.AddText("NoteText_eqstats", text7);
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 text8 = "";
1101 text8 = (base.IsDecayed ? "isRotten" : (base.IsRotting ? "isRotting" : ((!base.IsFresn) ? "isNotFresh" : "isFresh")));
1102 AddText(text8.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 text3 = "isEquipable".lang(Element.Get(base.category.slot).GetText());
1111 AddText(text3, 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 col2 = FontColor.Util;
1200 if (trait is TraitToolCrowbar)
1201 {
1202 AddText("canPryOpen", col2);
1203 }
1204 else if (trait is TraitTool && !(trait is TraitToolRange))
1205 {
1206 if (HasElement(220))
1207 {
1208 AddText("canMine".lang(), col2);
1209 }
1210 if (HasElement(225))
1211 {
1212 AddText("canLumberjack".lang(), col2);
1213 AddText("canLumberjack2".lang(), col2);
1214 }
1215 if (HasElement(230))
1216 {
1217 AddText("canDig", col2);
1218 }
1219 if (HasElement(286))
1220 {
1221 AddText("canFarm", col2);
1222 }
1223 if (HasElement(245))
1224 {
1225 AddText("canFish", col2);
1226 }
1227 if (HasElement(237))
1228 {
1229 AddText("canTame", col2);
1230 }
1231 }
1232 if (trait is TraitToolMusic)
1233 {
1234 AddText("canPlayMusic".lang(), col2);
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 flag3 = 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 flag3 = true;
1326 }
1327 if (e.source.tag.Contains("weaponEnc") && !flag3)
1328 {
1329 return false;
1330 }
1331 if (e.source.IsWeaponEnc && !(base.category.IsChildOf("shield") || flag3))
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 num3 = e.Value;
1344 if (e.source.IsWeaponEnc && (!e.source.tag.Contains("modRanged") || e.id == 609) && isEquipped && root.isChara)
1345 {
1346 int num4 = e.id;
1347 if (num4 != 482 && (uint)(num4 - 660) > 2u && num4 != 666)
1348 {
1349 num3 = num3 * (100 + AttackProcess.GetTwoHandEncBonus(root.Chara, this)) / 100;
1350 }
1351 }
1352 string text13 = " (" + e.Value + ((e.Value == num3) ? "" : (" → " + num3)) + ")";
1353 string text14 = "_bracketLeft3".lang() + e.Name + "_bracketRight3".lang();
1354 return s + text13 + " " + text14;
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 (flag2)
1366 {
1367 if (showTraits)
1368 {
1369 elements.AddNote(n, (Element e) => listTrait.Contains(e), null, ElementContainer.NoteMode.BonusTrait, addRaceFeat: false, (Element e, string s) => s + GetTextTrait(e), delegate
1370 {
1371 });
1372 if (listTrait.Count != list.Count)
1373 {
1374 AddText("traitOther".lang((list.Count - listTrait.Count).ToString() ?? ""), FontColor.Default);
1375 }
1376 }
1377 if (base.c_mixedFoodData != null)
1378 {
1379 n.AddHeader("isMixedFood");
1380 foreach (string text15 in base.c_mixedFoodData.texts)
1381 {
1382 AddText("_bullet".lang() + text15 + text2, FontColor.Default);
1383 }
1384 }
1385 }
1386 else
1387 {
1388 AddText("isUnidentified".lang(), FontColor.Flavor);
1389 if (base.c_IDTState == 1)
1390 {
1391 AddText("isUnidentified2".lang(), FontColor.Flavor);
1392 }
1393 }
1394 if (mode == IInspect.NoteMode.Product && HasCraftBonusTrait())
1395 {
1396 n.AddHeader("HeaderAdditionalTrait", "additional_trait");
1397 foreach (Element item in ListCraftBonusTraits())
1398 {
1399 item.AddEncNote(n, this, ElementContainer.NoteMode.BonusTrait, (Element e, string s) => s + GetTextTrait(e));
1400 }
1401 }
1403 {
1404 n.AddText("decay:" + base.decay);
1405 n.AddText(base.isDyed + "/" + id + "/" + base.refVal + "/" + base.LV + "/" + trait);
1406 if (source.origin != null)
1407 {
1408 n.AddText(source.origin.id);
1409 }
1410 }
1411 if (id == "statue_weird")
1412 {
1413 AddText("weirdStatue", FontColor.Default);
1414 }
1415 if (base.isReplica)
1416 {
1417 AddText("isReplica", FontColor.Passive);
1418 }
1419 if (flag2 && mode != IInspect.NoteMode.Product)
1420 {
1421 Chara chara2 = GetRootCard() as Chara;
1423 {
1424 chara2 = null;
1425 }
1426 if (base.c_equippedSlot != 0 && base.category.slot == 35 && chara2 != null)
1427 {
1428 AddAttackEvaluation(n, chara2, this);
1429 }
1430 if (base.IsThrownWeapon || base.IsRangedWeapon || (base.IsMeleeWeapon && base.c_equippedSlot == 0))
1431 {
1432 n.AddHeader("headerAttackEval");
1433 AttackProcess.Current.Prepare(chara2 ?? EClass.pc, this, null, null, 0, base.IsThrownWeapon);
1434 string text9 = AttackProcess.Current.GetText();
1435 text9 = text9.TagColor(() => true);
1436 n.AddText(text9);
1437 }
1438 }
1439 if (base.ammoData != null)
1440 {
1441 n.AddHeader("headerAttackAmmo");
1442 n.AddText(base.ammoData.Name);
1443 }
1444 onWriteNote?.Invoke(n);
1445 if (mode == IInspect.NoteMode.Product && base.IsEquipmentOrRangedOrAmmo)
1446 {
1447 AddText("isProductWarning", FontColor.Default);
1448 }
1449 if ((bool)LayerDragGrid.Instance)
1450 {
1452 }
1454 {
1455 foreach (Element value in elements.dict.Values)
1456 {
1457 n.AddText(value.source.alias + "/" + value.Value + "/" + value.vBase + "/" + value.vSource);
1458 }
1459 }
1460 n.Build();
1461 void AddText(string text, FontColor col)
1462 {
1463 n.AddText("NoteText_enc", text, col);
1464 }
1465 void AddTextWithIcon(string text, Sprite sprite, FontColor col)
1466 {
1467 UIItem uIItem2 = n.AddText("NoteText_enc", text, col);
1468 uIItem2.image1.SetActive(enable: true);
1469 uIItem2.image1.sprite = sprite;
1470 }
1471 string GetTextTrait(Element e)
1472 {
1473 string text10 = e.source.GetText("textExtra");
1474 if (text10.IsEmpty())
1475 {
1476 return "";
1477 }
1478 if (e.id == 710)
1479 {
1480 text10 = text10.Replace("#1", $"{0.1f * (float)(e.Value + 10):F1}");
1481 }
1482 string text11 = "";
1483 if (e.id == 2 && mode == IInspect.NoteMode.Product)
1484 {
1485 int num = recipe.GetQualityBonus() / 10;
1486 if (num >= 0)
1487 {
1488 num++;
1489 }
1490 text11 = "qualityLimit".lang(num.ToString() ?? "");
1491 }
1492 int num2 = e.Value / 10;
1493 num2 = ((e.Value < 0) ? (num2 - 1) : (num2 + 1));
1494 string text12 = num2.ToString() ?? "";
1495 if (EClass.pc.HasElement(1250) && HasElement(710) && e.IsFoodTrait && e.id != 710)
1496 {
1497 text12 = (int)((float)num2 * 0.1f * (float)(Evalue(710) + 10)) + " (" + num2 + ")";
1498 }
1499 text10 = "Lv." + text12 + text11 + " " + text10;
1500 if (infoMode && e.IsFoodTraitMain)
1501 {
1502 text10 += "traitAdditive".lang();
1503 }
1504 return (" <size=12>" + text10 + "</size>").TagColor(FontColor.Passive);
1505 }
1506 }
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:3901
ICardParent GetRoot()
Definition: Card.cs:3591
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:7395
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:7041
Card parentCard
Definition: Card.cs:106
void SetImage(Image image, int dir, int idSkin=0)
Definition: Card.cs:6519
List< Element > ListCraftBonusTraits()
Definition: Card.cs:7400
int GetTotalQuality(bool applyBonus=true)
Definition: Card.cs:4010
Icons icons
Definition: CoreRef.cs:356
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:261
void _WriteNote(UINote n, Chara c, Act act)
Definition: ELEMENT.cs:613
static SourceElement.Row Get(int id)
Definition: ELEMENT.cs:408
bool HasTag(string tag)
Definition: ELEMENT.cs:480
int vSource
Definition: ELEMENT.cs:269
bool IsGlobalElement
Definition: ELEMENT.cs:352
virtual int ExpToNext
Definition: ELEMENT.cs:315
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:802
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:1508
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:615
virtual void WriteNote(UINote n, bool identified)
Definition: Trait.cs:1141
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:1165
virtual int Decay
Definition: Trait.cs:123
virtual bool CanDrink(Chara c)
Definition: Trait.cs:1174
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(), AI_Idle.Run(), TraitBaseContainer.SetName(), Zone.TryAddThingInSharedContainer(), Zone.TryGetThingFromSharedContainer(), and Chara.TryTakeSharedItems().

◆ isThing

override bool Thing.isThing
get

Definition at line 45 of file Thing.cs.

◆ Penetration

int Thing.Penetration
get

Definition at line 33 of file Thing.cs.

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

Referenced by AttackProcess.Prepare().

◆ Pref

override SourcePref Thing.Pref
get

Definition at line 49 of file Thing.cs.

50 {
51 get
52 {
53 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:30
SpriteData data
virtual SourcePref GetPref()
Definition: Trait.cs:605

Referenced by Chara._Move(), BaseTileMap.DrawTile(), Cell.GetSurfaceHeight(), BaseTileMap.GetThingPosition(), CharaActorPCC.OnRender(), 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.map[base.refVal];
90 }
91 return EClass.sources.objs.map[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: