diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 14 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 10 | ||||
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 7 |
3 files changed, 31 insertions, 0 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 0b87e9b2fdf..4c5f6ba88aa 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2336,6 +2336,20 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } break; } + case SMART_ACTION_RESPAWN_BY_SPAWNID: + { + Map* map = nullptr; + if (WorldObject* obj = GetBaseObject()) + map = obj->GetMap(); + else if (!targets.empty()) + map = targets.front()->GetMap(); + + if (map) + map->RemoveRespawnTime(SpawnObjectType(e.action.respawnData.spawnType), e.action.respawnData.spawnId, true); + else + TC_LOG_ERROR("sql.sql", "SmartScript::ProcessAction: Entry " SI64FMTD " SourceType %u, Event %u - tries to respawn by spawnId but does not provide a map", e.entryOrGuid, e.GetScriptType(), e.event_id); + break; + } case SMART_ACTION_PLAY_ANIMKIT: { for (WorldObject* const target : targets) diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 6ccd6d2d6d6..aa7e5f92437 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1637,6 +1637,15 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; } + case SMART_ACTION_RESPAWN_BY_SPAWNID: + { + if (!sObjectMgr->GetSpawnData(SpawnObjectType(e.action.respawnData.spawnType), e.action.respawnData.spawnId)) + { + TC_LOG_ERROR("sql.sql", "Entry " SI64FMTD " SourceType %u Event %u Action %u specifies invalid spawn data (%u,%u)", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.respawnData.spawnType, e.action.respawnData.spawnId); + return false; + } + break; + } case SMART_ACTION_SET_MOVEMENT_SPEED: { if (e.action.movementSpeed.movementType >= MAX_MOVE_TYPE) @@ -1740,6 +1749,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) case SMART_ACTION_REMOVE_ALL_GAMEOBJECTS: case SMART_ACTION_SPAWN_SPAWNGROUP: case SMART_ACTION_DESPAWN_SPAWNGROUP: + case SMART_ACTION_STOP_MOTION: break; default: TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry " SI64FMTD " SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 04bc91c9c0f..25b71e9ba6a 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -596,6 +596,7 @@ enum SMART_ACTION SMART_ACTION_SCENE_CANCEL = 130, // sceneId SMART_ACTION_SPAWN_SPAWNGROUP = 131, // Group ID, min secs, max secs, spawnflags SMART_ACTION_DESPAWN_SPAWNGROUP = 132, // Group ID, min secs, max secs, spawnflags + SMART_ACTION_RESPAWN_BY_SPAWNID = 133, // spawnType, spawnId // 134 : 3.3.5 reserved SMART_ACTION_PLAY_CINEMATIC = 135, // reserved for future uses SMART_ACTION_SET_MOVEMENT_SPEED = 136, // movementType, speedInteger, speedFraction @@ -1167,6 +1168,12 @@ struct SmartAction struct { + uint32 spawnType; + uint32 spawnId; + } respawnData; + + struct + { uint32 animKit; uint32 type; } animKit; |