diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 45 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_list.cpp | 25 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_reload.cpp | 11 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_scene.cpp | 139 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_script_loader.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/World/scene_scripts.cpp | 42 | ||||
| -rw-r--r-- | src/server/scripts/World/world_script_loader.cpp | 2 | 
7 files changed, 220 insertions, 46 deletions
| diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 84f86492750..abb5250ac59 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -37,7 +37,6 @@ EndScriptData */  #include "MapManager.h"  #include "MovementPackets.h"  #include "SpellPackets.h" -#include "ScenePackets.h"  #include <fstream>  #include <limits> @@ -68,7 +67,6 @@ public:              { "sellerror",     rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR,     false, &HandleDebugSendSellErrorCommand,       "" },              { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand,   "" },              { "spellfail",     rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL,     false, &HandleDebugSendSpellFailCommand,       "" }, -            { "playscene",     rbac::RBAC_PERM_COMMAND_DEBUG_SEND_PLAYSCENE,     false, &HandleDebugSendPlaySceneCommand,       "" },          };          static std::vector<ChatCommand> debugCommandTable =          { @@ -1482,49 +1480,6 @@ public:          return true;      } -    static bool HandleDebugSendPlaySceneCommand(ChatHandler* handler, char const* args) -    { -        if (!*args) -            return false; - -        int32 sceneID = 0; -        int32 playbackFlags = 0; -        int32 sceneInstanceID = 0; -        int32 sceneScriptPackageID = 0; - -        char* a = strtok((char*)args, " "); -        char* b = strtok(NULL, " "); -        char* c = strtok(NULL, " "); -        char* d = strtok(NULL, " "); - -        if (!a || !b || !c || !d) -            return false; - -        if (a) -            sceneID = atoi(a); -        if (b) -            playbackFlags = atoi(b); -        if (c) -            sceneInstanceID = atoi(c); -        if (d) -            sceneScriptPackageID = atoi(d); - -        Player* me = handler->GetSession()->GetPlayer(); - -        WorldPackets::Scenes::PlayScene packet; -        packet.SceneID = sceneID; -        packet.PlaybackFlags = playbackFlags; -        packet.SceneInstanceID = sceneInstanceID; -        packet.SceneScriptPackageID = sceneScriptPackageID; -        packet.TransportGUID = me->GetTransGUID(); -        packet.Location = me->GetPosition(); -        handler->GetSession()->SendPacket(packet.Write(), true); - -        TC_LOG_DEBUG("network", "Sent SMSG_PLAY_SCENE to %s, SceneID: %d, PlaybackFlags: %d, SceneInstanceID: %d, SceneScriptPackageID: %d", me->GetName().c_str(), sceneID, playbackFlags, sceneInstanceID, sceneScriptPackageID); - -        return true; -    } -      static bool HandleDebugRaidResetCommand(ChatHandler* /*handler*/, char const* args)      {          char* map_str = args ? strtok((char*)args, " ") : nullptr; diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index b66fc95c407..775b1b3943f 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -45,6 +45,7 @@ public:              { "object",   rbac::RBAC_PERM_COMMAND_LIST_OBJECT,   true, &HandleListObjectCommand,   "" },              { "auras",    rbac::RBAC_PERM_COMMAND_LIST_AURAS,   false, &HandleListAurasCommand,    "" },              { "mail",     rbac::RBAC_PERM_COMMAND_LIST_MAIL,     true, &HandleListMailCommand,     "" }, +            { "scenes",   rbac::RBAC_PERM_COMMAND_LIST_SCENES,  false, &HandleListScenesCommand,   "" },          };          static std::vector<ChatCommand> commandTable =          { @@ -576,6 +577,30 @@ public:              handler->PSendSysMessage(LANG_LIST_MAIL_NOT_FOUND);          return true;      } + +    static bool HandleListScenesCommand(ChatHandler* handler, char const* /*args*/) +    { +        Player* target = handler->getSelectedPlayer(); + +        if (!target) +            target = handler->GetSession()->GetPlayer(); + +        if (!target) +        { +            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); +            handler->SetSentErrorMessage(true); +            return false; +        } + +        SceneTemplateByInstance const& instanceByPackageMap = target->GetSceneMgr().GetSceneTemplateByInstanceMap(); + +        handler->PSendSysMessage(LANG_DEBUG_SCENE_OBJECT_LIST, target->GetSceneMgr().GetActiveSceneCount()); + +        for (auto instanceByPackage : instanceByPackageMap) +            handler->PSendSysMessage(LANG_DEBUG_SCENE_OBJECT_DETAIL, instanceByPackage.second->ScenePackageId, instanceByPackage.first); + +        return true; +    }  };  void AddSC_list_commandscript() diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index 4b185e7d6c5..ee59c6117e5 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -128,6 +128,7 @@ public:              { "reputation_reward_rate",        rbac::RBAC_PERM_COMMAND_RELOAD_REPUTATION_REWARD_RATE,           true,  &HandleReloadReputationRewardRateCommand,       "" },              { "reputation_spillover_template", rbac::RBAC_PERM_COMMAND_RELOAD_SPILLOVER_TEMPLATE,               true,  &HandleReloadReputationRewardRateCommand,       "" },              { "skill_discovery_template",      rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_DISCOVERY_TEMPLATE,         true,  &HandleReloadSkillDiscoveryTemplateCommand,     "" }, +            { "scene_template",                rbac::RBAC_PERM_COMMAND_RELOAD_SCENE_TEMPLATE,                   true,  &HandleReloadSceneTemplateCommand,              "" },              { "skill_extra_item_template",     rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE,        true,  &HandleReloadSkillExtraItemTemplateCommand,     "" },              { "skill_fishing_base_level",      rbac::RBAC_PERM_COMMAND_RELOAD_SKILL_FISHING_BASE_LEVEL,         true,  &HandleReloadSkillFishingBaseLevelCommand,      "" },              { "skinning_loot_template",        rbac::RBAC_PERM_COMMAND_RELOAD_SKINNING_LOOT_TEMPLATE,           true,  &HandleReloadLootTemplatesSkinningCommand,      "" }, @@ -1118,7 +1119,6 @@ public:          return true;      } -      static bool HandleReloadPhaseDefinitionsCommand(ChatHandler* handler, const char* /*args*/)      {          TC_LOG_INFO("misc", "Reloading terrain_phase_info table..."); @@ -1127,6 +1127,15 @@ public:          return true;      } + +    static bool HandleReloadSceneTemplateCommand(ChatHandler* handler, const char* /*args*/) +    { +        TC_LOG_INFO("misc", "Reloading scene_template table..."); +        sObjectMgr->LoadSceneTemplates(); +        handler->SendGlobalGMSysMessage("Scenes templates reloaded. New scriptname need a reboot."); +        return true; +    } +      static bool HandleReloadRBACCommand(ChatHandler* handler, const char* /*args*/)      {          TC_LOG_INFO("misc", "Reloading RBAC tables..."); diff --git a/src/server/scripts/Commands/cs_scene.cpp b/src/server/scripts/Commands/cs_scene.cpp new file mode 100644 index 00000000000..557dff607c4 --- /dev/null +++ b/src/server/scripts/Commands/cs_scene.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "Chat.h" +#include "Language.h" +#include "Player.h" +#include "ObjectMgr.h" + +class scene_commandscript : public CommandScript +{ +public: +    scene_commandscript() : CommandScript("scene_commandscript") { } + +    std::vector<ChatCommand> GetCommands() const override +    { +        static std::vector<ChatCommand> sceneCommandTable = +        { +            { "debug",          rbac::RBAC_PERM_COMMAND_SCENE_DEBUG,        false, &HandleDebugSceneCommand,        "" }, +            { "play",           rbac::RBAC_PERM_COMMAND_SCENE_PLAY,         false, &HandlePlaySceneCommand,         "" }, +            { "playpackage",    rbac::RBAC_PERM_COMMAND_SCENE_PLAY_PACKAGE, false, &HandlePlayScenePackageCommand,  "" }, +            { "cancel",         rbac::RBAC_PERM_COMMAND_SCENE_CANCEL,       false, &HandleCancelSceneCommand,       "" } +        }; +        static std::vector<ChatCommand> commandTable = +        { +            { "scene",          rbac::RBAC_PERM_COMMAND_SCENE,              true, NULL,                             "", sceneCommandTable } +        }; +        return commandTable; +    } + +    static bool HandleDebugSceneCommand(ChatHandler* handler, char const* /*args*/) +    { +        if (Player* player = handler->GetSession()->GetPlayer()) +        { +            player->GetSceneMgr().ToggleDebugSceneMode(); +            handler->PSendSysMessage(player->GetSceneMgr().IsInDebugSceneMode() ? LANG_COMMAND_SCENE_DEBUG_ON : LANG_COMMAND_SCENE_DEBUG_OFF); +        } + +        return true; +    } + +    static bool HandlePlaySceneCommand(ChatHandler* handler, char const* args) +    { +        if (!*args) +            return false; + +        char const* sceneIdStr = strtok((char*)args, " "); + +        if (!sceneIdStr) +            return false; + +        uint32 sceneId = atoi(sceneIdStr); +        Player* target = handler->getSelectedPlayerOrSelf(); + +        if (!target) +        { +            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); +            handler->SetSentErrorMessage(true); +            return false; +        } + +        if (!sObjectMgr->GetSceneTemplate(sceneId)) +            return false; + +        target->GetSceneMgr().PlayScene(sceneId); +        return true; +    } + +    static bool HandlePlayScenePackageCommand(ChatHandler* handler, char const* args) +    { +        if (!*args) +            return false; + +        char const* scenePackageIdStr = strtok((char*)args, " "); +        char const* flagsStr = strtok(NULL, ""); + +        if (!scenePackageIdStr) +            return false; + +        uint32 scenePackageId = atoi(scenePackageIdStr); +        uint32 flags = flagsStr ? atoi(flagsStr) : SCENEFLAG_UNK16; +        Player* target = handler->getSelectedPlayerOrSelf(); + +        if (!target) +        { +            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); +            handler->SetSentErrorMessage(true); +            return false; +        } + +        if (!sSceneScriptPackageStore.HasRecord(scenePackageId)) +            return false; + +        target->GetSceneMgr().PlaySceneByPackageId(scenePackageId, flags); +        return true; +    } + +    static bool HandleCancelSceneCommand(ChatHandler* handler, char const* args) +    { +        if (!*args) +            return false; + +        Player* target = handler->getSelectedPlayerOrSelf(); + +        if (!target) +        { +            handler->SendSysMessage(LANG_PLAYER_NOT_FOUND); +            handler->SetSentErrorMessage(true); +            return false; +        } + +        uint32 id = atoi((char*)args); + +        if (!sSceneScriptPackageStore.HasRecord(id)) +            return false; + +        target->GetSceneMgr().CancelSceneByPackageId(id); +        return true; +    } +}; + +void AddSC_scene_commandscript() +{ +    new scene_commandscript(); +} diff --git a/src/server/scripts/Commands/cs_script_loader.cpp b/src/server/scripts/Commands/cs_script_loader.cpp index 4e59ad13e95..6ff338eb82e 100644 --- a/src/server/scripts/Commands/cs_script_loader.cpp +++ b/src/server/scripts/Commands/cs_script_loader.cpp @@ -51,6 +51,7 @@ void AddSC_quest_commandscript();  void AddSC_rbac_commandscript();  void AddSC_reload_commandscript();  void AddSC_reset_commandscript(); +void AddSC_scene_commandscript();  void AddSC_send_commandscript();  void AddSC_server_commandscript();  void AddSC_tele_commandscript(); @@ -97,6 +98,7 @@ void AddCommandsScripts()      AddSC_rbac_commandscript();      AddSC_reload_commandscript();      AddSC_reset_commandscript(); +    AddSC_scene_commandscript();      AddSC_send_commandscript();      AddSC_server_commandscript();      AddSC_tele_commandscript(); diff --git a/src/server/scripts/World/scene_scripts.cpp b/src/server/scripts/World/scene_scripts.cpp new file mode 100644 index 00000000000..860c97e60ea --- /dev/null +++ b/src/server/scripts/World/scene_scripts.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "ScriptMgr.h" +#include "Player.h" + +enum SceneSpells +{ +    SPELL_DEATHWING_SIMULATOR = 201184 +}; + +class scene_deathwing_simulator : public SceneScript +{ +    public: +        scene_deathwing_simulator() : SceneScript("scene_deathwing_simulator") { } + +    // Called when a player receive trigger from scene +    void OnSceneTriggerEvent(Player* player, uint32 /*sceneInstanceID*/, SceneTemplate const* /*sceneTemplate*/, std::string const& triggerName) override +    { +        if (triggerName == "BURN PLAYER") +            player->CastSpell(player, SPELL_DEATHWING_SIMULATOR, true); // Deathwing Simulator Burn player +    } +}; + +void AddSC_scene_scripts() +{ +    new scene_deathwing_simulator(); +} diff --git a/src/server/scripts/World/world_script_loader.cpp b/src/server/scripts/World/world_script_loader.cpp index bc007ab8100..2d5b5efebf2 100644 --- a/src/server/scripts/World/world_script_loader.cpp +++ b/src/server/scripts/World/world_script_loader.cpp @@ -30,6 +30,7 @@ void AddSC_npc_innkeeper();  void AddSC_npcs_special();  void AddSC_achievement_scripts();  void AddSC_action_ip_logger(); +void AddSC_scene_scripts();  // player  void AddSC_chat_log();  void AddSC_duel_reset(); @@ -49,6 +50,7 @@ void AddWorldScripts()      AddSC_npcs_special();      AddSC_achievement_scripts();      AddSC_chat_log(); // location: scripts\World\chat_log.cpp +    AddSC_scene_scripts();      // FIXME: This should be moved in a script validation hook.      // To avoid duplicate code, we check once /*ONLY*/ if logging is permitted or not. | 
