mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[11077] Game event fixes and condition improvments.
* At game events table loading checked not only allowed event ids range but also event existance. * Renamed CONDITION_ACTIVE_EVENT -> CONDITION_ACTIVE_GAME_EVENT * Implemented new conditions: - CONDITION_NOT_ACTIVE_GAME_EVENT - CONDITION_ACTIVE_HOLIDAY - CONDITION_NOT_ACTIVE_HOLIDAY Recomended use holiday version where possible as more portable.
This commit is contained in:
parent
84dd2e4393
commit
2fd536fe43
9 changed files with 90 additions and 62 deletions
|
|
@ -130,7 +130,7 @@ void GameEventMgr::LoadFromDB()
|
|||
bar.step();
|
||||
|
||||
uint16 event_id = fields[0].GetUInt16();
|
||||
if(event_id==0)
|
||||
if (event_id == 0)
|
||||
{
|
||||
sLog.outErrorDb("`game_event` game event id (%i) is reserved and can't be used.",event_id);
|
||||
continue;
|
||||
|
|
@ -206,18 +206,18 @@ void GameEventMgr::LoadFromDB()
|
|||
|
||||
if (event_id == 0)
|
||||
{
|
||||
sLog.outErrorDb("`game_event_creature` game event id (%i) not allowed",event_id);
|
||||
sLog.outErrorDb("`game_event_creature` game event id (%i) not allowed", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!IsValidEvent(std::abs(event_id)))
|
||||
{
|
||||
sLog.outErrorDb("`game_event_creature` game event id (%i) not exist in `game_event`", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
int32 internal_event_id = mGameEvent.size() + event_id - 1;
|
||||
|
||||
if(internal_event_id < 0 || (size_t)internal_event_id >= mGameEventCreatureGuids.size())
|
||||
{
|
||||
sLog.outErrorDb("`game_event_creature` game event id (%i) is out of range compared to max event id in `game_event`",event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
++count;
|
||||
|
||||
// spawn objects at event can be grouped in pools and then affected pools have stricter requirements for this case
|
||||
|
|
@ -284,18 +284,18 @@ void GameEventMgr::LoadFromDB()
|
|||
|
||||
if (event_id == 0)
|
||||
{
|
||||
sLog.outErrorDb("`game_event_gameobject` game event id (%i) not allowed",event_id);
|
||||
sLog.outErrorDb("`game_event_gameobject` game event id (%i) not allowed", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!IsValidEvent(std::abs(event_id)))
|
||||
{
|
||||
sLog.outErrorDb("`game_event_gameobject` game event id (%i) not exist in `game_event`", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
int32 internal_event_id = mGameEvent.size() + event_id - 1;
|
||||
|
||||
if(internal_event_id < 0 || (size_t)internal_event_id >= mGameEventGameobjectGuids.size())
|
||||
{
|
||||
sLog.outErrorDb("`game_event_gameobject` game event id (%i) is out of range compared to max event id in `game_event`",event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
++count;
|
||||
|
||||
// spawn objects at event can be grouped in pools and then affected pools have stricter requirements for this case
|
||||
|
|
@ -372,15 +372,15 @@ void GameEventMgr::LoadFromDB()
|
|||
uint32 guid = fields[0].GetUInt32();
|
||||
uint16 event_id = fields[1].GetUInt16();
|
||||
|
||||
if(event_id==0)
|
||||
if (event_id == 0)
|
||||
{
|
||||
sLog.outErrorDb("`game_event_creature_data` game event id (%i) is reserved and can't be used.",event_id);
|
||||
sLog.outErrorDb("`game_event_creature_data` game event id (%i) is reserved and can't be used." ,event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(event_id >= mGameEventCreatureData.size())
|
||||
if (!IsValidEvent(event_id))
|
||||
{
|
||||
sLog.outErrorDb("`game_event_creature_data` game event id (%u) is out of range compared to max event id in `game_event`",event_id);
|
||||
sLog.outErrorDb("`game_event_creature_data` game event id (%u) not exist in `game_event`", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -452,9 +452,15 @@ void GameEventMgr::LoadFromDB()
|
|||
uint32 quest = fields[0].GetUInt32();
|
||||
uint16 event_id = fields[1].GetUInt16();
|
||||
|
||||
if(event_id >= mGameEventQuests.size())
|
||||
if (event_id == 0)
|
||||
{
|
||||
sLog.outErrorDb("`game_event_quest` game event id (%u) is out of range compared to max event id in `game_event`",event_id);
|
||||
sLog.outErrorDb("`game_event_quest` game event id (%i) is reserved and can't be used.", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!IsValidEvent(event_id))
|
||||
{
|
||||
sLog.outErrorDb("`game_event_quest` game event id (%u) not exist in `game_event`", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
@ -517,14 +523,14 @@ void GameEventMgr::LoadFromDB()
|
|||
continue;
|
||||
}
|
||||
|
||||
int32 internal_event_id = mGameEvent.size() + event_id - 1;
|
||||
|
||||
if (internal_event_id < 0 || (size_t)internal_event_id >= mGameEventMails.size())
|
||||
if (!IsValidEvent(event_id))
|
||||
{
|
||||
sLog.outErrorDb("`game_event_mail` game event id (%i) is out of range compared to max event id in `game_event`", event_id);
|
||||
sLog.outErrorDb("`game_event_mail` game event id (%u) not exist in `game_event`", event_id);
|
||||
continue;
|
||||
}
|
||||
|
||||
int32 internal_event_id = mGameEvent.size() + event_id - 1;
|
||||
|
||||
if (!(mail.raceMask & RACEMASK_ALL_PLAYABLE))
|
||||
{
|
||||
sLog.outErrorDb("Table `game_event_mail` have raceMask (%u) requirement for game event %i that not include any player races, ignoring.", mail.raceMask, event_id);
|
||||
|
|
@ -1007,17 +1013,19 @@ GameEventMgr::GameEventMgr()
|
|||
m_IsGameEventsInit = false;
|
||||
}
|
||||
|
||||
MANGOS_DLL_SPEC bool IsHolidayActive( HolidayIds id )
|
||||
bool GameEventMgr::IsActiveHoliday( HolidayIds id )
|
||||
{
|
||||
if (id == HOLIDAY_NONE)
|
||||
return false;
|
||||
|
||||
GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap();
|
||||
GameEventMgr::ActiveEvents const& ae = sGameEventMgr.GetActiveEventList();
|
||||
|
||||
for(GameEventMgr::ActiveEvents::const_iterator itr = ae.begin(); itr != ae.end(); ++itr)
|
||||
if (events[*itr].holiday_id == id)
|
||||
for(GameEventMgr::ActiveEvents::const_iterator itr = m_ActiveEvents.begin(); itr != m_ActiveEvents.end(); ++itr)
|
||||
if (mGameEvent[*itr].holiday_id == id)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
MANGOS_DLL_SPEC bool IsHolidayActive( HolidayIds id )
|
||||
{
|
||||
return sGameEventMgr.IsActiveHoliday(id);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue