aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Events/GameEventMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Events/GameEventMgr.cpp')
-rw-r--r--src/server/game/Events/GameEventMgr.cpp57
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)
{