diff options
| author | Treeston <treeston.mmoc@gmail.com> | 2018-02-23 03:20:03 +0100 | 
|---|---|---|
| committer | Treeston <treeston.mmoc@gmail.com> | 2018-02-23 03:20:03 +0100 | 
| commit | 691c67f0be09095a34421043baf245fdf28e5d04 (patch) | |
| tree | f4f4646d317a30b83886385c15bed09f5765c4e2 /src/server/game/AI/SmartScripts | |
| parent | 94b5d9bfa1195ad7c32cf51a665b55514dac0938 (diff) | |
AI/SmartAI: New SMART_ACTION_RESPAWN_BY_SPAWNID (hi kilyana)
Diffstat (limited to 'src/server/game/AI/SmartScripts')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 9 | 
3 files changed, 30 insertions, 1 deletions
| diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 5faaeb4abe7..a9451caeee4 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2244,6 +2244,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 %d SourceType %u, Event %u - tries to respawn by spawnId but does not provide a map", e.entryOrGuid, e.GetScriptType(), e.event_id); +            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 408e54b172f..43a072342ec 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1480,6 +1480,13 @@ 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 %u 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_FOLLOW:          case SMART_ACTION_SET_ORIENTATION:          case SMART_ACTION_STORE_TARGET_LIST: @@ -1558,6 +1565,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 %d 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 a6ffe6079d8..9b829c2666f 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -579,8 +579,9 @@ enum SMART_ACTION      SMART_ACTION_SCENE_CANCEL                       = 130,    // don't use on 3.3.5a      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 -    SMART_ACTION_END                                = 133 +    SMART_ACTION_END                                = 134  };  struct SmartAction @@ -1124,6 +1125,12 @@ struct SmartAction              uint32 movementExpired;          } stopMotion; +        struct +        { +            uint32 spawnType; +            uint32 spawnId; +        } respawnData; +          //! Note for any new future actions          //! All parameters must have type uint32 | 
