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

Public Member Functions

bool CanAutoFire (Chara c, Card tg, bool reloading=false)
 
int GetEfficiency ()
 
override void SetSource ()
 
override void OnCreate (int genLv)
 
override void ApplyMaterialElements (bool remove)
 
override void ApplyMaterial (bool remove=false)
 
override string GetName (NameStyle style, int _num=-1)
 
override string GetHoverText ()
 
override string GetExtraName ()
 
List< ElementListLimitedValidTraits (bool limit)
 
List< ElementListValidTraits (bool isCraft, bool limit)
 
override void WriteNote (UINote n, Action< UINote > onWriteNote=null, IInspect.NoteMode mode=IInspect.NoteMode.Default, Recipe recipe=null)
 
override void SetRenderParam (RenderParam p)
 
override SubPassData GetSubPassData ()
 
override bool CanStackTo (Thing to)
 
void GetIngredients (Recipe.Ingredient ing, List< Thing > list)
 
bool IsValidIngredient (Recipe.Ingredient ing)
 
void GetRecipes (HashSet< Recipe > recipes)
 
void GetDisassembles (List< Thing > list)
 
void Disassemble ()
 
void ShowSplitMenu (ButtonGrid button, InvOwner.Transaction trans=null)
 
void ShowSplitMenu2 (ButtonGrid button, string lang, Action< int > onSplit=null)
 
void DoAct (Act act)
 
void TryLickEnchant (Chara c, bool msg=true, Chara tg=null, BodySlot slot=null)
 
Element AddEnchant (int lv=-1)
 
void RemoveEnchant ()
 
void Attune (Chara c)
 
Thing Identify (bool show=true, IDTSource idtSource=IDTSource.Identify)
 
override bool MatchEncSearch (string s)
 
- Public Member Functions inherited from Card
override string ToString ()
 
bool CanReserve (AIAct act)
 
bool TryReserve (AIAct act)
 
void Mod ()
 
Window.SaveData GetWindowSaveData ()
 
bool IsExcludeFromCraft (Recipe.Ingredient ing)
 
void SetDirtyWeight ()
 
void ChangeWeight (int a)
 
int Evalue (int ele)
 
int Evalue (int ele, bool ignoreGlobalElement)
 
int EvalueMax (int ele, int min=0)
 
int Evalue (string alias)
 
bool HasTag (CTAG tag)
 
bool HasEditorTag (EditorTag tag)
 
void AddEditorTag (EditorTag tag)
 
void RemoveEditorTag (EditorTag tag)
 
virtual string GetName (NameStyle style, int num=-1)
 
virtual string GetExtraName ()
 
virtual string GetDetail ()
 
int GetBestAttribute ()
 
void ModExp (string alias, int a)
 
void ModExp (int ele, int a)
 
void ModExpParty (int ele, int a)
 
bool IsChildOf (Card c)
 
FindTool< T > ()
 
string ReferenceId ()
 
void Create (string _id, int _idMat=-1, int genLv=-1)
 
virtual void OnBeforeCreate ()
 
virtual void OnCreate (int genLv)
 
virtual void SetSource ()
 
virtual void ApplyEditorTags (EditorTag tag)
 
void ApplyTrait ()
 
Card SetLv (int a)
 
void ClampInitialSkill ()
 
void AddExp (int a, bool applyMod=true)
 
int GetExpMtp ()
 
int GetAffinityExpBonus ()
 
int GetDaysTogetherBonus ()
 
void LevelUp ()
 
virtual void ApplyMaterialElements (bool remove)
 
virtual void ApplyMaterial (bool remove=false)
 
Card ChangeMaterial (int idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (string idNew, bool ignoreFixedMaterial=false)
 
Card ChangeMaterial (SourceMaterial.Row row, bool ignoreFixedMaterial=false)
 
void SetReplica (bool on)
 
Thing Add (string id, int num=1, int lv=1)
 
Card AddCard (Card c)
 
void RemoveCard (Card c)
 
void NotifyAddThing (Thing t, int num)
 
Thing AddThing (string id, int lv=-1)
 
Thing AddThing (Thing t, bool tryStack=true, int destInvX=-1, int destInvY=-1)
 
void PurgeDuplicateArtifact (Thing af)
 
void PurgeEythArtifact ()
 
void RemoveThings ()
 
void RemoveThing (Thing thing)
 
bool ShouldTrySetDirtyInventory ()
 
virtual bool CanStackTo (Thing to)
 
bool TryStackTo (Thing to)
 
ICardParent GetRoot ()
 
Card GetRootCard ()
 
bool IsStackable (Thing tg)
 
Thing Duplicate (int num)
 
Thing Split (int a)
 
Thing SetNum (int a)
 
Thing SetNoSell ()
 
void ModNum (int a, bool notify=true)
 
void AddSocket ()
 
void ApplySocket (Thing t)
 
void ApplySocket (int id, int lv, Card mod=null)
 
void EjectSockets ()
 
SocketData AddRune (Card rune)
 
SocketData AddRune (int idEle, int v, bool free)
 
SocketData GetRuneEnc (int idEle)
 
int CountRune (bool countFree=true)
 
int MaxRune ()
 
bool CanAddRune (TraitMod mod)
 
bool HasRune ()
 
void OnChildNumChange (Card c)
 
Card Install ()
 
void SetPlaceState (PlaceState newState, bool byPlayer=false)
 
int GetTotalQuality (bool applyBonus=true)
 
void ModEncLv (int a)
 
void SetEncLv (int a)
 
void SetTier (int a, bool setTraits=true)
 
virtual void SetBlessedState (BlessedState s)
 
virtual void ChangeRarity (Rarity q)
 
bool TryPay (int a, string id="money")
 
void SetCharge (int a)
 
void ModCharge (int a, bool destroy=false)
 
void ModCurrency (int a, string id="money")
 
int GetCurrency (string id="money")
 
virtual void HealHPHost (int a, HealSource origin=HealSource.None)
 
virtual void HealHP (int a, HealSource origin=HealSource.None)
 
virtual int GetArmorSkill ()
 
virtual long ApplyProtection (long dmg, int mod=100)
 
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()
 
Point lastPos = new Point()
 
CardRenderer renderer
 
CardRow hat
 
int turn
 
int _colorInt
 
float roundTimer
 
float angle = 180f
 
float animeCounter
 
bool isDestroyed
 
CardBlueprint bp
 
BitArray32 _bits1
 
BitArray32 _bits2
 
PlaceState placeState
 
bool dirtyWeight = true
 
SourceMaterial.Row _material
 
Emo lastEmo
 
int sortVal
 
- Public Attributes inherited from BaseCard
Dictionary< int, object > mapObj = new Dictionary<int, object>()
 
Dictionary< int, int > mapInt = new Dictionary<int, int>()
 
Dictionary< int, string > mapStr = new Dictionary<int, string>()
 

Static Public Attributes

const int MaxFurnitureEnc = 12
 
- Static Public Attributes inherited from Card
const int MaxWeight = 10000000
 
const int SocketDiv = 1000
 
const int DamageLimit = 99999999
 
- Static Public Attributes inherited from EClass
static Core core
 

Properties

bool isEquipped [get]
 
bool IsMeleeWithAmmo [get]
 
int range [get]
 
int Penetration [get]
 
override bool isThing [get]
 
override CardRow sourceCard [get]
 
override SourcePref Pref [get]
 
override int SelfWeight [get]
 
override int[] Tiles [get]
 
override RenderRow TileRow [get]
 
bool CanSearchContents [get]
 
bool IsSharedContainer [get]
 
- Properties inherited from Card
Card parentCard [get]
 
Thing parentThing [get]
 
int colorInt [get]
 
bool IsHotItem [get]
 
int uid [get, set]
 
int idMaterial [get, set]
 
int dir [get, set]
 
int Num [get, set]
 
int _x [get, set]
 
int _z [get, set]
 
int genLv [get, set]
 
int refVal [get, set]
 
int decay [get, set]
 
int altitude [get, set]
 
int hp [get, set]
 
float fx [get, set]
 
float fy [get, set]
 
BlessedState blessedState [get, set]
 
PlaceState _placeState [get, set]
 
int rarityLv [get, set]
 
Rarity rarity [get, set]
 
int encLV [get, set]
 
int posInvX [get, set]
 
int posInvY [get, set]
 
int idSkin [get, set]
 
int feat [get, set]
 
int LV [get, set]
 
int exp [get, set]
 
int tier [get, set]
 
int version [get, set]
 
bool isCensored [get, set]
 
bool isDeconstructing [get, set]
 
bool isDyed [get, set]
 
bool isModified [get, set]
 
bool isNew [get, set]
 
bool isPlayerCreation [get, set]
 
bool ignoreAutoPick [get, set]
 
bool freePos [get, set]
 
bool isHidden [get, set]
 
bool isOn [get, set]
 
bool isNPCProperty [get, set]
 
bool isRestrained [get, set]
 
bool isRoofItem [get, set]
 
bool isMasked [get, set]
 
bool disableAutoToggle [get, set]
 
bool isImported [get, set]
 
bool autoRefuel [get, set]
 
bool ignoreStackHeight [get, set]
 
bool isFloating [get, set]
 
bool isWeightChanged [get, set]
 
bool isFireproof [get, set]
 
bool isAcidproof [get, set]
 
bool isReplica [get, set]
 
bool isSummon [get, set]
 
bool isElemental [get, set]
 
bool isBroken [get, set]
 
bool isSubsetCard [get, set]
 
bool noSnow [get, set]
 
bool noMove [get, set]
 
bool isGifted [get, set]
 
bool isCrafted [get, set]
 
bool isLostProperty [get, set]
 
bool noShadow [get, set]
 
bool noSell [get, set]
 
bool isLeashed [get, set]
 
bool isStolen [get, set]
 
bool isSale [get, set]
 
bool isCopy [get, set]
 
bool isRestocking [get, set]
 
bool hasSpawned [get, set]
 
bool isScaled [get, set]
 
bool isFav [get, set]
 
bool 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 1475 of file Thing.cs.

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

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

Referenced by OnCreate().

◆ ApplyMaterial()

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

Reimplemented from Card.

Definition at line 355 of file Thing.cs.

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

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

◆ ApplyMaterialElements()

override void Thing.ApplyMaterialElements ( bool  remove)
inlinevirtual

Reimplemented from Card.

Definition at line 337 of file Thing.cs.

338 {
339 Chara chara = null;
341 {
342 chara = GetRootCard()?.Chara;
343 if (chara != null)
344 {
346 }
347 }
348 elements.ApplyMaterialElementMap(this, remove);
349 if (chara != null)
350 {
351 elements.SetParent(chara);
352 }
353 }
virtual Chara Chara
Definition: Card.cs:2110
Card GetRootCard()
Definition: Card.cs:3510
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 2093 of file Thing.cs.

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

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

◆ CanAutoFire()

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

Definition at line 126 of file Thing.cs.

127 {
128 if (GetRootCard() != c)
129 {
130 return false;
131 }
132 if (HasTag(CTAG.throwWeapon))
133 {
134 return true;
135 }
136 if (!trait.CanAutofire)
137 {
138 return false;
139 }
140 if (trait is TraitToolRange)
141 {
142 if ((c.IsPCFaction && c.body.IsTooHeavyToEquip(this)) || reloading)
143 {
144 return false;
145 }
146 }
147 else if (trait is TraitAbility && c.IsPC)
148 {
149 Act act = (trait as TraitAbility).act;
150 Element element = c.elements.GetElement(act.id);
151 if (act is Spell && (element == null || element.vPotential == 0))
152 {
153 return false;
154 }
155 }
156 return true;
157 }
Definition: ACT.cs:62
bool HasTag(CTAG tag)
Definition: Card.cs:2637
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:630
virtual bool CanAutofire
Definition: Trait.cs:145

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

Referenced by AM_Adv._OnUpdateInput().

◆ CanStackTo()

override bool Thing.CanStackTo ( Thing  to)
inlinevirtual

Reimplemented from Card.

Definition at line 1668 of file Thing.cs.

1669 {
1670 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)
1671 {
1672 return false;
1673 }
1674 if ((to.isDyed || base.isDyed) && to.c_dyeMat != base.c_dyeMat)
1675 {
1676 return false;
1677 }
1678 if (base.c_idRefCard != to.c_idRefCard || base.c_idRefCard2 != to.c_idRefCard2)
1679 {
1680 return false;
1681 }
1682 if (base.IsDecayed != to.IsDecayed)
1683 {
1684 return false;
1685 }
1686 if (!trait.CanStackTo(to))
1687 {
1688 return false;
1689 }
1690 if (base.noSell != to.noSell || base.isCopy != to.isCopy)
1691 {
1692 return false;
1693 }
1694 if (base.isStolen != to.isStolen)
1695 {
1696 return false;
1697 }
1698 if (base.isCrafted != to.isCrafted)
1699 {
1700 return false;
1701 }
1702 if ((to.isWeightChanged || base.isWeightChanged) && to.SelfWeight != SelfWeight)
1703 {
1704 return false;
1705 }
1706 if (to.c_IDTState != base.c_IDTState)
1707 {
1708 return false;
1709 }
1710 if (to.c_priceAdd != base.c_priceAdd || to.c_priceFix != base.c_priceFix || to.c_priceCopy != base.c_priceCopy)
1711 {
1712 return false;
1713 }
1714 if (to.ChildrenAndSelfWeight + base.ChildrenAndSelfWeight > 1000000000)
1715 {
1716 return false;
1717 }
1718 if (trait.IsRequireFuel && base.c_charges != to.c_charges)
1719 {
1720 return false;
1721 }
1722 if (base.c_altName != to.c_altName)
1723 {
1724 return false;
1725 }
1726 if (base.Num + to.Num <= 0)
1727 {
1728 return false;
1729 }
1730 bool flag = false;
1731 if (to.parent is Card)
1732 {
1733 Window.SaveData windowSaveData = (to.parent as Card).GetWindowSaveData();
1734 if (windowSaveData != null && windowSaveData.compress)
1735 {
1736 flag = true;
1737 }
1738 }
1739 if (flag)
1740 {
1741 if (base.encLV != to.encLV && !base.IsFood)
1742 {
1743 return false;
1744 }
1745 if (elements.dict.Count() != to.elements.dict.Count())
1746 {
1747 return false;
1748 }
1749 foreach (Element value in elements.dict.Values)
1750 {
1751 if (to.elements.GetElement(value.id) == null)
1752 {
1753 return false;
1754 }
1755 }
1756 int num2 = (to.encLV = Mathf.CeilToInt(1f * (float)(base.encLV * base.Num + to.encLV * to.Num) / (float)(base.Num + to.Num)));
1757 base.encLV = num2;
1758 foreach (Element value2 in elements.dict.Values)
1759 {
1760 Element element = to.elements.GetElement(value2.id);
1761 value2.vBase = (element.vBase = (value2.vBase * base.Num + element.vBase * to.Num) / (base.Num + to.Num));
1762 }
1763 return true;
1764 }
1765 if (base.encLV != to.encLV)
1766 {
1767 return false;
1768 }
1769 if (elements.dict.Count() != to.elements.dict.Count())
1770 {
1771 return false;
1772 }
1773 foreach (Element value3 in elements.dict.Values)
1774 {
1775 Element element2 = to.elements.GetElement(value3.id);
1776 if (element2 == null || value3.vBase / 10 * 10 != element2.vBase / 10 * 10)
1777 {
1778 return false;
1779 }
1780 }
1781 return true;
1782 }
Definition: Card.cs:11
int c_priceFix
Definition: Card.cs:1152
bool isCrafted
Definition: Card.cs:797
int tier
Definition: Card.cs:413
bool IsDecayed
Definition: Card.cs:2329
int idMaterial
Definition: Card.cs:137
string id
Definition: Card.cs:36
bool noSell
Definition: Card.cs:833
bool isCopy
Definition: Card.cs:881
string c_altName
Definition: Card.cs:1621
int c_priceAdd
Definition: Card.cs:1164
int c_dyeMat
Definition: Card.cs:1213
ICardParent parent
Definition: Card.cs:56
int c_priceCopy
Definition: Card.cs:1176
int c_IDTState
Definition: Card.cs:1285
string c_idRefCard2
Definition: Card.cs:1777
int refVal
Definition: Card.cs:209
Window.SaveData GetWindowSaveData()
Definition: Card.cs:2558
int encLV
Definition: Card.cs:329
bool isDyed
Definition: Card.cs:461
bool isWeightChanged
Definition: Card.cs:665
int rarityLv
Definition: Card.cs:305
int idSkin
Definition: Card.cs:365
bool isGifted
Definition: Card.cs:785
BlessedState blessedState
Definition: Card.cs:281
bool isStolen
Definition: Card.cs:857
int ChildrenAndSelfWeight
Definition: Card.cs:2081
bool isModified
Definition: Card.cs:473
int Num
Definition: Card.cs:161
int c_charges
Definition: Card.cs:1297
string c_idRefCard
Definition: Card.cs:1765
Dictionary< int, Element > dict
int vBase
Definition: ELEMENT.cs:257
override int SelfWeight
Definition: Thing.cs:64
virtual bool CanStackTo(Thing to)
Definition: Trait.cs:615
virtual bool HasCharges
Definition: Trait.cs:341
bool IsRequireFuel
Definition: Trait.cs:477
bool compress
Definition: Window.cs:415

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

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

◆ Disassemble()

void Thing.Disassemble ( )
inline

Definition at line 1821 of file Thing.cs.

1822 {
1823 }

Referenced by LayerCraftFloat.RefreshDisassemble().

◆ DoAct()

void Thing.DoAct ( Act  act)
inline

Definition at line 1970 of file Thing.cs.

1971 {
1972 if (!EClass.pc.HasNoGoal || (act.LocalAct && EClass._zone.IsRegion))
1973 {
1974 SE.Beep();
1975 return;
1976 }
1977 EClass.player.hotItemToRestore = EClass.player.currentHotItem;
1978 if (act.IsAct)
1979 {
1980 act.Perform(EClass.pc);
1981 return;
1982 }
1983 AIAct aI = act as AIAct;
1984 EClass.pc.SetAI(aI);
1986 }
Definition: AIAct.cs:6
void SetTurbo(int mtp=-1)
Definition: AM_Adv.cs:1086
virtual bool Perform()
Definition: ACT.cs:266
virtual bool LocalAct
Definition: ACT.cs:173
virtual bool IsAct
Definition: ACT.cs:101
static AM_Adv Adv
Definition: ActionMode.cs:15
AIAct SetAI(AIAct g)
Definition: Chara.cs:9104
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:1167
virtual bool IsRegion
Definition: Spatial.cs:515

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

◆ GetDisassembles()

void Thing.GetDisassembles ( List< Thing list)
inline

Definition at line 1817 of file Thing.cs.

1818 {
1819 }

Referenced by RecipeUpdater.RunDisassemble().

◆ GetEfficiency()

int Thing.GetEfficiency ( )
inline

Definition at line 159 of file Thing.cs.

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

Referenced by AIWork.GetSession().

◆ GetEnchant()

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

Definition at line 1988 of file Thing.cs.

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

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

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

◆ GetExtraName()

override string Thing.GetExtraName ( )
inlinevirtual

Reimplemented from Card.

Definition at line 804 of file Thing.cs.

805 {
806 string text = "";
807 if (trait.ShowChildrenNumber && base.c_lockLv == 0 && EClass._zone.IsPCFactionOrTent)
808 {
809 if (things.Count > 0)
810 {
811 text += "childCount".lang(things.Count.ToString() ?? "");
812 }
813 else if (trait.CanOpenContainer)
814 {
815 text += "empty".lang();
816 }
817 }
819 {
820 Room room = pos.cell.room;
821 if (EClass.debug.enable && room != null && room.data.group != 0)
822 {
823 text = text + " #" + room.data.group;
824 }
825 }
826 return text;
827 }
int group
Definition: AreaData.cs:18
AreaData data
Definition: BaseArea.cs:29
Point pos
Definition: Card.cs:60
ThingContainer things
Definition: Card.cs:39
Room room
Definition: Cell.cs: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 787 of file Thing.cs.

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

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

◆ GetIngredients()

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

Definition at line 1784 of file Thing.cs.

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

References GetIngredients().

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

◆ GetName()

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

Reimplemented from Card.

Definition at line 532 of file Thing.cs.

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

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

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

◆ GetRecipes()

void Thing.GetRecipes ( HashSet< Recipe recipes)
inline

Definition at line 1813 of file Thing.cs.

1814 {
1815 }

Referenced by RecipeUpdater.RunRecipe().

◆ GetSubPassData()

override SubPassData Thing.GetSubPassData ( )
inlinevirtual

Reimplemented from Card.

Definition at line 1654 of file Thing.cs.

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

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

◆ Identify()

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

Definition at line 2099 of file Thing.cs.

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

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

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

◆ IsValidIngredient()

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

Definition at line 1800 of file Thing.cs.

1801 {
1802 if (isDestroyed)
1803 {
1804 return false;
1805 }
1806 if (GetRootCard().Dist(EClass.pc) > 1 || !ing.CanSetThing(this))
1807 {
1808 return false;
1809 }
1810 return true;
1811 }
bool isDestroyed
Definition: Card.cs:78
int Dist(Card c)
Definition: Card.cs:7996

References EClass.pc.

Referenced by DropdownGrid.BuildIngredients().

◆ ListLimitedValidTraits()

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

Definition at line 829 of file Thing.cs.

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

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

◆ ListValidTraits()

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

Definition at line 854 of file Thing.cs.

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

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

◆ MatchEncSearch()

override bool Thing.MatchEncSearch ( string  s)
inlinevirtual

Reimplemented from Card.

Definition at line 2149 of file Thing.cs.

2150 {
2151 if (trait is TraitGene)
2152 {
2153 DNA dNA = base.c_DNA;
2154 if (dNA == null || dNA.type == DNA.Type.Brain || dNA.type == DNA.Type.Inferior)
2155 {
2156 return false;
2157 }
2158 for (int i = 0; i < dNA.vals.Count; i += 2)
2159 {
2160 SourceElement.Row row = EClass.sources.elements.map.TryGetValue(dNA.vals[i]);
2161 if (row.name.ToLower().Contains(s))
2162 {
2163 return true;
2164 }
2165 if (row.GetName().ToLower().Contains(s))
2166 {
2167 return true;
2168 }
2169 }
2170 }
2171 else
2172 {
2173 if (!base.IsIdentified)
2174 {
2175 return false;
2176 }
2177 foreach (Element value in elements.dict.Values)
2178 {
2179 if (value.Value != 0)
2180 {
2181 if (value.source.name.ToLower().Contains(s))
2182 {
2183 return true;
2184 }
2185 if (value.source.GetName().ToLower().Contains(s))
2186 {
2187 return true;
2188 }
2189 }
2190 }
2191 }
2192 return false;
2193 }
Definition: DNA.cs:8
Type type
Definition: DNA.cs:29
Type
Definition: DNA.cs:10
List< int > vals
Definition: DNA.cs:24
SourceElement.Row source
Definition: ELEMENT.cs:278
override string GetName()

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

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

◆ OnCreate()

override void Thing.OnCreate ( int  genLv)
inlinevirtual

Reimplemented from Card.

Definition at line 180 of file Thing.cs.

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

2090 {
2091 }

◆ SetRenderParam()

override void Thing.SetRenderParam ( RenderParam  p)
inlinevirtual

Reimplemented from Card.

Definition at line 1503 of file Thing.cs.

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

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

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

◆ ShowSplitMenu()

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

Definition at line 1825 of file Thing.cs.

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

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

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

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

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

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

◆ WriteNote()

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

Reimplemented from Card.

Definition at line 879 of file Thing.cs.

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

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

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

◆ isEquipped

◆ IsMeleeWithAmmo

bool Thing.IsMeleeWithAmmo
get

Definition at line 19 of file Thing.cs.

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

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

◆ IsSharedContainer

bool Thing.IsSharedContainer
get

Definition at line 109 of file Thing.cs.

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

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

◆ isThing

override bool Thing.isThing
get

Definition at line 45 of file Thing.cs.

◆ Penetration

int Thing.Penetration
get

Definition at line 33 of file Thing.cs.

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

Referenced by AttackProcess.Prepare().

◆ Pref

override SourcePref Thing.Pref
get

Definition at line 49 of file Thing.cs.

50 {
51 get
52 {
53 SourcePref pref = trait.GetPref();
54 if (pref != null)
55 {
56 return pref;
57 }
58 CardRow cardRow = ((source.origin != null && !source.pref.UsePref) ? source.origin : source);
59 return cardRow.replacer.data?.pref ?? cardRow.pref;
60 }
61 }
SpriteReplacer replacer
Definition: RenderRow.cs:89
SourcePref pref
Definition: RenderRow.cs:68
SourcePref pref
Definition: SpriteData.cs:30
SpriteData data
virtual SourcePref GetPref()
Definition: Trait.cs:595

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

◆ range

int Thing.range
get

Definition at line 31 of file Thing.cs.

Referenced by TraitTrainingDummy.IdleUse().

◆ SelfWeight

override int Thing.SelfWeight
get

Definition at line 63 of file Thing.cs.

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

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

◆ sourceCard

◆ TileRow

override RenderRow Thing.TileRow
get

Definition at line 81 of file Thing.cs.

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

◆ Tiles

override int [] Thing.Tiles
get

Definition at line 79 of file Thing.cs.


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