mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-22 01:52:43 +00:00
check names on player connect
This commit is contained in:
parent
215056b1d2
commit
6ff4424f08
4 changed files with 29 additions and 26 deletions
|
|
@ -20,6 +20,7 @@
|
|||
#include "debuglog.h"
|
||||
#include "djui/djui_hud_utils.h"
|
||||
#include "game/save_file.h"
|
||||
#include "pc/network/network_player.h"
|
||||
|
||||
#define ARRAY_LEN(arr) (sizeof(arr) / sizeof(arr[0]))
|
||||
|
||||
|
|
@ -749,8 +750,7 @@ NEXT_OPTION:
|
|||
|
||||
if (gCLIOpts.playerName[0]) { snprintf(configPlayerName, MAX_CONFIG_STRING, "%s", gCLIOpts.playerName); }
|
||||
|
||||
bool djui_panel_player_name_valid(char* buffer);
|
||||
if (!djui_panel_player_name_valid(configPlayerName)) {
|
||||
if (!network_player_name_valid(configPlayerName)) {
|
||||
snprintf(configPlayerName, MAX_CONFIG_STRING, "Player");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -327,27 +327,9 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
|
|||
// player panel //
|
||||
//////////////////
|
||||
|
||||
bool djui_panel_player_name_valid(char* buffer) {
|
||||
if (buffer[0] == '\0') { return false; }
|
||||
u16 numEscapeChars = 0;
|
||||
bool isOnlyEscapeChars = true;
|
||||
bool isInEscapedChar = false;
|
||||
char* c = buffer;
|
||||
while (*c != '\0') {
|
||||
if (*c == ' ') { return false; }
|
||||
if (!djui_unicode_valid_char(c)) { return false; }
|
||||
if (*c == '\\') { numEscapeChars++; isInEscapedChar = !isInEscapedChar; }
|
||||
else if (!isInEscapedChar) { isOnlyEscapeChars = false; }
|
||||
c = djui_unicode_next_char(c);
|
||||
}
|
||||
if (isOnlyEscapeChars) { return false; }
|
||||
if (numEscapeChars % 2 != 0) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
static char *djui_panel_player_name_default_get(void) {
|
||||
char *langName = DLANG(PLAYER, PLAYER);
|
||||
if (djui_panel_player_name_valid(langName)) {
|
||||
if (network_player_name_valid(langName)) {
|
||||
return langName;
|
||||
}
|
||||
static char *name = "Player";
|
||||
|
|
@ -356,7 +338,7 @@ static char *djui_panel_player_name_default_get(void) {
|
|||
|
||||
static void djui_panel_player_name_text_change(struct DjuiBase* caller) {
|
||||
struct DjuiInputbox* inputbox1 = (struct DjuiInputbox*)caller;
|
||||
if (djui_panel_player_name_valid(inputbox1->buffer)) {
|
||||
if (network_player_name_valid(inputbox1->buffer)) {
|
||||
djui_inputbox_set_text_color(inputbox1, 0, 0, 0, 255);
|
||||
} else {
|
||||
djui_inputbox_set_text_color(inputbox1, 255, 0, 0, 255);
|
||||
|
|
@ -365,7 +347,7 @@ static void djui_panel_player_name_text_change(struct DjuiBase* caller) {
|
|||
|
||||
static void djui_panel_player_name_on_focus_end(struct DjuiBase* caller) {
|
||||
struct DjuiInputbox* inputbox1 = (struct DjuiInputbox*)caller;
|
||||
if (!djui_panel_player_name_valid(inputbox1->buffer)) {
|
||||
if (!network_player_name_valid(inputbox1->buffer)) {
|
||||
djui_inputbox_set_text(inputbox1, djui_panel_player_name_default_get());
|
||||
}
|
||||
snprintf(configPlayerName, MAX_CONFIG_STRING, "%s", inputbox1->buffer);
|
||||
|
|
@ -441,7 +423,7 @@ void djui_panel_player_create(struct DjuiBase* caller) {
|
|||
djui_base_set_size_type(&inputbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||
djui_base_set_size(&inputbox1->base, 0.45f, 32);
|
||||
djui_base_set_alignment(&inputbox1->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
|
||||
if (djui_panel_player_name_valid(configPlayerName)) {
|
||||
if (network_player_name_valid(configPlayerName)) {
|
||||
djui_inputbox_set_text(inputbox1, configPlayerName);
|
||||
} else {
|
||||
djui_inputbox_set_text(inputbox1, djui_panel_player_name_default_get());
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "pc/discord/discord.h"
|
||||
#endif
|
||||
#include "game/mario.h"
|
||||
#include "pc/djui/djui_unicode.h"
|
||||
|
||||
struct NetworkPlayer gNetworkPlayers[MAX_PLAYERS] = { 0 };
|
||||
struct NetworkPlayer *gNetworkPlayerLocal = NULL;
|
||||
|
|
@ -23,6 +24,24 @@ struct NetworkPlayer *gNetworkPlayerServer = NULL;
|
|||
static char sDefaultPlayerName[] = "Player";
|
||||
static char sDefaultDiscordId[] = "0";
|
||||
|
||||
bool network_player_name_valid(const char* buffer) {
|
||||
if (buffer[0] == '\0') { return false; }
|
||||
u16 numEscapeChars = 0;
|
||||
bool isOnlyEscapeChars = true;
|
||||
bool isInEscapedChar = false;
|
||||
char* c = buffer;
|
||||
while (*c != '\0') {
|
||||
if (*c == ' ') { return false; }
|
||||
if (!djui_unicode_valid_char(c)) { return false; }
|
||||
if (*c == '\\') { numEscapeChars++; isInEscapedChar = !isInEscapedChar; }
|
||||
else if (!isInEscapedChar) { isOnlyEscapeChars = false; }
|
||||
c = djui_unicode_next_char(c);
|
||||
}
|
||||
if (isOnlyEscapeChars) { return false; }
|
||||
if (numEscapeChars % 2 != 0) { return false; }
|
||||
return true;
|
||||
}
|
||||
|
||||
void network_player_init(void) {
|
||||
gNetworkPlayers[0].modelIndex = (configPlayerModel < CT_MAX) ? configPlayerModel : CT_MARIO;
|
||||
gNetworkPlayers[0].palette = configPlayerPalette;
|
||||
|
|
@ -252,8 +271,8 @@ u8 network_player_connected(enum NetworkPlayerType type, u8 globalIndex, u8 mode
|
|||
}
|
||||
struct NetworkPlayer *np = &gNetworkPlayers[localIndex];
|
||||
|
||||
// ensure that a name is given
|
||||
if (name[0] == '\0') {
|
||||
// ensure that a valid name is given
|
||||
if (!network_player_name_valid(name)) {
|
||||
name = sDefaultPlayerName;
|
||||
}
|
||||
if (discordId[0] == '\0') {
|
||||
|
|
|
|||
|
|
@ -72,6 +72,8 @@ extern struct NetworkPlayer gNetworkPlayers[];
|
|||
extern struct NetworkPlayer* gNetworkPlayerLocal;
|
||||
extern struct NetworkPlayer* gNetworkPlayerServer;
|
||||
|
||||
bool network_player_name_valid(const char* buffer);
|
||||
|
||||
void network_player_init(void);
|
||||
void network_player_update_model(u8 localIndex);
|
||||
bool network_player_any_connected(void);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue