[Bug Fix] Limit merchant temp item list to zone and instance (#2346)

This prevents issues with a merchant being in more than one zone as well
as guild hall merchants sharing a list of temp items
This commit is contained in:
Michael Cook (mackal)
2022-07-30 23:22:09 -04:00
committed by GitHub
parent 53b599518a
commit c6cfcc3ea9
6 changed files with 20 additions and 12 deletions
+7 -4
View File
@@ -433,10 +433,10 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg
ml.origslot = ml.slot;
}
if (ml.charges > 0) {
database.SaveMerchantTemp(npcid, ml.origslot, item, ml.charges);
database.SaveMerchantTemp(npcid, ml.origslot, GetZoneID(), GetInstanceID(), item, ml.charges);
tmp_merlist.push_back(ml);
} else {
database.DeleteMerchantTemp(npcid, ml.origslot);
database.DeleteMerchantTemp(npcid, ml.origslot, GetZoneID(), GetInstanceID());
}
}
}
@@ -494,7 +494,7 @@ int Zone::SaveTempItem(uint32 merchantid, uint32 npcid, uint32 item, int32 charg
first_empty_mslot = idx;
database.SaveMerchantTemp(npcid, first_empty_slot, item, charges);
database.SaveMerchantTemp(npcid, first_empty_slot, GetZoneID(), GetInstanceID(), item, charges);
tmp_merlist = tmpmerchanttable[npcid];
TempMerchantList ml2;
ml2.charges = charges;
@@ -565,8 +565,11 @@ void Zone::LoadTempMerchantData()
itemid
FROM merchantlist_temp
WHERE npcid IN ({})
AND zone_id = {}
AND instance_id = {}
),
Strings::Implode(", ", npc_ids)
Strings::Implode(", ", npc_ids),
GetZoneID(), GetInstanceID()
)
);