aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-02-23 00:11:14 +0400
committerShauren <shauren.trinity@gmail.com>2021-12-22 01:15:52 +0100
commit1d08423725141de712290b18739dcc9b3ea3a7c6 (patch)
tree80c9161a13439fbff69aa57e00d581a9e7a862cb /src
parentf0f7cecc01a3fe50f10d6b03e16ebe72933a84e4 (diff)
Core/SmartAI: implement SMART_ACTION_OVERRIDE_LIGHT and SMART_ACTION_OVERRIDE_WEATHER (#24146)
* Core\SmartAI: implement SMART_ACTION_OVERRIDE_LIGHT and SMART_ACTION_OVERRIDE_WEATHER * Change the invoker of action to any worldobject * Revert "Change the invoker of action to any worldobject" This reverts commit 2e15f7258553b7057c3e8f67c54efc77fb6d75b8. * Add dbc-validations for new actions * Use GetBaseObject() instead of Creature* for new actions. Add debug-logging (cherry picked from commit c65ba35269a68c94c3e423f78fa1585f9d89dd04)
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;