aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2012-07-30 18:34:39 +0100
committerNay <dnpd.dd@gmail.com>2012-07-30 18:34:39 +0100
commit940f655a3c61c80e9823855df1fbc4630a698926 (patch)
tree7a74c41d8d05437c13dc5050833516d4ab43961e /src
parent3df10d8273dda4a2cf98f5b300f6c4132730dd7f (diff)
Core/VS: Allow to store/retrive random stats items in void storage
Also set items to soulbound on withdraw
Diffstat (limited to 'src')
-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
4 files changed, 26 insertions, 13 deletions
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);
}