aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
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/server/game
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/server/game')
-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
3 files changed, 24 insertions, 11 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);