diff options
Diffstat (limited to 'src/server')
| -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 | 18 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCStores.h | 1 | 
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;  | 
