Add reloading, do last changes (hopefully, can't wait to review and make pr message (it requires search pr to be merged (again (i'm so cooked (its gg)))))

This commit is contained in:
EmeraldLockdown 2026-03-08 22:14:55 -05:00
parent 2102da9f56
commit 537eabc3bd
5 changed files with 38 additions and 4 deletions

View file

@ -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);
}

View file

@ -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);

View file

@ -2,9 +2,18 @@
#include <string.h>
#include <PR/ultratypes.h>
#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);

View file

@ -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);

View file

@ -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;