aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp20
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp40
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h16
-rw-r--r--src/server/game/DataStores/DB2Stores.h1
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;