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

Public Member Functions

bool CanAutoFire (Chara c, Card tg, bool reloading=false)
 
int GetEfficiency ()
 
override void SetSource ()
 
override void OnCreate (int genLv)
 
override void ApplyMaterialElements (bool remove)
 
override void ApplyMaterial (bool remove=false)
 
override string GetName (NameStyle style, int _num=-1)
 
override string GetHoverText ()
 
override string GetExtraName ()
 
List< ElementListLimitedValidTraits (bool limit)
 
List< ElementListValidTraits (bool isCraft, bool limit)
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetRenderParam (RenderParam p)
 
override SubPassData GetSubPassData ()
 
override bool CanStackTo (Thing to)
 
void GetIngredients (Recipe.Ingredient ing, List< Thing > list)
 
bool IsValidIngredient (Recipe.Ingredient ing)
 
void GetRecipes (HashSet< Recipe > recipes)
 
void GetDisassembles (List< Thing > list)
 
void Disassemble ()
 
void ShowSplitMenu (ButtonGrid button, InvOwner.Transaction trans=null)
 
void ShowSplitMenu2 (ButtonGrid button, string lang, Action< int > onSplit=null)
 
void DoAct (Act act)
 
void TryLickEnchant (Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
 
Element AddEnchant (int lv=-1)
 
void RemoveEnchant ()
 
void Attune (Chara c)
 
Thing Identify (bool show=true, IDTSource idtSource=IDTSource.Identify)
 
override bool MatchEncSearch (string s)
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (Recipe.Ingredient ing)
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
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)
 
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 StripTalkSpeiclaCharacters (string text)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
virtual T GetCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

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

1485 {
1486 n.AddHeader("headerAttackEval");
1487 int num = 0;
1488 foreach (BodySlot slot in chara.body.slots)
1489 {
1490 if (slot.thing == null || slot.elementId != 35 || slot.thing.source.offense.Length < 2)
1491 {
1492 continue;
1493 }
1494 AttackProcess.Current.Prepare(chara, slot.thing, null, null, num);
1495 string text = AttackProcess.Current.GetText();
1496 if (slot.thing == current)
1497 {
1498 text = text.TagColor(() => true);
1499 }
1500 n.AddText(text);
1501 num++;
1502 }
1503 AttackProcess.Current.Prepare(chara, null);
1504 string text2 = AttackProcess.Current.GetText();
1505 if (num == 0)
1506 {
1507 text2 = text2.TagColor(() => true);
1508 }
1509 n.AddText(text2);
1510 }
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 2084 of file Thing.cs.

2085 {
2086 if (base.IsToolbelt || base.IsLightsource)
2087 {
2088 return null;
2089 }
2090 Tuple<SourceElement.Row, int> enchant = GetEnchant(lv, (SourceElement.Row r) => r.IsEncAppliable(base.category), base.IsCursed);
2091 if (enchant == null)
2092 {
2093 return null;
2094 }
2095 return elements.ModBase(enchant.Item1.id, enchant.Item2);
2096 }
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:1997

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:3522
Definition: Chara.cs:10
bool IsGameStarted
Definition: Core.cs:84
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 2102 of file Thing.cs.

2103 {
2104 Msg.Say("attuned", this, c);
2105 base.c_uidAttune = c.uid;
2106 }
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:2649
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:255
int vPotential
Definition: ELEMENT.cs:261
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 1677 of file Thing.cs.

1678 {
1679 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)
1680 {
1681 return false;
1682 }
1683 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1684 {
1685 return false;
1686 }
1687 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1688 {
1689 return false;
1690 }
1691 if (base.IsDecayed != to.IsDecayed)
1692 {
1693 return false;
1694 }
1695 if (!trait.CanStackTo(to))
1696 {
1697 return false;
1698 }
1699 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1700 {
1701 return false;
1702 }
1703 if (base.isStolen != to.isStolen)
1704 {
1705 return false;
1706 }
1707 if (base.isCrafted != to.isCrafted)
1708 {
1709 return false;
1710 }
1711 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1712 {
1713 return false;
1714 }
1715 if (to.c_IDTState != base.c_IDTState)
1716 {
1717 return false;
1718 }
1719 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1720 {
1721 return false;
1722 }
1723 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1724 {
1725 return false;
1726 }
1727 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1728 {
1729 return false;
1730 }
1731 if (base.c_altName != to.c_altName)
1732 {
1733 return false;
1734 }
1735 if (base.Num + to.Num <= 0)
1736 {
1737 return false;
1738 }
1739 bool flag = false;
1740 if (to.parent is Card)
1741 {
1742 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1743 if (windowSaveData != null && windowSaveData.compress)
1744 {
1745 flag = true;
1746 }
1747 }
1748 if (flag)
1749 {
1750 if (base.encLV != to.encLV && !base.IsFood)
1751 {
1752 return false;
1753 }
1754 if (elements.dict.Count() != to.elements.dict.Count())
1755 {
1756 return false;
1757 }
1758 foreach (Element value in elements.dict.Values)
1759 {
1760 if (to.elements.GetElement(value.id) == null)
1761 {
1762 return false;
1763 }
1764 }
1765 int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
1766 base.encLV = num2;
1767 foreach (Element value2 in elements.dict.Values)
1768 {
1769 Element element = to.elements.GetElement(value2.id);
1770 value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num));
1771 }
1772 return true;
1773 }
1774 if (base.encLV != to.encLV)
1775 {
1776 return false;
1777 }
1778 if (elements.dict.Count() != to.elements.dict.Count())
1779 {
1780 return false;
1781 }
1782 foreach (Element value3 in elements.dict.Values)
1783 {
1784 Element element2 = to.elements.GetElement(value3.id);
1785 if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10)
1786 {
1787 return false;
1788 }
1789 }
1790 return true;
1791 }
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:2341
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:2570
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:257
override int SelfWeight
Definition: Thing.cs:64
virtual bool CanStackTo(Thing to)
Definition: Trait.cs:615
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 1830 of file Thing.cs.

1831 {
1832 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 1979 of file Thing.cs.

1980 {
1981 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
1982 {
1983 SE.Beep();
1984 return;
1985 }
1986 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
1987 if (act.IsAct)
1988 {
1989 act.Perform(EClass.pc);
1990 return;
1991 }
1992 AIAct aI = act as AIAct;
1993 EClass.pc.SetAI(aI);
1995 }
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:9178
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().

◆ GetDisassembles()

void Thing.GetDisassembles ( List< Thing list)
inline

Definition at line 1826 of file Thing.cs.

1827 {
1828 }

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

1998 {
1999 List<SourceElement.Row> list = new List<SourceElement.Row>();
2000 int num = 0;
2001 long num2 = lv + 5 + EClass.rndSqrt(10);
2002 foreach (SourceElement.Row row in EClass.sources.elements.rows)
2003 {
2004 if ((!neg || !row.tag.Contains("flag")) && func(row) && row.LV < num2)
2005 {
2006 list.Add(row);
2007 num += row.chance;
2008 }
2009 }
2010 if (num == 0)
2011 {
2012 return null;
2013 }
2014 int num3 = EClass.rnd(num);
2015 int num4 = 0;
2016 foreach (SourceElement.Row item in list)
2017 {
2018 num4 += item.chance;
2019 if (num3 < num4)
2020 {
2021 string text = EClass.sources.elements.map[item.id].category;
2022 bool flag = text == "skill" || text == "attribute" || text == "resist";
2023 float num5 = 3f + Mathf.Min(lv / 10, 15f) + Mathf.Sqrt(lv * item.encFactor / 100);
2024 int num6 = (item.mtp + EClass.rnd(item.mtp + (int)num5)) / item.mtp * ((!(flag && neg)) ? 1 : (-1));
2025 if (item.encFactor == 0 && num6 > 25)
2026 {
2027 num6 = 25;
2028 }
2029 return new Tuple<SourceElement.Row, int>(item, num6);
2030 }
2031 }
2032 return null;
2033 }
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:478

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:6
static string _weight(int a, int b, bool showUnit=true, int unitSize=0)
Definition: Lang.cs:174
virtual string GetHoverText()
Definition: Trait.cs:620

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

◆ GetIngredients()

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

Definition at line 1793 of file Thing.cs.

1794 {
1795 if (ing.CanSetThing(this))
1796 {
1797 list.Add(this);
1798 }
1799 if (things.Count <= 0 || base.c_lockLv != 0 || base.isNPCProperty)
1800 {
1801 return;
1802 }
1803 foreach (Thing thing in things)
1804 {
1805 thing.GetIngredients(ing, list);
1806 }
1807 }
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:1793

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_047d;
599 IL_047d:
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().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("#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_047d;
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
string GetStr(int id, string defaultStr=null)
Definition: BaseCard.cs:54
int GetInt(int id, int? defaultInt=null)
Definition: BaseCard.cs:25
bool GetBool(int id)
Definition: BaseCard.cs:15
virtual int PV
Definition: Card.cs:2381
virtual int GetPrice(CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
Definition: Card.cs:7612
virtual int DV
Definition: Card.cs:2379
override string ToString()
Definition: Card.cs:2541
bool IsIdentified
Definition: Card.cs:2431
BackerContentConfig backer
Definition: CoreConfig.cs:619
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:50
static string[] GetList(string id)
Definition: Lang.cs:116
static string _currency(object a, string IDCurrency)
Definition: Lang.cs:164
Thing eqBait
Definition: Player.cs:1173
Definition: Rand.cs:4
static void UseSeed(int seed, Action action)
Definition: Rand.cs:24
SourceCategory categories
static bool CanTagSale(Card t, bool insideContainer=false)
Definition: TraitSalesTag.cs:9
virtual string GetName()
Definition: Trait.cs:718
virtual bool ShowCharges
Definition: Trait.cs:343
virtual bool CanStack
Definition: Trait.cs:163
virtual void SetName(ref string s)
Definition: Trait.cs:723

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

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

◆ GetRecipes()

void Thing.GetRecipes ( HashSet< Recipe recipes)
inline

Definition at line 1822 of file Thing.cs.

1823 {
1824 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1663 of file Thing.cs.

1664 {
1665 Chara chara = GetRootCard() as Chara;
1666 if ((!trait.ShowAsTool || (chara == EClass.pc && HotItemHeld.disableTool)) && (chara?.held == this || (!base.isRoofItem && placeState != PlaceState.installed && renderer.data.subCrate.enable && parent is Zone)))
1667 {
1669 {
1670 return EClass.setting.pass.subCrate;
1671 }
1672 return renderer.data.subCrate;
1673 }
1674 return SubPassData.Default;
1675 }
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 2108 of file Thing.cs.

2109 {
2110 if (base.IsIdentified)
2111 {
2112 return this;
2113 }
2114 string @ref = "";
2115 string text = "";
2116 if (show)
2117 {
2118 @ref = GetName(NameStyle.Full, base.Num);
2119 }
2120 Rarity rarity = idtSource switch
2121 {
2122 IDTSource.SkillHigh => Rarity.Legendary,
2123 IDTSource.Skill => Rarity.Superior,
2124 _ => Rarity.Normal,
2125 };
2126 if (rarity != 0 && ((base.IsEquipmentOrRangedOrAmmo && base.rarity >= rarity) || base.rarity >= Rarity.Mythical))
2127 {
2128 base.c_IDTState = 3;
2129 }
2130 else if (base.rarity >= Rarity.Mythical && idtSource != IDTSource.SuperiorIdentify)
2131 {
2132 base.c_IDTState = 1;
2133 }
2134 else
2135 {
2136 base.c_IDTState = 0;
2137 }
2138 if (show)
2139 {
2140 text = GetName(NameStyle.Full, base.Num);
2141 if (base.c_IDTState == 0)
2142 {
2143 Msg.Say("identified", @ref, text);
2144 }
2145 else
2146 {
2147 Msg.Say((idtSource == IDTSource.Skill) ? "identified3" : "identified2", @ref, text, base.TextRarity);
2148 }
2149 }
2150 if (base.IsIdentified)
2151 {
2152 GetRootCard()?.TryStack(this);
2153 }
2155 return this;
2156 }
IDTSource
Definition: IDTSource.cs:2
Rarity rarity
Definition: Card.cs:317
void TryStack(Thing t)
Definition: Card.cs:7319
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 1809 of file Thing.cs.

1810 {
1811 if (isDestroyed)
1812 {
1813 return false;
1814 }
1815 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1816 {
1817 return false;
1818 }
1819 return true;
1820 }
bool isDestroyed
Definition: Card.cs:78
int Dist(Card c)
Definition: Card.cs:8034

References EClass.pc.

Referenced by DropdownGrid.BuildIngredients().

◆ ListLimitedValidTraits()

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

Definition at line 829 of file Thing.cs.

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

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

◆ ListValidTraits()

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

Definition at line 854 of file Thing.cs.

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

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

2159 {
2160 if (trait is TraitGene)
2161 {
2162 DNA dNA = base.c_DNA;
2163 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2164 {
2165 return false;
2166 }
2167 for (int i = 0; i < dNA.vals.Count; i += 2)
2168 {
2169 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2170 if (row.name.ToLower().Contains(s))
2171 {
2172 return true;
2173 }
2174 if (row.GetName().ToLower().Contains(s))
2175 {
2176 return true;
2177 }
2178 }
2179 }
2180 else
2181 {
2182 if (!base.IsIdentified)
2183 {
2184 return false;
2185 }
2186 foreach (Element value in elements.dict.Values)
2187 {
2188 if (value.Value != 0)
2189 {
2190 if (value.source.name.ToLower().Contains(s))
2191 {
2192 return true;
2193 }
2194 if (value.source.GetName().ToLower().Contains(s))
2195 {
2196 return true;
2197 }
2198 }
2199 }
2200 }
2201 return false;
2202 }
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:278
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:3637
CardBlueprint bp
Definition: Card.cs:80
void ApplySocket(Thing t)
Definition: Card.cs:3646
virtual void SetBlessedState(BlessedState s)
Definition: Card.cs:3991
void SetEncLv(int a)
Definition: Card.cs:3960
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:561
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:2084
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 2098 of file Thing.cs.

2099 {
2100 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1512 of file Thing.cs.

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

1835 {
1836 int count = 1;
1837 UIContextMenu i = EClass.ui.CreateContextMenuInteraction();
1838 bool buy = trans != null;
1839 UIButton buttonBuy = null;
1840 UIItem itemSlider = null;
1841 itemSlider = i.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1842 {
1843 count = (int)b;
1844 if (trans != null)
1845 {
1846 trans.num = count;
1847 }
1848 UpdateButton();
1849 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1850 if (buy)
1851 {
1852 buttonBuy = i.AddButton("invBuy", delegate
1853 {
1854 Process();
1855 });
1856 }
1857 i.onDestroy = delegate
1858 {
1859 if ((!buy || Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !i.wasCanceled)
1860 {
1861 Process();
1862 }
1863 };
1864 i.Show();
1865 if ((bool)buttonBuy)
1866 {
1867 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1868 }
1869 UpdateButton();
1870 void Process()
1871 {
1872 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1873 {
1874 Debug.Log("Split bug1");
1875 }
1876 else if (button.card.isDestroyed || button.card.Num < count)
1877 {
1878 Debug.Log("Split bug2");
1879 }
1880 else if (EClass.pc.isDead)
1881 {
1882 Debug.Log("Split bug3");
1883 }
1884 else if (count != 0 && !Input.GetMouseButton(1))
1885 {
1886 if (trans != null)
1887 {
1888 trans.Process(startTransaction: true);
1889 }
1890 else
1891 {
1892 DragItemCard dragItemCard = new DragItemCard(button);
1893 if (count != base.Num)
1894 {
1895 Thing thing = button.card.Split(base.Num - count);
1896 button.invOwner.Container.AddThing(thing, tryStack: false);
1897 thing.invX = dragItemCard.from.invX;
1898 thing.invY = dragItemCard.from.invY;
1899 thing.posInvX = button.card.Thing.posInvX;
1900 thing.posInvY = button.card.Thing.posInvY;
1901 }
1902 EClass.ui.StartDrag(dragItemCard);
1903 }
1904 }
1905 }
1906 void UpdateButton()
1907 {
1908 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1909 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1910 if ((bool)buttonBuy)
1911 {
1912 buttonBuy.mainText.SetText(trans.GetTextDetail());
1913 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1914 buttonBuy.interactable = trans.IsValid();
1915 buttonBuy.RebuildLayout(recursive: true);
1916 buttonBuy.gameObject.GetComponent<CanvasGroup>().alpha = (trans.IsValid() ? 1f : 0.9f);
1917 }
1918 }
1919 }
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:3580
Thing AddThing(string id, int lv=-1)
Definition: Card.cs:3194
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 1921 of file Thing.cs.

1922 {
1923 int count = 1;
1924 UIContextMenu i = EClass.ui.CreateContextMenuInteraction();
1925 UIButton buttonBuy = null;
1926 UIItem itemSlider = null;
1927 itemSlider = i.AddSlider("sliderSplitMenu", "adjustmentNum", (float a) => (!EClass.core.IsGameStarted) ? "" : ("/" + base.Num), count, delegate(float b)
1928 {
1929 count = (int)b;
1930 UpdateButton();
1931 }, 1f, base.Num, isInt: true, hideOther: false, useInput: true).GetComponent<UIItem>();
1932 buttonBuy = i.AddButton("invBuy", delegate
1933 {
1934 Process();
1935 });
1936 i.onDestroy = delegate
1937 {
1938 if ((Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) && !i.wasCanceled)
1939 {
1940 Process();
1941 }
1942 };
1943 i.Show();
1944 if ((bool)buttonBuy)
1945 {
1946 buttonBuy.gameObject.AddComponent<CanvasGroup>();
1947 }
1948 UpdateButton();
1949 void Process()
1950 {
1951 if (!EClass.core.IsGameStarted || button == null || button.card == null)
1952 {
1953 Debug.Log("Split bug1");
1954 }
1955 else if (button.card.isDestroyed || button.card.Num < count)
1956 {
1957 Debug.Log("Split bug2");
1958 }
1959 else if (EClass.pc.isDead)
1960 {
1961 Debug.Log("Split bug3");
1962 }
1963 else if (count != 0 && !Input.GetMouseButton(1))
1964 {
1965 onSplit?.Invoke(count);
1966 }
1967 }
1968 void UpdateButton()
1969 {
1970 itemSlider.text1.text = GetName(NameStyle.FullNoArticle, 1);
1971 itemSlider.text2.text = Lang._weight(SelfWeight * count);
1972 buttonBuy.mainText.SetText(lang.lang(count.ToString() ?? ""));
1973 buttonBuy.mainText.RebuildLayoutTo<UIButton>();
1974 buttonBuy.interactable = true;
1975 buttonBuy.RebuildLayout(recursive: true);
1976 }
1977 }

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

2036 {
2037 if (!base.IsEquipment || base.IsCursed || base.rarity <= Rarity.Normal || GetInt(107) > 0)
2038 {
2039 return;
2040 }
2041 SetInt(107, 1);
2042 if (tg == null)
2043 {
2044 Rand.SetSeed(EClass.world.date.day + source._index + c.uid);
2045 if (msg)
2046 {
2047 c.Say("lick", c, this);
2048 PlaySound("offering");
2049 PlayEffect("mutation");
2050 }
2051 Element element = AddEnchant(base.LV);
2052 if (element != null)
2053 {
2054 SetInt(107, element.id);
2055 }
2056 }
2057 else
2058 {
2059 Rand.SetSeed(base.uid);
2060 List<Element> list = new List<Element>();
2061 foreach (Element value in elements.dict.Values)
2062 {
2063 if (value.id != 67 && value.id != 66 && value.id != 64 && value.id != 65)
2064 {
2065 list.Add(value);
2066 }
2067 }
2068 if (list.Count > 0)
2069 {
2070 Element element2 = list.RandomItem();
2071 elements.ModBase(element2.id, Mathf.Max(EClass.rnd(Mathf.Abs(element2.vBase / 5)), 1));
2072 SetInt(107, element2.id);
2073 }
2074 if (msg)
2075 {
2076 c.Say("lick2", c, tg, slot.name.ToLower());
2077 tg.PlaySound("offering");
2078 tg.PlayEffect("mutation");
2079 }
2080 }
2081 Rand.SetSeed();
2082 }
void SetInt(int id, int value=0)
Definition: BaseCard.cs:39
string name
Definition: BodySlot.cs:14
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6515
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7159
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 879 of file Thing.cs.

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

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: