rework
This commit is contained in:
@@ -97,8 +97,8 @@ namespace
|
|||||||
}
|
}
|
||||||
|
|
||||||
CollectionMgr::CollectionMgr(WorldSession* owner) : _owner(owner),
|
CollectionMgr::CollectionMgr(WorldSession* owner) : _owner(owner),
|
||||||
_appearances(std::make_unique<boost::dynamic_bitset<uint32>>()),
|
_appearances(std::make_unique<boost::dynamic_bitset<uint32>>()),
|
||||||
_transmogIllusions(std::make_unique<boost::dynamic_bitset<uint32>>())
|
_transmogIllusions(std::make_unique<boost::dynamic_bitset<uint32>>())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ void CollectionMgr::ToyClearFanfare(uint32 itemId)
|
|||||||
if (itr == _toys.end())
|
if (itr == _toys.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
itr->second &= ~ ToyFlags::HasFanfare;
|
itr->second &= ~ToyFlags::HasFanfare;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollectionMgr::OnItemAdded(Item* item)
|
void CollectionMgr::OnItemAdded(Item* item)
|
||||||
@@ -481,7 +481,7 @@ struct DynamicBitsetBlockOutputIterator
|
|||||||
using pointer = void;
|
using pointer = void;
|
||||||
using reference = void;
|
using reference = void;
|
||||||
|
|
||||||
explicit DynamicBitsetBlockOutputIterator(OutputAction const& action) : _action(&action) { }
|
explicit DynamicBitsetBlockOutputIterator(OutputAction const& action) : _action(&action) {}
|
||||||
|
|
||||||
DynamicBitsetBlockOutputIterator& operator=(uint32 value)
|
DynamicBitsetBlockOutputIterator& operator=(uint32 value)
|
||||||
{
|
{
|
||||||
@@ -501,9 +501,9 @@ void CollectionMgr::LoadItemAppearances()
|
|||||||
{
|
{
|
||||||
Player* owner = _owner->GetPlayer();
|
Player* owner = _owner->GetPlayer();
|
||||||
boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
|
boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
|
||||||
{
|
{
|
||||||
owner->AddTransmogBlock(blockValue);
|
owner->AddTransmogBlock(blockValue);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
for (auto const& [itemModifiedAppearanceId, _] : _temporaryAppearances)
|
for (auto const& [itemModifiedAppearanceId, _] : _temporaryAppearances)
|
||||||
owner->AddConditionalTransmog(itemModifiedAppearanceId);
|
owner->AddConditionalTransmog(itemModifiedAppearanceId);
|
||||||
@@ -567,43 +567,43 @@ void CollectionMgr::SaveAccountItemAppearances(LoginDatabaseTransaction trans)
|
|||||||
{
|
{
|
||||||
uint16 blockIndex = 0;
|
uint16 blockIndex = 0;
|
||||||
boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([this, &blockIndex, trans = trans.get()](uint32 blockValue)
|
boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([this, &blockIndex, trans = trans.get()](uint32 blockValue)
|
||||||
{
|
|
||||||
if (blockValue) // this table is only appended/bits are set (never cleared) so don't save empty blocks
|
|
||||||
{
|
{
|
||||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_ITEM_APPEARANCES);
|
if (blockValue) // this table is only appended/bits are set (never cleared) so don't save empty blocks
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
{
|
||||||
stmt->setUInt16(1, blockIndex);
|
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_ITEM_APPEARANCES);
|
||||||
stmt->setUInt32(2, blockValue);
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
trans->Append(stmt);
|
stmt->setUInt16(1, blockIndex);
|
||||||
}
|
stmt->setUInt32(2, blockValue);
|
||||||
|
trans->Append(stmt);
|
||||||
|
}
|
||||||
|
|
||||||
++blockIndex;
|
++blockIndex;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
LoginDatabasePreparedStatement* stmt;
|
LoginDatabasePreparedStatement* stmt;
|
||||||
for (auto itr = _favoriteAppearances.begin(); itr != _favoriteAppearances.end();)
|
for (auto itr = _favoriteAppearances.begin(); itr != _favoriteAppearances.end();)
|
||||||
{
|
{
|
||||||
switch (itr->second)
|
switch (itr->second)
|
||||||
{
|
{
|
||||||
case CollectionItemState::New:
|
case CollectionItemState::New:
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_ITEM_FAVORITE_APPEARANCE);
|
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_ITEM_FAVORITE_APPEARANCE);
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
stmt->setUInt32(1, itr->first);
|
stmt->setUInt32(1, itr->first);
|
||||||
trans->Append(stmt);
|
trans->Append(stmt);
|
||||||
itr->second = CollectionItemState::Unchanged;
|
itr->second = CollectionItemState::Unchanged;
|
||||||
++itr;
|
++itr;
|
||||||
break;
|
break;
|
||||||
case CollectionItemState::Removed:
|
case CollectionItemState::Removed:
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BNET_ITEM_FAVORITE_APPEARANCE);
|
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BNET_ITEM_FAVORITE_APPEARANCE);
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
stmt->setUInt32(1, itr->first);
|
stmt->setUInt32(1, itr->first);
|
||||||
trans->Append(stmt);
|
trans->Append(stmt);
|
||||||
itr = _favoriteAppearances.erase(itr);
|
itr = _favoriteAppearances.erase(itr);
|
||||||
break;
|
break;
|
||||||
case CollectionItemState::Unchanged:
|
case CollectionItemState::Unchanged:
|
||||||
case CollectionItemState::Changed:
|
case CollectionItemState::Changed:
|
||||||
++itr;
|
++itr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -697,46 +697,46 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi
|
|||||||
|
|
||||||
switch (itemTemplate->GetClass())
|
switch (itemTemplate->GetClass())
|
||||||
{
|
{
|
||||||
case ITEM_CLASS_WEAPON:
|
case ITEM_CLASS_WEAPON:
|
||||||
|
{
|
||||||
|
if (itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_EXOTIC ||
|
||||||
|
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_EXOTIC2 ||
|
||||||
|
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_MISCELLANEOUS ||
|
||||||
|
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_THROWN ||
|
||||||
|
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_SPEAR ||
|
||||||
|
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_FISHING_POLE)
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case ITEM_CLASS_ARMOR:
|
||||||
|
{
|
||||||
|
switch (itemTemplate->GetInventoryType())
|
||||||
{
|
{
|
||||||
if (itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_EXOTIC ||
|
case INVTYPE_BODY:
|
||||||
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_EXOTIC2 ||
|
case INVTYPE_SHIELD:
|
||||||
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_MISCELLANEOUS ||
|
case INVTYPE_CLOAK:
|
||||||
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_THROWN ||
|
case INVTYPE_TABARD:
|
||||||
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_SPEAR ||
|
case INVTYPE_HOLDABLE:
|
||||||
itemTemplate->GetSubClass() == ITEM_SUBCLASS_WEAPON_FISHING_POLE)
|
break;
|
||||||
|
case INVTYPE_HEAD:
|
||||||
|
case INVTYPE_SHOULDERS:
|
||||||
|
case INVTYPE_CHEST:
|
||||||
|
case INVTYPE_WAIST:
|
||||||
|
case INVTYPE_LEGS:
|
||||||
|
case INVTYPE_FEET:
|
||||||
|
case INVTYPE_WRISTS:
|
||||||
|
case INVTYPE_HANDS:
|
||||||
|
case INVTYPE_ROBE:
|
||||||
|
if (itemTemplate->GetSubClass() == ITEM_SUBCLASS_ARMOR_MISCELLANEOUS)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case ITEM_CLASS_ARMOR:
|
|
||||||
{
|
|
||||||
switch (itemTemplate->GetInventoryType())
|
|
||||||
{
|
|
||||||
case INVTYPE_BODY:
|
|
||||||
case INVTYPE_SHIELD:
|
|
||||||
case INVTYPE_CLOAK:
|
|
||||||
case INVTYPE_TABARD:
|
|
||||||
case INVTYPE_HOLDABLE:
|
|
||||||
break;
|
|
||||||
case INVTYPE_HEAD:
|
|
||||||
case INVTYPE_SHOULDERS:
|
|
||||||
case INVTYPE_CHEST:
|
|
||||||
case INVTYPE_WAIST:
|
|
||||||
case INVTYPE_LEGS:
|
|
||||||
case INVTYPE_FEET:
|
|
||||||
case INVTYPE_WRISTS:
|
|
||||||
case INVTYPE_HANDS:
|
|
||||||
case INVTYPE_ROBE:
|
|
||||||
if (itemTemplate->GetSubClass() == ITEM_SUBCLASS_ARMOR_MISCELLANEOUS)
|
|
||||||
return false;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itemModifiedAppearance->ID < _appearances->size() && _appearances->test(itemModifiedAppearance->ID))
|
if (itemModifiedAppearance->ID < _appearances->size() && _appearances->test(itemModifiedAppearance->ID))
|
||||||
@@ -895,9 +895,9 @@ void CollectionMgr::LoadTransmogIllusions()
|
|||||||
{
|
{
|
||||||
Player* owner = _owner->GetPlayer();
|
Player* owner = _owner->GetPlayer();
|
||||||
boost::to_block_range(*_transmogIllusions, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
|
boost::to_block_range(*_transmogIllusions, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue)
|
||||||
{
|
{
|
||||||
owner->AddIllusionBlock(blockValue);
|
owner->AddIllusionBlock(blockValue);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollectionMgr::LoadAccountTransmogIllusions(PreparedQueryResult knownTransmogIllusions)
|
void CollectionMgr::LoadAccountTransmogIllusions(PreparedQueryResult knownTransmogIllusions)
|
||||||
@@ -946,17 +946,17 @@ void CollectionMgr::SaveAccountTransmogIllusions(LoginDatabaseTransaction trans)
|
|||||||
uint16 blockIndex = 0;
|
uint16 blockIndex = 0;
|
||||||
|
|
||||||
boost::to_block_range(*_transmogIllusions, DynamicBitsetBlockOutputIterator([this, &blockIndex, trans = trans.get()](uint32 blockValue)
|
boost::to_block_range(*_transmogIllusions, DynamicBitsetBlockOutputIterator([this, &blockIndex, trans = trans.get()](uint32 blockValue)
|
||||||
{
|
|
||||||
if (blockValue) // this table is only appended/bits are set (never cleared) so don't save empty blocks
|
|
||||||
{
|
{
|
||||||
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_TRANSMOG_ILLUSIONS);
|
if (blockValue) // this table is only appended/bits are set (never cleared) so don't save empty blocks
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
{
|
||||||
stmt->setUInt16(1, blockIndex);
|
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_TRANSMOG_ILLUSIONS);
|
||||||
stmt->setUInt32(2, blockValue);
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
trans->Append(stmt);
|
stmt->setUInt16(1, blockIndex);
|
||||||
}
|
stmt->setUInt32(2, blockValue);
|
||||||
++blockIndex;
|
trans->Append(stmt);
|
||||||
}));
|
}
|
||||||
|
++blockIndex;
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CollectionMgr::AddTransmogIllusion(uint32 transmogIllusionId)
|
void CollectionMgr::AddTransmogIllusion(uint32 transmogIllusionId)
|
||||||
@@ -1079,36 +1079,36 @@ void CollectionMgr::SaveAccountWarbandScenes(LoginDatabaseTransaction trans)
|
|||||||
auto& [warbandSceneId, data] = *itr;
|
auto& [warbandSceneId, data] = *itr;
|
||||||
switch (data.State)
|
switch (data.State)
|
||||||
{
|
{
|
||||||
case CollectionItemState::New:
|
case CollectionItemState::New:
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_WARBAND_SCENE);
|
stmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_WARBAND_SCENE);
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
stmt->setUInt32(1, warbandSceneId);
|
stmt->setUInt32(1, warbandSceneId);
|
||||||
stmt->setBool(2, data.Flags.HasFlag(WarbandSceneCollectionFlags::Favorite));
|
stmt->setBool(2, data.Flags.HasFlag(WarbandSceneCollectionFlags::Favorite));
|
||||||
stmt->setBool(3, data.Flags.HasFlag(WarbandSceneCollectionFlags::HasFanfare));
|
stmt->setBool(3, data.Flags.HasFlag(WarbandSceneCollectionFlags::HasFanfare));
|
||||||
trans->Append(stmt);
|
trans->Append(stmt);
|
||||||
data.State = CollectionItemState::Unchanged;
|
data.State = CollectionItemState::Unchanged;
|
||||||
++itr;
|
++itr;
|
||||||
break;
|
break;
|
||||||
case CollectionItemState::Changed:
|
case CollectionItemState::Changed:
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_BNET_WARBAND_SCENE);
|
stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_BNET_WARBAND_SCENE);
|
||||||
stmt->setBool(0, data.Flags.HasFlag(WarbandSceneCollectionFlags::Favorite));
|
stmt->setBool(0, data.Flags.HasFlag(WarbandSceneCollectionFlags::Favorite));
|
||||||
stmt->setBool(1, data.Flags.HasFlag(WarbandSceneCollectionFlags::HasFanfare));
|
stmt->setBool(1, data.Flags.HasFlag(WarbandSceneCollectionFlags::HasFanfare));
|
||||||
stmt->setUInt32(2, _owner->GetBattlenetAccountId());
|
stmt->setUInt32(2, _owner->GetBattlenetAccountId());
|
||||||
stmt->setUInt32(3, warbandSceneId);
|
stmt->setUInt32(3, warbandSceneId);
|
||||||
trans->Append(stmt);
|
trans->Append(stmt);
|
||||||
data.State = CollectionItemState::Unchanged;
|
data.State = CollectionItemState::Unchanged;
|
||||||
++itr;
|
++itr;
|
||||||
break;
|
break;
|
||||||
case CollectionItemState::Removed:
|
case CollectionItemState::Removed:
|
||||||
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BNET_WARBAND_SCENE);
|
stmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BNET_WARBAND_SCENE);
|
||||||
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
stmt->setUInt32(0, _owner->GetBattlenetAccountId());
|
||||||
stmt->setUInt32(1, warbandSceneId);
|
stmt->setUInt32(1, warbandSceneId);
|
||||||
trans->Append(stmt);
|
trans->Append(stmt);
|
||||||
itr = _warbandScenes.erase(itr);
|
itr = _warbandScenes.erase(itr);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
++itr;
|
++itr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user