aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorTraesh <traesh@farahlon.com>2016-09-25 16:13:12 +0200
committerShauren <shauren.trinity@gmail.com>2016-09-25 16:13:12 +0200
commitd4887311e39527e036419ebd966f399fdbdae67a (patch)
tree7a87b65e493e3b0660790b02b151107fc4ab66b4 /src/server/scripts/Commands
parentdd64a3cd36d7c8db67f4075c5a8c1eb01898d1ed (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.cpp45
-rw-r--r--src/server/scripts/Commands/cs_list.cpp25
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp11
-rw-r--r--src/server/scripts/Commands/cs_scene.cpp139
-rw-r--r--src/server/scripts/Commands/cs_script_loader.cpp2
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();