mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-13 03:32:28 -04:00
Core/Items: Implemented secondary shoulder transmog appearance
This commit is contained in:
@@ -3193,11 +3193,19 @@ CREATE TABLE `item_instance_transmog` (
|
||||
`itemModifiedAppearanceSpec2` int(11) NOT NULL DEFAULT '0',
|
||||
`itemModifiedAppearanceSpec3` int(11) NOT NULL DEFAULT '0',
|
||||
`itemModifiedAppearanceSpec4` int(11) NOT NULL DEFAULT '0',
|
||||
`itemModifiedAppearanceSpec5` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentAllSpecs` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentSpec1` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentSpec2` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentSpec3` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentSpec4` int(11) NOT NULL DEFAULT '0',
|
||||
`spellItemEnchantmentSpec5` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceAllSpecs` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceSpec1` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceSpec2` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceSpec3` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceSpec4` int(11) NOT NULL DEFAULT '0',
|
||||
`secondaryItemModifiedAppearanceSpec5` int(11) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`itemGuid`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
/*!40101 SET character_set_client = @saved_cs_client */;
|
||||
@@ -3858,7 +3866,8 @@ INSERT INTO `updates` VALUES
|
||||
('2021_04_05_00_characters.sql','33D656995E0F3578FFE1A658ED1692CA5310AB30','ARCHIVED','2021-04-05 23:44:54',0),
|
||||
('2021_05_10_00_characters.sql','0A406242BC18BDA5A65CDE3E2AFEE760D79F819F','ARCHIVED','2021-05-10 23:30:34',0),
|
||||
('2021_05_11_00_characters.sql','C3F0337CE8363F970AB4FDB9D23BBB7C650A0B0E','ARCHIVED','2021-05-11 15:39:26',0),
|
||||
('2021_07_04_00_characters.sql','E0E7AD664DDB553E96B457DD9ED8976665E94007','ARCHIVED','2021-07-04 22:23:24',0);
|
||||
('2021_07_04_00_characters.sql','E0E7AD664DDB553E96B457DD9ED8976665E94007','ARCHIVED','2021-07-04 22:23:24',0),
|
||||
('2021_08_11_00_characters.sql','2137A52A45B045104B97D39626CE3C0214625B17','RELEASED','2021-08-11 21:48:57',0);
|
||||
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
|
||||
UNLOCK TABLES;
|
||||
|
||||
|
||||
35
sql/updates/characters/master/2021_08_11_00_characters.sql
Normal file
35
sql/updates/characters/master/2021_08_11_00_characters.sql
Normal file
@@ -0,0 +1,35 @@
|
||||
UPDATE `characters` SET `equipmentCache`=CONCAT(
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -93), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -89), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -85), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -81), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -77), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -73), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -69), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -65), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -61), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -57), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -53), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -49), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -45), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -41), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -37), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -33), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -29), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -25), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -21), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -17), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -13), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -9), ' ', 4), ' 0 '),
|
||||
CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -5), ' ', 4), ' 0 ')
|
||||
) WHERE LENGTH(`equipmentCache`) > 0;
|
||||
|
||||
ALTER TABLE `item_instance_transmog`
|
||||
ADD `itemModifiedAppearanceSpec5` int(11) NOT NULL DEFAULT '0' AFTER `itemModifiedAppearanceSpec4`,
|
||||
ADD `spellItemEnchantmentSpec5` int(11) NOT NULL DEFAULT '0' AFTER `spellItemEnchantmentSpec4`,
|
||||
ADD `secondaryItemModifiedAppearanceAllSpecs` int(11) NOT NULL DEFAULT '0' AFTER `spellItemEnchantmentSpec5`,
|
||||
ADD `secondaryItemModifiedAppearanceSpec1` int(11) NOT NULL DEFAULT '0' AFTER `secondaryItemModifiedAppearanceAllSpecs`,
|
||||
ADD `secondaryItemModifiedAppearanceSpec2` int(11) NOT NULL DEFAULT '0' AFTER `secondaryItemModifiedAppearanceSpec1`,
|
||||
ADD `secondaryItemModifiedAppearanceSpec3` int(11) NOT NULL DEFAULT '0' AFTER `secondaryItemModifiedAppearanceSpec2`,
|
||||
ADD `secondaryItemModifiedAppearanceSpec4` int(11) NOT NULL DEFAULT '0' AFTER `secondaryItemModifiedAppearanceSpec3`,
|
||||
ADD `secondaryItemModifiedAppearanceSpec5` int(11) NOT NULL DEFAULT '0' AFTER `secondaryItemModifiedAppearanceSpec4`;
|
||||
@@ -25,8 +25,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
|
||||
#define SelectItemInstanceContent "ii.guid, ii.itemEntry, ii.creatorGuid, ii.giftCreatorGuid, ii.count, ii.duration, ii.charges, ii.flags, ii.enchantments, ii.randomBonusListId, " \
|
||||
"ii.durability, ii.playedTime, ii.text, ii.battlePetSpeciesId, ii.battlePetBreedData, ii.battlePetLevel, ii.battlePetDisplayId, ii.context, ii.bonusListIDs, " \
|
||||
"iit.itemModifiedAppearanceAllSpecs, iit.itemModifiedAppearanceSpec1, iit.itemModifiedAppearanceSpec2, iit.itemModifiedAppearanceSpec3, iit.itemModifiedAppearanceSpec4, " \
|
||||
"iit.spellItemEnchantmentAllSpecs, iit.spellItemEnchantmentSpec1, iit.spellItemEnchantmentSpec2, iit.spellItemEnchantmentSpec3, iit.spellItemEnchantmentSpec4, " \
|
||||
"iit.itemModifiedAppearanceAllSpecs, iit.itemModifiedAppearanceSpec1, iit.itemModifiedAppearanceSpec2, iit.itemModifiedAppearanceSpec3, iit.itemModifiedAppearanceSpec4, iit.itemModifiedAppearanceSpec5, " \
|
||||
"iit.spellItemEnchantmentAllSpecs, iit.spellItemEnchantmentSpec1, iit.spellItemEnchantmentSpec2, iit.spellItemEnchantmentSpec3, iit.spellItemEnchantmentSpec4, iit.spellItemEnchantmentSpec5, " \
|
||||
"iit.secondaryItemModifiedAppearanceAllSpecs, iit.secondaryItemModifiedAppearanceSpec1, iit.secondaryItemModifiedAppearanceSpec2, iit.secondaryItemModifiedAppearanceSpec3, iit.secondaryItemModifiedAppearanceSpec4, iit.itemModifiedAppearanceSpec5, " \
|
||||
"ig.gemItemId1, ig.gemBonuses1, ig.gemContext1, ig.gemScalingLevel1, ig.gemItemId2, ig.gemBonuses2, ig.gemContext2, ig.gemScalingLevel2, ig.gemItemId3, ig.gemBonuses3, ig.gemContext3, ig.gemScalingLevel3, " \
|
||||
"im.fixedScalingLevel, im.artifactKnowledgeLevel"
|
||||
|
||||
@@ -201,8 +202,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(CHAR_INS_ITEM_INSTANCE_GEMS, "INSERT INTO item_instance_gems (itemGuid, gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_GEMS, "DELETE FROM item_instance_gems WHERE itemGuid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_GEMS_BY_OWNER, "DELETE iig FROM item_instance_gems iig LEFT JOIN item_instance ii ON iig.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INS_ITEM_INSTANCE_TRANSMOG, "INSERT INTO item_instance_transmog (itemGuid, itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, "
|
||||
"spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_INS_ITEM_INSTANCE_TRANSMOG, "INSERT INTO item_instance_transmog (itemGuid, itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5, "
|
||||
"spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, spellItemEnchantmentSpec5, "
|
||||
"secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2, secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_TRANSMOG, "DELETE FROM item_instance_transmog WHERE itemGuid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_TRANSMOG_BY_OWNER, "DELETE iit FROM item_instance_transmog iit LEFT JOIN item_instance ii ON iit.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(CHAR_SEL_ITEM_INSTANCE_ARTIFACT, "SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN character_inventory ci ON ci.item = ap.itemGuid WHERE ci.guid = ?", CONNECTION_ASYNC);
|
||||
|
||||
@@ -555,12 +555,12 @@ void AuctionHouseMgr::LoadAuctions()
|
||||
}
|
||||
|
||||
Item* item = NewItemOrBag(proto);
|
||||
if (!item->LoadFromDB(itemGuid, ObjectGuid::Create<HighGuid::Player>(fields[43].GetUInt64()), fields, itemEntry))
|
||||
if (!item->LoadFromDB(itemGuid, ObjectGuid::Create<HighGuid::Player>(fields[51].GetUInt64()), fields, itemEntry))
|
||||
{
|
||||
delete item;
|
||||
continue;
|
||||
}
|
||||
uint32 auctionId = fields[44].GetUInt32();
|
||||
uint32 auctionId = fields[52].GetUInt32();
|
||||
itemsByAuction[auctionId].push_back(item);
|
||||
|
||||
++count;
|
||||
|
||||
@@ -641,19 +641,28 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans)
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
static ItemModifier const transmogMods[10] =
|
||||
static ItemModifier const transmogMods[18] =
|
||||
{
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS,
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_1,
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2,
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_3,
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_4,
|
||||
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_5,
|
||||
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS,
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1,
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2,
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3,
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4,
|
||||
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_5,
|
||||
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_ALL_SPECS,
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_1,
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_2,
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_3,
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_4,
|
||||
ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_5
|
||||
};
|
||||
|
||||
stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_TRANSMOG);
|
||||
@@ -669,11 +678,19 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans)
|
||||
stmt->setUInt32(3, GetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2));
|
||||
stmt->setUInt32(4, GetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_3));
|
||||
stmt->setUInt32(5, GetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_4));
|
||||
stmt->setUInt32(6, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS));
|
||||
stmt->setUInt32(7, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1));
|
||||
stmt->setUInt32(8, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2));
|
||||
stmt->setUInt32(9, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3));
|
||||
stmt->setUInt32(10, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4));
|
||||
stmt->setUInt32(6, GetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_5));
|
||||
stmt->setUInt32(7, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS));
|
||||
stmt->setUInt32(8, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1));
|
||||
stmt->setUInt32(9, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2));
|
||||
stmt->setUInt32(10, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3));
|
||||
stmt->setUInt32(11, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4));
|
||||
stmt->setUInt32(12, GetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_5));
|
||||
stmt->setUInt32(13, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_ALL_SPECS));
|
||||
stmt->setUInt32(14, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_1));
|
||||
stmt->setUInt32(15, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_2));
|
||||
stmt->setUInt32(16, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_3));
|
||||
stmt->setUInt32(17, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_4));
|
||||
stmt->setUInt32(18, GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_5));
|
||||
trans->Append(stmt);
|
||||
}
|
||||
|
||||
@@ -784,13 +801,17 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
|
||||
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, text,
|
||||
// 13 14 15 16 17 18
|
||||
// battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
|
||||
// 19 20 21 22 23
|
||||
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4,
|
||||
// 24 25 26 27 28
|
||||
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4,
|
||||
// 29 30 31 32 33 34 35 36 37 38 39 40
|
||||
// 19 20 21 22 23 24
|
||||
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5,
|
||||
// 25 26 27 28 29 30
|
||||
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, spellItemEnchantmentSpec5,
|
||||
// 31 32 33
|
||||
// secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2,
|
||||
// 34 35 36
|
||||
// secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5,
|
||||
// 37 38 39 40 41 42 43 44 45 46 47 48
|
||||
// gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
|
||||
// 41 42
|
||||
// 49 50
|
||||
// fixedScalingLevel, artifactKnowledgeLevel FROM item_instance
|
||||
|
||||
// create item before any checks for store correct guid
|
||||
@@ -874,32 +895,41 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2, fields[21].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_3, fields[22].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_4, fields[23].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_5, fields[24].GetUInt32());
|
||||
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, fields[24].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1, fields[25].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2, fields[26].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3, fields[27].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4, fields[28].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, fields[25].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1, fields[26].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2, fields[27].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3, fields[28].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4, fields[29].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_5, fields[30].GetUInt32());
|
||||
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_ALL_SPECS, fields[31].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_1, fields[32].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_2, fields[33].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_3, fields[34].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_4, fields[35].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_5, fields[36].GetUInt32());
|
||||
|
||||
uint32 const gemFields = 4;
|
||||
ItemDynamicFieldGems gemData[MAX_GEM_SOCKETS];
|
||||
memset(gemData, 0, sizeof(gemData));
|
||||
for (uint32 i = 0; i < MAX_GEM_SOCKETS; ++i)
|
||||
{
|
||||
gemData[i].ItemId = fields[29 + i * gemFields].GetUInt32();
|
||||
Tokenizer gemBonusListIDs(fields[30 + i * gemFields].GetString(), ' ');
|
||||
gemData[i].ItemId = fields[37 + i * gemFields].GetUInt32();
|
||||
Tokenizer gemBonusListIDs(fields[38 + i * gemFields].GetString(), ' ');
|
||||
uint32 b = 0;
|
||||
for (char const* token : gemBonusListIDs)
|
||||
if (uint32 bonusListID = atoul(token))
|
||||
gemData[i].BonusListIDs[b++] = bonusListID;
|
||||
|
||||
gemData[i].Context = fields[31 + i * gemFields].GetUInt8();
|
||||
gemData[i].Context = fields[39 + i * gemFields].GetUInt8();
|
||||
if (gemData[i].ItemId)
|
||||
SetGem(i, &gemData[i], fields[32 + i * gemFields].GetUInt32());
|
||||
SetGem(i, &gemData[i], fields[40 + i * gemFields].GetUInt32());
|
||||
}
|
||||
|
||||
SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, fields[41].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[42].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, fields[49].GetUInt32());
|
||||
SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[50].GetUInt32());
|
||||
|
||||
// Enchants must be loaded after all other bonus/scaling data
|
||||
Tokenizer enchantmentTokens(fields[8].GetString(), ' ');
|
||||
@@ -2354,6 +2384,15 @@ uint16 Item::GetVisibleAppearanceModId(Player const* owner) const
|
||||
return uint16(GetAppearanceModId());
|
||||
}
|
||||
|
||||
int32 Item::GetVisibleSecondaryModifiedAppearanceId(Player const* owner) const
|
||||
{
|
||||
uint32 itemModifiedAppearanceId = GetModifier(SecondaryAppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]);
|
||||
if (!itemModifiedAppearanceId)
|
||||
itemModifiedAppearanceId = GetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_ALL_SPECS);
|
||||
|
||||
return itemModifiedAppearanceId;
|
||||
}
|
||||
|
||||
uint32 Item::GetVisibleEnchantmentId(Player const* owner) const
|
||||
{
|
||||
uint32 enchantmentId = GetModifier(IllusionModifierSlotBySpec[owner->GetActiveTalentGroup()]);
|
||||
|
||||
@@ -395,6 +395,7 @@ class TC_GAME_API Item : public Object
|
||||
|
||||
uint32 GetVisibleEntry(Player const* owner) const;
|
||||
uint16 GetVisibleAppearanceModId(Player const* owner) const;
|
||||
int32 GetVisibleSecondaryModifiedAppearanceId(Player const* owner) const;
|
||||
uint32 GetVisibleEnchantmentId(Player const* owner) const;
|
||||
uint16 GetVisibleItemVisual(Player const* owner) const;
|
||||
|
||||
|
||||
@@ -868,7 +868,7 @@ bool UnitChannel::operator==(UnitChannel const& right) const
|
||||
void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const
|
||||
{
|
||||
data << int32(ItemID);
|
||||
data << int32(ItemModifiedAppearanceID);
|
||||
data << int32(SecondaryItemModifiedAppearanceID);
|
||||
data << uint16(ItemAppearanceModID);
|
||||
data << uint16(ItemVisual);
|
||||
}
|
||||
@@ -890,7 +890,7 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
|
||||
}
|
||||
if (changesMask[2])
|
||||
{
|
||||
data << int32(ItemModifiedAppearanceID);
|
||||
data << int32(SecondaryItemModifiedAppearanceID);
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
@@ -906,7 +906,7 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con
|
||||
void VisibleItem::ClearChangesMask()
|
||||
{
|
||||
Base::ClearChangesMask(ItemID);
|
||||
Base::ClearChangesMask(ItemModifiedAppearanceID);
|
||||
Base::ClearChangesMask(SecondaryItemModifiedAppearanceID);
|
||||
Base::ClearChangesMask(ItemAppearanceModID);
|
||||
Base::ClearChangesMask(ItemVisual);
|
||||
_changesMask.ResetAll();
|
||||
|
||||
@@ -232,7 +232,7 @@ struct UnitChannel : public IsUpdateFieldStructureTag
|
||||
struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<5>
|
||||
{
|
||||
UpdateField<int32, 0, 1> ItemID;
|
||||
UpdateField<int32, 0, 2> ItemModifiedAppearanceID;
|
||||
UpdateField<int32, 0, 2> SecondaryItemModifiedAppearanceID;
|
||||
UpdateField<uint16, 0, 3> ItemAppearanceModID;
|
||||
UpdateField<uint16, 0, 4> ItemVisual;
|
||||
|
||||
|
||||
@@ -12488,12 +12488,14 @@ void Player::SetVisibleItemSlot(uint8 slot, Item* pItem)
|
||||
if (pItem)
|
||||
{
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), pItem->GetVisibleEntry(this));
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), pItem->GetVisibleSecondaryModifiedAppearanceId(this));
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), pItem->GetVisibleAppearanceModId(this));
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), pItem->GetVisibleItemVisual(this));
|
||||
}
|
||||
else
|
||||
{
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), 0);
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::SecondaryItemModifiedAppearanceID), 0);
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), 0);
|
||||
SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), 0);
|
||||
}
|
||||
@@ -18870,8 +18872,8 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
|
||||
azeriteEmpoweredItem->LoadAzeriteEmpoweredItemData(this, *addionalDataPtr->AzeriteEmpoweredItem);
|
||||
}
|
||||
|
||||
ObjectGuid bagGuid = fields[43].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[43].GetUInt64()) : ObjectGuid::Empty;
|
||||
uint8 slot = fields[44].GetUInt8();
|
||||
ObjectGuid bagGuid = fields[51].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[51].GetUInt64()) : ObjectGuid::Empty;
|
||||
uint8 slot = fields[52].GetUInt8();
|
||||
|
||||
GetSession()->GetCollectionMgr()->CheckHeirloomUpgrades(item);
|
||||
GetSession()->GetCollectionMgr()->AddItemAppearance(item);
|
||||
@@ -19213,7 +19215,7 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint
|
||||
|
||||
Item* item = NewItemOrBag(proto);
|
||||
|
||||
ObjectGuid ownerGuid = fields[43].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[43].GetUInt64()) : ObjectGuid::Empty;
|
||||
ObjectGuid ownerGuid = fields[51].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[51].GetUInt64()) : ObjectGuid::Empty;
|
||||
if (!item->LoadFromDB(itemGuid, ownerGuid, fields, itemEntry))
|
||||
{
|
||||
TC_LOG_ERROR("entities.player", "Player::_LoadMailedItems: Item (GUID: " UI64FMTD ") in mail (%u) doesn't exist, deleted from mail.", itemGuid, mailId);
|
||||
@@ -19344,7 +19346,7 @@ void Player::_LoadMail()
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
uint32 mailId = fields[44].GetUInt32();
|
||||
uint32 mailId = fields[52].GetUInt32();
|
||||
_LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64()));
|
||||
}
|
||||
while (result->NextRow());
|
||||
@@ -20397,10 +20399,12 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
|
||||
else
|
||||
ss << '0';
|
||||
|
||||
ss << ' ' << uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' ';
|
||||
ss << ' '
|
||||
<< uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' '
|
||||
<< uint32(item->GetVisibleSecondaryModifiedAppearanceId(this)) << ' ';
|
||||
}
|
||||
else
|
||||
ss << "0 0 0 0 ";
|
||||
ss << "0 0 0 0 0 ";
|
||||
}
|
||||
|
||||
stmt->setString(index++, ss.str());
|
||||
@@ -20540,10 +20544,12 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
|
||||
else
|
||||
ss << '0';
|
||||
|
||||
ss << ' ' << uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' ';
|
||||
ss << ' '
|
||||
<< uint32(sItemStore.AssertEntry(item->GetVisibleEntry(this))->SubclassID) << ' '
|
||||
<< uint32(item->GetVisibleSecondaryModifiedAppearanceId(this)) << ' ';
|
||||
}
|
||||
else
|
||||
ss << "0 0 0 0 ";
|
||||
ss << "0 0 0 0 0 ";
|
||||
}
|
||||
|
||||
stmt->setString(index++, ss.str());
|
||||
|
||||
@@ -376,7 +376,7 @@ void Guild::BankTab::LoadFromDB(Field* fields)
|
||||
|
||||
bool Guild::BankTab::LoadItemFromDB(Field* fields)
|
||||
{
|
||||
uint8 slotId = fields[45].GetUInt8();
|
||||
uint8 slotId = fields[53].GetUInt8();
|
||||
ObjectGuid::LowType itemGuid = fields[0].GetUInt64();
|
||||
uint32 itemEntry = fields[1].GetUInt32();
|
||||
if (slotId >= GUILD_BANK_MAX_SLOTS)
|
||||
@@ -2510,7 +2510,7 @@ void Guild::LoadBankTabFromDB(Field* fields)
|
||||
|
||||
bool Guild::LoadBankItemFromDB(Field* fields)
|
||||
{
|
||||
uint8 tabId = fields[44].GetUInt8();
|
||||
uint8 tabId = fields[52].GetUInt8();
|
||||
if (tabId >= _GetPurchasedTabsSize())
|
||||
{
|
||||
TC_LOG_ERROR("guild", "Invalid tab for item (GUID: %u, id: #%u) in guild bank, skipped.",
|
||||
|
||||
@@ -408,19 +408,23 @@ void GuildMgr::LoadGuilds()
|
||||
// Delete orphan guild bank items
|
||||
CharacterDatabase.DirectExecute("DELETE gbi FROM guild_bank_item gbi LEFT JOIN guild g ON gbi.guildId = g.guildId WHERE g.guildId IS NULL");
|
||||
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text,
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12
|
||||
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, text,
|
||||
// 13 14 15 16 17 18
|
||||
// battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
|
||||
// 19 20 21 22 23
|
||||
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4,
|
||||
// 24 25 26 27 28
|
||||
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4,
|
||||
// 29 30 31 32 33 34 35 36 37 38 39 40
|
||||
// 19 20 21 22 23 24
|
||||
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5,
|
||||
// 25 26 27 28 29 30
|
||||
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4, spellItemEnchantmentSpec5,
|
||||
// 31 32 33
|
||||
// secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2,
|
||||
// 34 35 36
|
||||
// secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5,
|
||||
// 37 38 39 40 41 42 43 44 45 46 47 48
|
||||
// gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
|
||||
// 41 42
|
||||
// 49 50
|
||||
// fixedScalingLevel, artifactKnowledgeLevel
|
||||
// 43 44 45
|
||||
// 51 52 53
|
||||
// guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid
|
||||
|
||||
PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_BANK_ITEMS));
|
||||
@@ -434,7 +438,7 @@ void GuildMgr::LoadGuilds()
|
||||
do
|
||||
{
|
||||
Field* fields = result->Fetch();
|
||||
uint64 guildId = fields[43].GetUInt64();
|
||||
uint64 guildId = fields[51].GetUInt64();
|
||||
|
||||
if (Guild* guild = GetGuildById(guildId))
|
||||
guild->LoadBankItemFromDB(fields);
|
||||
|
||||
@@ -108,10 +108,10 @@ void WorldSession::HandleTransmogrifyItems(WorldPackets::Transmogrification::Tra
|
||||
|
||||
if (transmogItem.ItemModifiedAppearanceID || transmogItem.SecondaryItemModifiedAppearanceID)
|
||||
{
|
||||
if (!validateAndStoreTransmogItem(itemTransmogrified, transmogItem.ItemModifiedAppearanceID, false))
|
||||
if (transmogItem.ItemModifiedAppearanceID && !validateAndStoreTransmogItem(itemTransmogrified, transmogItem.ItemModifiedAppearanceID, false))
|
||||
return;
|
||||
|
||||
if (!validateAndStoreTransmogItem(itemTransmogrified, transmogItem.SecondaryItemModifiedAppearanceID, true))
|
||||
if (transmogItem.SecondaryItemModifiedAppearanceID && !validateAndStoreTransmogItem(itemTransmogrified, transmogItem.SecondaryItemModifiedAppearanceID, true))
|
||||
return;
|
||||
|
||||
// add cost
|
||||
|
||||
@@ -142,11 +142,12 @@ EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields)
|
||||
|
||||
for (uint8 slot = 0; slot < INVENTORY_SLOT_BAG_END; ++slot)
|
||||
{
|
||||
uint32 visualBase = slot * 4;
|
||||
uint32 visualBase = slot * 5;
|
||||
VisualItems[slot].InvType = Player::GetUInt32ValueFromArray(equipment, visualBase);
|
||||
VisualItems[slot].DisplayID = Player::GetUInt32ValueFromArray(equipment, visualBase + 1);
|
||||
VisualItems[slot].DisplayEnchantID = Player::GetUInt32ValueFromArray(equipment, visualBase + 2);
|
||||
VisualItems[slot].Subclass = Player::GetUInt32ValueFromArray(equipment, visualBase + 3);
|
||||
VisualItems[slot].SecondaryItemModifiedAppearanceID = Player::GetUInt32ValueFromArray(equipment, visualBase + 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,7 +155,7 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo::Vi
|
||||
{
|
||||
data << uint32(visualItem.DisplayID);
|
||||
data << uint32(visualItem.DisplayEnchantID);
|
||||
data << int32(visualItem.ItemModifiedAppearanceID);
|
||||
data << int32(visualItem.SecondaryItemModifiedAppearanceID);
|
||||
data << uint8(visualItem.InvType);
|
||||
data << uint8(visualItem.Subclass);
|
||||
|
||||
|
||||
@@ -154,7 +154,7 @@ namespace WorldPackets
|
||||
{
|
||||
uint32 DisplayID = 0;
|
||||
uint32 DisplayEnchantID = 0;
|
||||
int32 ItemModifiedAppearanceID = 0; // also -1 is some special value
|
||||
int32 SecondaryItemModifiedAppearanceID = 0; // also -1 is some special value
|
||||
uint8 InvType = 0;
|
||||
uint8 Subclass = 0;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user