v2.9.4: einmalige Umstellung auf den Zweitnamen (MBMNET-ID unter echtem Namen wird für Pretendo gelöst)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
8e69fbaac2
commit
52e0270c80
+32
-2
@@ -6,6 +6,8 @@
|
||||
#include <citro2d.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "patcher.h"
|
||||
#include "update.h"
|
||||
@@ -394,14 +396,40 @@ static bool enable(bool confirmed, char *msg, size_t msglen)
|
||||
return true;
|
||||
}
|
||||
|
||||
// Umstellung auf den Zweitnamen (einmalig): Steht im MBMNET-Platz noch die ID unter dem echten Namen, blockiert
|
||||
// sie eine gleichnamige Pretendo-ID (022-2571). Dann wird sie EINMAL gelöst; beim nächsten Wechsel zu MBMNET
|
||||
// meldet man sich mit "<Name>.m" an, und ab dann bleibt alles verknüpft. note bekommt den Hinweis.
|
||||
#define ALIAS_DONE_MARKER "sdmc:/3ds/mbmnet/zweitname-umgestellt"
|
||||
static bool free_mbmnet_name(char *note, size_t len)
|
||||
{
|
||||
note[0] = 0;
|
||||
FILE *m = fopen(ALIAS_DONE_MARKER, "r");
|
||||
if (m) { fclose(m); return false; }
|
||||
char id[20];
|
||||
u8 slot = frdswitch_slot_of(FRIEND_ACCOUNT_MBMNET);
|
||||
if (!slot || !frdswitch_slot_linked(FRIEND_ACCOUNT_MBMNET, id, sizeof(id))) return false;
|
||||
size_t n = strlen(id);
|
||||
if (n >= 2 && !strcasecmp(id + n - 2, ".m")) return false; // schon der Zweitname
|
||||
remember_mbmnet_id(id);
|
||||
if (!nnid_unlink_slot(slot, note, len)) return false;
|
||||
mkdir("sdmc:/3ds/mbmnet", 0777);
|
||||
m = fopen(ALIAS_DONE_MARKER, "w");
|
||||
if (m) { fputs(id, m); fclose(m); }
|
||||
snprintf(note, len, "\"%s\" ist jetzt frei für Pretendo.\nZurück bei MBMNET einmal mit \"%.14s.m\" anmelden,\ndanach nie wieder.", id, id);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Zurück zu Nintendo. true = der 3DS muss jetzt neu starten.
|
||||
static bool disable(bool confirmed, char *msg, size_t msglen)
|
||||
{
|
||||
(void)confirmed;
|
||||
char detail[160] = "";
|
||||
PatchState st = patch_state();
|
||||
char note[200];
|
||||
if (st == STATE_ORIGINAL && frdswitch_current() == FRIEND_ACCOUNT_NINTENDO) {
|
||||
snprintf(msg, msglen, "Nintendo ist schon aktiv.");
|
||||
if (free_mbmnet_name(note, sizeof(note))) snprintf(msg, msglen, "Nintendo ist schon aktiv.\n%s", note);
|
||||
else if (note[0]) snprintf(msg, msglen, "%s", note);
|
||||
else snprintf(msg, msglen, "Nintendo ist schon aktiv.");
|
||||
return false;
|
||||
}
|
||||
if (st == STATE_FOREIGN) {
|
||||
@@ -412,11 +440,13 @@ static bool disable(bool confirmed, char *msg, size_t msglen)
|
||||
// anmelden). Den Namen merken, für den Hinweis auf den Zweitnamen.
|
||||
char id[20] = "";
|
||||
if (frdswitch_current() == FRIEND_ACCOUNT_MBMNET && nnid_linked(id, sizeof(id))) remember_mbmnet_id(id);
|
||||
bool freed = free_mbmnet_name(note, sizeof(note));
|
||||
bool created = false;
|
||||
if (frdswitch_current() != FRIEND_ACCOUNT_NINTENDO && !frdswitch_to(FRIEND_ACCOUNT_NINTENDO, &created, msg, msglen)) return false;
|
||||
patch_disable(detail, sizeof(detail));
|
||||
spotpass_unregister();
|
||||
snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\nDeine Nintendo-Freundesliste ist wieder da.");
|
||||
if (freed) snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\n%s", note);
|
||||
else snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\nDeine Nintendo-Freundesliste ist wieder da.");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user