diff --git a/common/version.h b/common/version.h index f7973dcb9..caf6a68f8 100644 --- a/common/version.h +++ b/common/version.h @@ -34,7 +34,7 @@ * Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt */ -#define CURRENT_BINARY_DATABASE_VERSION 9195 +#define CURRENT_BINARY_DATABASE_VERSION 9196 #ifdef BOTS #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9029 diff --git a/utils/sql/db_update_manifest.txt b/utils/sql/db_update_manifest.txt index b50807aee..69bfab9b3 100644 --- a/utils/sql/db_update_manifest.txt +++ b/utils/sql/db_update_manifest.txt @@ -449,6 +449,7 @@ 9193|2022_07_16_task_timer_groups.sql|SHOW COLUMNS FROM `tasks` LIKE 'replay_timer_group'|empty| 9194|2022_07_23_dz_switch_id.sql|SHOW COLUMNS FROM `doors` LIKE 'dz_switch_id'|empty| 9195|2022_07_23_dz_templates.sql|SHOW TABLES like 'dynamic_zone_templates'|empty| +9196|2022_07_30_merchantlist_temp.sql|SHOW COLUMNS FROM `merchantlist_temp` LIKE 'zone_id'|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/required/2022_07_30_merchantlist_temp.sql b/utils/sql/git/required/2022_07_30_merchantlist_temp.sql new file mode 100644 index 000000000..b02c9ac63 --- /dev/null +++ b/utils/sql/git/required/2022_07_30_merchantlist_temp.sql @@ -0,0 +1,3 @@ +ALTER TABLE `merchantlist_temp` ADD COLUMN `zone_id` INT(11) NOT NULL DEFAULT '0' AFTER `slot`; +ALTER TABLE `merchantlist_temp` ADD COLUMN `instance_id` INT(11) NOT NULL DEFAULT '0' AFTER `zone_id`; +ALTER TABLE `merchantlist_temp` DROP PRIMARY KEY, ADD PRIMARY KEY (`npcid`, `slot`, `zone_id`, `instance_id`); diff --git a/zone/zone.cpp b/zone/zone.cpp index aaf7756f9..705f10bac 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -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() ) ); diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index 74d124ae5..ffc24f572 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -3133,15 +3133,16 @@ uint8 ZoneDatabase::GetGridType(uint32 grid, uint32 zoneid ) { return atoi(row[0]); } -void ZoneDatabase::SaveMerchantTemp(uint32 npcid, uint32 slot, uint32 item, uint32 charges){ +void ZoneDatabase::SaveMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id, uint32 item, uint32 charges){ - std::string query = StringFormat("REPLACE INTO merchantlist_temp (npcid, slot, itemid, charges) " - "VALUES(%d, %d, %d, %d)", npcid, slot, item, charges); + std::string query = StringFormat("REPLACE INTO merchantlist_temp (npcid, slot, zone_id, instance_id, itemid, charges) " + "VALUES(%d, %d, %d, %d, %d, %d)", npcid, slot, zone_id, instance_id, item, charges); QueryDatabase(query); } -void ZoneDatabase::DeleteMerchantTemp(uint32 npcid, uint32 slot){ - std::string query = StringFormat("DELETE FROM merchantlist_temp WHERE npcid=%d AND slot=%d", npcid, slot); +void ZoneDatabase::DeleteMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id) { + std::string query = StringFormat("DELETE FROM merchantlist_temp WHERE npcid=%d AND slot=%d AND zone_id=%d AND instance_id=%d", + npcid, slot, zone_id, instance_id); QueryDatabase(query); } diff --git a/zone/zonedb.h b/zone/zonedb.h index 122005688..6290436d2 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -526,8 +526,8 @@ public: void RefreshPetitionsFromDB(); /* Merchants */ - void SaveMerchantTemp(uint32 npcid, uint32 slot, uint32 item, uint32 charges); - void DeleteMerchantTemp(uint32 npcid, uint32 slot); + void SaveMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id, uint32 item, uint32 charges); + void DeleteMerchantTemp(uint32 npcid, uint32 slot, uint32 zone_id, uint32 instance_id); /* Tradeskills */ bool GetTradeRecipe(const EQ::ItemInstance* container, uint8 c_type, uint32 some_id, uint32 char_id, DBTradeskillRecipe_Struct *spec);