aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_08.sql2
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp4
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp8
-rw-r--r--src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp20
-rw-r--r--src/server/game/DataStores/DB2Metadata.h12
-rw-r--r--src/server/game/DataStores/DB2Structure.h1
-rw-r--r--src/server/game/DataStores/DBCEnums.h16
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h1
-rw-r--r--src/server/game/Entities/Item/Item.cpp5
-rw-r--r--src/server/game/Entities/Item/Item.h5
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.cpp8
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h115
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp6
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h8
-rw-r--r--src/server/game/Entities/Player/Player.cpp18
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp99
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h113
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h194
-rw-r--r--src/server/game/Spells/Spell.cpp20
19 files changed, 343 insertions, 312 deletions
diff --git a/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_08.sql b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_08.sql
new file mode 100644
index 00000000000..6cce565b905
--- /dev/null
+++ b/sql/updates/hotfixes/2016_xx_xx_xx_hotfixes_legion_08.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `item_random_suffix` DROP `InternalName`;
+ALTER TABLE `item_random_suffix_locale` DROP `InternalName_lang`;
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index cf5ab499a6a..c34c9ac72aa 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -437,9 +437,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_RANDOM_PROPERTIES, "SELECT ID, Name_lang FROM item_random_properties_locale WHERE locale = ?", CONNECTION_SYNCH);
// ItemRandomSuffix.db2
- PrepareStatement(HOTFIX_SEL_ITEM_RANDOM_SUFFIX, "SELECT ID, Name, InternalName, Enchantment1, Enchantment2, Enchantment3, Enchantment4, "
+ PrepareStatement(HOTFIX_SEL_ITEM_RANDOM_SUFFIX, "SELECT ID, Name, Enchantment1, Enchantment2, Enchantment3, Enchantment4, "
"Enchantment5, AllocationPct1, AllocationPct2, AllocationPct3, AllocationPct4, AllocationPct5 FROM item_random_suffix ORDER BY ID DESC", CONNECTION_SYNCH);
- PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_RANDOM_SUFFIX, "SELECT ID, Name_lang, InternalName_lang FROM item_random_suffix_locale WHERE locale = ?", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_RANDOM_SUFFIX, "SELECT ID, Name_lang FROM item_random_suffix_locale WHERE locale = ?", CONNECTION_SYNCH);
// ItemSet.db2
PrepareStatement(HOTFIX_SEL_ITEM_SET, "SELECT ID, Name, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemID6, ItemID7, ItemID8, ItemID9, "
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index e9ec1299f96..3c8a5241809 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -1457,6 +1457,14 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr
switch (CriteriaAdditionalCondition(reqType))
{
+ case CRITERIA_ADDITIONAL_CONDITION_ITEM_LEVEL: // 3
+ {
+ // miscValue1 is itemid
+ ItemTemplate const* const item = sObjectMgr->GetItemTemplate(uint32(miscValue1));
+ if (!item || item->GetBaseItemLevel() < reqValue)
+ return false;
+ break;
+ }
case CRITERIA_ADDITIONAL_CONDITION_TARGET_CREATURE_ENTRY: // 4
if (!unit || unit->GetEntry() != reqValue)
return false;
diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
index d5d5816f4c1..0ba27b1b7ce 100644
--- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
+++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp
@@ -303,7 +303,7 @@ bool AuctionBotSeller::Initialize()
break;
}
case ITEM_CLASS_MISCELLANEOUS:
- if (prototype->GetSubClass() == ITEM_SUBCLASS_JUNK_MOUNT)
+ if (prototype->GetSubClass() == ITEM_SUBCLASS_MISCELLANEOUS_MOUNT)
{
if (uint32 value = sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MISC_MOUNT_MIN_REQ_LEVEL))
if (prototype->GetBaseRequiredLevel() < static_cast<int32>(value))
@@ -427,7 +427,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_PROJECTILE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_RECIPE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_QUIVER, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GRAY, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
@@ -443,7 +443,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_REAGENT_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_GENERIC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT));
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_ITEM_ENHANCEMENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_WHITE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
@@ -459,7 +459,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_GREEN, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
@@ -475,7 +475,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_BLUE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
@@ -491,7 +491,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_AMOUNT));
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_QUIVER, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_PURPLE, ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUEST_AMOUNT));
@@ -507,7 +507,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_PROJECTILE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_AMOUNT));
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_RECIPE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_QUIVER, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_ORANGE, ITEM_CLASS_QUEST, 0);
@@ -523,7 +523,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_REAGENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_PROJECTILE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_TRADE_GOODS, 0);
- config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_GENERIC, 0);
+ config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_ITEM_ENHANCEMENT, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_RECIPE, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_QUIVER, 0);
config.SetItemsQuantityPerClass(AUCTION_QUALITY_YELLOW, ITEM_CLASS_QUEST, 0);
@@ -541,7 +541,7 @@ void AuctionBotSeller::LoadItemsQuantity(SellerConfiguration& config)
config.SetRandomStackRatioPerClass(ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_REAGENT));
config.SetRandomStackRatioPerClass(ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_PROJECTILE));
config.SetRandomStackRatioPerClass(ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_TRADEGOOD));
- config.SetRandomStackRatioPerClass(ITEM_CLASS_GENERIC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC));
+ config.SetRandomStackRatioPerClass(ITEM_CLASS_ITEM_ENHANCEMENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_GENERIC));
config.SetRandomStackRatioPerClass(ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_RECIPE));
config.SetRandomStackRatioPerClass(ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUIVER));
config.SetRandomStackRatioPerClass(ITEM_CLASS_QUEST, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RANDOMSTACKRATIO_QUEST));
@@ -597,7 +597,7 @@ void AuctionBotSeller::LoadSellerValues(SellerConfiguration& config)
config.SetPriceRatioPerClass(ITEM_CLASS_REAGENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_REAGENT_PRICE_RATIO));
config.SetPriceRatioPerClass(ITEM_CLASS_PROJECTILE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_PROJECTILE_PRICE_RATIO));
config.SetPriceRatioPerClass(ITEM_CLASS_TRADE_GOODS, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_TRADEGOOD_PRICE_RATIO));
- config.SetPriceRatioPerClass(ITEM_CLASS_GENERIC, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_PRICE_RATIO));
+ config.SetPriceRatioPerClass(ITEM_CLASS_ITEM_ENHANCEMENT, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_GENERIC_PRICE_RATIO));
config.SetPriceRatioPerClass(ITEM_CLASS_RECIPE, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_RECIPE_PRICE_RATIO));
config.SetPriceRatioPerClass(ITEM_CLASS_MONEY, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_MONEY_PRICE_RATIO));
config.SetPriceRatioPerClass(ITEM_CLASS_QUIVER, sAuctionBotConfig->GetConfig(CONFIG_AHBOT_CLASS_QUIVER_PRICE_RATIO));
diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h
index 21dadfc3793..1ec1b0fe856 100644
--- a/src/server/game/DataStores/DB2Metadata.h
+++ b/src/server/game/DataStores/DB2Metadata.h
@@ -310,9 +310,9 @@ struct ArtifactAppearanceSetMeta
{
static DB2Meta const* Instance()
{
- static char const* types = "sshhbbbi";
- static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 };
- static DB2Meta instance(7, 8, 0x144B4DF1, types, arraySizes);
+ static char const* types = "sshhbbbbi";
+ static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 };
+ static DB2Meta instance(8, 9, 0xB11A5708, types, arraySizes);
return &instance;
}
};
@@ -2895,9 +2895,9 @@ struct ItemRandomSuffixMeta
{
static DB2Meta const* Instance()
{
- static char const* types = "sshh";
- static uint8 const arraySizes[4] = { 1, 1, 5, 5 };
- static DB2Meta instance(-1, 4, 0x451B7E5A, types, arraySizes);
+ static char const* types = "shh";
+ static uint8 const arraySizes[3] = { 1, 5, 5 };
+ static DB2Meta instance(-1, 3, 0x20CC67CD, types, arraySizes);
return &instance;
}
};
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index e5359fb4907..993d8b1c315 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -1315,7 +1315,6 @@ struct ItemRandomSuffixEntry
{
uint32 ID;
LocalizedString* Name;
- LocalizedString* InternalName;
uint16 Enchantment[MAX_ITEM_RANDOM_PROPERTIES];
uint16 AllocationPct[MAX_ITEM_RANDOM_PROPERTIES];
};
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 50eeeaa7ad8..dd29591e22f 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -628,8 +628,20 @@ enum ItemSpecStat
ITEM_SPEC_STAT_HASTE = 25,
ITEM_SPEC_STAT_BONUS_ARMOR = 26,
ITEM_SPEC_STAT_CLOAK = 27,
-
- ITEM_SPEC_STAT_NONE = 28
+ ITEM_SPEC_STAT_WARGLAIVES = 28,
+ ITEM_SPEC_STAT_RELIC_IRON = 29,
+ ITEM_SPEC_STAT_RELIC_BLOOD = 30,
+ ITEM_SPEC_STAT_RELIC_SHADOW = 31,
+ ITEM_SPEC_STAT_RELIC_FEL = 32,
+ ITEM_SPEC_STAT_RELIC_ARCANE = 33,
+ ITEM_SPEC_STAT_RELIC_FROST = 34,
+ ITEM_SPEC_STAT_RELIC_FIRE = 35,
+ ITEM_SPEC_STAT_RELIC_WATER = 36,
+ ITEM_SPEC_STAT_RELIC_LIFE = 37,
+ ITEM_SPEC_STAT_RELIC_WIND = 38,
+ ITEM_SPEC_STAT_RELIC_HOLY = 39,
+
+ ITEM_SPEC_STAT_NONE = 40
};
enum MountCapabilityFlags
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 40e00531497..cd26364a365 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -166,6 +166,7 @@ struct GameObjectTemplate
uint32 conditionID1; // 15 conditionID1, References: PlayerCondition, NoValue = 0
uint32 playerCast; // 16 playerCast, enum { false, true, }; Default: false
uint32 SummonerTriggered; // 17 Summoner Triggered, enum { false, true, }; Default: false
+ uint32 requireLOS; // 18 require LOS, enum { false, true, }; Default: false
} trap;
// 7 GAMEOBJECT_TYPE_CHAIR
struct
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index ab6e26627be..e5904ebc476 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1414,6 +1414,7 @@ static ItemTransmogrificationWeaponCategory GetTransmogrificationWeaponCategory(
case ITEM_SUBCLASS_WEAPON_AXE:
case ITEM_SUBCLASS_WEAPON_MACE:
case ITEM_SUBCLASS_WEAPON_SWORD:
+ case ITEM_SUBCLASS_WEAPON_WARGLAIVES:
return ItemTransmogrificationWeaponCategory::AXE_MACE_SWORD_1H;
case ITEM_SUBCLASS_WEAPON_DAGGER:
return ItemTransmogrificationWeaponCategory::DAGGER;
@@ -1477,10 +1478,8 @@ bool Item::CanTransmogrifyItemWithItem(Item const* transmogrified, WorldPackets:
if (source->GetClass() != target->GetClass())
return false;
- if (source->GetInventoryType() == INVTYPE_TABARD ||
- source->GetInventoryType() == INVTYPE_BAG ||
+ if (source->GetInventoryType() == INVTYPE_BAG ||
source->GetInventoryType() == INVTYPE_RELIC ||
- source->GetInventoryType() == INVTYPE_BODY ||
source->GetInventoryType() == INVTYPE_FINGER ||
source->GetInventoryType() == INVTYPE_TRINKET ||
source->GetInventoryType() == INVTYPE_AMMO ||
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index 44c4e546188..30d8c56ecb3 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -142,7 +142,10 @@ enum InventoryResult
EQUIP_ERR_ITEM_IS_BATTLE_PAY_LOCKED = 94, // Your purchased item is still waiting to be unlocked
EQUIP_ERR_REAGENT_BANK_FULL = 95, // Your reagent bank is full
EQUIP_ERR_REAGENT_BANK_LOCKED = 96,
- EQUIP_ERR_WRONG_BAG_TYPE_3 = 97
+ EQUIP_ERR_WRONG_BAG_TYPE_3 = 97,
+ EQUIP_ERR_CANT_USE_ITEM = 98, // You can't use that item.
+ EQUIP_ERR_CANT_BE_OBLITERATED = 99, // You can't obliterate that item
+ EQUIP_ERR_GUILD_BANK_CONJURED_ITEM = 100,// You cannot store conjured items in the guild bank
};
enum BuyResult
diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp
index e33bea37e54..3f2563345f9 100644
--- a/src/server/game/Entities/Item/ItemTemplate.cpp
+++ b/src/server/game/Entities/Item/ItemTemplate.cpp
@@ -79,10 +79,10 @@ uint32 ItemTemplate::GetSkill() const
{
const static uint32 item_weapon_skills[MAX_ITEM_SUBCLASS_WEAPON] =
{
- SKILL_AXES, SKILL_2H_AXES, SKILL_BOWS, SKILL_GUNS, SKILL_MACES,
- SKILL_2H_MACES, SKILL_POLEARMS, SKILL_SWORDS, SKILL_2H_SWORDS, 0,
- SKILL_STAVES, 0, 0, SKILL_FIST_WEAPONS, 0,
- SKILL_DAGGERS, SKILL_THROWN, SKILL_ASSASSINATION, SKILL_CROSSBOWS, SKILL_WANDS,
+ SKILL_AXES, SKILL_TWO_HANDED_AXES, SKILL_BOWS, SKILL_GUNS, SKILL_MACES,
+ SKILL_TWO_HANDED_MACES, SKILL_POLEARMS, SKILL_SWORDS, SKILL_TWO_HANDED_SWORDS, SKILL_WARGLAIVES,
+ SKILL_STAVES, 0, 0, SKILL_FIST_WEAPONS, 0,
+ SKILL_DAGGERS, 0, 0, SKILL_CROSSBOWS, SKILL_WANDS,
SKILL_FISHING
};
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index fdc65af1cee..2627f9cf328 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -386,7 +386,7 @@ enum ItemClass : uint8
ITEM_CLASS_REAGENT = 5,
ITEM_CLASS_PROJECTILE = 6,
ITEM_CLASS_TRADE_GOODS = 7,
- ITEM_CLASS_GENERIC = 8, // OBSOLETE
+ ITEM_CLASS_ITEM_ENHANCEMENT = 8,
ITEM_CLASS_RECIPE = 9,
ITEM_CLASS_MONEY = 10, // OBSOLETE
ITEM_CLASS_QUIVER = 11,
@@ -394,10 +394,12 @@ enum ItemClass : uint8
ITEM_CLASS_KEY = 13,
ITEM_CLASS_PERMANENT = 14, // OBSOLETE
ITEM_CLASS_MISCELLANEOUS = 15,
- ITEM_CLASS_GLYPH = 16
+ ITEM_CLASS_GLYPH = 16,
+ ITEM_CLASS_BATTLE_PETS = 17,
+ ITEM_CLASS_WOW_TOKEN = 18
};
-#define MAX_ITEM_CLASS 17
+#define MAX_ITEM_CLASS 19
enum ItemSubclassConsumable
{
@@ -409,10 +411,11 @@ enum ItemSubclassConsumable
ITEM_SUBCLASS_FOOD_DRINK = 5,
ITEM_SUBCLASS_ITEM_ENHANCEMENT = 6,
ITEM_SUBCLASS_BANDAGE = 7,
- ITEM_SUBCLASS_CONSUMABLE_OTHER = 8
+ ITEM_SUBCLASS_CONSUMABLE_OTHER = 8,
+ ITEM_SUBCLASS_VANTUS_RUNE = 9
};
-#define MAX_ITEM_SUBCLASS_CONSUMABLE 9
+#define MAX_ITEM_SUBCLASS_CONSUMABLE 10
enum ItemSubclassContainer
{
@@ -442,7 +445,7 @@ enum ItemSubclassWeapon
ITEM_SUBCLASS_WEAPON_POLEARM = 6,
ITEM_SUBCLASS_WEAPON_SWORD = 7, // One-Handed Swords
ITEM_SUBCLASS_WEAPON_SWORD2 = 8, // Two-Handed Swords
- ITEM_SUBCLASS_WEAPON_Obsolete = 9,
+ ITEM_SUBCLASS_WEAPON_WARGLAIVES = 9,
ITEM_SUBCLASS_WEAPON_STAFF = 10,
ITEM_SUBCLASS_WEAPON_EXOTIC = 11, // One-Handed Exotics
ITEM_SUBCLASS_WEAPON_EXOTIC2 = 12, // Two-Handed Exotics
@@ -464,20 +467,21 @@ enum ItemSubclassWeapon
enum ItemSubclassGem
{
- ITEM_SUBCLASS_GEM_RED = 0,
- ITEM_SUBCLASS_GEM_BLUE = 1,
- ITEM_SUBCLASS_GEM_YELLOW = 2,
- ITEM_SUBCLASS_GEM_PURPLE = 3,
- ITEM_SUBCLASS_GEM_GREEN = 4,
- ITEM_SUBCLASS_GEM_ORANGE = 5,
- ITEM_SUBCLASS_GEM_META = 6,
- ITEM_SUBCLASS_GEM_SIMPLE = 7,
- ITEM_SUBCLASS_GEM_PRISMATIC = 8,
- ITEM_SUBCLASS_GEM_HYDRAULIC = 9,
- ITEM_SUBCLASS_GEM_COGWHEEL = 10
+ ITEM_SUBCLASS_GEM_INTELLECT = 0,
+ ITEM_SUBCLASS_GEM_AGILITY = 1,
+ ITEM_SUBCLASS_GEM_STRENGTH = 2,
+ ITEM_SUBCLASS_GEM_STAMINA = 3,
+ ITEM_SUBCLASS_GEM_SPIRIT = 4,
+ ITEM_SUBCLASS_GEM_CRITICAL_STRIKE = 5,
+ ITEM_SUBCLASS_GEM_MASTERY = 6,
+ ITEM_SUBCLASS_GEM_HASTE = 7,
+ ITEM_SUBCLASS_GEM_VERSATILITY = 8,
+ ITEM_SUBCLASS_GEM_OTHER = 9,
+ ITEM_SUBCLASS_GEM_MULTIPLE_STATS = 10,
+ ITEM_SUBCLASS_GEM_ARTIFACT_RELIC = 11
};
-#define MAX_ITEM_SUBCLASS_GEM 11
+#define MAX_ITEM_SUBCLASS_GEM 12
enum ItemSubclassArmor
{
@@ -499,10 +503,11 @@ enum ItemSubclassArmor
enum ItemSubclassReagent
{
- ITEM_SUBCLASS_REAGENT = 0
+ ITEM_SUBCLASS_REAGENT = 0,
+ ITEM_SUBCLASS_KEYSTONE = 1
};
-#define MAX_ITEM_SUBCLASS_REAGENT 1
+#define MAX_ITEM_SUBCLASS_REAGENT 2
enum ItemSubclassProjectile
{
@@ -532,16 +537,32 @@ enum ItemSubclassTradeGoods
ITEM_SUBCLASS_ENCHANTING = 12,
ITEM_SUBCLASS_MATERIAL = 13,
ITEM_SUBCLASS_ENCHANTMENT = 14,
+ ITEM_SUBCLASS_WEAPON_ENCHANTMENT = 15,
+ ITEM_SUBCLASS_INSCRIPTION = 16,
+ ITEM_SUBCLASS_EXPLOSIVES_DEVICES = 17
};
-#define MAX_ITEM_SUBCLASS_TRADE_GOODS 15
+#define MAX_ITEM_SUBCLASS_TRADE_GOODS 18
-enum ItemSubclassGeneric
+enum ItemSubclassItemEnhancement
{
- ITEM_SUBCLASS_GENERIC = 0 // OBSOLETE
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_HEAD = 0,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_NECK = 1,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_SHOULDER = 2,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_CLOAK = 3,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_CHEST = 4,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_WRIST = 5,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_HANDS = 6,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_WAIST = 7,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_LEGS = 8,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_FEET = 9,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_FINGER = 10,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_WEAPON = 11,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_TWO_HANDED_WEAPON = 12,
+ ITEM_SUBCLASS_ITEM_ENHANCEMENT_SHIELD_OFF_HAND = 13
};
-#define MAX_ITEM_SUBCLASS_GENERIC 1
+#define MAX_ITEM_SUBCLASS_ITEM_ENHANCEMENT 14
enum ItemSubclassRecipe
{
@@ -564,10 +585,9 @@ enum ItemSubclassRecipe
enum ItemSubclassMoney
{
ITEM_SUBCLASS_MONEY = 0, // OBSOLETE
- ITEM_SUBCLASS_MONEY_UNK_7 = 7, // OBSOLETE, 1 item (41749)
};
-#define MAX_ITEM_SUBCLASS_MONEY 8
+#define MAX_ITEM_SUBCLASS_MONEY 1
enum ItemSubclassQuiver
{
@@ -605,16 +625,15 @@ enum ItemSubclassPermanent
enum ItemSubclassJunk
{
- ITEM_SUBCLASS_JUNK = 0,
- ITEM_SUBCLASS_JUNK_REAGENT = 1,
- ITEM_SUBCLASS_JUNK_PET = 2,
- ITEM_SUBCLASS_JUNK_HOLIDAY = 3,
- ITEM_SUBCLASS_JUNK_OTHER = 4,
- ITEM_SUBCLASS_JUNK_MOUNT = 5,
- ITEM_SUBCLASS_JUNK_UNK12 = 12, // 1 item (37677)
+ ITEM_SUBCLASS_MISCELLANEOUS_JUNK = 0,
+ ITEM_SUBCLASS_MISCELLANEOUS_REAGENT = 1,
+ ITEM_SUBCLASS_MISCELLANEOUS_COMPANION_PET = 2,
+ ITEM_SUBCLASS_MISCELLANEOUS_HOLIDAY = 3,
+ ITEM_SUBCLASS_MISCELLANEOUS_OTHER = 4,
+ ITEM_SUBCLASS_MISCELLANEOUS_MOUNT = 5,
};
-#define MAX_ITEM_SUBCLASS_JUNK 13
+#define MAX_ITEM_SUBCLASS_MISCELLANEOUS 6
enum ItemSubclassGlyph
{
@@ -627,10 +646,26 @@ enum ItemSubclassGlyph
ITEM_SUBCLASS_GLYPH_SHAMAN = 7,
ITEM_SUBCLASS_GLYPH_MAGE = 8,
ITEM_SUBCLASS_GLYPH_WARLOCK = 9,
- ITEM_SUBCLASS_GLYPH_DRUID = 11
+ ITEM_SUBCLASS_GLYPH_MONK = 10,
+ ITEM_SUBCLASS_GLYPH_DRUID = 11,
+ ITEM_SUBCLASS_GLYPH_DEMON_HUNTER = 12
};
-#define MAX_ITEM_SUBCLASS_GLYPH 12
+#define MAX_ITEM_SUBCLASS_GLYPH 13
+
+enum ItemSubclassBattlePet
+{
+ ITEM_SUBCLASS_BATTLE_PET = 0
+};
+
+#define MAX_ITEM_SUBCLASS_BATTLE_PET 1
+
+enum ItemSubclassWowToken
+{
+ ITEM_SUBCLASS_WOW_TOKEN = 0
+};
+
+#define MAX_ITEM_SUBCLASS_WOW_TOKEN 1
const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] =
{
@@ -642,15 +677,17 @@ const uint32 MaxItemSubclassValues[MAX_ITEM_CLASS] =
MAX_ITEM_SUBCLASS_REAGENT,
MAX_ITEM_SUBCLASS_PROJECTILE,
MAX_ITEM_SUBCLASS_TRADE_GOODS,
- MAX_ITEM_SUBCLASS_GENERIC,
+ MAX_ITEM_SUBCLASS_ITEM_ENHANCEMENT,
MAX_ITEM_SUBCLASS_RECIPE,
MAX_ITEM_SUBCLASS_MONEY,
MAX_ITEM_SUBCLASS_QUIVER,
MAX_ITEM_SUBCLASS_QUEST,
MAX_ITEM_SUBCLASS_KEY,
MAX_ITEM_SUBCLASS_PERMANENT,
- MAX_ITEM_SUBCLASS_JUNK,
- MAX_ITEM_SUBCLASS_GLYPH
+ MAX_ITEM_SUBCLASS_MISCELLANEOUS,
+ MAX_ITEM_SUBCLASS_GLYPH,
+ MAX_ITEM_SUBCLASS_BATTLE_PET,
+ MAX_ITEM_SUBCLASS_WOW_TOKEN
};
#define MAX_ITEM_SUBCLASS_TOTAL 21
diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp
index 9cc08c4ee7e..13476043204 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp
@@ -360,9 +360,9 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] =
UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+3
UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+4
UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+5
- UF_FLAG_PUBLIC, // UNIT_FIELD_FLAGS
- UF_FLAG_PUBLIC, // UNIT_FIELD_FLAGS_2
- UF_FLAG_PUBLIC, // UNIT_FIELD_FLAGS_3
+ UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS
+ UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_2
+ UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_3
UF_FLAG_PUBLIC, // UNIT_FIELD_AURASTATE
UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME
UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME+1
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 200478eeefe..1f87c98842d 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -19,7 +19,7 @@
#ifndef _UPDATEFIELDS_H
#define _UPDATEFIELDS_H
-// Auto generated for version 7, 0, 3, 21796
+// Auto generated for version 7, 0, 3, 21963
enum ObjectFields
{
@@ -113,9 +113,9 @@ enum UnitFields
UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x050, // Size: 1, Flags: PUBLIC
UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x051, // Size: 1, Flags: PUBLIC
UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x052, // Size: 6, Flags: PUBLIC
- UNIT_FIELD_FLAGS = OBJECT_END + 0x058, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x059, // Size: 1, Flags: PUBLIC
- UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x05A, // Size: 1, Flags: PUBLIC
+ UNIT_FIELD_FLAGS = OBJECT_END + 0x058, // Size: 1, Flags: PUBLIC, URGENT
+ UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x059, // Size: 1, Flags: PUBLIC, URGENT
+ UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x05A, // Size: 1, Flags: PUBLIC, URGENT
UNIT_FIELD_AURASTATE = OBJECT_END + 0x05B, // Size: 1, Flags: PUBLIC
UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x05C, // Size: 2, Flags: PUBLIC
UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x05E, // Size: 1, Flags: PRIVATE
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index c4bd0c0fc3e..d98c18bf6db 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3137,7 +3137,7 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
continue;
// Runeforging special case
- if ((_spell_idx->second->AquireMethod == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(_spell_idx->second->SkillLine)) || ((_spell_idx->second->SkillLine == SKILL_RUNEFORGING_2) && _spell_idx->second->TrivialSkillLineRankHigh == 0))
+ if ((_spell_idx->second->AquireMethod == SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN && !HasSkill(_spell_idx->second->SkillLine)) || ((_spell_idx->second->SkillLine == SKILL_RUNEFORGING) && _spell_idx->second->TrivialSkillLineRankHigh == 0))
if (SkillRaceClassInfoEntry const* rcInfo = sDB2Manager.GetSkillRaceClassInfo(_spell_idx->second->SkillLine, getRace(), getClass()))
LearnDefaultSkill(rcInfo);
}
@@ -5219,7 +5219,6 @@ bool Player::UpdateGatherSkill(uint32 SkillId, uint32 SkillValue, uint32 RedLeve
switch (SkillId)
{
case SKILL_HERBALISM:
- case SKILL_LOCKPICKING:
case SKILL_JEWELCRAFTING:
case SKILL_INSCRIPTION:
return UpdateSkillPro(SkillId, SkillGainChance(SkillValue, RedLevel+100, RedLevel+50, RedLevel+25)*Multiplicator, gathering_skill_gain);
@@ -10991,17 +10990,8 @@ InventoryResult Player::CanRollForItemInLFG(ItemTemplate const* proto, WorldObje
if (!proto)
return EQUIP_ERR_ITEM_NOT_FOUND;
- // Used by group, function NeedBeforeGreed, to know if a prototype can be used by a player
-
- const static uint32 item_weapon_skills[MAX_ITEM_SUBCLASS_WEAPON] =
- {
- SKILL_AXES, SKILL_2H_AXES, SKILL_BOWS, SKILL_GUNS, SKILL_MACES,
- SKILL_2H_MACES, SKILL_POLEARMS, SKILL_SWORDS, SKILL_2H_SWORDS, 0,
- SKILL_STAVES, 0, 0, SKILL_FIST_WEAPONS, 0,
- SKILL_DAGGERS, SKILL_THROWN, SKILL_ASSASSINATION, SKILL_CROSSBOWS, SKILL_WANDS,
- SKILL_FISHING
- }; //Copy from function Item::GetSkill()
+ // Used by group, function NeedBeforeGreed, to know if a prototype can be used by a player
if ((proto->GetAllowableClass() & getClassMask()) == 0 || (proto->GetAllowableRace() & getRaceMask()) == 0)
return EQUIP_ERR_CANT_EQUIP_EVER;
@@ -11018,7 +11008,7 @@ InventoryResult Player::CanRollForItemInLFG(ItemTemplate const* proto, WorldObje
uint8 _class = getClass();
- if (proto->GetClass() == ITEM_CLASS_WEAPON && GetSkillValue(item_weapon_skills[proto->GetSubClass()]) == 0)
+ if (proto->GetClass() == ITEM_CLASS_WEAPON && GetSkillValue(proto->GetSkill()) == 0)
return EQUIP_ERR_PROFICIENCY_NEEDED;
if (proto->GetClass() == ITEM_CLASS_ARMOR && proto->GetSubClass() > ITEM_SUBCLASS_ARMOR_MISCELLANEOUS && proto->GetSubClass() < ITEM_SUBCLASS_ARMOR_BUCKLER && proto->GetInventoryType() != INVTYPE_CLOAK)
@@ -22503,8 +22493,6 @@ void Player::LearnDefaultSkill(SkillRaceClassInfoEntry const* rcInfo)
skillValue = std::min(std::max<uint16>({ 1, uint16((getLevel() - 1) * 5) }), maxValue);
else if (skillId == SKILL_FIST_WEAPONS)
skillValue = std::max<uint16>(1, GetSkillValue(SKILL_UNARMED));
- else if (skillId == SKILL_LOCKPICKING)
- skillValue = std::max<uint16>(1, GetSkillValue(SKILL_LOCKPICKING));
SetSkill(skillId, 0, skillValue, maxValue);
break;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 24c2c52387a..1bfbd85e96b 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -177,12 +177,12 @@ LanguageDesc lang_description[LANGUAGES_COUNT] =
{ LANG_KALIMAG, 817, SKILL_LANG_OLD_TONGUE },
{ LANG_GNOMISH, 7340, SKILL_LANG_GNOMISH },
{ LANG_TROLL, 7341, SKILL_LANG_TROLL },
- { LANG_GUTTERSPEAK, 17737, SKILL_LANG_GUTTERSPEAK },
+ { LANG_GUTTERSPEAK, 17737, SKILL_LANG_FORSAKEN },
{ LANG_DRAENEI, 29932, SKILL_LANG_DRAENEI },
{ LANG_ZOMBIE, 0, 0 },
{ LANG_GNOMISH_BINARY, 0, 0 },
{ LANG_GOBLIN_BINARY, 0, 0 },
- { LANG_WORGEN, 69270, SKILL_LANG_WORGEN },
+ { LANG_WORGEN, 69270, SKILL_LANG_GILNEAN },
{ LANG_GOBLIN, 69269, SKILL_LANG_GOBLIN },
{ LANG_PANDAREN_NEUTRAL, 108127, SKILL_LANG_PANDAREN_NEUTRAL },
{ LANG_PANDAREN_ALLIANCE, 108130, SKILL_LANG_PANDAREN_ALLIANCE },
@@ -2323,26 +2323,26 @@ uint32 FillMaxDurability(uint32 itemClass, uint32 itemSubClass, uint32 inventory
static float const qualityMultipliers[MAX_ITEM_QUALITY] =
{
- 1.0f, 1.0f, 1.0f, 1.17f, 1.37f, 1.68f, 0.0f, 0.0f
+ 0.92f, 0.92f, 0.92f, 1.11f, 1.32f, 1.61f, 0.0f, 0.0f
};
static float const armorMultipliers[MAX_INVTYPE] =
{
0.00f, // INVTYPE_NON_EQUIP
- 0.59f, // INVTYPE_HEAD
+ 0.60f, // INVTYPE_HEAD
0.00f, // INVTYPE_NECK
- 0.59f, // INVTYPE_SHOULDERS
+ 0.60f, // INVTYPE_SHOULDERS
0.00f, // INVTYPE_BODY
1.00f, // INVTYPE_CHEST
- 0.35f, // INVTYPE_WAIST
- 0.75f, // INVTYPE_LEGS
- 0.49f, // INVTYPE_FEET
- 0.35f, // INVTYPE_WRISTS
- 0.35f, // INVTYPE_HANDS
+ 0.33f, // INVTYPE_WAIST
+ 0.72f, // INVTYPE_LEGS
+ 0.48f, // INVTYPE_FEET
+ 0.33f, // INVTYPE_WRISTS
+ 0.33f, // INVTYPE_HANDS
0.00f, // INVTYPE_FINGER
0.00f, // INVTYPE_TRINKET
0.00f, // INVTYPE_WEAPON
- 1.00f, // INVTYPE_SHIELD
+ 0.72f, // INVTYPE_SHIELD
0.00f, // INVTYPE_RANGED
0.00f, // INVTYPE_CLOAK
0.00f, // INVTYPE_2HWEAPON
@@ -2361,27 +2361,27 @@ uint32 FillMaxDurability(uint32 itemClass, uint32 itemSubClass, uint32 inventory
static float const weaponMultipliers[MAX_ITEM_SUBCLASS_WEAPON] =
{
- 0.89f, // ITEM_SUBCLASS_WEAPON_AXE
- 1.03f, // ITEM_SUBCLASS_WEAPON_AXE2
- 0.77f, // ITEM_SUBCLASS_WEAPON_BOW
- 0.77f, // ITEM_SUBCLASS_WEAPON_GUN
- 0.89f, // ITEM_SUBCLASS_WEAPON_MACE
- 1.03f, // ITEM_SUBCLASS_WEAPON_MACE2
- 1.03f, // ITEM_SUBCLASS_WEAPON_POLEARM
- 0.89f, // ITEM_SUBCLASS_WEAPON_SWORD
- 1.03f, // ITEM_SUBCLASS_WEAPON_SWORD2
- 0.00f, // ITEM_SUBCLASS_WEAPON_Obsolete
- 1.03f, // ITEM_SUBCLASS_WEAPON_STAFF
+ 0.91f, // ITEM_SUBCLASS_WEAPON_AXE
+ 1.00f, // ITEM_SUBCLASS_WEAPON_AXE2
+ 1.00f, // ITEM_SUBCLASS_WEAPON_BOW
+ 1.00f, // ITEM_SUBCLASS_WEAPON_GUN
+ 0.91f, // ITEM_SUBCLASS_WEAPON_MACE
+ 1.00f, // ITEM_SUBCLASS_WEAPON_MACE2
+ 1.00f, // ITEM_SUBCLASS_WEAPON_POLEARM
+ 0.91f, // ITEM_SUBCLASS_WEAPON_SWORD
+ 1.00f, // ITEM_SUBCLASS_WEAPON_SWORD2
+ 1.00f, // ITEM_SUBCLASS_WEAPON_WARGLAIVES
+ 1.00f, // ITEM_SUBCLASS_WEAPON_STAFF
0.00f, // ITEM_SUBCLASS_WEAPON_EXOTIC
0.00f, // ITEM_SUBCLASS_WEAPON_EXOTIC2
- 0.64f, // ITEM_SUBCLASS_WEAPON_FIST_WEAPON
+ 0.66f, // ITEM_SUBCLASS_WEAPON_FIST_WEAPON
0.00f, // ITEM_SUBCLASS_WEAPON_MISCELLANEOUS
- 0.64f, // ITEM_SUBCLASS_WEAPON_DAGGER
- 0.64f, // ITEM_SUBCLASS_WEAPON_THROWN
+ 0.66f, // ITEM_SUBCLASS_WEAPON_DAGGER
+ 0.00f, // ITEM_SUBCLASS_WEAPON_THROWN
0.00f, // ITEM_SUBCLASS_WEAPON_SPEAR
- 0.77f, // ITEM_SUBCLASS_WEAPON_CROSSBOW
- 0.64f, // ITEM_SUBCLASS_WEAPON_WAND
- 0.64f, // ITEM_SUBCLASS_WEAPON_FISHING_POLE
+ 1.00f, // ITEM_SUBCLASS_WEAPON_CROSSBOW
+ 0.66f, // ITEM_SUBCLASS_WEAPON_WAND
+ 0.66f, // ITEM_SUBCLASS_WEAPON_FISHING_POLE
};
float levelPenalty = 1.0f;
@@ -2393,10 +2393,10 @@ uint32 FillMaxDurability(uint32 itemClass, uint32 itemSubClass, uint32 inventory
if (inventoryType > INVTYPE_ROBE)
return 0;
- return 5 * uint32(23.0f * qualityMultipliers[quality] * armorMultipliers[inventoryType] * levelPenalty + 0.5f);
+ return 5 * uint32(round(25.0f * qualityMultipliers[quality] * armorMultipliers[inventoryType] * levelPenalty));
}
- return 5 * uint32(17.0f * qualityMultipliers[quality] * weaponMultipliers[itemSubClass] * levelPenalty + 0.5f);
+ return 5 * uint32(round(18.0f * qualityMultipliers[quality] * weaponMultipliers[itemSubClass] * levelPenalty));
};
void FillDisenchantFields(uint32* disenchantID, uint32* requiredDisenchantSkill, ItemTemplate const& itemTemplate)
@@ -2482,6 +2482,9 @@ struct ItemSpecStats
case ITEM_SUBCLASS_WEAPON_SWORD2:
AddStat(ITEM_SPEC_STAT_TWO_HANDED_SWORD);
break;
+ case ITEM_SUBCLASS_WEAPON_WARGLAIVES:
+ AddStat(ITEM_SPEC_STAT_WARGLAIVES);
+ break;
case ITEM_SUBCLASS_WEAPON_STAFF:
AddStat(ITEM_SPEC_STAT_STAFF);
break;
@@ -2536,6 +2539,34 @@ struct ItemSpecStats
break;
}
}
+ else if (item->Class == ITEM_CLASS_GEM)
+ {
+ if (GemPropertiesEntry const* gem = sGemPropertiesStore.LookupEntry(sparse->GemProperties))
+ {
+ if (gem->Type & SOCKET_COLOR_RELIC_IRON)
+ AddStat(ITEM_SPEC_STAT_RELIC_IRON);
+ if (gem->Type & SOCKET_COLOR_RELIC_BLOOD)
+ AddStat(ITEM_SPEC_STAT_RELIC_BLOOD);
+ if (gem->Type & SOCKET_COLOR_RELIC_SHADOW)
+ AddStat(ITEM_SPEC_STAT_RELIC_SHADOW);
+ if (gem->Type & SOCKET_COLOR_RELIC_FEL)
+ AddStat(ITEM_SPEC_STAT_RELIC_FEL);
+ if (gem->Type & SOCKET_COLOR_RELIC_ARCANE)
+ AddStat(ITEM_SPEC_STAT_RELIC_ARCANE);
+ if (gem->Type & SOCKET_COLOR_RELIC_FROST)
+ AddStat(ITEM_SPEC_STAT_RELIC_FROST);
+ if (gem->Type & SOCKET_COLOR_RELIC_FIRE)
+ AddStat(ITEM_SPEC_STAT_RELIC_FIRE);
+ if (gem->Type & SOCKET_COLOR_RELIC_WATER)
+ AddStat(ITEM_SPEC_STAT_RELIC_WATER);
+ if (gem->Type & SOCKET_COLOR_RELIC_LIFE)
+ AddStat(ITEM_SPEC_STAT_RELIC_LIFE);
+ if (gem->Type & SOCKET_COLOR_RELIC_WIND)
+ AddStat(ITEM_SPEC_STAT_RELIC_WIND);
+ if (gem->Type & SOCKET_COLOR_RELIC_HOLY)
+ AddStat(ITEM_SPEC_STAT_RELIC_HOLY);
+ }
+ }
else
ItemType = 0;
@@ -2569,9 +2600,6 @@ struct ItemSpecStats
case ITEM_MOD_INTELLECT:
AddStat(ITEM_SPEC_STAT_INTELLECT);
break;
- case ITEM_MOD_SPIRIT:
- AddStat(ITEM_SPEC_STAT_SPIRIT);
- break;
case ITEM_MOD_DODGE_RATING:
AddStat(ITEM_SPEC_STAT_DODGE);
break;
@@ -2584,9 +2612,6 @@ struct ItemSpecStats
case ITEM_MOD_CRIT_RATING:
AddStat(ITEM_SPEC_STAT_CRIT);
break;
- case ITEM_MOD_HASTE_MELEE_RATING:
- case ITEM_MOD_HASTE_RANGED_RATING:
- case ITEM_MOD_HASTE_SPELL_RATING:
case ITEM_MOD_HASTE_RATING:
AddStat(ITEM_SPEC_STAT_HASTE);
break;
@@ -7881,7 +7906,7 @@ SkillRangeType GetSkillRangeType(SkillRaceClassInfoEntry const* rcEntry)
if (sObjectMgr->GetSkillTier(rcEntry->SkillTierID))
return SKILL_RANGE_RANK;
- if (rcEntry->SkillID == SKILL_RUNEFORGING || rcEntry->SkillID == SKILL_RUNEFORGING_2)
+ if (rcEntry->SkillID == SKILL_RUNEFORGING)
return SKILL_RANGE_MONO;
switch (skill->CategoryID)
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 9b6680b7358..54461828da4 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -4085,58 +4085,45 @@ enum SkillType
{
SKILL_NONE = 0,
- SKILL_FROST = 6,
- SKILL_FIRE = 8,
- SKILL_ARMS = 26,
- SKILL_COMBAT = 38,
- SKILL_SUBTLETY = 39,
SKILL_SWORDS = 43,
SKILL_AXES = 44,
SKILL_BOWS = 45,
SKILL_GUNS = 46,
- SKILL_BEAST_MASTERY = 50,
- SKILL_SURVIVAL = 51,
SKILL_MACES = 54,
- SKILL_2H_SWORDS = 55,
- SKILL_HOLY = 56,
- SKILL_SHADOW = 78,
+ SKILL_TWO_HANDED_SWORDS = 55,
SKILL_DEFENSE = 95,
SKILL_LANG_COMMON = 98,
- SKILL_RACIAL_DWARVEN = 101,
+ SKILL_RACIAL_DWARF = 101,
SKILL_LANG_ORCISH = 109,
SKILL_LANG_DWARVEN = 111,
SKILL_LANG_DARNASSIAN = 113,
SKILL_LANG_TAURAHE = 115,
SKILL_DUAL_WIELD = 118,
SKILL_RACIAL_TAUREN = 124,
- SKILL_ORC_RACIAL = 125,
+ SKILL_RACIAL_ORC = 125,
SKILL_RACIAL_NIGHT_ELF = 126,
SKILL_FIRST_AID = 129,
- SKILL_FERAL_COMBAT = 134,
SKILL_STAVES = 136,
SKILL_LANG_THALASSIAN = 137,
SKILL_LANG_DRACONIC = 138,
SKILL_LANG_DEMON_TONGUE = 139,
SKILL_LANG_TITAN = 140,
SKILL_LANG_OLD_TONGUE = 141,
- SKILL_SURVIVAL2 = 142,
- SKILL_RIDING_HORSE = 148,
- SKILL_RIDING_WOLF = 149,
- SKILL_RIDING_TIGER = 150,
- SKILL_RIDING_RAM = 152,
- SKILL_SWIMING = 155,
- SKILL_2H_MACES = 160,
+ SKILL_SURVIVAL = 142,
+ SKILL_HORSE_RIDING = 148,
+ SKILL_WOLF_RIDING = 149,
+ SKILL_TIGER_RIDING = 150,
+ SKILL_RAM_RIDING = 152,
+ SKILL_SWIMMING = 155,
+ SKILL_TWO_HANDED_MACES = 160,
SKILL_UNARMED = 162,
- SKILL_MARKSMANSHIP = 163,
SKILL_BLACKSMITHING = 164,
SKILL_LEATHERWORKING = 165,
SKILL_ALCHEMY = 171,
- SKILL_2H_AXES = 172,
+ SKILL_TWO_HANDED_AXES = 172,
SKILL_DAGGERS = 173,
- SKILL_THROWN = 176,
SKILL_HERBALISM = 182,
SKILL_GENERIC_DND = 183,
- SKILL_RETRIBUTION = 184,
SKILL_COOKING = 185,
SKILL_MINING = 186,
SKILL_PET_IMP = 188,
@@ -4152,61 +4139,45 @@ enum SkillType
SKILL_PET_CAT = 209,
SKILL_PET_BEAR = 210,
SKILL_PET_BOAR = 211,
- SKILL_PET_CROCILISK = 212,
+ SKILL_PET_CROCOLISK = 212,
SKILL_PET_CARRION_BIRD = 213,
SKILL_PET_CRAB = 214,
SKILL_PET_GORILLA = 215,
SKILL_PET_RAPTOR = 217,
SKILL_PET_TALLSTRIDER = 218,
- SKILL_RACIAL_UNDED = 220,
+ SKILL_RACIAL_UNDEAD = 220,
SKILL_CROSSBOWS = 226,
SKILL_WANDS = 228,
SKILL_POLEARMS = 229,
SKILL_PET_SCORPID = 236,
- SKILL_ARCANE = 237,
SKILL_PET_TURTLE = 251,
- SKILL_ASSASSINATION = 253,
- SKILL_FURY = 256,
- SKILL_PROTECTION = 257,
- SKILL_PROTECTION2 = 267,
- SKILL_PET_TALENTS = 270,
+ SKILL_PET_GENERIC_HUNTER = 270,
SKILL_PLATE_MAIL = 293,
SKILL_LANG_GNOMISH = 313,
SKILL_LANG_TROLL = 315,
SKILL_ENCHANTING = 333,
- SKILL_DEMONOLOGY = 354,
- SKILL_AFFLICTION = 355,
SKILL_FISHING = 356,
- SKILL_ENHANCEMENT = 373,
- SKILL_RESTORATION = 374,
- SKILL_ELEMENTAL_COMBAT = 375,
SKILL_SKINNING = 393,
SKILL_MAIL = 413,
SKILL_LEATHER = 414,
SKILL_CLOTH = 415,
SKILL_SHIELD = 433,
SKILL_FIST_WEAPONS = 473,
- SKILL_RIDING_RAPTOR = 533,
- SKILL_RIDING_MECHANOSTRIDER = 553,
- SKILL_RIDING_UNDEAD_HORSE = 554,
- SKILL_RESTORATION2 = 573,
- SKILL_BALANCE = 574,
- SKILL_DESTRUCTION = 593,
- SKILL_HOLY2 = 594,
- SKILL_DISCIPLINE = 613,
- SKILL_LOCKPICKING = 633,
+ SKILL_RAPTOR_RIDING = 533,
+ SKILL_MECHANOSTRIDER_PILOTING = 553,
+ SKILL_UNDEAD_HORSEMANSHIP = 554,
SKILL_PET_BAT = 653,
SKILL_PET_HYENA = 654,
SKILL_PET_BIRD_OF_PREY = 655,
SKILL_PET_WIND_SERPENT = 656,
- SKILL_LANG_GUTTERSPEAK = 673,
- SKILL_RIDING_KODO = 713,
+ SKILL_LANG_FORSAKEN = 673,
+ SKILL_KODO_RIDING = 713,
SKILL_RACIAL_TROLL = 733,
SKILL_RACIAL_GNOME = 753,
SKILL_RACIAL_HUMAN = 754,
SKILL_JEWELCRAFTING = 755,
- SKILL_RACIAL_BLOODELF = 756,
- SKILL_PET_EVENT_RC = 758, // SkillCategory = -1
+ SKILL_RACIAL_BLOOD_ELF = 756,
+ SKILL_PET_EVENT_REMOTE_CONTROL = 758,
SKILL_LANG_DRAENEI = 759,
SKILL_RACIAL_DRAENEI = 760,
SKILL_PET_FELGUARD = 761,
@@ -4218,12 +4189,8 @@ enum SkillType
SKILL_PET_RAVAGER = 767,
SKILL_PET_SERPENT = 768,
SKILL_INTERNAL = 769,
- SKILL_DK_BLOOD = 770,
- SKILL_DK_FROST = 771,
- SKILL_DK_UNHOLY = 772,
SKILL_INSCRIPTION = 773,
SKILL_PET_MOTH = 775,
- SKILL_RUNEFORGING = 776,
SKILL_MOUNTS = 777,
SKILL_COMPANIONS = 778,
SKILL_PET_EXOTIC_CHIMAERA = 780,
@@ -4232,31 +4199,26 @@ enum SkillType
SKILL_PET_EXOTIC_SILITHID = 783,
SKILL_PET_EXOTIC_WORM = 784,
SKILL_PET_WASP = 785,
- SKILL_PET_EXOTIC_RHINO = 786,
+ SKILL_PET_EXOTIC_CLEFTHOOF = 786,
SKILL_PET_EXOTIC_CORE_HOUND = 787,
SKILL_PET_EXOTIC_SPIRIT_BEAST = 788,
SKILL_RACIAL_WORGEN = 789,
SKILL_RACIAL_GOBLIN = 790,
- SKILL_LANG_WORGEN = 791,
+ SKILL_LANG_GILNEAN = 791,
SKILL_LANG_GOBLIN = 792,
SKILL_ARCHAEOLOGY = 794,
- SKILL_GENERAL_HUNTER = 795,
- SKILL_GENERAL_DEATH_KNIGHT = 796,
- SKILL_GENERAL_ROGUE = 797,
- SKILL_GENERAL_DRUID = 798,
- SKILL_GENERAL_MAGE = 799,
- SKILL_GENERAL_PALADIN = 800,
- SKILL_GENERAL_SHAMAN = 801,
- SKILL_GENERAL_WARLOCK = 802,
- SKILL_GENERAL_WARRIOR = 803,
- SKILL_GENERAL_PRIEST = 804,
+ SKILL_HUNTER = 795,
+ SKILL_DEATH_KNIGHT = 796,
+ SKILL_DRUID = 798,
+ SKILL_PALADIN = 800,
+ SKILL_PRIEST = 804,
SKILL_PET_WATER_ELEMENTAL = 805,
SKILL_PET_FOX = 808,
SKILL_ALL_GLYPHS = 810,
SKILL_PET_DOG = 811,
SKILL_PET_MONKEY = 815,
SKILL_PET_SHALE_SPIDER = 817,
- SKILL_PET_BEETLE = 818,
+ SKILL_BEETLE = 818,
SKILL_ALL_GUILD_PERKS = 821,
SKILL_PET_HYDRA = 824,
SKILL_MONK = 829,
@@ -4275,7 +4237,7 @@ enum SkillType
SKILL_OBSERVER = 930,
SKILL_WRATHGUARD = 931,
SKILL_ALL_SPECIALIZATIONS = 934,
- SKILL_RUNEFORGING_2 = 960,
+ SKILL_RUNEFORGING = 960,
SKILL_PET_PRIMAL_FIRE_ELEMENTAL = 962,
SKILL_PET_PRIMAL_EARTH_ELEMENTAL = 963,
SKILL_WAY_OF_THE_GRILL = 975,
@@ -4295,28 +4257,31 @@ enum SkillType
SKILL_NO_PLAYERS = 999,
SKILL_DIREHORN = 1305,
SKILL_PET_PRIMAL_STORM_ELEMENTAL = 1748,
- SKILL_PET_WATER_MINOR_TALENT_VERSION = 1777,
- SKILL_PET_EXOTIC_HOOK_WASP = 1818,
+ SKILL_PET_WATER_ELEMENTAL_MINOR_TALENT_VERSION = 1777,
+ SKILL_PET_EXOTIC_RYLAK = 1818,
SKILL_PET_RIVERBEAST = 1819,
SKILL_UNUSED = 1830,
+ SKILL_DEMON_HUNTER = 1848,
SKILL_LOGGING = 1945,
SKILL_PET_TERRORGUARD = 1981,
SKILL_PET_ABYSSAL = 1982,
SKILL_PET_STAG = 1993,
- SKILL_TRADING_POST = 2000
+ SKILL_TRADING_POST = 2000,
+ SKILL_WARGLAIVES = 2152,
+ SKILL_PET_MECHANICAL = 2189,
+ SKILL_PET_ABOMINATION = 2216,
};
-#define MAX_SKILL_TYPE 2000
-
inline SkillType SkillByLockType(LockType locktype)
{
switch (locktype)
{
- case LOCKTYPE_PICKLOCK: return SKILL_LOCKPICKING;
case LOCKTYPE_HERBALISM: return SKILL_HERBALISM;
case LOCKTYPE_MINING: return SKILL_MINING;
case LOCKTYPE_FISHING: return SKILL_FISHING;
case LOCKTYPE_INSCRIPTION: return SKILL_INSCRIPTION;
+ case LOCKTYPE_ARCHAELOGY: return SKILL_ARCHAEOLOGY;
+ case LOCKTYPE_LUMBER_MILL: return SKILL_LOGGING;
default: break;
}
return SKILL_NONE;
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index a3346f5e6cb..5ec7d87a36e 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -52,8 +52,8 @@ enum OpcodeClient : uint32
CMSG_ACTIVATE_TAXI = 0x34A6,
CMSG_ADDON_LIST = 0x35D7,
CMSG_ADD_BATTLENET_FRIEND = 0x365E,
- CMSG_ADD_FRIEND = 0x36D5,
- CMSG_ADD_IGNORE = 0x36D9,
+ CMSG_ADD_FRIEND = 0x36D4,
+ CMSG_ADD_IGNORE = 0x36D8,
CMSG_ADD_TOY = 0x3272,
CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x31E8,
CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x331A,
@@ -91,18 +91,18 @@ enum OpcodeClient : uint32
CMSG_BATTLEMASTER_JOIN = 0x3510,
CMSG_BATTLEMASTER_JOIN_ARENA = 0x3511,
CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3512,
- CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D8,
- CMSG_BATTLENET_REQUEST = 0x36FC,
- CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FD,
- CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CF,
- CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CE,
- CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C6,
- CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36C1,
- CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36C2,
- CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C8,
- CMSG_BATTLE_PAY_START_PURCHASE = 0x36F8,
- CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F9,
- CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C7,
+ CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D7,
+ CMSG_BATTLENET_REQUEST = 0x36FB,
+ CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FC,
+ CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CE,
+ CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CD,
+ CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C5,
+ CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36C0,
+ CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36C1,
+ CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C7,
+ CMSG_BATTLE_PAY_START_PURCHASE = 0x36F7,
+ CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F8,
+ CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C6,
CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C,
CMSG_BATTLE_PET_DELETE_PET = 0x3623,
CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3624,
@@ -118,30 +118,30 @@ enum OpcodeClient : uint32
CMSG_BLACK_MARKET_BID_ON_ITEM = 0x351A,
CMSG_BLACK_MARKET_OPEN = 0x3518,
CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3519,
- CMSG_BUG_REPORT = 0x368C,
+ CMSG_BUG_REPORT = 0x368B,
CMSG_BUSY_TRADE = 0x3158,
CMSG_BUY_BACK_ITEM = 0x349F,
CMSG_BUY_BANK_SLOT = 0x34AF,
CMSG_BUY_ITEM = 0x349E,
CMSG_BUY_REAGENT_BANK = 0x34B0,
- CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36F1,
- CMSG_BUY_WOW_TOKEN_START = 0x36F0,
+ CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36F0,
+ CMSG_BUY_WOW_TOKEN_START = 0x36EF,
CMSG_CAGE_BATTLE_PET = 0x31D8,
- CMSG_CALENDAR_ADD_EVENT = 0x3682,
- CMSG_CALENDAR_COMPLAIN = 0x367E,
- CMSG_CALENDAR_COPY_EVENT = 0x367D,
- CMSG_CALENDAR_EVENT_INVITE = 0x3677,
- CMSG_CALENDAR_EVENT_MODERATOR_STATUS = 0x367B,
- CMSG_CALENDAR_EVENT_RSVP = 0x3679,
- CMSG_CALENDAR_EVENT_SIGN_UP = 0x3680,
- CMSG_CALENDAR_EVENT_STATUS = 0x367A,
- CMSG_CALENDAR_GET = 0x3674,
- CMSG_CALENDAR_GET_EVENT = 0x3675,
- CMSG_CALENDAR_GET_NUM_PENDING = 0x367F,
- CMSG_CALENDAR_GUILD_FILTER = 0x3676,
- CMSG_CALENDAR_REMOVE_EVENT = 0x367C,
- CMSG_CALENDAR_REMOVE_INVITE = 0x3678,
- CMSG_CALENDAR_UPDATE_EVENT = 0x3683,
+ CMSG_CALENDAR_ADD_EVENT = 0x3681,
+ CMSG_CALENDAR_COMPLAIN = 0x367D,
+ CMSG_CALENDAR_COPY_EVENT = 0x367C,
+ CMSG_CALENDAR_EVENT_INVITE = 0x3676,
+ CMSG_CALENDAR_EVENT_MODERATOR_STATUS = 0x367A,
+ CMSG_CALENDAR_EVENT_RSVP = 0x3678,
+ CMSG_CALENDAR_EVENT_SIGN_UP = 0x367F,
+ CMSG_CALENDAR_EVENT_STATUS = 0x3679,
+ CMSG_CALENDAR_GET = 0x3673,
+ CMSG_CALENDAR_GET_EVENT = 0x3674,
+ CMSG_CALENDAR_GET_NUM_PENDING = 0x367E,
+ CMSG_CALENDAR_GUILD_FILTER = 0x3675,
+ CMSG_CALENDAR_REMOVE_EVENT = 0x367B,
+ CMSG_CALENDAR_REMOVE_INVITE = 0x3677,
+ CMSG_CALENDAR_UPDATE_EVENT = 0x3682,
CMSG_CANCEL_AURA = 0x31A7,
CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34D7,
CMSG_CANCEL_CAST = 0x3277,
@@ -153,17 +153,17 @@ enum OpcodeClient : uint32
CMSG_CANCEL_QUEUED_SPELL = 0x317D,
CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34E2,
CMSG_CANCEL_TRADE = 0x315C,
- CMSG_CAN_DUEL = 0x3667,
+ CMSG_CAN_DUEL = 0x3666,
CMSG_CAST_SPELL = 0x3275,
CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F,
CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308E,
CMSG_CHANGE_BAG_SLOT_FLAG = 0x32FC,
CMSG_CHANGE_MONUMENT_APPEARANCE = 0x32DC,
CMSG_CHANGE_SUB_GROUP = 0x364C,
- CMSG_CHARACTER_RENAME_REQUEST = 0x36C4,
- CMSG_CHAR_CUSTOMIZE = 0x3694,
- CMSG_CHAR_DELETE = 0x36A1,
- CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x369A,
+ CMSG_CHARACTER_RENAME_REQUEST = 0x36C3,
+ CMSG_CHAR_CUSTOMIZE = 0x3693,
+ CMSG_CHAR_DELETE = 0x36A0,
+ CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3699,
CMSG_CHAT_ADDON_MESSAGE_CHANNEL = 0x37D0,
CMSG_CHAT_ADDON_MESSAGE_GUILD = 0x37D4,
CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT = 0x37F7,
@@ -212,8 +212,8 @@ enum OpcodeClient : uint32
CMSG_CHAT_REPORT_FILTERED = 0x37CC,
CMSG_CHAT_REPORT_IGNORED = 0x37CB,
CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE,
- CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36D0,
- CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EF,
+ CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CF,
+ CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EE,
CMSG_CHOICE_RESPONSE = 0x3279,
CMSG_CLEAR_RAID_MARKER = 0x319F,
CMSG_CLEAR_TRADE_ITEM = 0x315E,
@@ -225,7 +225,7 @@ enum OpcodeClient : uint32
CMSG_COMMENTATOR_GET_MAP_INFO = 0x35EF,
CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F0,
CMSG_COMMENTATOR_START_WARGAME = 0x35ED,
- CMSG_COMPLAINT = 0x3671,
+ CMSG_COMPLAINT = 0x3670,
CMSG_COMPLETE_CINEMATIC = 0x3532,
CMSG_COMPLETE_MOVIE = 0x34CD,
CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31A4,
@@ -238,8 +238,8 @@ enum OpcodeClient : uint32
CMSG_DECLINE_GUILD_INVITES = 0x350E,
CMSG_DECLINE_PETITION = 0x3521,
CMSG_DELETE_EQUIPMENT_SET = 0x34FC,
- CMSG_DEL_FRIEND = 0x36D6,
- CMSG_DEL_IGNORE = 0x36DA,
+ CMSG_DEL_FRIEND = 0x36D5,
+ CMSG_DEL_IGNORE = 0x36D9,
CMSG_DEPOSIT_REAGENT_BANK = 0x3305,
CMSG_DESTROY_ITEM = 0x326C,
CMSG_DF_BOOT_PLAYER_VOTE = 0x3614,
@@ -261,9 +261,9 @@ enum OpcodeClient : uint32
CMSG_ENABLE_ENCRYPTION_ACK = 0x3767,
CMSG_ENABLE_NAGLE = 0x376B,
CMSG_ENABLE_TAXI_NODE = 0x34A4,
- CMSG_ENGINE_SURVEY = 0x36E9,
+ CMSG_ENGINE_SURVEY = 0x36E8,
CMSG_ENUM_CHARACTERS = 0x35E6,
- CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36E3,
+ CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36E2,
CMSG_FAR_SIGHT = 0x34D8,
CMSG_GAME_OBJ_REPORT_USE = 0x34DF,
CMSG_GAME_OBJ_USE = 0x34DE,
@@ -291,17 +291,17 @@ enum OpcodeClient : uint32
CMSG_GARRISON_START_MISSION = 0x32E8,
CMSG_GARRISON_SWAP_BUILDINGS = 0x32A5,
CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E5,
- CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3688,
+ CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3687,
CMSG_GET_GARRISON_INFO = 0x329A,
CMSG_GET_ITEM_PURCHASE_DATA = 0x351C,
CMSG_GET_MIRROR_IMAGE_DATA = 0x3270,
CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EC,
- CMSG_GET_REMAINING_GAME_TIME = 0x36F2,
+ CMSG_GET_REMAINING_GAME_TIME = 0x36F1,
CMSG_GET_TROPHY_LIST = 0x32D9,
- CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E5,
- CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3698,
- CMSG_GM_TICKET_GET_CASE_STATUS = 0x3697,
- CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3696,
+ CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E4,
+ CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3697,
+ CMSG_GM_TICKET_GET_CASE_STATUS = 0x3696,
+ CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3695,
CMSG_GOSSIP_SELECT_OPTION = 0x348B,
CMSG_GRANT_LEVEL = 0x34E7,
CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D,
@@ -343,7 +343,7 @@ enum OpcodeClient : uint32
CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3088,
CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x306F,
CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3070,
- CMSG_GUILD_SET_GUILD_MASTER = 0x36CA,
+ CMSG_GUILD_SET_GUILD_MASTER = 0x36C9,
CMSG_GUILD_SET_MEMBER_NOTE = 0x3072,
CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3067,
CMSG_GUILD_SHIFT_RANK = 0x3066,
@@ -354,13 +354,13 @@ enum OpcodeClient : uint32
CMSG_INITIATE_ROLE_POLL = 0x35D9,
CMSG_INITIATE_TRADE = 0x3156,
CMSG_INSPECT = 0x3517,
- CMSG_INSPECT_PVP = 0x36A7,
+ CMSG_INSPECT_PVP = 0x36A6,
CMSG_INSTANCE_LOCK_RESPONSE = 0x34FD,
CMSG_ITEM_PURCHASE_REFUND = 0x351D,
CMSG_ITEM_TEXT_QUERY = 0x32F9,
CMSG_JOIN_PET_BATTLE_QUEUE = 0x31C6,
CMSG_JOIN_RATED_BATTLEGROUND = 0x3175,
- CMSG_KEEP_ALIVE = 0x3684,
+ CMSG_KEEP_ALIVE = 0x3683,
CMSG_KEYBOUND_OVERRIDE = 0x3207,
CMSG_LEARN_PVP_TALENTS = 0x3540,
CMSG_LEARN_TALENTS = 0x353F,
@@ -385,9 +385,9 @@ enum OpcodeClient : uint32
CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307A,
CMSG_LF_GUILD_SET_GUILD_POST = 0x361B,
CMSG_LIST_INVENTORY = 0x349C,
- CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36C0,
- CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BF,
- CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36BE,
+ CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BF,
+ CMSG_LIVE_REGION_CHARACTER_COPY = 0x36BE,
+ CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36BD,
CMSG_LOADING_SCREEN_NOTIFY = 0x35F5,
CMSG_LOAD_SELECTED_TROPHY = 0x32DA,
CMSG_LOGOUT_CANCEL = 0x34C8,
@@ -400,7 +400,7 @@ enum OpcodeClient : uint32
CMSG_LOOT_RELEASE = 0x31F7,
CMSG_LOOT_ROLL = 0x31F8,
CMSG_LOOT_UNIT = 0x31F1,
- CMSG_LOW_LEVEL_RAID1 = 0x36A5,
+ CMSG_LOW_LEVEL_RAID1 = 0x36A4,
CMSG_LOW_LEVEL_RAID2 = 0x3503,
CMSG_MAIL_CREATE_TEXT_ITEM = 0x3528,
CMSG_MAIL_DELETE = 0x3209,
@@ -481,7 +481,7 @@ enum OpcodeClient : uint32
CMSG_NEXT_CINEMATIC_CAMERA = 0x3531,
CMSG_OBJECT_UPDATE_FAILED = 0x317E,
CMSG_OBJECT_UPDATE_RESCUED = 0x317F,
- CMSG_OFFER_PETITION = 0x36B5,
+ CMSG_OFFER_PETITION = 0x36B4,
CMSG_OPENING_CINEMATIC = 0x3530,
CMSG_OPEN_ITEM = 0x32FA,
CMSG_OPEN_MISSION_NPC = 0x32BF,
@@ -492,7 +492,7 @@ enum OpcodeClient : uint32
CMSG_PARTY_INVITE_RESPONSE = 0x3600,
CMSG_PARTY_UNINVITE = 0x3647,
CMSG_PETITION_BUY = 0x34B9,
- CMSG_PETITION_RENAME_GUILD = 0x36CB,
+ CMSG_PETITION_RENAME_GUILD = 0x36CA,
CMSG_PETITION_SHOW_LIST = 0x34B8,
CMSG_PETITION_SHOW_SIGNATURES = 0x34BA,
CMSG_PET_ABANDON = 0x3484,
@@ -509,7 +509,7 @@ enum OpcodeClient : uint32
CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31C3,
CMSG_PET_CANCEL_AURA = 0x3485,
CMSG_PET_CAST_SPELL = 0x3274,
- CMSG_PET_RENAME = 0x368B,
+ CMSG_PET_RENAME = 0x368A,
CMSG_PET_SET_ACTION = 0x3481,
CMSG_PET_SPELL_AUTOCAST = 0x3486,
CMSG_PET_STOP_ATTACK = 0x3483,
@@ -520,24 +520,24 @@ enum OpcodeClient : uint32
CMSG_PVP_LOG_DATA = 0x3179,
CMSG_PVP_PRESTIGE_RANK_UP = 0x331E,
CMSG_QUERY_BATTLE_PET_NAME = 0x3251,
- CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3665,
- CMSG_QUERY_CORPSE_TRANSPORT = 0x3666,
+ CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3664,
+ CMSG_QUERY_CORPSE_TRANSPORT = 0x3665,
CMSG_QUERY_COUNTDOWN_TIMER = 0x31A2,
CMSG_QUERY_CREATURE = 0x324B,
CMSG_QUERY_GAME_OBJECT = 0x324C,
CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3252,
- CMSG_QUERY_GUILD_INFO = 0x3693,
+ CMSG_QUERY_GUILD_INFO = 0x3692,
CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x34F2,
CMSG_QUERY_NEXT_MAIL_TIME = 0x3526,
CMSG_QUERY_NPC_TEXT = 0x324D,
CMSG_QUERY_PAGE_TEXT = 0x324F,
CMSG_QUERY_PETITION = 0x3253,
CMSG_QUERY_PET_NAME = 0x3250,
- CMSG_QUERY_PLAYER_NAME = 0x3691,
+ CMSG_QUERY_PLAYER_NAME = 0x3690,
CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3172,
CMSG_QUERY_QUEST_INFO = 0x324E,
CMSG_QUERY_QUEST_REWARDS = 0x3321,
- CMSG_QUERY_REALM_NAME = 0x3692,
+ CMSG_QUERY_REALM_NAME = 0x3691,
CMSG_QUERY_SCENARIO_POI = 0x3659,
CMSG_QUERY_TIME = 0x34C6,
CMSG_QUERY_VOID_STORAGE = 0x319B,
@@ -553,23 +553,23 @@ enum OpcodeClient : uint32
CMSG_QUEST_GIVER_STATUS_QUERY = 0x3497,
CMSG_QUEST_GIVER_UNIGNORE_QUEST = 0x3492,
CMSG_QUEST_LOG_REMOVE_QUEST = 0x351B,
- CMSG_QUEST_POI_QUERY = 0x36B6,
+ CMSG_QUEST_POI_QUERY = 0x36B5,
CMSG_QUEST_PUSH_RESULT = 0x349B,
CMSG_QUEUED_MESSAGES_END = 0x376C,
- CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36EA,
+ CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E9,
CMSG_RANDOM_ROLL = 0x3654,
CMSG_READY_CHECK_RESPONSE = 0x3634,
CMSG_READ_ITEM = 0x32FB,
CMSG_RECLAIM_CORPSE = 0x34CB,
- CMSG_RECRUIT_A_FRIEND = 0x36D1,
- CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F4,
- CMSG_REDEEM_WOW_TOKEN_START = 0x36F3,
+ CMSG_RECRUIT_A_FRIEND = 0x36D0,
+ CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36F3,
+ CMSG_REDEEM_WOW_TOKEN_START = 0x36F2,
CMSG_REORDER_CHARACTERS = 0x35E7,
CMSG_REPAIR_ITEM = 0x34DC,
CMSG_REPLACE_TROPHY = 0x32DB,
CMSG_REPOP_REQUEST = 0x3514,
CMSG_REPORT_PVP_PLAYER_AFK = 0x34E4,
- CMSG_REQUEST_ACCOUNT_DATA = 0x369B,
+ CMSG_REQUEST_ACCOUNT_DATA = 0x369A,
CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DB,
CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317B,
CMSG_REQUEST_CEMETERY_LIST = 0x3173,
@@ -584,7 +584,7 @@ enum OpcodeClient : uint32
CMSG_REQUEST_PET_INFO = 0x3487,
CMSG_REQUEST_PLAYED_TIME = 0x3256,
CMSG_REQUEST_PVP_REWARDS = 0x318F,
- CMSG_REQUEST_RAID_INFO = 0x36CC,
+ CMSG_REQUEST_RAID_INFO = 0x36CB,
CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E2,
CMSG_REQUEST_RESEARCH_HISTORY = 0x3167,
CMSG_REQUEST_STABLED_PETS = 0x3488,
@@ -592,10 +592,10 @@ enum OpcodeClient : uint32
CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x321B,
CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x321A,
CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x321C,
- CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36EC,
+ CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36EB,
CMSG_RESET_CHALLENGE_MODE = 0x31EA,
- CMSG_RESET_INSTANCES = 0x366D,
- CMSG_RESURRECT_RESPONSE = 0x368A,
+ CMSG_RESET_INSTANCES = 0x366C,
+ CMSG_RESURRECT_RESPONSE = 0x3689,
CMSG_REVERT_MONUMENT_APPEARANCE = 0x32DD,
CMSG_RIDE_VEHICLE_INTERACT = 0x321D,
CMSG_SAVE_CUF_PROFILES = 0x3189,
@@ -606,9 +606,9 @@ enum OpcodeClient : uint32
CMSG_SCENE_TRIGGER_EVENT = 0x3205,
CMSG_SELF_RES = 0x351E,
CMSG_SELL_ITEM = 0x349D,
- CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36EE,
- CMSG_SELL_WOW_TOKEN_START = 0x36ED,
- CMSG_SEND_CONTACT_LIST = 0x36D4,
+ CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36ED,
+ CMSG_SELL_WOW_TOKEN_START = 0x36EC,
+ CMSG_SEND_CONTACT_LIST = 0x36D3,
CMSG_SEND_MAIL = 0x35F7,
CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x361F,
CMSG_SEND_TEXT_EMOTE = 0x347E,
@@ -622,10 +622,10 @@ enum OpcodeClient : uint32
CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x32FE,
CMSG_SET_BANK_AUTOSORT_DISABLED = 0x32FF,
CMSG_SET_BANK_BAG_SLOT_FLAG = 0x32FD,
- CMSG_SET_CONTACT_NOTES = 0x36D7,
+ CMSG_SET_CONTACT_NOTES = 0x36D6,
CMSG_SET_CURRENCY_FLAGS = 0x3169,
CMSG_SET_DIFFICULTY_ID = 0x3206,
- CMSG_SET_DUNGEON_DIFFICULTY = 0x3687,
+ CMSG_SET_DUNGEON_DIFFICULTY = 0x3686,
CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3616,
CMSG_SET_FACTION_AT_WAR = 0x34CE,
CMSG_SET_FACTION_INACTIVE = 0x34D0,
@@ -637,12 +637,12 @@ enum OpcodeClient : uint32
CMSG_SET_PARTY_ASSIGNMENT = 0x3651,
CMSG_SET_PARTY_LEADER = 0x364A,
CMSG_SET_PET_SLOT = 0x3168,
- CMSG_SET_PLAYER_DECLINED_NAMES = 0x3690,
+ CMSG_SET_PLAYER_DECLINED_NAMES = 0x368F,
CMSG_SET_PREFERRED_CEMETERY = 0x3174,
CMSG_SET_PVP = 0x3283,
- CMSG_SET_RAID_DIFFICULTY = 0x36E1,
+ CMSG_SET_RAID_DIFFICULTY = 0x36E0,
CMSG_SET_ROLE = 0x35D8,
- CMSG_SET_SAVED_INSTANCE_EXTEND = 0x368E,
+ CMSG_SET_SAVED_INSTANCE_EXTEND = 0x368D,
CMSG_SET_SELECTION = 0x3516,
CMSG_SET_SHEATHED = 0x347F,
CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3300,
@@ -653,7 +653,7 @@ enum OpcodeClient : uint32
CMSG_SET_TRADE_ITEM = 0x315D,
CMSG_SET_USING_PARTY_GARRISON = 0x32C1,
CMSG_SET_WATCHED_FACTION = 0x34D1,
- CMSG_SHOW_TRADE_SKILL = 0x36C5,
+ CMSG_SHOW_TRADE_SKILL = 0x36C4,
CMSG_SIGN_PETITION = 0x3520,
CMSG_SILENCE_PARTY_TALKER = 0x3652,
CMSG_SOCKET_GEMS = 0x34DB,
@@ -667,7 +667,7 @@ enum OpcodeClient : uint32
CMSG_START_CHALLENGE_MODE = 0x3537,
CMSG_START_SPECTATOR_WAR_GAME = 0x35DE,
CMSG_START_WAR_GAME = 0x35DD,
- CMSG_SUMMON_RESPONSE = 0x366F,
+ CMSG_SUMMON_RESPONSE = 0x366E,
CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3645,
CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644,
CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646,
@@ -683,7 +683,7 @@ enum OpcodeClient : uint32
CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34A5,
CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34A7,
CMSG_TELEPORT_TO_GUID = 0x39F5,
- CMSG_TELEPORT_TO_UNIT = 0x3668,
+ CMSG_TELEPORT_TO_UNIT = 0x3667,
CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A3B,
CMSG_TIME_SYNC_RESPONSE = 0x3A38,
CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A,
@@ -698,24 +698,24 @@ enum OpcodeClient : uint32
CMSG_TRANSMOGRIFY_ITEMS = 0x3190,
CMSG_TRANSMOG_APPEARANCE_SET_FAVORITE = 0x3632,
CMSG_TURN_IN_PETITION = 0x3522,
- CMSG_TUTORIAL = 0x36E2,
+ CMSG_TUTORIAL = 0x36E1,
CMSG_TWITTER_CHECK_STATUS = 0x312A,
CMSG_TWITTER_CONNECT = 0x3127,
CMSG_TWITTER_DISCONNECT = 0x312B,
CMSG_TWITTER_POST = 0x3306,
- CMSG_UI_TIME_REQUEST = 0x36A0,
+ CMSG_UI_TIME_REQUEST = 0x369F,
CMSG_UNACCEPT_TRADE = 0x315B,
- CMSG_UNDELETE_CHARACTER = 0x36E4,
+ CMSG_UNDELETE_CHARACTER = 0x36E3,
CMSG_UNLEARN_SKILL = 0x34D5,
CMSG_UNLEARN_SPECIALIZATION = 0x319E,
CMSG_UNLOCK_VOID_STORAGE = 0x319A,
- CMSG_UPDATE_ACCOUNT_DATA = 0x369C,
- CMSG_UPDATE_CLIENT_SETTINGS = 0x3669,
+ CMSG_UPDATE_ACCOUNT_DATA = 0x369B,
+ CMSG_UPDATE_CLIENT_SETTINGS = 0x3668,
CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E,
CMSG_UPDATE_RAID_TARGET = 0x3650,
- CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36FA,
- CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F5,
- CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36EB,
+ CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F9,
+ CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F4,
+ CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36EA,
CMSG_UPGRADE_GARRISON = 0x3293,
CMSG_UPGRADE_ITEM = 0x320B,
CMSG_USED_FOLLOW = 0x3184,
@@ -726,11 +726,11 @@ enum OpcodeClient : uint32
CMSG_VIOLENCE_LEVEL = 0x3182,
CMSG_VOICE_ADD_IGNORE = 0x3656,
CMSG_VOICE_DEL_IGNORE = 0x3657,
- CMSG_VOICE_SESSION_ENABLE = 0x3689,
+ CMSG_VOICE_SESSION_ENABLE = 0x3688,
CMSG_VOID_STORAGE_TRANSFER = 0x319C,
CMSG_WARDEN_DATA = 0x35EA,
- CMSG_WHO = 0x3686,
- CMSG_WHO_IS = 0x3685,
+ CMSG_WHO = 0x3685,
+ CMSG_WHO_IS = 0x3684,
CMSG_WORLD_PORT_RESPONSE = 0x35F6,
CMSG_WORLD_TELEPORT = 0x3326,
CMSG_WRAP_ITEM = 0x3994,
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index a3553f6b762..b7239b21a7b 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -5251,17 +5251,6 @@ SpellCastResult Spell::CheckCast(bool strict)
SpellCastResult res = CanOpenLock(effect->EffectIndex, lockId, skillId, reqSkillValue, skillValue);
if (res != SPELL_CAST_OK)
return res;
-
- // chance for fail at orange mining/herb/LockPicking gathering attempt
- // second check prevent fail at rechecks
- if (skillId != SKILL_NONE && (!m_selfContainer || ((*m_selfContainer) != this)))
- {
- bool canFailAtMax = skillId != SKILL_HERBALISM && skillId != SKILL_MINING;
-
- // chance for failure in orange gather / lockpick (gathering skill can't fail at maxskill)
- if ((canFailAtMax || skillValue < sWorld->GetConfigMaxSkillValue()) && reqSkillValue > irand(skillValue - 25, skillValue + 37))
- return SPELL_FAILED_TRY_AGAIN;
- }
break;
}
case SPELL_EFFECT_RESURRECT_PET:
@@ -6948,13 +6937,16 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk
skillId = SkillByLockType(LockType(lockInfo->Index[j]));
- if (skillId != SKILL_NONE)
+ if (skillId != SKILL_NONE || lockInfo->Index[j] == LOCKTYPE_PICKLOCK)
{
reqSkillValue = lockInfo->Skill[j];
// castitem check: rogue using skeleton keys. the skill values should not be added in this case.
- skillValue = m_CastItem || m_caster->GetTypeId()!= TYPEID_PLAYER ?
- 0 : m_caster->ToPlayer()->GetSkillValue(skillId);
+ skillValue = 0;
+ if (!m_CastItem && m_caster->GetTypeId() == TYPEID_PLAYER)
+ skillValue = m_caster->ToPlayer()->GetSkillValue(skillId);
+ else if (lockInfo->Index[j] == LOCKTYPE_PICKLOCK)
+ skillValue = m_caster->getLevel() * 5;
// skill bonus provided by casting spell (mostly item spells)
// add the effect base points modifier from the spell cast (cheat lock / skeleton key etc.)