package items // Equipment slot constants const ( BaseEquipment = 0 AppearanceEquipment = 1 MaxEquipment = 2 // max iterations for equipment (base is 0, appearance is 1) ) // EQ2 slot positions (array indices) const ( EQ2PrimarySlot = 0 EQ2SecondarySlot = 1 EQ2HeadSlot = 2 EQ2ChestSlot = 3 EQ2ShouldersSlot = 4 EQ2ForearmsSlot = 5 EQ2HandsSlot = 6 EQ2LegsSlot = 7 EQ2FeetSlot = 8 EQ2LRingSlot = 9 EQ2RRingSlot = 10 EQ2EarsSlot1 = 11 EQ2EarsSlot2 = 12 EQ2NeckSlot = 13 EQ2LWristSlot = 14 EQ2RWristSlot = 15 EQ2RangeSlot = 16 EQ2AmmoSlot = 17 EQ2WaistSlot = 18 EQ2CloakSlot = 19 EQ2CharmSlot1 = 20 EQ2CharmSlot2 = 21 EQ2FoodSlot = 22 EQ2DrinkSlot = 23 EQ2TexturesSlot = 24 EQ2HairSlot = 25 EQ2BeardSlot = 26 EQ2WingsSlot = 27 EQ2NakedChestSlot = 28 EQ2NakedLegsSlot = 29 EQ2BackSlot = 30 ) // Original slot positions (for older clients) const ( EQ2OrigFoodSlot = 18 EQ2OrigDrinkSlot = 19 EQ2DoFCharmSlot1 = 18 EQ2DoFCharmSlot2 = 19 EQ2DoFFoodSlot = 20 EQ2DoFDrinkSlot = 21 ) // Slot bitmasks for equipment validation const ( PrimarySlot = 1 SecondarySlot = 2 HeadSlot = 4 ChestSlot = 8 ShouldersSlot = 16 ForearmsSlot = 32 HandsSlot = 64 LegsSlot = 128 FeetSlot = 256 LRingSlot = 512 RRingSlot = 1024 EarsSlot1 = 2048 EarsSlot2 = 4096 NeckSlot = 8192 LWristSlot = 16384 RWristSlot = 32768 RangeSlot = 65536 AmmoSlot = 131072 WaistSlot = 262144 CloakSlot = 524288 CharmSlot1 = 1048576 CharmSlot2 = 2097152 FoodSlot = 4194304 DrinkSlot = 8388608 TexturesSlot = 16777216 HairSlot = 33554432 BeardSlot = 67108864 WingsSlot = 134217728 NakedChestSlot = 268435456 NakedLegsSlot = 536870912 BackSlot = 1073741824 OrigFoodSlot = 524288 OrigDrinkSlot = 1048576 DoFFoodSlot = 1048576 DoFDrinkSlot = 2097152 ) // Inventory slot limits and constants const ( ClassicEQMaxBagSlots = 20 DoFEQMaxBagSlots = 36 NumBankSlots = 12 NumSharedBankSlots = 8 ClassicNumSlots = 22 NumSlots = 25 NumInvSlots = 6 InvSlot1 = 0 InvSlot2 = 50 InvSlot3 = 100 InvSlot4 = 150 InvSlot5 = 200 InvSlot6 = 250 BankSlot1 = 1000 BankSlot2 = 1100 BankSlot3 = 1200 BankSlot4 = 1300 BankSlot5 = 1400 BankSlot6 = 1500 BankSlot7 = 1600 BankSlot8 = 1700 ) // Item flags (bitmask values) const ( Attuned = 1 Attuneable = 2 Artifact = 4 Lore = 8 Temporary = 16 NoTrade = 32 NoValue = 64 NoZone = 128 NoDestroy = 256 Crafted = 512 GoodOnly = 1024 EvilOnly = 2048 StackLore = 4096 LoreEquip = 8192 NoTransmute = 16384 Cursed = 32768 ) // Item flags2 (bitmask values) const ( Ornate = 1 Heirloom = 2 AppearanceOnly = 4 Unlocked = 8 Reforged = 16 NoRepair = 32 Ethereal = 64 Refined = 128 NoSalvage = 256 Indestructible = 512 NoExperiment = 1024 HouseLore = 2048 Flags24096 = 4096 // AoM: not used at this time BuildingBlock = 8192 FreeReforge = 16384 Flags232768 = 32768 // AoM: not used at this time ) // Item wield types const ( ItemWieldTypeDual = 1 ItemWieldTypeSingle = 2 ItemWieldTypeTwoHand = 4 ) // Item types const ( ItemTypeNormal = 0 ItemTypeWeapon = 1 ItemTypeRanged = 2 ItemTypeArmor = 3 ItemTypeShield = 4 ItemTypeBag = 5 ItemTypeSkill = 6 ItemTypeRecipe = 7 ItemTypeFood = 8 ItemTypeBauble = 9 ItemTypeHouse = 10 ItemTypeThrown = 11 ItemTypeHouseContainer = 12 ItemTypeAdornment = 13 ItemTypeGenericAdornment = 14 ItemTypeProfile = 16 ItemTypePattern = 17 ItemTypeArmorset = 18 ItemTypeItemcrate = 18 ItemTypeBook = 19 ItemTypeDecoration = 20 ItemTypeDungeonMaker = 21 ItemTypeMarketplace = 22 ) // Item menu types (bitmask values) const ( ItemMenuTypeGeneric = 1 ItemMenuTypeEquip = 2 ItemMenuTypeBag = 4 ItemMenuTypeHouse = 8 ItemMenuTypeEmptyBag = 16 ItemMenuTypeScribe = 32 ItemMenuTypeBankBag = 64 ItemMenuTypeInsufficientKnowledge = 128 ItemMenuTypeActivate = 256 ItemMenuTypeBroken = 512 ItemMenuTypeTwoHanded = 1024 ItemMenuTypeAttuned = 2048 ItemMenuTypeAttuneable = 4096 ItemMenuTypeBook = 8192 ItemMenuTypeDisplayCharges = 16384 ItemMenuTypeTest1 = 32768 ItemMenuTypeNamepet = 65536 ItemMenuTypeMentored = 131072 ItemMenuTypeConsume = 262144 ItemMenuTypeUse = 524288 ItemMenuTypeConsumeOff = 1048576 ItemMenuTypeTest3 = 1310720 ItemMenuTypeTest4 = 2097152 ItemMenuTypeTest5 = 4194304 ItemMenuTypeTest6 = 8388608 ItemMenuTypeTest7 = 16777216 ItemMenuTypeTest8 = 33554432 ItemMenuTypeTest9 = 67108864 ItemMenuTypeDamaged = 134217728 ItemMenuTypeBroken2 = 268435456 ItemMenuTypeRedeem = 536870912 ItemMenuTypeTest10 = 1073741824 ItemMenuTypeUnpack = 2147483648 ) // Original item menu types const ( OrigItemMenuTypeFood = 2048 OrigItemMenuTypeDrink = 4096 OrigItemMenuTypeAttuned = 8192 OrigItemMenuTypeAttuneable = 16384 OrigItemMenuTypeBook = 32768 OrigItemMenuTypeStackable = 65536 OrigItemMenuTypeNamepet = 262144 ) // Item menu type2 flags const ( ItemMenuType2Test1 = 1 ItemMenuType2Test2 = 2 ItemMenuType2Unpack = 4 ItemMenuType2Test4 = 8 ItemMenuType2Test5 = 16 ItemMenuType2Test6 = 32 ItemMenuType2Test7 = 64 ItemMenuType2Test8 = 128 ItemMenuType2Test9 = 256 ItemMenuType2Test10 = 512 ItemMenuType2Test11 = 1024 ItemMenuType2Test12 = 2048 ItemMenuType2Test13 = 4096 ItemMenuType2Test14 = 8192 ItemMenuType2Test15 = 16384 ItemMenuType2Test16 = 32768 ) // Item tier tags const ( ItemTagCommon = 2 ItemTagUncommon = 3 ItemTagTreasured = 4 ItemTagLegendary = 7 ItemTagFabled = 9 ItemTagMythical = 12 ) // Broker type flags const ( ItemBrokerTypeAny = 0xFFFFFFFF ItemBrokerTypeAny64Bit = 0xFFFFFFFFFFFFFFFF ItemBrokerTypeAdornment = 134217728 ItemBrokerTypeAmmo = 1024 ItemBrokerTypeAttuneable = 16384 ItemBrokerTypeBag = 2048 ItemBrokerTypeBauble = 16777216 ItemBrokerTypeBook = 128 ItemBrokerTypeChainarmor = 2097152 ItemBrokerTypeCloak = 1073741824 ItemBrokerTypeClotharmor = 524288 ItemBrokerTypeCollectable = 67108864 ItemBrokerTypeCrushweapon = 4 ItemBrokerTypeDrink = 131072 ItemBrokerTypeFood = 4096 ItemBrokerTypeHouseitem = 512 ItemBrokerTypeJewelry = 262144 ItemBrokerTypeLeatherarmor = 1048576 ItemBrokerTypeLore = 8192 ItemBrokerTypeMisc = 1 ItemBrokerTypePierceweapon = 8 ItemBrokerTypePlatearmor = 4194304 ItemBrokerTypePoison = 65536 ItemBrokerTypePotion = 32768 ItemBrokerTypeRecipebook = 8388608 ItemBrokerTypeSalesdisplay = 33554432 ItemBrokerTypeShield = 32 ItemBrokerTypeSlashweapon = 2 ItemBrokerTypeSpellscroll = 64 ItemBrokerTypeTinkered = 268435456 ItemBrokerTypeTradeskill = 256 ) // 2-handed weapon broker types const ( ItemBrokerType2HCrush = 17179869184 ItemBrokerType2HPierce = 34359738368 ItemBrokerType2HSlash = 8589934592 ) // Broker slot flags const ( ItemBrokerSlotAny = 0xFFFFFFFF ItemBrokerSlotAmmo = 65536 ItemBrokerSlotCharm = 524288 ItemBrokerSlotChest = 32 ItemBrokerSlotCloak = 262144 ItemBrokerSlotDrink = 2097152 ItemBrokerSlotEars = 4096 ItemBrokerSlotFeet = 1024 ItemBrokerSlotFood = 1048576 ItemBrokerSlotForearms = 128 ItemBrokerSlotHands = 256 ItemBrokerSlotHead = 16 ItemBrokerSlotLegs = 512 ItemBrokerSlotNeck = 8192 ItemBrokerSlotPrimary = 1 ItemBrokerSlotPrimary2H = 2 ItemBrokerSlotRangeWeapon = 32768 ItemBrokerSlotRing = 2048 ItemBrokerSlotSecondary = 8 ItemBrokerSlotShoulders = 64 ItemBrokerSlotWaist = 131072 ItemBrokerSlotWrist = 16384 ) // Broker stat type flags const ( ItemBrokerStatTypeNone = 0 ItemBrokerStatTypeDef = 2 ItemBrokerStatTypeStr = 4 ItemBrokerStatTypeSta = 8 ItemBrokerStatTypeAgi = 16 ItemBrokerStatTypeWis = 32 ItemBrokerStatTypeInt = 64 ItemBrokerStatTypeHealth = 128 ItemBrokerStatTypePower = 256 ItemBrokerStatTypeHeat = 512 ItemBrokerStatTypeCold = 1024 ItemBrokerStatTypeMagic = 2048 ItemBrokerStatTypeMental = 4096 ItemBrokerStatTypeDivine = 8192 ItemBrokerStatTypePoison = 16384 ItemBrokerStatTypeDisease = 32768 ItemBrokerStatTypeCrush = 65536 ItemBrokerStatTypeSlash = 131072 ItemBrokerStatTypePierce = 262144 ItemBrokerStatTypeCritical = 524288 ItemBrokerStatTypeDblAttack = 1048576 ItemBrokerStatTypeAbilityMod = 2097152 ItemBrokerStatTypePotency = 4194304 ItemBrokerStatTypeAEAutoattack = 8388608 ItemBrokerStatTypeAttackspeed = 16777216 ItemBrokerStatTypeBlockchance = 33554432 ItemBrokerStatTypeCastingspeed = 67108864 ItemBrokerStatTypeCritbonus = 134217728 ItemBrokerStatTypeCritchance = 268435456 ItemBrokerStatTypeDPS = 536870912 ItemBrokerStatTypeFlurrychance = 1073741824 ItemBrokerStatTypeHategain = 2147483648 ItemBrokerStatTypeMitigation = 4294967296 ItemBrokerStatTypeMultiAttack = 8589934592 ItemBrokerStatTypeRecovery = 17179869184 ItemBrokerStatTypeReuseSpeed = 34359738368 ItemBrokerStatTypeSpellWpndmg = 68719476736 ItemBrokerStatTypeStrikethrough = 137438953472 ItemBrokerStatTypeToughness = 274877906944 ItemBrokerStatTypeWeapondmg = 549755813888 ) // Special slot values const ( OverflowSlot = 0xFFFFFFFE SlotInvalid = 0xFFFF ) // Basic item stats (0-4) const ( ItemStatStr = 0 ItemStatSta = 1 ItemStatAgi = 2 ItemStatWis = 3 ItemStatInt = 4 ) // Skill-based stats (100+) const ( ItemStatAdorning = 100 ItemStatAggression = 101 ItemStatArtificing = 102 ItemStatArtistry = 103 ItemStatChemistry = 104 ItemStatCrushing = 105 ItemStatDefense = 106 ItemStatDeflection = 107 ItemStatDisruption = 108 ItemStatFishing = 109 ItemStatFletching = 110 ItemStatFocus = 111 ItemStatForesting = 112 ItemStatGathering = 113 ItemStatMetalShaping = 114 ItemStatMetalworking = 115 ItemStatMining = 116 ItemStatMinistration = 117 ItemStatOrdination = 118 ItemStatParry = 119 ItemStatPiercing = 120 ItemStatRanged = 121 ItemStatSafeFall = 122 ItemStatScribing = 123 ItemStatSculpting = 124 ItemStatSlashing = 125 ItemStatSubjugation = 126 ItemStatSwimming = 127 ItemStatTailoring = 128 ItemStatTinkering = 129 ItemStatTransmuting = 130 ItemStatTrapping = 131 ItemStatWeaponSkills = 132 ItemStatPowerCostReduction = 133 ItemStatSpellAvoidance = 134 ) // Resistance stats (200+) const ( ItemStatVsPhysical = 200 ItemStatVsHeat = 201 // elemental ItemStatVsPoison = 202 // noxious ItemStatVsMagic = 203 // arcane ItemStatVsSlash = 204 ItemStatVsCrush = 205 ItemStatVsPierce = 206 ItemStatVsCold = 207 ItemStatVsMental = 208 ItemStatVsDivine = 209 ItemStatVsDrowning = 210 ItemStatVsFalling = 211 ItemStatVsPain = 212 ItemStatVsMelee = 213 ItemStatVsDisease = 214 ) // Damage type stats (300+) const ( ItemStatDmgSlash = 300 ItemStatDmgCrush = 301 ItemStatDmgPierce = 302 ItemStatDmgHeat = 303 ItemStatDmgCold = 304 ItemStatDmgMagic = 305 ItemStatDmgMental = 306 ItemStatDmgDivine = 307 ItemStatDmgDisease = 308 ItemStatDmgPoison = 309 ItemStatDmgDrowning = 310 ItemStatDmgFalling = 311 ItemStatDmgPain = 312 ItemStatDmgMelee = 313 ) // Pool stats (500+) const ( ItemStatHealth = 500 ItemStatPower = 501 ItemStatConcentration = 502 ItemStatSavagery = 503 ) // Advanced stats (600+) const ( ItemStatHPRegen = 600 ItemStatManaRegen = 601 ItemStatHPRegenPPT = 602 ItemStatMPRegenPPT = 603 ItemStatCombatHPRegenPPT = 604 ItemStatCombatMPRegenPPT = 605 ItemStatMaxHP = 606 ItemStatMaxHPPerc = 607 ItemStatMaxHPPercFinal = 608 ItemStatSpeed = 609 ItemStatSlow = 610 ItemStatMountSpeed = 611 ItemStatMountAirSpeed = 612 ItemStatLeapSpeed = 613 ItemStatLeapTime = 614 ItemStatGlideEfficiency = 615 ItemStatOffensiveSpeed = 616 ItemStatAttackSpeed = 617 ItemStatSpellWeaponAttackSpeed = 618 ItemStatMaxMana = 619 ItemStatMaxManaPerc = 620 ItemStatMaxAttPerc = 621 ItemStatBlurVision = 622 ItemStatMagicLevelImmunity = 623 ItemStatHateGainMod = 624 ItemStatCombatExpMod = 625 ItemStatTradeskillExpMod = 626 ItemStatAchievementExpMod = 627 ItemStatSizeMod = 628 ItemStatDPS = 629 ItemStatSpellWeaponDPS = 630 ItemStatStealth = 631 ItemStatInvis = 632 ItemStatSeeStealth = 633 ItemStatSeeInvis = 634 ItemStatEffectiveLevelMod = 635 ItemStatRiposteChance = 636 ItemStatParryChance = 637 ItemStatDodgeChance = 638 ItemStatAEAutoattackChance = 639 ItemStatSpellWeaponAEAutoattackChance = 640 ItemStatMultiattackChance = 641 ItemStatPvPDoubleAttackChance = 642 ItemStatSpellWeaponDoubleAttackChance = 643 ItemStatPvPSpellWeaponDoubleAttackChance = 644 ItemStatSpellMultiAttackChance = 645 ItemStatPvPSpellDoubleAttackChance = 646 ItemStatFlurry = 647 ItemStatSpellWeaponFlurry = 648 ItemStatMeleeDamageMultiplier = 649 ItemStatExtraHarvestChance = 650 ItemStatExtraShieldBlockChance = 651 ItemStatItemHPRegenPPT = 652 ItemStatItemPPRegenPPT = 653 ItemStatMeleeCritChance = 654 ItemStatCritAvoidance = 655 ItemStatBeneficialCritChance = 656 ItemStatCritBonus = 657 ItemStatPvPCritBonus = 658 ItemStatPotency = 659 ItemStatPvPPotency = 660 ItemStatUnconsciousHPMod = 661 ItemStatAbilityReuseSpeed = 662 ItemStatAbilityRecoverySpeed = 663 ItemStatAbilityCastingSpeed = 664 ItemStatSpellReuseSpeed = 665 ItemStatMeleeWeaponRange = 666 ItemStatRangedWeaponRange = 667 ItemStatFallingDamageReduction = 668 ItemStatRiposteDamage = 669 ItemStatMinimumDeflectionChance = 670 ItemStatMovementWeave = 671 ItemStatCombatHPRegen = 672 ItemStatCombatManaRegen = 673 ItemStatContestSpeedBoost = 674 ItemStatTrackingAvoidance = 675 ItemStatStealthInvisSpeedMod = 676 ItemStatLootCoin = 677 ItemStatArmorMitigationIncrease = 678 ItemStatAmmoConservation = 679 ItemStatStrikethrough = 680 ItemStatStatusBonus = 681 ItemStatAccuracy = 682 ItemStatCounterstrike = 683 ItemStatShieldBash = 684 ItemStatWeaponDamageBonus = 685 ItemStatWeaponDamageBonusMeleeOnly = 686 ItemStatAdditionalRiposteChance = 687 ItemStatCriticalMitigation = 688 ItemStatPvPToughness = 689 ItemStatPvPLethality = 690 ItemStatStaminaBonus = 691 ItemStatWisdomMitBonus = 692 ItemStatHealReceive = 693 ItemStatHealReceivePerc = 694 ItemStatPvPCriticalMitigation = 695 ItemStatBaseAvoidanceBonus = 696 ItemStatInCombatSavageryRegen = 697 ItemStatOutOfCombatSavageryRegen = 698 ItemStatSavageryRegen = 699 ItemStatSavageryGainMod = 6100 ItemStatMaxSavageryLevel = 6101 ItemStatSpellWeaponDamageBonus = 6102 ItemStatInCombatDissonanceRegen = 6103 ItemStatOutOfCombatDissonanceRegen = 6104 ItemStatDissonanceRegen = 6105 ItemStatDissonanceGainMod = 6106 ItemStatAEAutoattackAvoid = 6107 ItemStatAgnosticDamageBonus = 6108 ItemStatAgnosticHealBonus = 6109 ItemStatTitheGain = 6110 ItemStatFerver = 6111 ItemStatResolve = 6112 ItemStatCombatMitigation = 6113 ItemStatAbilityMitigation = 6114 ItemStatMultiAttackAvoidance = 6115 ItemStatDoubleCastAvoidance = 6116 ItemStatAbilityDoubleCastAvoidance = 6117 ItemStatDamagePerSecondMitigation = 6118 ItemStatFerverMitigation = 6119 ItemStatFlurryAvoidance = 6120 ItemStatWeaponDamageBonusMitigation = 6121 ItemStatAbilityDoubleCastChance = 6122 ItemStatAbilityModifierMitigation = 6123 ItemStatStatusEarned = 6124 ) // Spell/ability modifier stats (700+) const ( ItemStatSpellDamage = 700 ItemStatHealAmount = 701 ItemStatSpellAndHeal = 702 ItemStatCombatArtDamage = 703 ItemStatSpellAndCombatArtDamage = 704 ItemStatTauntAmount = 705 ItemStatTauntAndCombatArtDamage = 706 ItemStatAbilityModifier = 707 ) // Server-only stats (800+) - never sent to client const ( ItemStatDurabilityMod = 800 ItemStatDurabilityAdd = 801 ItemStatProgressAdd = 802 ItemStatProgressMod = 803 ItemStatSuccessMod = 804 ItemStatCritSuccessMod = 805 ItemStatExDurabilityMod = 806 ItemStatExDurabilityAdd = 807 ItemStatExProgressMod = 808 ItemStatExProgressAdd = 809 ItemStatExSuccessMod = 810 ItemStatExCritSuccessMod = 811 ItemStatExCritFailureMod = 812 ItemStatRareHarvestChance = 813 ItemStatMaxCrafting = 814 ItemStatComponentRefund = 815 ItemStatBountifulHarvest = 816 ) // Uncontested stats (850+) const ( ItemStatUncontestedParry = 850 ItemStatUncontestedBlock = 851 ItemStatUncontestedDodge = 852 ItemStatUncontestedRiposte = 853 ) // Display flags const ( DisplayFlagRedText = 1 DisplayFlagNoGuildStatus = 8 DisplayFlagNoBuyback = 16 DisplayFlagNotForSale = 64 DisplayFlagNoBuy = 128 ) // House store item flags const ( HouseStoreItemTextRed = 1 HouseStoreUnknownBit2 = 2 HouseStoreUnknownBit4 = 4 HouseStoreForSale = 8 HouseStoreUnknownBit16 = 16 HouseStoreVaultTab = 32 ) // Log category const ( LogCategoryItems = "Items" ) // Item validation constants const ( MaxItemNameLength = 255 // Maximum length for item names MaxItemDescLength = 1000 // Maximum length for item descriptions ) // Default item values const ( DefaultItemCondition = 100 // 100% condition for new items DefaultItemDurability = 100 // 100% durability for new items )