aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorForesterDev <11771800+ForesterDev@users.noreply.github.com>2020-02-23 00:11:14 +0400
committerGitHub <noreply@github.com>2020-02-22 21:11:14 +0100
commitc65ba35269a68c94c3e423f78fa1585f9d89dd04 (patch)
tree3dac4b8e0aa227cf85aaf8db0d56f1f0a4d457d9
parent0f265b4af6c8c63539deaf781b742a743627206d (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
-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.h18
-rw-r--r--src/server/game/DataStores/DBCStores.h1
4 files changed, 78 insertions, 1 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index fd9f1b9467b..39f1f030cef 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2309,6 +2309,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;
+ }
default:
TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry %d SourceType %u, Event %u, Unhandled Action type %u", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index f14f7fd5604..a004f454f33 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1528,6 +1528,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 %d 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->zone != 0)
+ {
+ TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d 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 %d 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 %d 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->zone != 0)
+ {
+ TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d 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_FOLLOW:
case SMART_ACTION_SET_ORIENTATION:
case SMART_ACTION_STORE_TARGET_LIST:
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 9db915a667d..6416d63667b 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -587,8 +587,10 @@ 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 (RESERVED, PENDING CHERRYPICK)
+ SMART_ACTION_OVERRIDE_LIGHT = 138, // zoneId, lightId, fadeInTime
+ SMART_ACTION_OVERRIDE_WEATHER = 139, // zoneId, weatherId, weatherGrade
- SMART_ACTION_END = 138
+ SMART_ACTION_END = 140
};
struct SmartAction
@@ -1153,6 +1155,20 @@ struct SmartAction
uint32 speedFraction;
} movementSpeed;
+ struct
+ {
+ uint32 zoneId;
+ uint32 lightId;
+ uint32 fadeInTime;
+ } overrideLight;
+
+ struct
+ {
+ uint32 zoneId;
+ uint32 weatherId;
+ uint32 weatherGrade;
+ } overrideWeather;
+
//! Note for any new future actions
//! All parameters must have type uint32
diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h
index 67c68ad514c..fcd83f7d409 100644
--- a/src/server/game/DataStores/DBCStores.h
+++ b/src/server/game/DataStores/DBCStores.h
@@ -149,6 +149,7 @@ TC_GAME_API extern DBCStorage <ItemRandomPropertiesEntry> sItemRandomProperti
TC_GAME_API extern DBCStorage <ItemRandomSuffixEntry> sItemRandomSuffixStore;
TC_GAME_API extern DBCStorage <ItemSetEntry> sItemSetStore;
TC_GAME_API extern DBCStorage <LFGDungeonEntry> sLFGDungeonStore;
+TC_GAME_API extern DBCStorage <LightEntry> sLightStore;
TC_GAME_API extern DBCStorage <LiquidTypeEntry> sLiquidTypeStore;
TC_GAME_API extern DBCStorage <LockEntry> sLockStore;
TC_GAME_API extern DBCStorage <MailTemplateEntry> sMailTemplateStore;