diff --git a/sql/updates/hotfixes/4.3.4/2020_02_23_00_hotfixes.sql b/sql/updates/hotfixes/4.3.4/2020_02_23_00_hotfixes.sql new file mode 100644 index 00000000000..dbd86fbb58d --- /dev/null +++ b/sql/updates/hotfixes/4.3.4/2020_02_23_00_hotfixes.sql @@ -0,0 +1,58 @@ +ALTER TABLE `item_sparse` + CHANGE `Unk1` `PriceRandomValue` FLOAT DEFAULT 0 NOT NULL, + CHANGE `Unk2` `PriceVariance` FLOAT DEFAULT 0 NOT NULL, + CHANGE `Name` `Display` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name2` `Display1` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name3` `Display2` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name4` `Display3` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Sheath` `SheatheType` INT(10) UNSIGNED DEFAULT 0 NOT NULL, + CHANGE `Area` `AreaID` INT(10) UNSIGNED DEFAULT 0 NOT NULL, + CHANGE `Map` `MapID` INT(10) UNSIGNED DEFAULT 0 NOT NULL; + +ALTER TABLE `item` + CHANGE `Class` `ClassID` INT(10) UNSIGNED DEFAULT 0 NOT NULL, + CHANGE `SubClass` `SubclassID` INT(10) UNSIGNED DEFAULT 0 NOT NULL, + CHANGE `SoundOverrideSubclass` `SoundOverrideSubclassID` INT(11) DEFAULT 0 NOT NULL, + CHANGE `Sheath` `SheatheType` INT(10) UNSIGNED DEFAULT 0 NOT NULL; + +ALTER TABLE `item_sparse_locale` + CHANGE `Name_lang` `Display_lang` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name2_lang` `Display1_lang` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name3_lang` `Display2_lang` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL, + CHANGE `Name4_lang` `Display3_lang` TEXT CHARSET utf8 COLLATE utf8_general_ci NULL; + +ALTER TABLE `item_currency_cost` + CHANGE `ItemId` `ItemID` INT(10) UNSIGNED DEFAULT 0 NOT NULL; + +ALTER TABLE `item_sparse` + CHANGE `RequiredSpell` `RequiredSpell` INT(11) DEFAULT 0 NOT NULL, + CHANGE `MaxCount` `MaxCount` INT(11) DEFAULT 0 NOT NULL, + CHANGE `Stackable` `Stackable` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier1` `ItemStatSocketCostMultiplier1` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier2` `ItemStatSocketCostMultiplier2` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier3` `ItemStatSocketCostMultiplier3` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier4` `ItemStatSocketCostMultiplier4` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier5` `ItemStatSocketCostMultiplier5` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier6` `ItemStatSocketCostMultiplier6` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier7` `ItemStatSocketCostMultiplier7` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier8` `ItemStatSocketCostMultiplier8` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier9` `ItemStatSocketCostMultiplier9` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemStatSocketCostMultiplier10` `ItemStatSocketCostMultiplier10` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ScalingStatDistribution` `ScalingStatDistribution` INT(11) DEFAULT 0 NOT NULL, + CHANGE `DamageType` `DamageType` INT(11) DEFAULT 0 NOT NULL, + CHANGE `Bonding` `Bonding` INT(11) DEFAULT 0 NOT NULL, + CHANGE `LanguageID` `LanguageID` INT(11) DEFAULT 0 NOT NULL, + CHANGE `PageMaterial` `PageMaterial` INT(11) DEFAULT 0 NOT NULL, + CHANGE `StartQuest` `StartQuest` INT(11) DEFAULT 0 NOT NULL, + CHANGE `SheatheType` `SheatheType` INT(11) DEFAULT 0 NOT NULL, + CHANGE `RandomProperty` `RandomProperty` INT(11) DEFAULT 0 NOT NULL, + CHANGE `MapID` `MapID` INT(11) DEFAULT 0 NOT NULL, + CHANGE `BagFamily` `BagFamily` INT(11) DEFAULT 0 NOT NULL, + CHANGE `TotemCategory` `TotemCategory` INT(11) DEFAULT 0 NOT NULL, + CHANGE `SocketColor1` `SocketColor1` INT(11) DEFAULT 0 NOT NULL, + CHANGE `SocketColor2` `SocketColor2` INT(11) DEFAULT 0 NOT NULL, + CHANGE `SocketColor3` `SocketColor3` INT(11) DEFAULT 0 NOT NULL, + CHANGE `GemProperties` `GemProperties` INT(11) DEFAULT 0 NOT NULL, + CHANGE `Duration` `Duration` INT(11) DEFAULT 0 NOT NULL, + CHANGE `ItemLimitCategory` `ItemLimitCategory` INT(11) DEFAULT 0 NOT NULL, + CHANGE `HolidayID` `HolidayID` INT(11) DEFAULT 0 NOT NULL; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 24f034402d2..f286063c886 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -31,11 +31,11 @@ void HotfixDatabaseConnection::DoPrepareStatements() m_stmts.resize(MAX_HOTFIXDATABASE_STATEMENTS); // KeyChain.db2 - PrepareStatement(HOTFIX_SEL_KEY_CHAIN, "SELECT Id, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, Key16, " + PrepareStatement(HOTFIX_SEL_KEY_CHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, Key16, " "Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM key_chain ORDER BY ID DESC", CONNECTION_SYNCH); // Item.db2 - PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, Class, SubClass, SoundOverrideSubclass, Material, DisplayInfoID, InventoryType, Sheath FROM item ORDER BY ID DESC", CONNECTION_SYNCH); + PrepareStatement(HOTFIX_SEL_ITEM, "SELECT ID, ClassID, SubclassID, SoundOverrideSubclassID, Material, DisplayInfoID, InventoryType, SheatheType FROM item ORDER BY ID DESC", CONNECTION_SYNCH); // ItemCurrencyCost.db2 PrepareStatement(HOTFIX_SEL_ITEM_CURRENCY_COST, "SELECT ID, ItemID FROM item_currency_cost ORDER BY ItemID DESC", CONNECTION_SYNCH); @@ -50,7 +50,7 @@ void HotfixDatabaseConnection::DoPrepareStatements() "RequiredFactionId, RequiredFactionStanding, RequirementFlags, RequiredAchievement FROM item_extended_cost ORDER BY ID DESC", CONNECTION_SYNCH); // Item-sparse.db2 - PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Quality, Flags1, Flags2, Unk1, Unk2, BuyCount, BuyPrice, SellPrice, InventoryType, " + PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Quality, Flags1, Flags2, PriceRandomValue, PriceVariance, BuyCount, BuyPrice, SellPrice, InventoryType, " "AllowableClass, AllowableRace, ItemLevel, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredSpell, RequiredHonorRank, " "RequiredCityRank, RequiredReputationFaction, RequiredReputationRank, MaxCount, Stackable, ContainerSlots, " "ItemStatType1, ItemStatType2, ItemStatType3, ItemStatType4, ItemStatType5, " @@ -68,10 +68,10 @@ void HotfixDatabaseConnection::DoPrepareStatements() "SpellCooldown1, SpellCooldown2, SpellCooldown3, SpellCooldown4, SpellCooldown5, " "SpellCategory1, SpellCategory2, SpellCategory3, SpellCategory4, SpellCategory5, " "SpellCategoryCooldown1, SpellCategoryCooldown2, SpellCategoryCooldown3, SpellCategoryCooldown4, SpellCategoryCooldown5, " - "Bonding, Name, Name2, Name3, Name4, Description, PageText, LanguageID, PageMaterial, StartQuest, LockID, Material, Sheath, RandomProperty, RandomSuffix, ItemSet, " - "Area, Map, BagFamily, TotemCategory, SocketColor1, SocketColor2, SocketColor3, Content1, Content2, Content3, SocketBonus, GemProperties, ArmorDamageModifier, " + "Bonding, Display, Display1, Display2, Display3, Description, PageText, LanguageID, PageMaterial, StartQuest, LockID, Material, SheatheType, RandomProperty, RandomSuffix, ItemSet, " + "AreaID, MapID, BagFamily, TotemCategory, SocketColor1, SocketColor2, SocketColor3, Content1, Content2, Content3, SocketBonus, GemProperties, ArmorDamageModifier, " "Duration, ItemLimitCategory, HolidayID, StatScalingFactor, CurrencySubstitutionID, CurrencySubstitutionCount FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH); - PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Name_lang, Name2_lang, Name3_lang, Name4_lang, Description_lang FROM item_sparse_locale WHERE locale = ?", CONNECTION_SYNCH); + PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Display_lang, Display1_lang, Display2_lang, Display3_lang, Description_lang FROM item_sparse_locale WHERE locale = ?", CONNECTION_SYNCH); } HotfixDatabaseConnection::HotfixDatabaseConnection(MySQLConnectionInfo& connInfo) : MySQLConnection(connInfo) diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index fe72c697791..b58b0a80f57 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -50,8 +50,8 @@ struct ItemSparseEntry uint32 Quality; // 1 uint32 Flags; // 2 uint32 Flags2; // 3 - float Unk1; // 4 - float Unk2; // 5 + float PriceRandomValue; // 4 + float PriceVariance; // 5 uint32 BuyCount; // 6 uint32 BuyPrice; // 7 uint32 SellPrice; // 8 @@ -59,23 +59,23 @@ struct ItemSparseEntry int32 AllowableClass; // 10 int32 AllowableRace; // 11 uint32 ItemLevel; // 12 - int32 RequiredLevel; // 13 + uint32 RequiredLevel; // 13 uint32 RequiredSkill; // 14 uint32 RequiredSkillRank; // 15 - uint32 RequiredSpell; // 16 + int32 RequiredSpell; // 16 uint32 RequiredHonorRank; // 17 uint32 RequiredCityRank; // 18 uint32 RequiredReputationFaction; // 19 uint32 RequiredReputationRank; // 20 - uint32 MaxCount; // 21 - uint32 Stackable; // 22 + int32 MaxCount; // 21 + int32 Stackable; // 22 uint32 ContainerSlots; // 23 int32 ItemStatType[MAX_ITEM_PROTO_STATS]; // 24 - 33 int32 ItemStatValue[MAX_ITEM_PROTO_STATS]; // 34 - 43 int32 ItemStatAllocation[MAX_ITEM_PROTO_STATS]; // 44 - 53 - float ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]; // 54 - 63 - uint32 ScalingStatDistribution; // 64 - uint32 DamageType; // 65 + int32 ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]; // 54 - 63 + int32 ScalingStatDistribution; // 64 + int32 DamageType; // 65 uint32 Delay; // 66 float RangedModRange; // 67 int32 SpellID[MAX_ITEM_PROTO_SPELLS]; // 68 - 72 @@ -84,34 +84,34 @@ struct ItemSparseEntry int32 SpellCooldown[MAX_ITEM_PROTO_SPELLS]; // 83 - 87 int32 SpellCategory[MAX_ITEM_PROTO_SPELLS]; // 88 - 92 int32 SpellCategoryCooldown[MAX_ITEM_PROTO_SPELLS]; // 93 - 94 - uint32 Bonding; // 95 - LocalizedString* Name; // 96 - LocalizedString* Name2; // 97 - LocalizedString* Name3; // 98 - LocalizedString* Name4; // 99 + int32 Bonding; // 95 + LocalizedString* Display; // 96 + LocalizedString* Display1; // 97 + LocalizedString* Display2; // 98 + LocalizedString* Display3; // 99 LocalizedString* Description; // 100 uint32 PageText; // 101 - uint32 LanguageID; // 102 - uint32 PageMaterial; // 103 - uint32 StartQuest; // 104 + int32 LanguageID; // 102 + int32 PageMaterial; // 103 + int32 StartQuest; // 104 uint32 LockID; // 105 int32 Material; // 106 - uint32 Sheath; // 107 - uint32 RandomProperty; // 108 + int32 SheatheType; // 107 + int32 RandomProperty; // 108 uint32 RandomSuffix; // 109 uint32 ItemSet; // 110 - uint32 Area; // 112 - uint32 Map; // 113 - uint32 BagFamily; // 114 - uint32 TotemCategory; // 115 - uint32 SocketColor[MAX_ITEM_PROTO_SOCKETS]; // 116 - 118 + uint32 AreaID; // 112 + int32 MapID; // 113 + int32 BagFamily; // 114 + int32 TotemCategory; // 115 + int32 SocketColor[MAX_ITEM_PROTO_SOCKETS]; // 116 - 118 uint32 Content[MAX_ITEM_PROTO_SOCKETS]; // 119 - 121 int32 SocketBonus; // 122 - uint32 GemProperties; // 123 + int32 GemProperties; // 123 float ArmorDamageModifier; // 124 - uint32 Duration; // 125 + int32 Duration; // 125 uint32 ItemLimitCategory; // 126 - uint32 HolidayID; // 127 + int32 HolidayID; // 127 float StatScalingFactor; // 128 int32 CurrencySubstitutionID; // 129 int32 CurrencySubstitutionCount; // 130 diff --git a/src/server/game/DataStores/DB2fmt.h b/src/server/game/DataStores/DB2fmt.h index 4fa9bc67833..a6a21f7041d 100644 --- a/src/server/game/DataStores/DB2fmt.h +++ b/src/server/game/DataStores/DB2fmt.h @@ -20,7 +20,7 @@ char const Itemfmt[]="niiiiiii"; char const ItemCurrencyCostfmt[]="in"; -char const ItemSparsefmt[]="niiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffffffiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiifiiifii"; +char const ItemSparsefmt[]="niiiffiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisssssiiiiiiiiiiiiiiiiiiiiiifiiifii"; char const ItemExtendedCostEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; char const KeyChainfmt[]="nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 02c112bd274..50a91c8f1a3 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -1360,7 +1360,7 @@ uint32 Item::GetSellPrice(ItemTemplate const* proto, bool& normalSellPrice) } normalSellPrice = false; - return uint32(qualityFactor * proto->GetUnk1() * proto->GetUnk2() * typeFactor * baseFactor); + return uint32(qualityFactor * proto->GetPriceRandomValue() * proto->GetPriceVariance() * typeFactor * baseFactor); } } diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index eff4ee0eec2..abdeff7dabe 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -22,15 +22,15 @@ char const* ItemTemplate::GetName(LocaleConstant locale) const { - if (!strlen(ExtendedData->Name->Str[locale])) + if (!strlen(ExtendedData->Display->Str[locale])) return GetDefaultLocaleName(); - return ExtendedData->Name->Str[locale]; + return ExtendedData->Display->Str[locale]; } char const* ItemTemplate::GetDefaultLocaleName() const { - return ExtendedData->Name->Str[sWorld->GetDefaultDbcLocale()]; + return ExtendedData->Display->Str[sWorld->GetDefaultDbcLocale()]; } bool ItemTemplate::CanChangeEquipStateInCombat() const diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index 3270987a0c9..9cd0dd8af89 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -636,8 +636,8 @@ struct ItemTemplate uint32 GetQuality() const { return ExtendedData->Quality; } uint32 GetFlags() const { return ExtendedData->Flags; } uint32 GetFlags2() const { return ExtendedData->Flags2; } - float GetUnk1() const { return ExtendedData->Unk1; } - float GetUnk2() const { return ExtendedData->Unk2; } + float GetPriceRandomValue() const { return ExtendedData->PriceRandomValue; } + float GetPriceVariance() const { return ExtendedData->PriceVariance; } uint32 GetBuyCount() const { return std::max(ExtendedData->BuyCount, 1u); } uint32 GetBuyPrice() const { return ExtendedData->BuyPrice; } uint32 GetSellPrice() const { return ExtendedData->SellPrice; } @@ -668,8 +668,8 @@ struct ItemTemplate uint32 GetRandomProperty() const { return ExtendedData->RandomProperty; } uint32 GetRandomSuffix() const { return ExtendedData->RandomSuffix; } uint32 GetItemSet() const { return ExtendedData->ItemSet; } - uint32 GetArea() const { return ExtendedData->Area; } - uint32 GetMap() const { return ExtendedData->Map; } + uint32 GetArea() const { return ExtendedData->AreaID; } + uint32 GetMap() const { return ExtendedData->MapID; } uint32 GetBagFamily() const { return ExtendedData->BagFamily; } SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(ExtendedData->SocketColor[index]); } uint32 GetSocketBonus() const { return ExtendedData->SocketBonus; } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 99e6fb93ef3..554c6078752 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1231,7 +1231,7 @@ public: auto itr = std::find_if(sItemSparseStore.begin(), sItemSparseStore.end(), [&itemName](ItemSparseEntry const* sparse) { for (uint32 i = 0; i < MAX_LOCALES; ++i) - if (itemName == sparse->Name->Str[i]) + if (itemName == sparse->Display->Str[i]) return true; return false; }); diff --git a/src/server/shared/DataStores/DB2Store.h b/src/server/shared/DataStores/DB2Store.h index 581bd2c600e..c8f21785cc6 100644 --- a/src/server/shared/DataStores/DB2Store.h +++ b/src/server/shared/DataStores/DB2Store.h @@ -98,7 +98,7 @@ public: char const* str = locStr->Str[locale]; std::size_t len = strlen(str); - buffer << uint16(len ? len + 1 : 0); + buffer << uint16(len ? len : 0); if (len) { buffer.append(str, len);