[Bug Fix] Fix client hotbar exchanging items when zoning (#4460)

* Add an exception process to assigning item serial numbers to correct a bug in the client hot bar clicky system.

* fixed missing guid in replace statement

* added snapshot support

* upate #show inventory command to protect against crash conditions
This commit is contained in:
Mitch Freeman
2024-08-26 23:58:07 -03:00
committed by GitHub
parent 8d8ef6d480
commit 3da24fffa4
8 changed files with 181 additions and 91 deletions
+11 -12
View File
@@ -160,23 +160,22 @@ void ShowInventory(Client *c, const Seperator *sep)
linker.SetItemInst(inst_main);
if (item_data) {
if (item_data && inst_main) {
//auto inst = c->GetInv().GetItem(scope_bit & peekWorld ? EQ::invslot::WORLD_BEGIN + index_main : index_main);
c->Message(
Chat::White,
fmt::format(
"Slot {} | {} ({}/{}){}",
((scope_bit & peekWorld) ? (EQ::invslot::WORLD_BEGIN + index_main) : index_main),
scope_bit & peekWorld ? EQ::invslot::WORLD_BEGIN + index_main : index_main,
linker.GenerateLink(),
item_data->ID,
c->GetInv().GetItem(((scope_bit &peekWorld) ? (EQ::invslot::WORLD_BEGIN + index_main) : index_main))->GetSerialNumber(),
(
inst_main->IsStackable() && inst_main->GetCharges() > 0 ?
fmt::format(
" (Stack of {})",
inst_main->GetCharges()
) :
""
)
inst_main->GetSerialNumber(),
inst_main->IsStackable() && inst_main->GetCharges() > 0 ?
fmt::format(
" (Stack of {})",
inst_main->GetCharges()
) :
""
).c_str()
);
}
@@ -239,7 +238,7 @@ void ShowInventory(Client *c, const Seperator *sep)
sub_index,
linker.GenerateLink(),
item_data->ID,
c->GetInv().GetItem(EQ::InventoryProfile::CalcSlotId(index_main, sub_index))->GetSerialNumber(),
inst_sub->GetSerialNumber(),
(
inst_sub->IsStackable() && inst_sub->GetCharges() > 0 ?
fmt::format(
+8 -4
View File
@@ -1327,7 +1327,8 @@ bool ZoneDatabase::SaveCharacterInvSnapshot(uint32 character_id) {
" `custom_data`,"
" `ornamenticon`,"
" `ornamentidfile`,"
" `ornament_hero_model`"
" `ornament_hero_model`,"
" `guid`"
") "
"SELECT"
" %u,"
@@ -1346,7 +1347,8 @@ bool ZoneDatabase::SaveCharacterInvSnapshot(uint32 character_id) {
" `custom_data`,"
" `ornamenticon`,"
" `ornamentidfile`,"
" `ornament_hero_model` "
" `ornament_hero_model`,"
" `guid` "
"FROM"
" `inventory` "
"WHERE"
@@ -1607,7 +1609,8 @@ bool ZoneDatabase::RestoreCharacterInvSnapshot(uint32 character_id, uint32 times
" `custom_data`,"
" `ornamenticon`,"
" `ornamentidfile`,"
" `ornament_hero_model`"
" `ornament_hero_model`,"
" `guid`"
") "
"SELECT"
" `charid`,"
@@ -1625,7 +1628,8 @@ bool ZoneDatabase::RestoreCharacterInvSnapshot(uint32 character_id, uint32 times
" `custom_data`,"
" `ornamenticon`,"
" `ornamentidfile`,"
" `ornament_hero_model` "
" `ornament_hero_model`, "
" `guid` "
"FROM"
" `inventory_snapshots` "
"WHERE"