diff options
| author | Traesh <traesh@farahlon.com> | 2016-09-25 16:13:12 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-09-25 16:13:12 +0200 |
| commit | d4887311e39527e036419ebd966f399fdbdae67a (patch) | |
| tree | 7a87b65e493e3b0660790b02b151107fc4ab66b4 /src/server/scripts/Commands | |
| parent | dd64a3cd36d7c8db67f4075c5a8c1eb01898d1ed (diff) | |
Core/Scenes: Implemented scene system
Closes #17858
Closes #17976
Diffstat (limited to 'src/server/scripts/Commands')
| -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 |
5 files changed, 176 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(); |
