diff options
author | Rat <gmstreetrat@gmail.com> | 2015-04-08 20:37:30 +0200 |
---|---|---|
committer | Rat <gmstreetrat@gmail.com> | 2015-04-08 20:37:30 +0200 |
commit | e53f89d8364e98843cb24c45784bf8930c054548 (patch) | |
tree | f99f4a432230f715ca73d18574a9f2681542b5d3 /src | |
parent | 01d91fa3cdfd0ce57c863210a3ca0c650bac81ac (diff) |
Core/Scenes: added .debug send playscene command for testing purposes
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Accounts/RBAC.h | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ScenePackets.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Server/Packets/ScenePackets.h | 44 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 45 |
5 files changed, 121 insertions, 2 deletions
diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index e700a8b1708..edd63404543 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -596,7 +596,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_RELOAD_SMART_SCRIPTS = 689, RBAC_PERM_COMMAND_RELOAD_SPELL_REQUIRED = 690, RBAC_PERM_COMMAND_RELOAD_SPELL_AREA = 691, - // REUSE + RBAC_PERM_COMMAND_DEBUG_SEND_PLAYSCENE = 692, RBAC_PERM_COMMAND_RELOAD_SPELL_GROUP = 693, RBAC_PERM_COMMAND_RELOAD_SPELL_LEARN_SPELL = 694, RBAC_PERM_COMMAND_RELOAD_SPELL_LOOT_TEMPLATE = 695, diff --git a/src/server/game/Server/Packets/ScenePackets.cpp b/src/server/game/Server/Packets/ScenePackets.cpp new file mode 100644 index 00000000000..d265107fc5e --- /dev/null +++ b/src/server/game/Server/Packets/ScenePackets.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2008-2015 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 "ScenePackets.h" + +WorldPacket const* WorldPackets::Scenes::PlayScene::Write() +{ + _worldPacket << SceneID; + _worldPacket << PlaybackFlags; + _worldPacket << SceneInstanceID; + _worldPacket << SceneScriptPackageID; + _worldPacket << TransportGUID; + _worldPacket << Location.PositionXYZOStream(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/ScenePackets.h b/src/server/game/Server/Packets/ScenePackets.h new file mode 100644 index 00000000000..358e68e3dc3 --- /dev/null +++ b/src/server/game/Server/Packets/ScenePackets.h @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2008-2015 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/>. + */ + +#ifndef ScenePackets_h__ +#define ScenePackets_h__ + +#include "Packet.h" + +namespace WorldPackets +{ + namespace Scenes + { + class PlayScene final : public ServerPacket + { + public: + PlayScene() : ServerPacket(SMSG_PLAY_SCENE, 34) { } + + WorldPacket const* Write() override; + + int32 SceneID = 0; + int32 PlaybackFlags = 0; + int32 SceneInstanceID = 0; + int32 SceneScriptPackageID = 0; + ObjectGuid TransportGUID; + Position Location; + }; + } +} + +#endif // ScenePackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index e1f535f3b87..87849d0f144 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1478,7 +1478,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_OBJECT_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_ONE_SHOT_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_ORPHAN_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SCENE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SCENE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SPEAKERBOT_SOUND, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 84e3cf4c23c..d9fada1d76c 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -34,6 +34,7 @@ EndScriptData */ #include "Transport.h" #include "Language.h" #include "MovementPackets.h" +#include "ScenePackets.h" #include <fstream> @@ -64,6 +65,7 @@ public: { "sellerror", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SELLERROR, false, &HandleDebugSendSellErrorCommand, "", NULL }, { "setphaseshift", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT, false, &HandleDebugSendSetPhaseShiftCommand, "", NULL }, { "spellfail", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL, false, &HandleDebugSendSpellFailCommand, "", NULL }, + { "playscene", rbac::RBAC_PERM_COMMAND_DEBUG_SEND_PLAYSCENE, false, &HandleDebugSendPlaySceneCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; static ChatCommand debugCommandTable[] = @@ -1429,6 +1431,49 @@ public: handler->SendSysMessage("Target is not phased"); 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()); + + 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; + } }; void AddSC_debug_commandscript() |