diff --git a/src/pc/djui/djui_panel_moderator_menu_inspect.c b/src/pc/djui/djui_panel_moderator_menu_inspect.c index 46ec8665e..50a4e0830 100644 --- a/src/pc/djui/djui_panel_moderator_menu_inspect.c +++ b/src/pc/djui/djui_panel_moderator_menu_inspect.c @@ -9,6 +9,9 @@ #include "pc/network/network.h" #include "pc/network/moderation.h" +struct DjuiButton* sModButton = NULL; +static u8 sSelectedIndex = 0; + static void djui_panel_moderator_menu_action_button_click(struct DjuiBase* caller) { djui_panel_moderation_confirm_create(caller, caller->uTag, caller->tag, caller->bTag, djui_panel_moderator_menu_reload); } @@ -16,12 +19,23 @@ static void djui_panel_moderator_menu_action_button_click(struct DjuiBase* calle static void djui_panel_moderator_menu_inspector_destroy(struct DjuiBase* base) { struct DjuiThreePanel* threePanel = (struct DjuiThreePanel*)base; free(threePanel); + sModButton = NULL; +} + +void djui_panel_moderator_inspector_reload() { + if (!sModButton) return; + if (sSelectedIndex >= MAX_PLAYERS) return; + struct NetworkPlayer* np = &gNetworkPlayers[sSelectedIndex]; + + djui_text_set_text(sModButton->text, np->moderator ? DLANG(MODERATION, UNMOD) : DLANG(MODERATION, MOD)); + sModButton->base.uTag = np->moderator ? MODERATION_ACTION_UNMOD : MODERATION_ACTION_MOD; } void djui_panel_moderator_menu_inspector_create(struct DjuiBase* caller) { if (caller->tag <= 0 || caller->tag >= MAX_PLAYERS) return; struct NetworkPlayer* np = &gNetworkPlayers[caller->tag]; if (!np->connected) return; + sSelectedIndex = caller->tag; struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MODERATION, MODERATOR_MENU_TITLE), true); struct DjuiBase* body = djui_three_panel_get_body(panel); @@ -42,10 +56,10 @@ void djui_panel_moderator_menu_inspector_create(struct DjuiBase* caller) { banButton->base.uTag = MODERATION_ACTION_BAN; banButton->base.tag = np->localIndex; - struct DjuiButton* modButton = djui_button_create(body, np->moderator ? DLANG(MODERATION, UNMOD) : DLANG(MODERATION, MOD), DJUI_BUTTON_STYLE_NORMAL, djui_panel_moderator_menu_action_button_click); - modButton->base.uTag = np->moderator ? MODERATION_ACTION_UNMOD : MODERATION_ACTION_MOD; - modButton->base.bTag = true; - modButton->base.tag = np->localIndex; + sModButton = djui_button_create(body, np->moderator ? DLANG(MODERATION, UNMOD) : DLANG(MODERATION, MOD), DJUI_BUTTON_STYLE_NORMAL, djui_panel_moderator_menu_action_button_click); + sModButton->base.uTag = np->moderator ? MODERATION_ACTION_UNMOD : MODERATION_ACTION_MOD; + sModButton->base.bTag = true; + sModButton->base.tag = np->localIndex; djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back); } diff --git a/src/pc/djui/djui_panel_moderator_menu_inspect.h b/src/pc/djui/djui_panel_moderator_menu_inspect.h index 983a431cc..e0be57523 100644 --- a/src/pc/djui/djui_panel_moderator_menu_inspect.h +++ b/src/pc/djui/djui_panel_moderator_menu_inspect.h @@ -1,4 +1,5 @@ #pragma once #include "djui.h" +void djui_panel_moderator_inspector_reload(); void djui_panel_moderator_menu_inspector_create(struct DjuiBase* caller); \ No newline at end of file diff --git a/src/pc/network/moderation.c b/src/pc/network/moderation.c index 6792ddc07..32dad08ae 100644 --- a/src/pc/network/moderation.c +++ b/src/pc/network/moderation.c @@ -2,9 +2,18 @@ #include #include #include "moderation.h" +#include "pc/djui/djui_panel_moderator_menu.h" +#include "pc/djui/djui_panel_moderation_list.h" +#include "pc/djui/djui_panel_moderator_menu_inspect.h" #include "pc/debuglog.h" #include "pc/ini.h" +void djui_reload_moderation_panels() { + djui_panel_moderator_menu_reload(); + djui_panel_moderation_list_reload(); + djui_panel_moderator_inspector_reload(); +} + void network_kick_player(u8 localIndex, char* reason) { if (gNetworkPlayerLocal->moderator) { network_send_moderation_action(MODERATION_ACTION_KICK, localIndex, reason, false); diff --git a/src/pc/network/moderation.h b/src/pc/network/moderation.h index c3216b61f..64bec5986 100644 --- a/src/pc/network/moderation.h +++ b/src/pc/network/moderation.h @@ -10,6 +10,7 @@ enum ModerationActions { MODERATION_ACTION_COUNT, }; +void djui_reload_moderation_panels(); void network_kick_player(u8 localIndex, char* reason); void network_ban_player(u8 localIndex, char* reason, bool permanent); void network_unban_player(char* address); diff --git a/src/pc/network/network_player.c b/src/pc/network/network_player.c index 5e1661bbb..3f25b020f 100644 --- a/src/pc/network/network_player.c +++ b/src/pc/network/network_player.c @@ -17,6 +17,7 @@ #endif #include "game/mario.h" #include "pc/djui/djui_unicode.h" +#include "moderation.h" struct NetworkPlayer gNetworkPlayers[MAX_PLAYERS] = { 0 }; struct NetworkPlayer *gNetworkPlayerLocal = NULL; @@ -292,6 +293,8 @@ u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 mode np->palette = *palette; network_player_update_model(localIndex); + djui_reload_moderation_panels(); + snprintf(np->name, MAX_CONFIG_STRING, "%s", name); return localIndex; } @@ -327,6 +330,9 @@ u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 mode snprintf(np->discordId, 64, "%s", discordId); + // update moderation panels + djui_reload_moderation_panels(); + // clear networking fields np->lastReceived = clock_elapsed(); np->lastSent = clock_elapsed(); @@ -421,6 +427,9 @@ u8 network_player_disconnected(u8 globalIndex) { // reset mario state init_mario_single_from_save_file(&gMarioStates[i], i); + // reload moderation panels + djui_reload_moderation_panels(); + return i; } return UNKNOWN_GLOBAL_INDEX;