From 6305c204103446fc37cab9f8cd7a7d8c8271effd Mon Sep 17 00:00:00 2001
From: Agent X <44549182+AgentXLP@users.noreply.github.com>
Date: Wed, 5 Jun 2024 18:58:25 -0400
Subject: [PATCH] Add 'script warnings' for using deprecated functions, add new
Discord ID function
---
autogen/lua_definitions/functions.lua | 5 +++++
docs/lua/functions-5.md | 18 ++++++++++++++++++
docs/lua/functions.md | 1 +
lang/English.ini | 2 +-
src/pc/djui/djui.c | 3 ++-
src/pc/djui/djui.h | 2 +-
src/pc/lua/smlua.c | 13 ++++++++++++-
src/pc/lua/smlua.h | 1 +
src/pc/lua/smlua_functions_autogen.c | 16 ++++++++++++++++
src/pc/lua/utils/smlua_deprecated.c | 10 ++++++++++
src/pc/lua/utils/smlua_misc_utils.c | 16 ++++++++++++++++
src/pc/lua/utils/smlua_misc_utils.h | 2 ++
12 files changed, 85 insertions(+), 4 deletions(-)
diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua
index 870ad337..b6ae3887 100644
--- a/autogen/lua_definitions/functions.lua
+++ b/autogen/lua_definitions/functions.lua
@@ -8101,6 +8101,11 @@ function get_lighting_dir(index)
-- ...
end
+--- @return string
+function get_local_discord_id()
+ -- ...
+end
+
--- @return integer
function get_network_area_timer()
-- ...
diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md
index 26eab4de..41330aef 100644
--- a/docs/lua/functions-5.md
+++ b/docs/lua/functions-5.md
@@ -1997,6 +1997,24 @@
+## [get_local_discord_id](#get_local_discord_id)
+
+### Lua Example
+`local stringValue = get_local_discord_id()`
+
+### Parameters
+- None
+
+### Returns
+- `string`
+
+### C Prototype
+`const char* get_local_discord_id(void);`
+
+[:arrow_up_small:](#)
+
+
+
## [get_network_area_timer](#get_network_area_timer)
### Lua Example
diff --git a/docs/lua/functions.md b/docs/lua/functions.md
index 82ed69d7..9b1eb885 100644
--- a/docs/lua/functions.md
+++ b/docs/lua/functions.md
@@ -1686,6 +1686,7 @@
- [get_last_star_or_key](functions-5.md#get_last_star_or_key)
- [get_lighting_color](functions-5.md#get_lighting_color)
- [get_lighting_dir](functions-5.md#get_lighting_dir)
+ - [get_local_discord_id](functions-5.md#get_local_discord_id)
- [get_network_area_timer](functions-5.md#get_network_area_timer)
- [get_os_name](functions-5.md#get_os_name)
- [get_save_file_modified](functions-5.md#get_save_file_modified)
diff --git a/lang/English.ini b/lang/English.ini
index 4b8e14fd..de97a088 100644
--- a/lang/English.ini
+++ b/lang/English.ini
@@ -150,7 +150,7 @@ DJUI_THEME = "DJUI Theme"
DJUI_SCALE = "DJUI Scale"
DJUI_FONT = "DJUI Font"
AUTO = "Auto"
-CENTER = "Center"
+CENTER = "DJUI Center"
FONT_NORMAL = "Normal"
FONT_ALIASED = "Aliased"
LIGHT_THEME = "Light"
diff --git a/src/pc/djui/djui.c b/src/pc/djui/djui.c
index 5f573a64..6b2b72c7 100644
--- a/src/pc/djui/djui.c
+++ b/src/pc/djui/djui.c
@@ -124,8 +124,9 @@ void djui_connect_menu_open(void) {
djui_panel_join_message_create(NULL);
}
-void djui_lua_error(char* text) {
+void djui_lua_error(char* text, struct DjuiColor color) {
if (!sDjuiLuaError) { return; }
+ djui_base_set_color(&sDjuiLuaError->base, color.r, color.g, color.b, color.a);
djui_text_set_text(sDjuiLuaError, text);
djui_base_set_visible(&sDjuiLuaError->base, true);
sDjuiLuaErrorTimeout = 30 * 5;
diff --git a/src/pc/djui/djui.h b/src/pc/djui/djui.h
index 9cc37ba0..a3dca5cf 100644
--- a/src/pc/djui/djui.h
+++ b/src/pc/djui/djui.h
@@ -43,7 +43,7 @@ extern bool gDjuiDisabled;
void djui_init(void);
void djui_init_late(void);
void djui_connect_menu_open(void);
-void djui_lua_error(char* text);
+void djui_lua_error(char* text, struct DjuiColor color);
void djui_render(void);
void djui_reset_hud_params(void);
diff --git a/src/pc/lua/smlua.c b/src/pc/lua/smlua.c
index a459d5fd..6c0a0b3d 100644
--- a/src/pc/lua/smlua.c
+++ b/src/pc/lua/smlua.c
@@ -23,7 +23,18 @@ void smlua_mod_error(void) {
if (mod == NULL) { return; }
char txt[255] = { 0 };
snprintf(txt, 254, "'%s\\#ff0000\\' has script errors!", mod->name);
- djui_lua_error(txt);
+ static const struct DjuiColor color = { 255, 0, 0, 255 };
+ djui_lua_error(txt, color);
+}
+
+void smlua_mod_warning(void) {
+ struct Mod* mod = gLuaActiveMod;
+ if (mod == NULL) { mod = gLuaLastHookMod; }
+ if (mod == NULL) { return; }
+ char txt[255] = { 0 };
+ snprintf(txt, 254, "'%s\\#ffe600\\' is using deprecated functions!", mod->name);
+ static const struct DjuiColor color = { 255, 230, 0, 255 };
+ djui_lua_error(txt, color);
}
int smlua_error_handler(lua_State* L) {
diff --git a/src/pc/lua/smlua.h b/src/pc/lua/smlua.h
index aad8d9a2..b7b2eb62 100644
--- a/src/pc/lua/smlua.h
+++ b/src/pc/lua/smlua.h
@@ -39,6 +39,7 @@ extern struct Mod* gLuaActiveMod;
extern struct Mod* gLuaLastHookMod;
void smlua_mod_error(void);
+void smlua_mod_warning(void);
int smlua_error_handler(UNUSED lua_State* L);
int smlua_pcall(lua_State* L, int nargs, int nresults, int errfunc);
void smlua_exec_file(const char* path);
diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c
index 1fda6548..200b8672 100644
--- a/src/pc/lua/smlua_functions_autogen.c
+++ b/src/pc/lua/smlua_functions_autogen.c
@@ -29901,6 +29901,21 @@ int smlua_func_get_lighting_dir(lua_State* L) {
return 1;
}
+int smlua_func_get_local_discord_id(UNUSED lua_State* L) {
+ if (L == NULL) { return 0; }
+
+ int top = lua_gettop(L);
+ if (top != 0) {
+ LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "get_local_discord_id", 0, top);
+ return 0;
+ }
+
+
+ lua_pushstring(L, get_local_discord_id());
+
+ return 1;
+}
+
int smlua_func_get_network_area_timer(UNUSED lua_State* L) {
if (L == NULL) { return 0; }
@@ -34070,6 +34085,7 @@ void smlua_bind_functions_autogen(void) {
smlua_bind_function(L, "get_last_star_or_key", smlua_func_get_last_star_or_key);
smlua_bind_function(L, "get_lighting_color", smlua_func_get_lighting_color);
smlua_bind_function(L, "get_lighting_dir", smlua_func_get_lighting_dir);
+ smlua_bind_function(L, "get_local_discord_id", smlua_func_get_local_discord_id);
smlua_bind_function(L, "get_network_area_timer", smlua_func_get_network_area_timer);
smlua_bind_function(L, "get_os_name", smlua_func_get_os_name);
smlua_bind_function(L, "get_save_file_modified", smlua_func_get_save_file_modified);
diff --git a/src/pc/lua/utils/smlua_deprecated.c b/src/pc/lua/utils/smlua_deprecated.c
index 02920e00..ec3eb20f 100644
--- a/src/pc/lua/utils/smlua_deprecated.c
+++ b/src/pc/lua/utils/smlua_deprecated.c
@@ -8,6 +8,7 @@
#include "game/object_list_processor.h"
char* network_discord_id_from_local_index(UNUSED u8 localIndex) {
+ smlua_mod_warning();
#ifdef DISCORD_SDK
static char sDiscordId[64] = "";
if (localIndex == 0) {
@@ -19,25 +20,31 @@ char* network_discord_id_from_local_index(UNUSED u8 localIndex) {
}
void djui_hud_set_render_behind_hud(bool enable) {
+ smlua_mod_warning();
if (!gLuaActiveMod) { return; }
gLuaActiveMod->renderBehindHud = enable;
}
struct ModAudio* audio_stream_load_url(UNUSED const char* url) {
+ smlua_mod_warning();
return NULL;
}
f32 audio_stream_get_tempo(UNUSED struct ModAudio* audio) {
+ smlua_mod_warning();
return 1;
}
void audio_stream_set_tempo(UNUSED struct ModAudio* audio, UNUSED f32 tempo) {
+ smlua_mod_warning();
}
void audio_stream_set_speed(UNUSED struct ModAudio* audio, UNUSED f32 initial_freq, UNUSED f32 speed, UNUSED bool pitch) {
+ smlua_mod_warning();
}
f32 get_environment_region(u8 index) {
+ smlua_mod_warning();
s32 idx = 6 * index;
if (gEnvironmentRegions != NULL && index > 0 && index <= gEnvironmentRegions[0] && gEnvironmentRegionsLength > idx) {
return gEnvironmentRegions[idx];
@@ -46,6 +53,7 @@ f32 get_environment_region(u8 index) {
}
void set_environment_region(u8 index, s32 value) {
+ smlua_mod_warning();
s32 idx = 6 * index;
if (gEnvironmentRegions != NULL && index > 0 && index <= gEnvironmentRegions[0] && gEnvironmentRegionsLength > idx) {
gEnvironmentRegions[idx] = value;
@@ -53,6 +61,7 @@ void set_environment_region(u8 index, s32 value) {
}
void network_player_color_to_palette(struct NetworkPlayer *np, enum PlayerPart part, Color color) {
+ smlua_mod_warning();
if (np == NULL || !(part < PLAYER_PART_MAX && part >= 0)) { return; }
np->palette.parts[part][0] = color[0];
@@ -62,6 +71,7 @@ void network_player_color_to_palette(struct NetworkPlayer *np, enum PlayerPart p
}
void network_player_palette_to_color(struct NetworkPlayer *np, enum PlayerPart part, Color out) {
+ smlua_mod_warning();
if (np == NULL || !(part < PLAYER_PART_MAX && part >= 0)) {
if (np == NULL) { // output config palette instead if np is NULL
out[0] = configPlayerPalette.parts[part][0];
diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c
index a51d2c48..474a65d0 100644
--- a/src/pc/lua/utils/smlua_misc_utils.c
+++ b/src/pc/lua/utils/smlua_misc_utils.c
@@ -25,6 +25,10 @@
#include "game/level_geo.h"
#include "game/first_person_cam.h"
+#ifdef DISCORD_SDK
+#include "pc/discord/discord.h"
+#endif
+
static struct DateTime sDateTime;
///
@@ -639,6 +643,18 @@ bool djui_is_playerlist_open(void) {
///
+const char* get_local_discord_id(void) {
+#ifdef DISCORD_SDK
+ static char sDiscordId[64] = "";
+ snprintf(sDiscordId, 64, "%" PRIu64 "", (uint64_t)discord_get_user_id());
+ return sDiscordId;
+#else
+ return NULL;
+#endif
+}
+
+///
+
void set_window_title(const char* title) {
WAPI.set_window_title(title);
}
diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h
index d8a93aa8..5f037083 100644
--- a/src/pc/lua/utils/smlua_misc_utils.h
+++ b/src/pc/lua/utils/smlua_misc_utils.h
@@ -167,6 +167,8 @@ s32 get_dialog_response(void);
bool djui_is_playerlist_open(void);
+const char* get_local_discord_id(void);
+
void set_window_title(const char* title);
void reset_window_title(void);