diff options
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r-- | src/server/game/Events/GameEventMgr.cpp | 57 |
1 files changed, 36 insertions, 21 deletions
diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 95300e622bd..7b33a102ff0 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -792,8 +792,8 @@ void GameEventMgr::LoadFromDB() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 - QueryResult result = WorldDatabase.Query("SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost, type FROM game_event_npc_vendor ORDER BY guid, slot ASC"); + // 0 1 2 3 4 5 6 7 8 9 + QueryResult result = WorldDatabase.Query("SELECT eventEntry, guid, item, maxcount, incrtime, ExtendedCost, type, BonusListIDs, PlayerConditionId, IgnoreFiltering FROM game_event_npc_vendor ORDER BY guid, slot ASC"); if (!result) TC_LOG_INFO("server.loading", ">> Loaded 0 vendor additions in game events. DB table `game_event_npc_vendor` is empty."); @@ -805,6 +805,7 @@ void GameEventMgr::LoadFromDB() Field* fields = result->Fetch(); uint8 event_id = fields[0].GetUInt8(); + ObjectGuid::LowType guid = fields[1].GetUInt64(); if (event_id >= mGameEventVendors.size()) { @@ -812,14 +813,6 @@ void GameEventMgr::LoadFromDB() continue; } - NPCVendorList& vendors = mGameEventVendors[event_id]; - NPCVendorEntry newEntry; - ObjectGuid::LowType guid = fields[1].GetUInt64(); - newEntry.item = fields[2].GetUInt32(); - newEntry.maxcount = fields[3].GetUInt32(); - newEntry.incrtime = fields[4].GetUInt32(); - newEntry.ExtendedCost = fields[5].GetUInt32(); - newEntry.Type = fields[6].GetUInt8(); // get the event npc flag for checking if the npc will be vendor during the event or not uint32 event_npc_flag = 0; NPCFlagList& flist = mGameEventNPCFlags[event_id]; @@ -831,17 +824,30 @@ void GameEventMgr::LoadFromDB() break; } } - // get creature entry - newEntry.entry = 0; + uint32 entry = 0; if (CreatureData const* data = sObjectMgr->GetCreatureData(guid)) - newEntry.entry = data->id; + entry = data->id; + + VendorItem vItem; + vItem.item = fields[2].GetUInt32(); + vItem.maxcount = fields[3].GetUInt32(); + vItem.incrtime = fields[4].GetUInt32(); + vItem.ExtendedCost = fields[5].GetUInt32(); + vItem.Type = fields[6].GetUInt8(); + vItem.PlayerConditionId = fields[8].GetUInt32(); + vItem.IgnoreFiltering = fields[9].GetBool(); + + Tokenizer bonusListIDsTok(fields[7].GetString(), ' '); + for (char const* token : bonusListIDsTok) + vItem.BonusListIDs.push_back(int32(atol(token))); // check validity with event's npcflag - if (!sObjectMgr->IsVendorItemValid(newEntry.entry, newEntry.item, newEntry.maxcount, newEntry.incrtime, newEntry.ExtendedCost, newEntry.Type, NULL, NULL, event_npc_flag)) + if (!sObjectMgr->IsVendorItemValid(entry, vItem, nullptr, nullptr, event_npc_flag)) continue; - vendors.push_back(newEntry); + NPCVendorMap& vendors = mGameEventVendors[event_id]; + vendors[entry].emplace_back(std::move(vItem)); ++count; } @@ -1177,12 +1183,15 @@ void GameEventMgr::UpdateBattlegroundSettings() void GameEventMgr::UpdateEventNPCVendor(uint16 event_id, bool activate) { - for (NPCVendorList::iterator itr = mGameEventVendors[event_id].begin(); itr != mGameEventVendors[event_id].end(); ++itr) + for (NPCVendorMap::iterator itr = mGameEventVendors[event_id].begin(); itr != mGameEventVendors[event_id].end(); ++itr) { - if (activate) - sObjectMgr->AddVendorItem(itr->entry, itr->item, itr->maxcount, itr->incrtime, itr->ExtendedCost, itr->Type, false); - else - sObjectMgr->RemoveVendorItem(itr->entry, itr->item, itr->Type, false); + for (VendorItem const& vItem : itr->second) + { + if (activate) + sObjectMgr->AddVendorItem(itr->first, vItem, false); + else + sObjectMgr->RemoveVendorItem(itr->first, vItem.item, vItem.Type, false); + } } } @@ -1531,7 +1540,13 @@ void GameEventMgr::UpdateWorldStates(uint16 event_id, bool Activate) } } -GameEventMgr::GameEventMgr() : isSystemInit(false) { } +GameEventMgr::GameEventMgr() : isSystemInit(false) +{ +} + +GameEventMgr::~GameEventMgr() +{ +} void GameEventMgr::HandleQuestComplete(uint32 quest_id) { |