diff --git a/Makefile b/Makefile index 57384af0..f305cc04 100644 --- a/Makefile +++ b/Makefile @@ -532,7 +532,7 @@ SRC_DIRS := src src/engine src/game src/audio src/bass_audio src/menu src/buffer BIN_DIRS := bin bin/$(VERSION) # PC files -SRC_DIRS += src/pc src/pc/gfx src/pc/audio src/pc/controller src/pc/fs src/pc/fs/packtypes src/pc/mods src/pc/network src/pc/network/packets src/pc/network/socket src/pc/network/coopnet src/pc/utils src/pc/utils/miniz src/pc/djui src/pc/lua src/pc/lua/utils +SRC_DIRS += src/pc src/pc/gfx src/pc/audio src/pc/controller src/pc/fs src/pc/fs/packtypes src/pc/mods src/dev src/pc/network src/pc/network/packets src/pc/network/socket src/pc/network/coopnet src/pc/utils src/pc/utils/miniz src/pc/djui src/pc/lua src/pc/lua/utils ifeq ($(DISCORD_SDK),1) SRC_DIRS += src/pc/discord diff --git a/src/dev/chat.c b/src/dev/chat.c new file mode 100644 index 00000000..54757ac5 --- /dev/null +++ b/src/dev/chat.c @@ -0,0 +1,122 @@ +#include "pc/network/network.h" +#include "pc/network/socket/socket.h" +#include "pc/lua/smlua_hooks.h" +#include "pc/djui/djui_language.h" +#include "pc/djui/djui_chat_message.h" +#include "pc/chat_commands.h" +#include "pc/network/ban_list.h" +#include "pc/network/moderator_list.h" +#include "pc/debuglog.h" +#include "pc/lua/utils/smlua_level_utils.h" +#include "level_table.h" + +#ifdef DEVELOPMENT + +static bool str_starts_with(const char* pre, char* str) { + return strncmp(pre, str, strlen(pre)) == 0; +} + +bool exec_dev_chat_command(char* command) { + if (gNetworkSystem == &gNetworkSystemSocket && str_starts_with("/warp ", command)) { + static const struct { const char *name; s32 num; } sLevelNumByName[] = { +#undef STUB_LEVEL +#undef DEFINE_LEVEL +#define STUB_LEVEL(...) +#define DEFINE_LEVEL(_0, levelnum, _2, levelname, ...) { #levelname, levelnum }, +#include "levels/level_defines.h" +#undef STUB_LEVEL +#undef DEFINE_LEVEL + }; + + // Params + char *paramLevel = command + 6; + if (*paramLevel == 0 || *paramLevel == ' ') { + djui_chat_message_create("Missing parameters: [LEVEL] [AREA] [ACT]"); + return true; + } + char *paramArea = strchr(paramLevel, ' '); + if (paramArea++ == NULL || *paramArea == 0 || *paramArea == ' ') { + djui_chat_message_create("Missing parameters: [AREA] [ACT]"); + return true; + } + char *paramAct = strchr(paramArea, ' '); + if (paramAct++ == NULL || *paramAct == 0 || *paramAct == ' ') { + djui_chat_message_create("Missing parameters: [ACT]"); + return true; + } + *(paramArea - 1) = 0; + *(paramAct - 1) = 0; + + // Level + s32 level = -1; + if (sscanf(paramLevel, "%d", &level) <= 0) { + for (s32 i = 0; i != (s32) (sizeof(sLevelNumByName) / sizeof(sLevelNumByName[0])); ++i) { + if (strstr(paramLevel, sLevelNumByName[i].name) == paramLevel) { + level = sLevelNumByName[i].num; + break; + } + } + if (level == -1) { + struct CustomLevelInfo* info = smlua_level_util_get_info_from_short_name(paramLevel); + if (info != NULL) { + level = info->levelNum; + } + } + if (level == -1) { + char message[256]; + snprintf(message, 256, "Invalid [LEVEL] parameter: %s", paramLevel); + djui_chat_message_create(message); + return true; + } + } + + // Area + s32 area = -1; + if (sscanf(paramArea, "%d", &area) <= 0) { + char message[256]; + snprintf(message, 256, "Invalid [AREA] parameter: %s", paramArea); + djui_chat_message_create(message); + return true; + } + + // Act + s32 act = -1; + if (sscanf(paramAct, "%d", &act) <= 0) { + char message[256]; + snprintf(message, 256, "Invalid [ACT] parameter: %s", paramAct); + djui_chat_message_create(message); + return true; + } + + // Warp + if (!dynos_warp_to_level(level, area, act)) { + char message[256]; + snprintf(message, 256, "Unable to warp to: %s %s %s", paramLevel, paramArea, paramAct); + djui_chat_message_create(message); + return true; + } + + // OK + char message[256]; + snprintf(message, 256, "Warping to: %s %s %s...", paramLevel, paramArea, paramAct); + djui_chat_message_create(message); + return true; + } + + if (str_starts_with("/lua ", command)) { + smlua_exec_str(&command[5]); + return true; + } + + if (str_starts_with("/luaf ", command)) { + smlua_exec_file(&command[6]); + return true; + } +} + +void dev_display_chat_commands(void) { + djui_chat_message_create("/warp [LEVEL] [AREA] [ACT] - Level can be either a numeric value or a shorthand name"); + djui_chat_message_create("/lua [LUA] - Execute Lua code from a string"); + djui_chat_message_create("/luaf [FILENAME] - Execute Lua code from a file"); +} +#endif diff --git a/src/dev/chat.h b/src/dev/chat.h new file mode 100644 index 00000000..d8bc9453 --- /dev/null +++ b/src/dev/chat.h @@ -0,0 +1,6 @@ +#pragma once + +#ifdef DEVELOPMENT +bool exec_dev_chat_command(char* command); +void dev_display_chat_commands(void); +#endif \ No newline at end of file diff --git a/src/pc/controller/controller_keyboard_debug.c b/src/dev/controller_keyboard_debug.c similarity index 100% rename from src/pc/controller/controller_keyboard_debug.c rename to src/dev/controller_keyboard_debug.c diff --git a/src/pc/controller/controller_keyboard_debug.h b/src/dev/controller_keyboard_debug.h similarity index 100% rename from src/pc/controller/controller_keyboard_debug.h rename to src/dev/controller_keyboard_debug.h diff --git a/src/pc/chat_commands.c b/src/pc/chat_commands.c index a6d361f3..a1039547 100644 --- a/src/pc/chat_commands.c +++ b/src/pc/chat_commands.c @@ -9,7 +9,9 @@ #include "pc/debuglog.h" #include "pc/lua/utils/smlua_level_utils.h" #include "level_table.h" - +#ifdef DEVELOPMENT +#include "dev/chat.h" +#endif extern bool gIsModerator; static enum ChatConfirmCommand sConfirming = CCC_NONE; @@ -214,99 +216,7 @@ bool exec_chat_command(char* command) { return true; } #if defined(DEVELOPMENT) - if (gNetworkSystem == &gNetworkSystemSocket && str_starts_with("/warp ", command)) { - static const struct { const char *name; s32 num; } sLevelNumByName[] = { -#undef STUB_LEVEL -#undef DEFINE_LEVEL -#define STUB_LEVEL(...) -#define DEFINE_LEVEL(_0, levelnum, _2, levelname, ...) { #levelname, levelnum }, -#include "levels/level_defines.h" -#undef STUB_LEVEL -#undef DEFINE_LEVEL - }; - - // Params - char *paramLevel = command + 6; - if (*paramLevel == 0 || *paramLevel == ' ') { - djui_chat_message_create("Missing parameters: [LEVEL] [AREA] [ACT]"); - return true; - } - char *paramArea = strchr(paramLevel, ' '); - if (paramArea++ == NULL || *paramArea == 0 || *paramArea == ' ') { - djui_chat_message_create("Missing parameters: [AREA] [ACT]"); - return true; - } - char *paramAct = strchr(paramArea, ' '); - if (paramAct++ == NULL || *paramAct == 0 || *paramAct == ' ') { - djui_chat_message_create("Missing parameters: [ACT]"); - return true; - } - *(paramArea - 1) = 0; - *(paramAct - 1) = 0; - - // Level - s32 level = -1; - if (sscanf(paramLevel, "%d", &level) <= 0) { - for (s32 i = 0; i != (s32) (sizeof(sLevelNumByName) / sizeof(sLevelNumByName[0])); ++i) { - if (strstr(paramLevel, sLevelNumByName[i].name) == paramLevel) { - level = sLevelNumByName[i].num; - break; - } - } - if (level == -1) { - struct CustomLevelInfo* info = smlua_level_util_get_info_from_short_name(paramLevel); - if (info != NULL) { - level = info->levelNum; - } - } - if (level == -1) { - char message[256]; - snprintf(message, 256, "Invalid [LEVEL] parameter: %s", paramLevel); - djui_chat_message_create(message); - return true; - } - } - - // Area - s32 area = -1; - if (sscanf(paramArea, "%d", &area) <= 0) { - char message[256]; - snprintf(message, 256, "Invalid [AREA] parameter: %s", paramArea); - djui_chat_message_create(message); - return true; - } - - // Act - s32 act = -1; - if (sscanf(paramAct, "%d", &act) <= 0) { - char message[256]; - snprintf(message, 256, "Invalid [ACT] parameter: %s", paramAct); - djui_chat_message_create(message); - return true; - } - - // Warp - if (!dynos_warp_to_level(level, area, act)) { - char message[256]; - snprintf(message, 256, "Unable to warp to: %s %s %s", paramLevel, paramArea, paramAct); - djui_chat_message_create(message); - return true; - } - - // OK - char message[256]; - snprintf(message, 256, "Warping to: %s %s %s...", paramLevel, paramArea, paramAct); - djui_chat_message_create(message); - return true; - } - - if (str_starts_with("/lua ", command)) { - smlua_exec_str(&command[5]); - return true; - } - - if (str_starts_with("/luaf ", command)) { - smlua_exec_file(&command[6]); + if (exec_dev_chat_command(command)) { return true; } #endif @@ -323,9 +233,7 @@ void display_chat_commands(void) { djui_chat_message_create(DLANG(CHAT, MOD_DESC)); } #if defined(DEVELOPMENT) - djui_chat_message_create("/warp [LEVEL] [AREA] [ACT] - Level can be either a numeric value or a shorthand name"); - djui_chat_message_create("/lua [LUA] - Execute Lua code from a string"); - djui_chat_message_create("/luaf [FILENAME] - Execute Lua code from a file"); + dev_display_chat_commands(); #endif if (sConfirming != CCC_NONE) { djui_chat_message_create("/confirm"); } smlua_display_chat_commands(); diff --git a/src/pc/controller/controller_keyboard.c b/src/pc/controller/controller_keyboard.c index d5129cc4..1c684039 100644 --- a/src/pc/controller/controller_keyboard.c +++ b/src/pc/controller/controller_keyboard.c @@ -7,7 +7,10 @@ #include "../configfile.h" #include "controller_keyboard.h" -#include "controller_keyboard_debug.h" + +#ifdef DEVELOPMENT +#include "dev/controller_keyboard_debug.h" +#endif #include "pc/gfx/gfx_window_manager_api.h" #include "pc/pc_main.h"