aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql4
-rw-r--r--sql/updates/characters/2012_07_30_01_world_void_storage_434.sql2
-rwxr-xr-xsrc/server/game/Entities/Player/Player.cpp12
-rwxr-xr-xsrc/server/game/Entities/Player/Player.h8
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp15
-rwxr-xr-xsrc/server/shared/Database/Implementation/CharacterDatabase.cpp4
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);
}