From 3c890148f20282360f5e134e07d5029fc41a5261 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 28 Jan 2018 14:02:51 +1100 Subject: [PATCH 1/6] scripts include ScriptObject.h sanely now --- scripts/native/CmnDef/CmnDefCutSceneReplay.cpp | 2 +- scripts/native/CmnDef/CmnDefInnBed.cpp | 2 +- scripts/native/CmnDef/CmnDefLinkShell.cpp | 2 +- scripts/native/CmnDef/HouFurOrchestrion.cpp | 2 +- scripts/native/action/ActionSprint3.cpp | 2 +- scripts/native/aetheryte/Aethernet.cpp | 2 +- scripts/native/aetheryte/Aetheryte.cpp | 2 +- scripts/native/opening/OpeningGridania.cpp | 2 +- scripts/native/opening/OpeningLimsa.cpp | 2 +- scripts/native/opening/OpeningUldah.cpp | 2 +- scripts/native/quest/ManFst001.cpp | 2 +- scripts/native/quest/ManFst002.cpp | 2 +- scripts/native/quest/ManFst003.cpp | 2 +- scripts/native/quest/ManSea001.cpp | 2 +- scripts/native/quest/ManSea002.cpp | 2 +- scripts/native/quest/ManWil001.cpp | 2 +- scripts/native/quest/ManWil002.cpp | 2 +- scripts/native/quest/subquest/gridania/SubFst001.cpp | 2 +- scripts/native/quest/subquest/gridania/SubFst002.cpp | 2 +- scripts/native/quest/subquest/gridania/SubFst010.cpp | 2 +- scripts/native/quest/subquest/gridania/SubFst013.cpp | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp b/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp index 39bf4300..31fde89b 100644 --- a/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp +++ b/scripts/native/CmnDef/CmnDefCutSceneReplay.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class CmnDefCutSceneReplay : public EventScript { diff --git a/scripts/native/CmnDef/CmnDefInnBed.cpp b/scripts/native/CmnDef/CmnDefInnBed.cpp index ac8a0a68..36ccd739 100644 --- a/scripts/native/CmnDef/CmnDefInnBed.cpp +++ b/scripts/native/CmnDef/CmnDefInnBed.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class CmnDefInnBed : public EventScript { diff --git a/scripts/native/CmnDef/CmnDefLinkShell.cpp b/scripts/native/CmnDef/CmnDefLinkShell.cpp index f0df71f9..16aa593b 100644 --- a/scripts/native/CmnDef/CmnDefLinkShell.cpp +++ b/scripts/native/CmnDef/CmnDefLinkShell.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include #define ACTION_CREATE 2 #define ACTION_RENAME 3 diff --git a/scripts/native/CmnDef/HouFurOrchestrion.cpp b/scripts/native/CmnDef/HouFurOrchestrion.cpp index 9e47c554..51273ed5 100644 --- a/scripts/native/CmnDef/HouFurOrchestrion.cpp +++ b/scripts/native/CmnDef/HouFurOrchestrion.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class HouFurOrchestrion : public EventScript { diff --git a/scripts/native/action/ActionSprint3.cpp b/scripts/native/action/ActionSprint3.cpp index 076bbf5f..82bbfc37 100644 --- a/scripts/native/action/ActionSprint3.cpp +++ b/scripts/native/action/ActionSprint3.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class ActionSprint3 : public ActionScript { diff --git a/scripts/native/aetheryte/Aethernet.cpp b/scripts/native/aetheryte/Aethernet.cpp index 9a3ccd8f..e0cda163 100644 --- a/scripts/native/aetheryte/Aethernet.cpp +++ b/scripts/native/aetheryte/Aethernet.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include #define ACTION_ATTUNE 0x13 diff --git a/scripts/native/aetheryte/Aetheryte.cpp b/scripts/native/aetheryte/Aetheryte.cpp index 51ba6cb1..9f838d13 100644 --- a/scripts/native/aetheryte/Aetheryte.cpp +++ b/scripts/native/aetheryte/Aetheryte.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include #define ACTION_ATTUNE 0x13 #define ACTION_TELEPORT 0x4 diff --git a/scripts/native/opening/OpeningGridania.cpp b/scripts/native/opening/OpeningGridania.cpp index 9f6d6f0a..1541561c 100644 --- a/scripts/native/opening/OpeningGridania.cpp +++ b/scripts/native/opening/OpeningGridania.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class OpeningGridania : public EventScript { diff --git a/scripts/native/opening/OpeningLimsa.cpp b/scripts/native/opening/OpeningLimsa.cpp index a40ea482..f30a2aed 100644 --- a/scripts/native/opening/OpeningLimsa.cpp +++ b/scripts/native/opening/OpeningLimsa.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Opening Script: OpeningLimsaLominsa // Quest Name: OpeningLimsaLominsa diff --git a/scripts/native/opening/OpeningUldah.cpp b/scripts/native/opening/OpeningUldah.cpp index fdd1c5d2..c780782e 100644 --- a/scripts/native/opening/OpeningUldah.cpp +++ b/scripts/native/opening/OpeningUldah.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class OpeningUldah : public EventScript { diff --git a/scripts/native/quest/ManFst001.cpp b/scripts/native/quest/ManFst001.cpp index b73581ac..df85953a 100644 --- a/scripts/native/quest/ManFst001.cpp +++ b/scripts/native/quest/ManFst001.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManFst001_00039 // Quest Name: Coming to Gridania diff --git a/scripts/native/quest/ManFst002.cpp b/scripts/native/quest/ManFst002.cpp index 707150cb..1943f599 100644 --- a/scripts/native/quest/ManFst002.cpp +++ b/scripts/native/quest/ManFst002.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManFst002_00124 // Quest Name: Close to Home diff --git a/scripts/native/quest/ManFst003.cpp b/scripts/native/quest/ManFst003.cpp index c8cd4da6..00ecbb90 100644 --- a/scripts/native/quest/ManFst003.cpp +++ b/scripts/native/quest/ManFst003.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManFst003_00123 // Quest Name: Close to Home diff --git a/scripts/native/quest/ManSea001.cpp b/scripts/native/quest/ManSea001.cpp index aee4da80..5921e09d 100644 --- a/scripts/native/quest/ManSea001.cpp +++ b/scripts/native/quest/ManSea001.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include class ManSea001 : public EventScript { diff --git a/scripts/native/quest/ManSea002.cpp b/scripts/native/quest/ManSea002.cpp index 57d7dda7..f2fab3a3 100644 --- a/scripts/native/quest/ManSea002.cpp +++ b/scripts/native/quest/ManSea002.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManSea002_00108 // Quest Name: Close to Home diff --git a/scripts/native/quest/ManWil001.cpp b/scripts/native/quest/ManWil001.cpp index ee04e2aa..9be159d7 100644 --- a/scripts/native/quest/ManWil001.cpp +++ b/scripts/native/quest/ManWil001.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManWil001_00594 // Quest Name: Coming to Ul'dah diff --git a/scripts/native/quest/ManWil002.cpp b/scripts/native/quest/ManWil002.cpp index 9f160f72..e51e1a8b 100644 --- a/scripts/native/quest/ManWil002.cpp +++ b/scripts/native/quest/ManWil002.cpp @@ -1,4 +1,4 @@ -#include "../ScriptObject.h" +#include // Quest Script: ManWil002_00568 // Quest Name: Close to Home diff --git a/scripts/native/quest/subquest/gridania/SubFst001.cpp b/scripts/native/quest/subquest/gridania/SubFst001.cpp index 2aedc7f8..55da6d99 100644 --- a/scripts/native/quest/subquest/gridania/SubFst001.cpp +++ b/scripts/native/quest/subquest/gridania/SubFst001.cpp @@ -1,4 +1,4 @@ -#include "../../../ScriptObject.h" +#include // Quest Script: SubFst001_00024 // Quest Name: Coarse Correspondence diff --git a/scripts/native/quest/subquest/gridania/SubFst002.cpp b/scripts/native/quest/subquest/gridania/SubFst002.cpp index 2e32fa23..d2cff2e4 100644 --- a/scripts/native/quest/subquest/gridania/SubFst002.cpp +++ b/scripts/native/quest/subquest/gridania/SubFst002.cpp @@ -1,4 +1,4 @@ -#include "../../../ScriptObject.h" +#include // Quest Script: SubFst002_00025 // Quest Name: Quarrels with Squirrels diff --git a/scripts/native/quest/subquest/gridania/SubFst010.cpp b/scripts/native/quest/subquest/gridania/SubFst010.cpp index e3e03582..cbabe1b3 100644 --- a/scripts/native/quest/subquest/gridania/SubFst010.cpp +++ b/scripts/native/quest/subquest/gridania/SubFst010.cpp @@ -1,4 +1,4 @@ -#include "../../../ScriptObject.h" +#include // Quest Script: SubFst010_00001 // Quest Name: A Good Adventurer Is Hard to Find diff --git a/scripts/native/quest/subquest/gridania/SubFst013.cpp b/scripts/native/quest/subquest/gridania/SubFst013.cpp index 7bf4f6da..45f8824f 100644 --- a/scripts/native/quest/subquest/gridania/SubFst013.cpp +++ b/scripts/native/quest/subquest/gridania/SubFst013.cpp @@ -1,4 +1,4 @@ -#include "../../../ScriptObject.h" +#include // Quest Script: SubFst013_00040 // Quest Name: For Friendship From afd439c64f7ff339b3f02f1dcea284075903b948 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 28 Jan 2018 18:48:56 +1100 Subject: [PATCH 2/6] shouts now have correct behaviour --- .../Network/Handlers/PacketHandlers.cpp | 2 +- src/servers/sapphire_zone/Zone/Zone.cpp | 13 +++++++++++++ src/servers/sapphire_zone/Zone/Zone.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 31495441..bd08e64a 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -516,7 +516,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa } case ChatType::Shout: { - player.getCurrentZone()->queueOutPacketForRange( player, 6000, chatPacket ); + player.getCurrentZone()->queueOutPacket( chatPacket ); break; } default: diff --git a/src/servers/sapphire_zone/Zone/Zone.cpp b/src/servers/sapphire_zone/Zone/Zone.cpp index 1b8cb402..9bda0d64 100644 --- a/src/servers/sapphire_zone/Zone/Zone.cpp +++ b/src/servers/sapphire_zone/Zone/Zone.cpp @@ -362,6 +362,19 @@ void Zone::queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, } } +void Zone::queueOutPacket( Network::Packets::GamePacketPtr pPacketEntry ) +{ + for( auto it = m_playerMap.begin(); it != m_playerMap.end(); ++it ) + { + auto pSession = g_serverZone.getSession( ( *it ).second->getId() ); + if( pSession ) + { + pPacketEntry->setValAt< uint32_t >( 0x08, ( *it ).second->getId() ); + pSession->getZoneConnection()->queueOutPacket( pPacketEntry ); + } + } +} + uint32_t Zone::getTerritoryId() { return m_territoryId; diff --git a/src/servers/sapphire_zone/Zone/Zone.h b/src/servers/sapphire_zone/Zone/Zone.h index c2caa2e3..2837b6ca 100644 --- a/src/servers/sapphire_zone/Zone/Zone.h +++ b/src/servers/sapphire_zone/Zone/Zone.h @@ -86,6 +86,8 @@ public: void queueOutPacketForRange( Entity::Player& sourcePlayer, uint32_t range, Network::Packets::GamePacketPtr pPacketEntry ); + void queueOutPacket( Network::Packets::GamePacketPtr pPacketEntry ); + virtual uint32_t getTerritoryId(); Common::RegionType getType() const; From 99300d746ab55e63002c55755a49ecf0d969f382 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 28 Jan 2018 18:49:29 +1100 Subject: [PATCH 3/6] make the output of territorymgr nicer on startup :ok_hand: --- src/servers/sapphire_zone/Zone/TerritoryMgr.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp index 1c9c3b59..488f1642 100644 --- a/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp +++ b/src/servers/sapphire_zone/Zone/TerritoryMgr.cpp @@ -113,7 +113,8 @@ bool Core::TerritoryMgr::createDefaultTerritories() "\t" + std::to_string( guid ) + "\t" + std::to_string( territoryInfo->territoryIntendedUse ) + "\t" + territoryInfo->name + - "\t" + pPlaceName->name ); + ( territoryInfo->name.length() > 4 ? "\t" : "\t\t" ) + + pPlaceName->name ); ZonePtr pZone( new Zone( territoryId, guid, territoryInfo->name, pPlaceName->name, false ) ); pZone->init(); From dde0a30fa32f494a2fb770f42014c012139d4baf Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 28 Jan 2018 18:52:53 +1100 Subject: [PATCH 4/6] switch debugcommandhandler for scripted implementation --- scripts/native/CMakeLists.txt | 7 +- scripts/native/ScriptLoader.cpp.in | 4 +- scripts/native/debugcommands/Add.cpp | 102 +++ scripts/native/debugcommands/Get.cpp | 31 + scripts/native/debugcommands/Help.cpp | 23 + .../native/debugcommands/InjectChatPacket.cpp | 21 + scripts/native/debugcommands/InjectPacket.cpp | 20 + scripts/native/debugcommands/Nudge.cpp | 56 ++ scripts/native/debugcommands/PreInclude.h | 7 + scripts/native/debugcommands/Replay.cpp | 29 + scripts/native/debugcommands/Script.cpp | 86 +++ scripts/native/debugcommands/ServerInfo.cpp | 17 + scripts/native/debugcommands/Set.cpp | 148 ++++ .../sapphire_zone/DebugCommand/DebugCommand.h | 64 -- .../DebugCommand/DebugCommandHandler.cpp | 657 ------------------ .../DebugCommand/DebugCommandHandler.h | 52 -- .../sapphire_zone/Network/GameConnection.cpp | 2 - .../Network/Handlers/ActionHandler.cpp | 2 - .../Network/Handlers/GMCommandHandlers.cpp | 13 +- .../Network/Handlers/InventoryHandler.cpp | 2 - .../Network/Handlers/PacketHandlers.cpp | 6 +- .../Network/Handlers/SkillHandler.cpp | 2 - .../sapphire_zone/Script/NativeScriptApi.h | 96 ++- .../Script/NativeScriptManager.cpp | 27 + .../Script/NativeScriptManager.h | 15 +- .../sapphire_zone/Script/ScriptManager.cpp | 92 ++- .../sapphire_zone/Script/ScriptManager.h | 4 + src/servers/sapphire_zone/ServerZone.cpp | 3 +- 28 files changed, 770 insertions(+), 818 deletions(-) create mode 100644 scripts/native/debugcommands/Add.cpp create mode 100644 scripts/native/debugcommands/Get.cpp create mode 100644 scripts/native/debugcommands/Help.cpp create mode 100644 scripts/native/debugcommands/InjectChatPacket.cpp create mode 100644 scripts/native/debugcommands/InjectPacket.cpp create mode 100644 scripts/native/debugcommands/Nudge.cpp create mode 100644 scripts/native/debugcommands/PreInclude.h create mode 100644 scripts/native/debugcommands/Replay.cpp create mode 100644 scripts/native/debugcommands/Script.cpp create mode 100644 scripts/native/debugcommands/ServerInfo.cpp create mode 100644 scripts/native/debugcommands/Set.cpp delete mode 100644 src/servers/sapphire_zone/DebugCommand/DebugCommand.h delete mode 100644 src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp delete mode 100644 src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.h diff --git a/scripts/native/CMakeLists.txt b/scripts/native/CMakeLists.txt index aeaa0094..6107d58f 100644 --- a/scripts/native/CMakeLists.txt +++ b/scripts/native/CMakeLists.txt @@ -39,7 +39,7 @@ foreach(_scriptDir ${children}) endforeach() add_library("script_${_name}" MODULE "${SCRIPT_FILES}" "${SCRIPT_INCLUDE_FILES}" "${_scriptDir}/ScriptLoader.cpp") - target_link_libraries("script_${_name}" sapphire_zone) + target_link_libraries("script_${_name}" sapphire_zone common xivdat ${Boost_LIBRARIES}) if(MSVC) set_target_properties("script_${_name}" PROPERTIES @@ -53,6 +53,10 @@ foreach(_scriptDir ${children}) ) endif() + if(EXISTS "${_scriptDir}/PreInclude.h") + set(PreScriptIncludes "#include \"${_scriptDir}/PreInclude.h\"") + endif() + configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ScriptLoader.cpp.in" "${_scriptDir}/ScriptLoader.cpp") add_custom_command(TARGET "script_${_name}" POST_BUILD @@ -63,5 +67,6 @@ foreach(_scriptDir ${children}) unset(ScriptIncludes) unset(ScriptNames) + unset(PreScriptIncludes) endif() endforeach() diff --git a/scripts/native/ScriptLoader.cpp.in b/scripts/native/ScriptLoader.cpp.in index 633ca309..c5cbc42b 100644 --- a/scripts/native/ScriptLoader.cpp.in +++ b/scripts/native/ScriptLoader.cpp.in @@ -1,7 +1,5 @@ -#include - class ScriptObject; - +@PreScriptIncludes@ @ScriptIncludes@ const ScriptObject* ptrs[] = diff --git a/scripts/native/debugcommands/Add.cpp b/scripts/native/debugcommands/Add.cpp new file mode 100644 index 00000000..41031f7a --- /dev/null +++ b/scripts/native/debugcommands/Add.cpp @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include + +class Add : public DebugCommandScript +{ +public: + Add() : DebugCommandScript( "add", "Executes ADD command", 1 ) + { } + + virtual void run( Entity::Player& player, const std::string& data, const std::string &subCommand, const std::string ¶ms ) + { + if( subCommand == "status" ) + { + int32_t id; + int32_t duration; + uint16_t param; + + sscanf( params.c_str(), "%d %d %hu", &id, &duration, ¶m ); + + StatusEffect::StatusEffectPtr effect( new StatusEffect::StatusEffect( id, player.getAsPlayer(), player.getAsPlayer(), duration, 3000 ) ); + effect->setParam( param ); + + player.addStatusEffect( effect ); + } + else if( subCommand == "title" ) + { + uint32_t titleId; + sscanf( params.c_str(), "%u", &titleId ); + + player.addTitle( titleId ); + player.sendNotice( "Added title (ID: " + std::to_string( titleId ) + ")" ); + } + else if( subCommand == "spawn" ) + { + int32_t model, name; + + sscanf( params.c_str(), "%d %d", &model, &name ); + + Entity::BattleNpcPtr pBNpc( new Entity::BattleNpc( model, name, player.getPos() ) ); + + auto pZone = player.getCurrentZone(); + pBNpc->setCurrentZone( pZone ); + pZone->pushActor( pBNpc ); + + } + else if( subCommand == "op" ) + { + // temporary research packet + int32_t opcode; + sscanf( params.c_str(), "%x", &opcode ); + Network::Packets::GamePacketPtr pPe( new Network::Packets::GamePacket( opcode, 0x30, player.getId(), player.getId() ) ); + player.queuePacket( pPe ); + } + else if( subCommand == "actrl" ) + { + + // temporary research packet + + int32_t opcode; + int32_t param1; + int32_t param2; + int32_t param3; + int32_t param4; + int32_t param5; + int32_t param6; + int32_t playerId; + + sscanf( params.c_str(), "%x %x %x %x %x %x %x %x", &opcode, ¶m1, ¶m2, ¶m3, ¶m4, ¶m5, ¶m6, &playerId ); + + player.sendNotice( "Injecting ACTOR_CONTROL " + std::to_string( opcode ) ); + + Network::Packets::ZoneChannelPacket< Network::Packets::Server::FFXIVIpcActorControl143 > actorControl( playerId, player.getId() ); + actorControl.data().category = opcode; + actorControl.data().param1 = param1; + actorControl.data().param2 = param2; + actorControl.data().param3 = param3; + actorControl.data().param4 = param4; + actorControl.data().param5 = param5; + actorControl.data().param6 = param6; + player.queuePacket( actorControl ); + + + /*sscanf(params.c_str(), "%x %x %x %x %x %x %x", &opcode, ¶m1, ¶m2, ¶m3, ¶m4, ¶m5, ¶m6, &playerId); + + Network::Packets::Server::ServerNoticePacket noticePacket( player, "Injecting ACTOR_CONTROL " + std::to_string( opcode ) ); + + player.queuePacket( noticePacket ); + + Network::Packets::Server::ActorControlPacket143 controlPacket( player, opcode, + param1, param2, param3, param4, param5, param6, playerId ); + player.queuePacket( controlPacket );*/ + + } + else + { + player.sendUrgent( subCommand + " is not a valid ADD command." ); + } + } +}; \ No newline at end of file diff --git a/scripts/native/debugcommands/Get.cpp b/scripts/native/debugcommands/Get.cpp new file mode 100644 index 00000000..f20a3abe --- /dev/null +++ b/scripts/native/debugcommands/Get.cpp @@ -0,0 +1,31 @@ +#include + +#include + +class Get : public DebugCommandScript +{ +public: + Get() : DebugCommandScript( "get", "Executes GET commands", 1 ) + { } + + virtual void run( Entity::Player& player, const std::string& data, const std::string& subCommand, const std::string& params ) + { + if( ( subCommand == "pos" ) ) + { + + int16_t map_id = m_objects->m_exd->m_zoneInfoMap[player.getCurrentZone()->getTerritoryId()].map_id; + + player.sendNotice( "Pos:\n" + + std::to_string( player.getPos().x ) + "\n" + + std::to_string( player.getPos().y ) + "\n" + + std::to_string( player.getPos().z ) + "\n" + + std::to_string( player.getRotation() ) + "\nMapId: " + + std::to_string( map_id ) + "\nZoneID: " + + std::to_string(player.getCurrentZone()->getTerritoryId() ) + "\n" ); + } + else + { + player.sendUrgent( subCommand + " is not a valid GET command." ); + } + } +}; \ No newline at end of file diff --git a/scripts/native/debugcommands/Help.cpp b/scripts/native/debugcommands/Help.cpp new file mode 100644 index 00000000..f7ec3947 --- /dev/null +++ b/scripts/native/debugcommands/Help.cpp @@ -0,0 +1,23 @@ +#include + +#include