diff options
-rw-r--r-- | sql/base/characters_database.sql | 4 | ||||
-rw-r--r-- | sql/updates/characters/2012_07_30_01_world_void_storage_434.sql | 2 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 12 | ||||
-rwxr-xr-x | src/server/game/Entities/Player/Player.h | 8 | ||||
-rw-r--r-- | src/server/game/Handlers/VoidStorageHandler.cpp | 15 | ||||
-rwxr-xr-x | src/server/shared/Database/Implementation/CharacterDatabase.cpp | 4 |
6 files changed, 31 insertions, 14 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index f42c8f2e6ad..fdddd8c982b 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2278,6 +2278,8 @@ CREATE TABLE `void_storage` ( `itemEntry` mediumint(8) unsigned NOT NULL, `slot` tinyint(3) unsigned NOT NULL, `creatorGuid` int(10) unsigned NOT NULL DEFAULT '0', + `randomProperty` int(10) unsigned NOT NULL DEFAULT '0', + `suffixFactor` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`itemId`), UNIQUE KEY `idx_player_slot` (`playerGuid`,`slot`), KEY `idx_player` (`playerGuid`) @@ -2350,4 +2352,4 @@ UNLOCK TABLES; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2012-07-30 16:34:12 +-- Dump completed on 2012-07-30 17:01:47 diff --git a/sql/updates/characters/2012_07_30_01_world_void_storage_434.sql b/sql/updates/characters/2012_07_30_01_world_void_storage_434.sql new file mode 100644 index 00000000000..cd2cb0f0b9e --- /dev/null +++ b/sql/updates/characters/2012_07_30_01_world_void_storage_434.sql @@ -0,0 +1,2 @@ +ALTER TABLE `void_storage` ADD `randomProperty` int(10) unsigned NOT NULL DEFAULT '0'; +ALTER TABLE `void_storage` ADD `suffixFactor` int(10) unsigned NOT NULL DEFAULT '0'; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 509585fb5f1..19c61b7013d 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17676,6 +17676,8 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) uint32 itemEntry = fields[1].GetUInt32(); uint8 slot = fields[2].GetUInt8(); uint32 creatorGuid = fields[3].GetUInt32(); + uint32 randomProperty = fields[4].GetUInt32(); + uint32 suffixFactor = fields[5].GetUInt32(); if (!itemId) { @@ -17701,7 +17703,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) creatorGuid = 0; } - _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid); + _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, suffixFactor); } while (result->NextRow()); } @@ -19227,6 +19229,8 @@ void Player::_SaveVoidStorage(SQLTransaction& trans) stmt->setUInt32(2, _voidStorageItems[i]->ItemEntry); stmt->setUInt8(3, i); stmt->setUInt32(4, _voidStorageItems[i]->CreatorGuid); + stmt->setUInt32(5, _voidStorageItems[i]->ItemRandomPropertyId); + stmt->setUInt32(6, _voidStorageItems[i]->ItemSuffixFactor); } trans->Append(stmt); @@ -25714,7 +25718,8 @@ uint8 Player::AddVoidStorageItem(const VoidStorageItem& item) return -1; } - _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemEntry, item.CreatorGuid); + _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemEntry, + item.CreatorGuid, item.ItemRandomPropertyId, item.ItemSuffixFactor); return slot; } @@ -25733,7 +25738,8 @@ void Player::AddVoidStorageItemAtSlot(uint8 slot, const VoidStorageItem& item) return; } - _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemId, item.CreatorGuid); + _voidStorageItems[slot] = new VoidStorageItem(item.ItemId, item.ItemId, + item.CreatorGuid, item.ItemRandomPropertyId, item.ItemSuffixFactor); } void Player::DeleteVoidStorageItem(uint8 slot) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 6b8686a7c0e..d29d03e9df7 100755 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -987,18 +987,24 @@ struct VoidStorageItem ItemId = 0; ItemEntry = 0; CreatorGuid = 0; + ItemRandomPropertyId = 0; + ItemSuffixFactor = 0; } - VoidStorageItem(uint64 id, uint32 entry, uint32 creator) + VoidStorageItem(uint64 id, uint32 entry, uint32 creator, uint32 randomPropertyId, uint32 suffixFactor) { ItemId = id; ItemEntry = entry; CreatorGuid = creator; + ItemRandomPropertyId = randomPropertyId; + ItemSuffixFactor = suffixFactor; } uint64 ItemId; uint32 ItemEntry; uint32 CreatorGuid; + uint32 ItemRandomPropertyId; + uint32 ItemSuffixFactor; }; class TradeData diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp index 0a0cc32e535..cc89bddb289 100644 --- a/src/server/game/Handlers/VoidStorageHandler.cpp +++ b/src/server/game/Handlers/VoidStorageHandler.cpp @@ -151,7 +151,7 @@ void WorldSession::HandleVoidStorageQuery(WorldPacket& recvData) itemData.WriteByteSeq(creatorGuid[3]); - itemData << int32(0); // unk, SuffixFactor? large ints, both positive and negative appear here + itemData << uint32(item->ItemSuffixFactor); itemData.WriteByteSeq(creatorGuid[4]); @@ -161,7 +161,7 @@ void WorldSession::HandleVoidStorageQuery(WorldPacket& recvData) itemData.WriteByteSeq(itemId[6]); itemData.WriteByteSeq(creatorGuid[0]); - itemData << int32(0); // unk, usually 0, not always + itemData << uint32(item->ItemRandomPropertyId); itemData.WriteByteSeq(itemId[4]); itemData.WriteByteSeq(itemId[5]); @@ -335,7 +335,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData) continue; } - VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetUInt64Value(ITEM_FIELD_CREATOR)); + VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetUInt64Value(ITEM_FIELD_CREATOR), item->GetItemRandomPropertyId(), item->GetItemSuffixFactor()); uint8 slot = player->AddVoidStorageItem(itemVS); @@ -369,9 +369,10 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData) return; } - Item* item = player->StoreNewItem(dest, itemVS->ItemEntry, true); + Item* item = player->StoreNewItem(dest, itemVS->ItemEntry, true, itemVS->ItemRandomPropertyId); item->SetUInt64Value(ITEM_FIELD_CREATOR, uint64(itemVS->CreatorGuid)); - player->SendNewItem(item, 1, true, false, false); + item->SetBinding(true); + player->SendNewItem(item, 1, false, false, false); withdrawItems[withdrawCount++] = *itemVS; @@ -439,7 +440,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData) ObjectGuid itemId = depositItems[i].first.ItemId; ObjectGuid creatorGuid = depositItems[i].first.CreatorGuid; - data << int32(0); // unk + data << uint32(depositItems[i].first.ItemSuffixFactor); data.WriteByteSeq(itemId[6]); data.WriteByteSeq(itemId[4]); @@ -464,7 +465,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPacket& recvData) data.WriteByteSeq(creatorGuid[2]); data.WriteByteSeq(itemId[7]); - data << int32(0); // unk + data << uint32(depositItems[i].first.ItemRandomPropertyId); } SendPacket(&data); diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp index dc5548ccfb7..1d6d9be4a33 100755 --- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp @@ -556,7 +556,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PREPARE_STATEMENT(CHAR_DEL_CHAR_ACTION_EXCEPT_SPEC, "DELETE FROM character_action WHERE spec<>? AND guid = ?", CONNECTION_ASYNC); PREPARE_STATEMENT(CHAR_SEL_CHAR_PET_BY_ENTRY_AND_SLOT, "SELECT id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType FROM character_pet WHERE owner = ? AND slot = ?", CONNECTION_SYNCH); - PREPARE_STATEMENT(CHAR_SEL_VOID_STORAGE, "SELECT itemid, itemEntry, slot, creatorGuid FROM void_storage WHERE playerGuid = ?", CONNECTION_ASYNC); - PREPARE_STATEMENT(CHAR_REP_VOID_STORAGE_ITEM, "REPLACE INTO void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid) VALUES (?, ?, ?, ?, ?)", CONNECTION_ASYNC) + PREPARE_STATEMENT(CHAR_SEL_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomProperty, suffixFactor FROM void_storage WHERE playerGuid = ?", CONNECTION_ASYNC); + PREPARE_STATEMENT(CHAR_REP_VOID_STORAGE_ITEM, "REPLACE INTO void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomProperty, suffixFactor) VALUES (?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC) PREPARE_STATEMENT(CHAR_DEL_VOID_STORAGE_ITEM_BY_SLOT, "DELETE FROM void_storage WHERE slot = ? AND playerGuid = ?", CONNECTION_ASYNC); } |