diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 20 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 40 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 16 | ||||
-rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 1 |
4 files changed, 77 insertions, 0 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4ea727cbfe7..16636b10afd 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2430,6 +2430,26 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; } + case SMART_ACTION_OVERRIDE_LIGHT: + { + if (WorldObject* obj = GetBaseObject()) + { + obj->GetMap()->SetZoneOverrideLight(e.action.overrideLight.zoneId, e.action.overrideLight.lightId, e.action.overrideLight.fadeInTime); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_OVERRIDE_LIGHT: %s sets zone override light (zoneId: %u, lightId: %u, fadeInTime: %u)", + obj->GetGUID().ToString().c_str(), e.action.overrideLight.zoneId, e.action.overrideLight.lightId, e.action.overrideLight.fadeInTime); + } + break; + } + case SMART_ACTION_OVERRIDE_WEATHER: + { + if (WorldObject* obj = GetBaseObject()) + { + obj->GetMap()->SetZoneWeather(e.action.overrideWeather.zoneId, (WeatherState)e.action.overrideWeather.weatherId, float(e.action.overrideWeather.weatherGrade)); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction: SMART_ACTION_OVERRIDE_WEATHER: %s sets zone weather (zoneId: %u, weatherId: %u, weatherGrade: %u)", + obj->GetGUID().ToString().c_str(), e.action.overrideWeather.zoneId, e.action.overrideWeather.weatherId, e.action.overrideWeather.weatherGrade); + } + break; + } case SMART_ACTION_PLAY_SPELL_VISUAL_KIT: { for (WorldObject* const target : targets) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index da5dbbad14d..06aab98c8e8 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1700,6 +1700,46 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) break; } + case SMART_ACTION_OVERRIDE_LIGHT: + { + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(e.action.overrideLight.zoneId); + if (!areaEntry) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u uses non-existent zoneId %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideLight.zoneId); + return false; + } + + if (areaEntry->ParentAreaID != 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u uses subzone (ID: %u) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideLight.zoneId); + return false; + } + + if (!sLightStore.LookupEntry(e.action.overrideLight.lightId)) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u uses non-existent lightId %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideLight.lightId); + return false; + } + + break; + } + case SMART_ACTION_OVERRIDE_WEATHER: + { + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(e.action.overrideWeather.zoneId); + if (!areaEntry) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u uses non-existent zoneId %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideWeather.zoneId); + return false; + } + + if (areaEntry->ParentAreaID != 0) + { + TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry " SI64FMTD " SourceType %u Event %u Action %u uses subzone (ID: %u) instead of zone, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.overrideWeather.zoneId); + return false; + } + + break; + } case SMART_ACTION_CREATE_CONVERSATION: { if (!sConversationDataStore->GetConversationTemplate(e.action.conversation.id)) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 7cc6f0440ed..3b480c11cb0 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -603,6 +603,8 @@ enum SMART_ACTION SMART_ACTION_PLAY_CINEMATIC = 135, // entry, cinematic SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction SMART_ACTION_PLAY_SPELL_VISUAL_KIT = 137, // spellVisualKitId, kitType (unknown values, copypaste from packet dumps), duration + SMART_ACTION_OVERRIDE_LIGHT = 138, // zoneId, lightId, fadeInTime + SMART_ACTION_OVERRIDE_WEATHER = 139, // zoneId, weatherId, weatherGrade SMART_ACTION_CREATE_CONVERSATION = 143, // conversation_template.id SMART_ACTION_END = 144 }; @@ -1209,6 +1211,20 @@ struct SmartAction struct { + uint32 zoneId; + uint32 lightId; + uint32 fadeInTime; + } overrideLight; + + struct + { + uint32 zoneId; + uint32 weatherId; + uint32 weatherGrade; + } overrideWeather; + + struct + { uint32 id; } conversation; diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 8a652478c06..25715feb226 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -160,6 +160,7 @@ TC_GAME_API extern DB2Storage<KeystoneAffixEntry> sKeystoneAff TC_GAME_API extern DB2Storage<LanguageWordsEntry> sLanguageWordsStore; TC_GAME_API extern DB2Storage<LanguagesEntry> sLanguagesStore; TC_GAME_API extern DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore; +TC_GAME_API extern DB2Storage<LightEntry> sLightStore; TC_GAME_API extern DB2Storage<LiquidTypeEntry> sLiquidTypeStore; TC_GAME_API extern DB2Storage<LockEntry> sLockStore; TC_GAME_API extern DB2Storage<MailTemplateEntry> sMailTemplateStore; |