From 1507ca017955e8765fbec64ee555e0c5ce10b55b Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Sat, 22 Aug 2020 18:38:17 +0200 Subject: [PATCH] Fixed build --- .../game/AI/SmartScripts/SmartScript.cpp | 6 +-- .../game/AI/SmartScripts/SmartScriptMgr.cpp | 1 + src/server/game/Globals/ObjectMgr.cpp | 43 +++++++++++-------- .../instance_throne_of_the_four_winds.cpp | 6 +-- 4 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index fe6caeaaf6..849a85d125 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2401,9 +2401,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (WorldObject* obj = GetBaseObject()) { - obj->GetMap()->SetZoneOverrideLight(e.action.overrideLight.zoneId, e.action.overrideLight.overrideLightId, e.action.overrideLight.transitionMilliseconds); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_OVERRIDE_LIGHT: %s sets zone override light (zoneId: %u, overrideLightId: %u, transitionMilliseconds: %u)", - obj->GetGUID().ToString().c_str(), e.action.overrideLight.zoneId, e.action.overrideLight.overrideLightId, e.action.overrideLight.transitionMilliseconds); + obj->GetMap()->SetZoneOverrideLight(e.action.overrideLight.zoneId, e.action.overrideLight.areaLightId, e.action.overrideLight.overrideLightId, e.action.overrideLight.transitionMilliseconds); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_OVERRIDE_LIGHT: %s sets zone override light (zoneId: %u, areaLightId: %u, overrideLightId: %u, transitionMilliseconds: %u)", + obj->GetGUID().ToString().c_str(), e.action.overrideLight.zoneId, e.action.overrideLight.areaLightId, e.action.overrideLight.overrideLightId, e.action.overrideLight.transitionMilliseconds); } break; } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index f25c8bf8bc..d8eb58a16c 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -29,6 +29,7 @@ #include "SpellInfo.h" #include "SpellMgr.h" #include "Timer.h" +#include "Unit.h" #include "UnitDefines.h" #include "WaypointDefines.h" diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 50d6a3266e..373200a037 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -8801,34 +8801,51 @@ void ObjectMgr::LoadTrainers() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " Trainers in %u ms", _trainers.size(), GetMSTimeDiffToNow(oldMSTime)); } -void ObjectMgr::LoadCreatureDefaultTrainers() +void ObjectMgr::LoadCreatureTrainers() { uint32 oldMSTime = getMSTime(); _creatureDefaultTrainers.clear(); - if (QueryResult result = WorldDatabase.Query("SELECT CreatureId, TrainerId FROM creature_default_trainer")) + if (QueryResult result = WorldDatabase.Query("SELECT CreatureId, TrainerId, MenuId, OptionIndex FROM creature_trainer")) { do { Field* fields = result->Fetch(); uint32 creatureId = fields[0].GetUInt32(); uint32 trainerId = fields[1].GetUInt32(); + uint32 gossipMenuId = fields[2].GetUInt32(); + uint32 gossipOptionIndex = fields[3].GetUInt32(); if (!GetCreatureTemplate(creatureId)) { - TC_LOG_ERROR("sql.sql", "Table `creature_default_trainer` references non-existing creature template (CreatureId: %u), ignoring", creatureId); + TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing creature template (CreatureId: %u), ignoring", creatureId); continue; } if (!GetTrainer(trainerId)) { - TC_LOG_ERROR("sql.sql", "Table `trainer_spell` references non-existing trainer (TrainerId: %u) for CreatureId %u, ignoring", trainerId, creatureId); + TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing trainer (TrainerId: %u) for CreatureId %u MenuId %u OptionIndex %u, ignoring", + trainerId, creatureId, gossipMenuId, gossipOptionIndex); continue; } - _creatureDefaultTrainers[creatureId] = trainerId; + if (gossipMenuId || gossipOptionIndex) + { + Trinity::IteratorPair gossipMenuItems = GetGossipMenuItemsMapBounds(gossipMenuId); + auto gossipOptionItr = std::find_if(gossipMenuItems.begin(), gossipMenuItems.end(), [gossipOptionIndex](std::pair const& entry) + { + return entry.second.OptionID == gossipOptionIndex; + }); + if (gossipOptionItr == gossipMenuItems.end()) + { + TC_LOG_ERROR("sql.sql", "Table `creature_trainer` references non-existing gossip menu option (MenuId %u OptionIndex %u) for CreatureId %u and TrainerId %u, ignoring", + gossipMenuId, gossipOptionIndex, creatureId, trainerId); + continue; + } + } + _creatureDefaultTrainers[std::make_tuple(creatureId, gossipMenuId, gossipOptionIndex)] = trainerId; } while (result->NextRow()); } @@ -8978,13 +8995,10 @@ void ObjectMgr::LoadGossipMenuItems() // 7 8 "oa.ActionMenuId, oa.ActionPoiId, " // 9 10 11 12 - "ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId, " - // 13 - "ot.TrainerId " + "ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId " "FROM gossip_menu_option o " "LEFT JOIN gossip_menu_option_action oa ON o.MenuId = oa.MenuId AND o.OptionIndex = oa.OptionIndex " "LEFT JOIN gossip_menu_option_box ob ON o.MenuId = ob.MenuId AND o.OptionIndex = ob.OptionIndex " - "LEFT JOIN gossip_menu_option_trainer ot ON o.MenuId = ot.MenuId AND o.OptionIndex = ot.OptionIndex " "ORDER BY o.MenuId, o.OptionIndex"); if (!result) @@ -9012,7 +9026,6 @@ void ObjectMgr::LoadGossipMenuItems() gMenuItem.BoxMoney = fields[10].GetUInt32(); gMenuItem.BoxText = fields[11].GetString(); gMenuItem.BoxBroadcastTextID = fields[12].GetUInt32(); - gMenuItem.TrainerId = fields[13].GetUInt32(); if (gMenuItem.OptionIcon >= GOSSIP_ICON_MAX) { @@ -9047,12 +9060,6 @@ void ObjectMgr::LoadGossipMenuItems() } } - if (gMenuItem.TrainerId && !GetTrainer(gMenuItem.TrainerId)) - { - TC_LOG_ERROR("sql.sql", "Table `gossip_menu_option_trainer` for MenuId %u, OptionIndex %u use non-existing TrainerId %u, ignoring", gMenuItem.MenuID, gMenuItem.OptionID, gMenuItem.TrainerId); - gMenuItem.TrainerId = 0; - } - _gossipMenuItemsStore.insert(GossipMenuItemsContainer::value_type(gMenuItem.MenuID, gMenuItem)); } while (result->NextRow()); @@ -9064,9 +9071,9 @@ Trainer::Trainer const* ObjectMgr::GetTrainer(uint32 trainerId) const return Trinity::Containers::MapGetValuePtr(_trainers, trainerId); } -uint32 ObjectMgr::GetCreatureDefaultTrainer(uint32 creatureId) const +uint32 ObjectMgr::GetCreatureTrainerForGossipOption(uint32 creatureId, uint32 gossipMenuId, uint32 gossipOptionIndex) const { - auto itr = _creatureDefaultTrainers.find(creatureId); + auto itr = _creatureDefaultTrainers.find(std::make_tuple(creatureId, gossipMenuId, gossipOptionIndex)); if (itr != _creatureDefaultTrainers.end()) return itr->second; diff --git a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/instance_throne_of_the_four_winds.cpp b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/instance_throne_of_the_four_winds.cpp index b4fa0649f8..45f8219020 100644 --- a/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/instance_throne_of_the_four_winds.cpp +++ b/src/server/scripts/Kalimdor/ThroneOfTheFourWinds/instance_throne_of_the_four_winds.cpp @@ -214,7 +214,7 @@ class instance_throne_of_the_four_winds : public InstanceMapScript { _relentlessStormVehicleGUIDs.clear(); instance->SetZoneWeather(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, WEATHER_STATE_FINE, 0.0f); - instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_DEFAULT, 3000); + instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_DEFAULT, LIGHT_OVERRIDE_ID_DEFAULT, 3000); for (ObjectGuid guid : _relentlessStormInitialVehicleGUIDs) { if (Creature* vehicle = instance->GetCreature(guid)) @@ -224,7 +224,7 @@ class instance_throne_of_the_four_winds : public InstanceMapScript else if (state == DONE) { instance->SetZoneWeather(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, WEATHER_STATE_FOG, 0.0f); - instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_DEFAULT, 3000); + instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_DEFAULT, LIGHT_OVERRIDE_ID_DEFAULT, 3000); for (ObjectGuid guid : _relentlessStormInitialVehicleGUIDs) { if (Creature* vehicle = instance->GetCreature(guid)) @@ -245,7 +245,7 @@ class instance_throne_of_the_four_winds : public InstanceMapScript { case DATA_ACID_RAIN_WEATHER: instance->SetZoneWeather(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, WEATHER_STATE_HEAVY_RAIN, 1.0f); - instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_ACID_RAIN, 3000); + instance->SetZoneOverrideLight(ZONE_ID_THRONE_OF_THE_FOUR_WINDS, LIGHT_OVERRIDE_ID_DEFAULT, LIGHT_OVERRIDE_ID_ACID_RAIN, 3000); break; default: break;