Elin Decompiled Documentation EA 23.279 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)
 
bool IsChildOf (Card c)
 
FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a, bool applyMod=true)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void PurgeEythArtifact ()
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (int a, HealSource origin=HealSource.None)
 
virtual void HealHP (int a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual long ApplyProtection (long dmg, int mod=100)
 
void DamageHP (long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
 
void DamageHP (long dmg, int ele, int eleP=100, AttackSource attackSource=AttackSource.None, Card origin=null, bool showEffect=true, Thing weapon=null, Chara originalTarget=null)
 
void ApplyElementEffect (Element e, int eleP, Card origin, bool checkHostileAct=false)
 
virtual void Die (Element e=null, Card origin=null, AttackSource attackSource=AttackSource.None, Chara originalTarget=null)
 
void Explode (Point p, Card origin)
 
void Deconstruct ()
 
void Destroy ()
 
void SpawnLoot (Card origin)
 
Thing TryMakeRandomItem (int lv=-1, TryMakeRandomItemSource itemSource=TryMakeRandomItemSource.Default, Chara crafter=null)
 
Card MakeFoodFrom (string _id)
 
Card MakeFoodFrom (Card c)
 
void MakeFoodRef (Card c1, Card c2=null)
 
string TryGetFoodName (Card c)
 
string GetFoodName (string s)
 
void MakeFigureFrom (string id)
 
Card MakeRefFrom (string id)
 
void MakeRefFrom (Card c1, Card c2=null, bool simple=false)
 
Thing MakeEgg (bool effect=true, int num=1, bool addToZone=true, int fertChance=20, BlessedState? state=null)
 
Thing MakeMilk (bool effect=true, int num=1, bool addToZone=true, BlessedState? state=null)
 
Thing GiveBirth (Thing t, bool effect)
 
void HatchEgg ()
 
Card SetHidden (bool hide=true)
 
virtual MoveResult _Move (Point p, MoveType type=MoveType.Walk)
 
void MoveImmediate (Point p, bool focus=true, bool cancelAI=true)
 
void Teleport (Point point, bool silent=false, bool force=false)
 
virtual void OnLand ()
 
MoveResult TryMoveFrom (Point p)
 
virtual MoveResult TryMove (Point newPoint, bool allowDestroyPath=true)
 
void Kick (Point p, bool ignoreSelf=false, bool checkWall=true)
 
void Kick (Chara t, bool ignoreSelf=false, bool karmaLoss=true, bool show=true, bool checkWall=true)
 
int ResistLvFrom (int ele)
 
int ResistLv (int res)
 
bool HasElement (int ele, bool includeNagative=false)
 
bool HasElement (int ele, int req)
 
bool HasElement (string id, int req=1)
 
bool HasGlobalElement (int ele)
 
bool HasElementNoCopy ()
 
virtual CardRenderer _CreateRenderer ()
 
void AddBlood (int a=1, int id=-1)
 
RenderParam GetRenderParam ()
 
virtual void SetRenderParam (RenderParam p)
 
void DyeRandom ()
 
void Dye (string idMat)
 
void Dye (SourceMaterial.Row mat)
 
void RefreshColor ()
 
ref Color GetRandomColor ()
 
virtual Sprite GetSprite (int dir=0)
 
virtual Sprite GetImageSprite ()
 
void SetImage (Image image, int dir, int idSkin=0)
 
virtual void SetImage (Image image)
 
void ShowEmo (Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
 
void PlaySoundHold (bool spatial=true)
 
void PlaySoundDrop (bool spatial=true)
 
void PlaySoundImpact (bool spatial=true)
 
void PlaySoundDead (bool spatial=true)
 
SoundSource PlaySound (string id, float v=1f, bool spatial=true)
 
void KillAnime ()
 
void PlayAnime (AnimeID id, bool force=false)
 
void PlayAnime (AnimeID id, Point dest, bool force=false)
 
void PlayAnimeLoot ()
 
Effect PlayEffect (string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
 
void PlayEffect (int ele, bool useRenderPos=true, float range=0f)
 
virtual void SetDir (int d)
 
void SetRandomDir ()
 
virtual void LookAt (Card c)
 
virtual void LookAt (Point p)
 
virtual void Rotate (bool reverse=false)
 
void ChangeAltitude (int a)
 
virtual SubPassData GetSubPassData ()
 
void SetFreePos (Point point)
 
void RenderMarker (Point point, bool active, HitResult result, bool main, int dir, bool useCurrentPosition=false)
 
void RecalculateFOV ()
 
bool HasLight ()
 
float GetLightPower ()
 
int GetHearingRadius ()
 
int GetSightRadius ()
 
int GetLightRadius ()
 
void CalculateFOV ()
 
void SetRandomLightColors ()
 
Fov CreateFov ()
 
void ClearFOV ()
 
virtual void OnSimulateHour (VirtualDate date)
 
void DecayNatural (int hour=1)
 
void CheckJustCooked ()
 
void Decay (int a=10)
 
bool HasTalk (string idTopic)
 
void Talk (string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
 
void TalkRaw (string text, string ref1=null, string ref2=null, bool forceSync=false)
 
string StripTalkSpeiclaCharacters (string text)
 
string ApplyNewLine (string text)
 
void SayRaw (string text, string ref1=null, string ref2=null)
 
void SayNothingHappans ()
 
void Say (string lang, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, Card c2, string ref1=null, string ref2=null)
 
void Say (string lang, Card c1, string ref1=null, string ref2=null)
 
string GetTalkText (string idTopic, bool stripPun=false, bool useDefault=true)
 
string ApplyTone (string text, bool stripPun=false)
 
void SetRandomTalk ()
 
void SetRandomTone ()
 
bool HasCraftBonusTrait ()
 
List< ElementListCraftBonusTraits ()
 
void TryStack (Thing t)
 
void ApplyBacker (int bid)
 
void RemoveBacker ()
 
void SetPaintData ()
 
byte[] GetPaintData ()
 
void ClearPaintSprite ()
 
Sprite GetPaintSprite ()
 
void TryUnrestrain (bool force=false, Chara c=null)
 
TraitShackle GetRestrainer ()
 
virtual void Tick ()
 
Thing SetPriceFix (int a)
 
int GetEquipValue ()
 
void SetSale (bool sale)
 
int GetValue (PriceType priceType=PriceType.Default, bool sell=false)
 
virtual int GetPrice (CurrencyType currency=CurrencyType.Money, bool sell=false, PriceType priceType=PriceType.Default, Chara c=null)
 
virtual string GetHoverText ()
 
virtual string GetHoverText2 ()
 
int Dist (Card c)
 
int Dist (Point p)
 
bool IsInMutterDistance (int d=10)
 
void SetCensored (bool enable)
 
void SetDeconstruct (bool deconstruct)
 
virtual bool MatchEncSearch (string s)
 
virtual void SetSortVal (UIList.SortMode m, CurrencyType currency=CurrencyType.Money)
 
virtual int SecondaryCompare (UIList.SortMode m, Card c)
 
void ForeachFOV (Func< Point, bool > func)
 
void ForeachPoint (Action< Point, bool > action)
 
void OnInspect ()
 
virtual void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
void Inspect ()
 
virtual bool HasCondition< T > ()
 
virtual T GetCondition< T > ()
 
bool HaveFur ()
 
bool CanBeSheared ()
 
- Public Member Functions inherited from BaseCard
bool GetBool (int id)
 
void SetBool (int id, bool enable)
 
int GetInt (int id, int? defaultInt=null)
 
void AddInt (int id, int value)
 
void SetInt (int id, int value=0)
 
string GetStr (int id, string defaultStr=null)
 
void SetStr (int id, string value=null)
 
GetObj< T > (int id)
 
void SetObj (int id, object o)
 
SetObj< T > (int id, object o)
 
ICardParent GetRoot ()
 
void RemoveCard (Card c)
 
void OnChildNumChange (Card c)
 
string ReferenceId ()
 
void WriteNote (UINote n, Action< UINote > onWriteNote=null, NoteMode mode=NoteMode.Default, Recipe recipe=null)
 
void OnInspect ()
 

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()
 
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 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 1478 of file Thing.cs.

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

2079 {
2080 if (base.IsToolbelt || base.IsLightsource)
2081 {
2082 return null;
2083 }
2084 Tuple<SourceElement.Row, int> enchant = GetEnchant(lv, (SourceElement.Row r) => r.IsEncAppliable(base.category), base.IsCursed);
2085 if (enchant == null)
2086 {
2087 return null;
2088 }
2089 return elements.ModBase(enchant.Item1.id, enchant.Item2);
2090 }
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:1991

Referenced by OnCreate().

◆ ApplyMaterial()

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

Reimplemented from Card.

Definition at line 358 of file Thing.cs.

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

341 {
342 Chara chara = null;
344 {
345 chara = GetRootCard()?.Chara;
346 if (chara != null)
347 {
349 }
350 }
351 elements.ApplyMaterialElementMap(this, remove);
352 if (chara != null)
353 {
354 elements.SetParent(chara);
355 }
356 }
virtual Chara Chara
Definition: Card.cs:2096
Card GetRootCard()
Definition: Card.cs:3480
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 2096 of file Thing.cs.

2097 {
2098 Msg.Say("attuned", this, c);
2099 base.c_uidAttune = c.uid;
2100 }
int uid
Definition: Card.cs:123
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 129 of file Thing.cs.

130 {
131 if (GetRootCard() != c)
132 {
133 return false;
134 }
135 if (HasTag(CTAG.throwWeapon))
136 {
137 return true;
138 }
139 if (!trait.CanAutofire)
140 {
141 return false;
142 }
143 if (trait is TraitToolRange)
144 {
145 if ((c.IsPCFaction && c.body.IsTooHeavyToEquip(this)) || reloading)
146 {
147 return false;
148 }
149 }
150 else if (trait is TraitAbility && c.IsPC)
151 {
152 Act act = (trait as TraitAbility).act;
153 Element element = c.elements.GetElement(act.id);
154 if (act is Spell && (element == null || element.vPotential == 0))
155 {
156 return false;
157 }
158 }
159 return true;
160 }
Definition: ACT.cs:62
bool HasTag(CTAG tag)
Definition: Card.cs:2623
Trait trait
Definition: Card.cs:54
bool IsTooHeavyToEquip(Thing thing)
Definition: CharaBody.cs:168
override bool IsPC
Definition: Chara.cs:626
override bool IsPCFaction
Definition: Chara.cs:685
Element GetElement(string alias)
int id
Definition: ELEMENT.cs:255
int vPotential
Definition: ELEMENT.cs:261
Definition: SPELL.cs:626
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 1671 of file Thing.cs.

1672 {
1673 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)
1674 {
1675 return false;
1676 }
1677 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1678 {
1679 return false;
1680 }
1681 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1682 {
1683 return false;
1684 }
1685 if (base.IsDecayed != to.IsDecayed)
1686 {
1687 return false;
1688 }
1689 if (!trait.CanStackTo(to))
1690 {
1691 return false;
1692 }
1693 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1694 {
1695 return false;
1696 }
1697 if (base.isStolen != to.isStolen)
1698 {
1699 return false;
1700 }
1701 if (base.isCrafted != to.isCrafted)
1702 {
1703 return false;
1704 }
1705 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1706 {
1707 return false;
1708 }
1709 if (to.c_IDTState != base.c_IDTState)
1710 {
1711 return false;
1712 }
1713 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1714 {
1715 return false;
1716 }
1717 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1718 {
1719 return false;
1720 }
1721 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1722 {
1723 return false;
1724 }
1725 if (base.c_altName != to.c_altName)
1726 {
1727 return false;
1728 }
1729 if (base.Num + to.Num <= 0)
1730 {
1731 return false;
1732 }
1733 bool flag = false;
1734 if (to.parent is Card)
1735 {
1736 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1737 if (windowSaveData != null && windowSaveData.compress)
1738 {
1739 flag = true;
1740 }
1741 }
1742 if (flag)
1743 {
1744 if (base.encLV != to.encLV && !base.IsFood)
1745 {
1746 return false;
1747 }
1748 if (elements.dict.Count() != to.elements.dict.Count())
1749 {
1750 return false;
1751 }
1752 foreach (Element value in elements.dict.Values)
1753 {
1754 if (to.elements.GetElement(value.id) == null)
1755 {
1756 return false;
1757 }
1758 }
1759 int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
1760 base.encLV = num2;
1761 foreach (Element value2 in elements.dict.Values)
1762 {
1763 Element element = to.elements.GetElement(value2.id);
1764 value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num));
1765 }
1766 return true;
1767 }
1768 if (base.encLV != to.encLV)
1769 {
1770 return false;
1771 }
1772 if (elements.dict.Count() != to.elements.dict.Count())
1773 {
1774 return false;
1775 }
1776 foreach (Element value3 in elements.dict.Values)
1777 {
1778 Element element2 = to.elements.GetElement(value3.id);
1779 if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10)
1780 {
1781 return false;
1782 }
1783 }
1784 return true;
1785 }
Definition: Card.cs:11
int c_priceFix
Definition: Card.cs:1138
bool isCrafted
Definition: Card.cs:795
int tier
Definition: Card.cs:411
bool IsDecayed
Definition: Card.cs:2315
int idMaterial
Definition: Card.cs:135
string id
Definition: Card.cs:36
bool noSell
Definition: Card.cs:831
bool isCopy
Definition: Card.cs:879
string c_altName
Definition: Card.cs:1607
int c_priceAdd
Definition: Card.cs:1150
int c_dyeMat
Definition: Card.cs:1199
ICardParent parent
Definition: Card.cs:56
int c_priceCopy
Definition: Card.cs:1162
int c_IDTState
Definition: Card.cs:1271
string c_idRefCard2
Definition: Card.cs:1763
int refVal
Definition: Card.cs:207
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2544
int encLV
Definition: Card.cs:327
bool isDyed
Definition: Card.cs:459
bool isWeightChanged
Definition: Card.cs:663
int rarityLv
Definition: Card.cs:303
int idSkin
Definition: Card.cs:363
bool isGifted
Definition: Card.cs:783
BlessedState blessedState
Definition: Card.cs:279
bool isStolen
Definition: Card.cs:855
int ChildrenAndSelfWeight
Definition: Card.cs:2067
bool isModified
Definition: Card.cs:471
int Num
Definition: Card.cs:159
int c_charges
Definition: Card.cs:1283
string c_idRefCard
Definition: Card.cs:1751
Dictionary< int, Element > dict
int vBase
Definition: ELEMENT.cs:257
override int SelfWeight
Definition: Thing.cs:67
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 1824 of file Thing.cs.

1825 {
1826 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 1973 of file Thing.cs.

1974 {
1975 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
1976 {
1977 SE.Beep();
1978 return;
1979 }
1980 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
1981 if (act.IsAct)
1982 {
1983 act.Perform(EClass.pc);
1984 return;
1985 }
1986 AIAct aI = act as AIAct;
1987 EClass.pc.SetAI(aI);
1989 }
Definition: AIAct.cs:6
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1040
virtual bool Perform()
Definition: ACT.cs:266
virtual bool LocalAct
Definition: ACT.cs:173
virtual bool IsAct
Definition: ACT.cs:101
static AM_Adv Adv
Definition: ActionMode.cs:15
AIAct SetAI(AIAct g)
Definition: Chara.cs:9037
bool HasNoGoal
Definition: Chara.cs:1014
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:1121
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 1820 of file Thing.cs.

1821 {
1822 }

Referenced by RecipeUpdater.RunDisassemble().

◆ GetEfficiency()

int Thing.GetEfficiency ( )
inline

Definition at line 162 of file Thing.cs.

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

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

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

808 {
809 string text = "";
810 if (trait.ShowChildrenNumber && base.c_lockLv == 0 && EClass._zone.IsPCFactionOrTent)
811 {
812 if (things.Count > 0)
813 {
814 text += "childCount".lang(things.Count.ToString() ?? "");
815 }
816 else if (trait.CanOpenContainer)
817 {
818 text += "empty".lang();
819 }
820 }
822 {
823 Room room = pos.cell.room;
824 if (EClass.debug.enable && room != null && room.data.group != 0)
825 {
826 text = text + " #" + room.data.group;
827 }
828 }
829 return text;
830 }
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:102
bool enable
Definition: CoreDebug.cs:286
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 790 of file Thing.cs.

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

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

Referenced by Chara.GetHoverText().

◆ GetIngredients()

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

Definition at line 1787 of file Thing.cs.

1788 {
1789 if (ing.CanSetThing(this))
1790 {
1791 list.Add(this);
1792 }
1793 if (things.Count <= 0 || base.c_lockLv != 0 || base.isNPCProperty)
1794 {
1795 return;
1796 }
1797 foreach (Thing thing in things)
1798 {
1799 thing.GetIngredients(ing, list);
1800 }
1801 }
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:1787

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

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

◆ GetRecipes()

void Thing.GetRecipes ( HashSet< Recipe recipes)
inline

Definition at line 1816 of file Thing.cs.

1817 {
1818 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1657 of file Thing.cs.

1658 {
1659 Chara chara = GetRootCard() as Chara;
1660 if ((!trait.ShowAsTool || (chara == EClass.pc && HotItemHeld.disableTool)) && (chara?.held == this || (!base.isRoofItem && placeState != PlaceState.installed && renderer.data.subCrate.enable && parent is Zone)))
1661 {
1663 {
1664 return EClass.setting.pass.subCrate;
1665 }
1666 return renderer.data.subCrate;
1667 }
1668 return SubPassData.Default;
1669 }
PlaceState
Definition: PlaceState.cs:2
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
bool isRoofItem
Definition: Card.cs:579
PlaceState placeState
Definition: Card.cs:84
CardRenderer renderer
Definition: Card.cs:62
static GameSetting setting
Definition: EClass.cs:35
PassSetting pass
Definition: GameSetting.cs:303
SubPassData subCrate
Definition: RenderData.cs:46
RenderData data
Definition: RenderObject.cs:34
static SubPassData Default
Definition: SubPassData.cs:7
Definition: Zone.cs:12

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

◆ Identify()

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

Definition at line 2102 of file Thing.cs.

2103 {
2104 if (base.IsIdentified)
2105 {
2106 return this;
2107 }
2108 string @ref = "";
2109 string text = "";
2110 if (show)
2111 {
2112 @ref = GetName(NameStyle.Full, base.Num);
2113 }
2114 Rarity rarity = idtSource switch
2115 {
2116 IDTSource.SkillHigh => Rarity.Legendary,
2117 IDTSource.Skill => Rarity.Superior,
2118 _ => Rarity.Normal,
2119 };
2120 if (rarity != 0 && ((base.IsEquipmentOrRangedOrAmmo && base.rarity >= rarity) || base.rarity >= Rarity.Mythical))
2121 {
2122 base.c_IDTState = 3;
2123 }
2124 else if (base.rarity >= Rarity.Mythical && idtSource != IDTSource.SuperiorIdentify)
2125 {
2126 base.c_IDTState = 1;
2127 }
2128 else
2129 {
2130 base.c_IDTState = 0;
2131 }
2132 if (show)
2133 {
2134 text = GetName(NameStyle.Full, base.Num);
2135 if (base.c_IDTState == 0)
2136 {
2137 Msg.Say("identified", @ref, text);
2138 }
2139 else
2140 {
2141 Msg.Say((idtSource == IDTSource.Skill) ? "identified3" : "identified2", @ref, text, base.TextRarity);
2142 }
2143 }
2144 if (base.IsIdentified)
2145 {
2146 GetRootCard()?.TryStack(this);
2147 }
2149 return this;
2150 }
IDTSource
Definition: IDTSource.cs:2
Rarity rarity
Definition: Card.cs:315
void TryStack(Thing t)
Definition: Card.cs:7179
static void SetDirty(Thing t)
override string GetName(NameStyle style, int _num=-1)
Definition: Thing.cs:535

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

1804 {
1805 if (isDestroyed)
1806 {
1807 return false;
1808 }
1809 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1810 {
1811 return false;
1812 }
1813 return true;
1814 }
bool isDestroyed
Definition: Card.cs:76
int Dist(Card c)
Definition: Card.cs:7867

References EClass.pc.

Referenced by DropdownGrid.BuildIngredients().

◆ ListLimitedValidTraits()

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

Definition at line 832 of file Thing.cs.

833 {
834 List<Element> list = new List<Element>();
835 if (base.ShowFoodEnc)
836 {
837 foreach (Element value in elements.dict.Values)
838 {
839 if (value.IsFoodTraitMain && value.Value > 0)
840 {
841 list.Add(value);
842 }
843 }
845 if (limit && list.Count > 5)
846 {
847 int num = list.Count - 5;
848 for (int i = 0; i < num; i++)
849 {
850 list.RemoveAt(list.Count - 1);
851 }
852 }
853 }
854 return list;
855 }
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 857 of file Thing.cs.

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

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

2153 {
2154 if (trait is TraitGene)
2155 {
2156 DNA dNA = base.c_DNA;
2157 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2158 {
2159 return false;
2160 }
2161 for (int i = 0; i < dNA.vals.Count; i += 2)
2162 {
2163 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2164 if (row.name.ToLower().Contains(s))
2165 {
2166 return true;
2167 }
2168 if (row.GetName().ToLower().Contains(s))
2169 {
2170 return true;
2171 }
2172 }
2173 }
2174 else
2175 {
2176 if (!base.IsIdentified)
2177 {
2178 return false;
2179 }
2180 foreach (Element value in elements.dict.Values)
2181 {
2182 if (value.Value != 0)
2183 {
2184 if (value.source.name.ToLower().Contains(s))
2185 {
2186 return true;
2187 }
2188 if (value.source.GetName().ToLower().Contains(s))
2189 {
2190 return true;
2191 }
2192 }
2193 }
2194 }
2195 return false;
2196 }
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 183 of file Thing.cs.

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

2093 {
2094 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1506 of file Thing.cs.

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

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

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

◆ ShowSplitMenu()

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

Definition at line 1828 of file Thing.cs.

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

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

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

2030 {
2031 if (!base.IsEquipment || base.IsCursed || base.rarity <= Rarity.Normal || GetInt(107) > 0)
2032 {
2033 return;
2034 }
2035 SetInt(107, 1);
2036 if (tg == null)
2037 {
2038 Rand.SetSeed(EClass.world.date.day + source._index + c.uid);
2039 if (msg)
2040 {
2041 c.Say("lick", c, this);
2042 PlaySound("offering");
2043 PlayEffect("mutation");
2044 }
2045 Element element = AddEnchant(base.LV);
2046 if (element != null)
2047 {
2048 SetInt(107, element.id);
2049 }
2050 }
2051 else
2052 {
2053 Rand.SetSeed(base.uid);
2054 List<Element> list = new List<Element>();
2055 foreach (Element value in elements.dict.Values)
2056 {
2057 if (value.id != 67 && value.id != 66 && value.id != 64 && value.id != 65)
2058 {
2059 list.Add(value);
2060 }
2061 }
2062 if (list.Count > 0)
2063 {
2064 Element element2 = list.RandomItem();
2065 elements.ModBase(element2.id, Mathf.Max(EClass.rnd(Mathf.Abs(element2.vBase / 5)), 1));
2066 SetInt(107, element2.id);
2067 }
2068 if (msg)
2069 {
2070 c.Say("lick2", c, tg, slot.name.ToLower());
2071 tg.PlaySound("offering");
2072 tg.PlayEffect("mutation");
2073 }
2074 }
2075 Rand.SetSeed();
2076 }
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:6377
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7020
int day
Definition: Date.cs:62
static World world
Definition: EClass.cs:41
static void SetSeed(int a=-1)
Definition: Rand.cs:37
GameDate date
Definition: World.cs:6

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

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

◆ WriteNote()

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

Reimplemented from Card.

Definition at line 882 of file Thing.cs.

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

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

Member Data Documentation

◆ MaxFurnitureEnc

const int Thing.MaxFurnitureEnc = 12
static

Definition at line 9 of file Thing.cs.

◆ source

◆ stackOrder

int Thing.stackOrder

Definition at line 13 of file Thing.cs.

Referenced by Map.Save().

◆ tempName

string Thing.tempName

Definition at line 15 of file Thing.cs.

Referenced by ThingContainer.RefreshGrid().

Property Documentation

◆ CanSearchContents

bool Thing.CanSearchContents
get

Definition at line 100 of file Thing.cs.

101 {
102 get
103 {
104 if (base.IsContainer && base.c_lockLv == 0 && !base.isNPCProperty)
105 {
106 return trait.CanSearchContent;
107 }
108 return false;
109 }
110 }
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 112 of file Thing.cs.

113 {
114 get
115 {
116 if (base.IsContainer && base.c_lockLv == 0 && !base.isNPCProperty)
117 {
118 Window.SaveData obj = GetObj<Window.SaveData>(2);
119 if (obj == null)
120 {
121 return false;
122 }
123 return obj.sharedType == ContainerSharedType.Shared;
124 }
125 return false;
126 }
127 }
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 if (source.origin == null || source.pref.UsePref)
57 {
58 return source.pref;
59 }
60 pref = source.origin.pref;
61 }
62 return pref;
63 }
64 }
virtual SourcePref GetPref()
Definition: Trait.cs:595

Referenced by Chara._Move(), BaseTileMap.DrawTile(), Cell.GetSurfaceHeight(), BaseTileMap.GetThingPosition(), 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 66 of file Thing.cs.

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

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

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

◆ Tiles

override int [] Thing.Tiles
get

Definition at line 82 of file Thing.cs.


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