256 lines
8.1 KiB
Lua
256 lines
8.1 KiB
Lua
-- Path of Building
|
|
--
|
|
-- Module: Global
|
|
-- Global constants
|
|
--
|
|
|
|
colorCodes = {
|
|
NORMAL = "^xC8C8C8",
|
|
MAGIC = "^x8888FF",
|
|
RARE = "^xFFFF77",
|
|
UNIQUE = "^xAF6025",
|
|
RELIC = "^x60C060",
|
|
GEM = "^x1AA29B",
|
|
PROPHECY = "^xB54BFF",
|
|
CURRENCY = "^xAA9E82",
|
|
CRAFTED = "^xB8DAF1",
|
|
CUSTOM = "^x5CF0BB",
|
|
SOURCE = "^x88FFFF",
|
|
UNSUPPORTED = "^xF05050",
|
|
WARNING = "^xFF9922",
|
|
TIP = "^x80A080",
|
|
FIRE = "^xB97123",
|
|
COLD = "^x3F6DB3",
|
|
LIGHTNING = "^xADAA47",
|
|
CHAOS = "^xD02090",
|
|
POSITIVE = "^x33FF77",
|
|
NEGATIVE = "^xDD0022",
|
|
OFFENCE = "^xE07030",
|
|
DEFENCE = "^x8080E0",
|
|
SCION = "^xFFF0F0",
|
|
MARAUDER = "^xE05030",
|
|
RANGER = "^x70FF70",
|
|
WITCH = "^x7070FF",
|
|
DUELIST = "^xE0E070",
|
|
TEMPLAR = "^xC040FF",
|
|
SHADOW = "^x30C0D0",
|
|
MAINHAND = "^x50FF50",
|
|
MAINHANDBG = "^x071907",
|
|
OFFHAND = "^xB7B7FF",
|
|
OFFHANDBG = "^x070719",
|
|
SHAPER = "^x55BBFF",
|
|
ELDER = "^xAA77CC",
|
|
FRACTURED = "^xA29160",
|
|
ADJUDICATOR = "^xE9F831",
|
|
BASILISK = "^x00CB3A",
|
|
CRUSADER = "^x2946FC",
|
|
EYRIE = "^xAAB7B8",
|
|
}
|
|
colorCodes.STRENGTH = colorCodes.MARAUDER
|
|
colorCodes.DEXTERITY = colorCodes.RANGER
|
|
colorCodes.INTELLIGENCE = colorCodes.WITCH
|
|
|
|
ModFlag = { }
|
|
-- Damage modes
|
|
ModFlag.Attack = 0x00000001
|
|
ModFlag.Spell = 0x00000002
|
|
ModFlag.Hit = 0x00000004
|
|
ModFlag.Dot = 0x00000008
|
|
ModFlag.Cast = 0x00000010
|
|
-- Damage sources
|
|
ModFlag.Melee = 0x00000100
|
|
ModFlag.Area = 0x00000200
|
|
ModFlag.Projectile = 0x00000400
|
|
ModFlag.SourceMask = 0x00000600
|
|
ModFlag.Ailment = 0x00000800
|
|
ModFlag.MeleeHit = 0x00001000
|
|
ModFlag.Weapon = 0x00002000
|
|
-- Weapon types
|
|
ModFlag.Axe = 0x00010000
|
|
ModFlag.Bow = 0x00020000
|
|
ModFlag.Claw = 0x00040000
|
|
ModFlag.Dagger = 0x00080000
|
|
ModFlag.Mace = 0x00100000
|
|
ModFlag.Staff = 0x00200000
|
|
ModFlag.Sword = 0x00400000
|
|
ModFlag.Wand = 0x00800000
|
|
ModFlag.Unarmed = 0x01000000
|
|
-- Weapon classes
|
|
ModFlag.WeaponMelee =0x02000000
|
|
ModFlag.WeaponRanged=0x04000000
|
|
ModFlag.Weapon1H = 0x08000000
|
|
ModFlag.Weapon2H = 0x10000000
|
|
ModFlag.WeaponMask = 0x1FFF0000
|
|
|
|
KeywordFlag = { }
|
|
-- Skill keywords
|
|
KeywordFlag.Aura = 0x00000001
|
|
KeywordFlag.Curse = 0x00000002
|
|
KeywordFlag.Warcry = 0x00000004
|
|
KeywordFlag.Movement = 0x00000008
|
|
KeywordFlag.Fire = 0x00000010
|
|
KeywordFlag.Cold = 0x00000020
|
|
KeywordFlag.Lightning = 0x00000040
|
|
KeywordFlag.Chaos = 0x00000080
|
|
KeywordFlag.Vaal = 0x00000100
|
|
KeywordFlag.Bow = 0x00000200
|
|
-- Skill types
|
|
KeywordFlag.Trap = 0x00001000
|
|
KeywordFlag.Mine = 0x00002000
|
|
KeywordFlag.Totem = 0x00004000
|
|
KeywordFlag.Minion = 0x00008000
|
|
KeywordFlag.Attack = 0x00010000
|
|
KeywordFlag.Spell = 0x00020000
|
|
KeywordFlag.Hit = 0x00040000
|
|
KeywordFlag.Ailment = 0x00080000
|
|
KeywordFlag.Brand = 0x00100000
|
|
-- Other effects
|
|
KeywordFlag.Poison = 0x00200000
|
|
KeywordFlag.Bleed = 0x00400000
|
|
KeywordFlag.Ignite = 0x00800000
|
|
-- Damage over Time types
|
|
KeywordFlag.PhysicalDot=0x01000000
|
|
KeywordFlag.LightningDot=0x02000000
|
|
KeywordFlag.ColdDot = 0x04000000
|
|
KeywordFlag.FireDot = 0x08000000
|
|
KeywordFlag.ChaosDot = 0x10000000
|
|
---The default behavior for KeywordFlags is to match *any* of the specified flags.
|
|
---Including the "MatchAll" flag when creating a mod will cause *all* flags to be matched rather than any.
|
|
KeywordFlag.MatchAll = 0x40000000
|
|
|
|
-- Helper function to compare KeywordFlags
|
|
local band = bit.band
|
|
local MatchAllMask = bit.bnot(KeywordFlag.MatchAll)
|
|
---@param keywordFlags number The KeywordFlags to be compared to.
|
|
---@param modKeywordFlags number The KeywordFlags stored in the mod.
|
|
---@return boolean Whether the KeywordFlags in the mod are satified.
|
|
function MatchKeywordFlags(keywordFlags, modKeywordFlags)
|
|
local matchAll = band(modKeywordFlags, KeywordFlag.MatchAll) ~= 0
|
|
modKeywordFlags = band(modKeywordFlags, MatchAllMask)
|
|
keywordFlags = band(keywordFlags, MatchAllMask)
|
|
if matchAll then
|
|
return band(keywordFlags, modKeywordFlags) == modKeywordFlags
|
|
end
|
|
return modKeywordFlags == 0 or band(keywordFlags, modKeywordFlags) ~= 0
|
|
end
|
|
|
|
-- Active skill types, used in ActiveSkills.dat and GrantedEffects.dat
|
|
-- Had to reverse engineer this, not sure what all of the values mean
|
|
SkillType = {
|
|
Attack = 1,
|
|
Spell = 2,
|
|
Projectile = 3, -- Specifically skills which fire projectiles
|
|
DualWield = 4, -- Attack requires dual wielding, only used on Dual Strike
|
|
Buff = 5,
|
|
Removed6 = 6, -- Now removed, was CanDualWield: Attack can be used while dual wielding
|
|
MainHandOnly = 7, -- Attack only uses the main hand; removed in 3.5 but still needed for 2.6
|
|
Removed8 = 8, -- Now removed, was only used on Cleave
|
|
Minion = 9,
|
|
Hit = 10, -- Skill hits (not used on attacks because all of them hit)
|
|
Area = 11,
|
|
Duration = 12,
|
|
Shield = 13, -- Skill requires a shield
|
|
ProjectileDamage = 14, -- Skill deals projectile damage but doesn't fire projectiles
|
|
ManaCostReserved = 15, -- The skill's mana cost is a reservation
|
|
ManaCostPercent = 16, -- The skill's mana cost is a percentage
|
|
SkillCanTrap = 17, -- Skill can be turned into a trap
|
|
SkillCanTotem = 18, -- Skill can be turned into a totem
|
|
SkillCanMine = 19, -- Skill can be turned into a mine
|
|
CauseElementalStatus = 20, -- Causes elemental status effects, but doesn't hit (used on Herald of Ash to allow Elemental Proliferation to apply)
|
|
CreateMinion = 21, -- Creates or summons minions
|
|
Removed22 = 22, -- Now removed, was AttackCanTotem
|
|
Chaining = 23,
|
|
Melee = 24,
|
|
MeleeSingleTarget = 25,
|
|
SpellCanRepeat = 26, -- Spell can repeat via Spell Echo
|
|
Type27 = 27, -- No idea, used on auras and certain damage skills
|
|
AttackCanRepeat = 28, -- Attack can repeat via Multistrike
|
|
CausesBurning = 29, -- Deals burning damage
|
|
Totem = 30,
|
|
Type31 = 31, -- No idea, used on Molten Shell and the Thunder glove enchants, and added by Blasphemy
|
|
--Curse = 32,
|
|
FireSkill = 32,
|
|
ColdSkill = 33,
|
|
LightningSkill = 34,
|
|
Triggerable = 35,
|
|
Trap = 36,
|
|
MovementSkill = 37,
|
|
Removed39 = 38, -- Now removed, was Cast
|
|
DamageOverTime = 39,
|
|
Mine = 40,
|
|
Triggered = 41,
|
|
Vaal = 42,
|
|
Aura = 43,
|
|
Removed45 = 44, -- Now removed, was LightningSpell
|
|
Type46 = 45, -- Doesn't appear to be used at all
|
|
Removed47 = 46, -- Now removed, was TriggeredAttack
|
|
ProjectileAttack = 47,
|
|
Removed49 = 48, -- Now removed, was MinionSpell
|
|
ChaosSkill = 49,
|
|
Type51 = 50, -- Not used by any skill
|
|
Removed52 = 51,
|
|
Type53 = 52, -- Allows Burning Arrow and Vigilant Strike to be supported by Inc AoE and Conc Effect
|
|
Type54 = 53, -- Not used by any skill
|
|
Type55 = 54, -- Allows Burning Arrow to be supported by Inc/Less Duration and Rapid Decay
|
|
Type56 = 55, -- Not used by any skill
|
|
Removed57 = 56,
|
|
Channelled = 57,
|
|
Type59 = 58, -- Allows Contagion, Blight and Scorching Ray to be supported by Controlled Destruction
|
|
Removed60 = 59, -- Now removed, was ColdSpell
|
|
TriggeredGrantedSkill = 60, -- Skill granted by item that is automatically triggered, prevents trigger gems and trap/mine/totem from applying
|
|
Golem = 61,
|
|
Herald = 62,
|
|
AuraDebuff = 63, -- Used by Death Aura, added by Blasphemy
|
|
Type65 = 64, -- Excludes Ruthless from Cyclone
|
|
Type66 = 65, -- Allows Iron Will
|
|
SpellCanCascade = 66, -- Spell can cascade via Spell Cascade
|
|
SkillCanVolley = 67, -- Skill can be supported by Volley
|
|
SkillCanMirageArcher = 68, -- Skill can be supported by Mirage Archer
|
|
Type70 = 69, -- Excludes Volley from Vaal Fireball and Vaal Spark
|
|
Type71 = 70, -- Excludes Volley from Spectral Shield Throw
|
|
Type72 = 71, -- Excludes Summon Phantasm on Kill from Manifest Dancing Dervish
|
|
Type73 = 72, -- Allows LMP/GMP on Rain of Arrows and Toxic Rain
|
|
Warcry = 73, -- Warcry
|
|
Instant = 74, -- Instant cast skill
|
|
Brand = 75,
|
|
DestroysCorpse = 76, -- Consumes corpses on use
|
|
NonHitChill = 77,
|
|
ChillingArea = 78,
|
|
AppliesCurse = 79,
|
|
CanRapidFire = 80,
|
|
AuraDuration = 81,
|
|
AreaSpell = 82,
|
|
OR = 83,
|
|
AND = 84,
|
|
NOT = 85,
|
|
PhysicalSkill = 86,
|
|
Maims = 87,
|
|
CreatesMinion = 88,
|
|
GuardSkill = 89,
|
|
TravelSkill = 90,
|
|
BlinkSkill = 91,
|
|
CanHaveBlessing = 92,
|
|
Type83 = 93, -- Has secondary projectiles
|
|
Ballista = 94,
|
|
NovaSpell = 95,
|
|
Type91 = 96,
|
|
Type92 = 97,
|
|
Type93 = 98, -- Dedicated mine skills
|
|
Banner = 99,
|
|
Type95 = 100, -- Raining arrow skills
|
|
SecondWindSupport = 101,
|
|
Type97= 102,
|
|
CantUseFistOfWar = 103,
|
|
SlamSkill = 104,
|
|
StanceSkill = 105, -- Bload and Sand + Flesh and Stone
|
|
Type101 = 106,
|
|
Type102 = 107,
|
|
SteelSkill = 18,
|
|
Hex = 109,
|
|
Mark = 110,
|
|
Aegis = 111,
|
|
Orb = 112,
|
|
}
|
|
|
|
GlobalCache = { cachedData = { }, }
|