v2.9.3: IDs bleiben beim Umschalten verknüpft (Zweitname), Mii-Abgleich mit dem Server
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
bff653c7f0
commit
9538160ab2
+38
-35
@@ -280,6 +280,16 @@ static void maintenance_worker(void *arg)
|
||||
(void)arg;
|
||||
char ignore[96], detail[160];
|
||||
spotpass_register(MBMNET_SERVER, ignore, sizeof(ignore));
|
||||
// Konto mit dem MBMNET-Server abgleichen: holt u. a. den Mii, den man auf der Webseite eingestellt hat
|
||||
u8 slot = frdswitch_slot_of(FRIEND_ACCOUNT_MBMNET);
|
||||
char id[20];
|
||||
if (slot && frdswitch_slot_linked(FRIEND_ACCOUNT_MBMNET, id, sizeof(id))) {
|
||||
Handle done;
|
||||
if (R_SUCCEEDED(svcCreateEvent(&done, RESET_ONESHOT))) {
|
||||
if (R_SUCCEEDED(ACTA_SyncAccountInfo(slot, done))) svcWaitSynchronization(done, 15ULL * 1000 * 1000 * 1000);
|
||||
svcCloseHandle(done);
|
||||
}
|
||||
}
|
||||
bool changed = false;
|
||||
// Patches auffrischen: neue Versionen bringen neue Ziele mit (z. B. Miiverse ab v2.8.0)
|
||||
if (patch_enable(MBMNET_SERVER, &changed, detail, sizeof(detail)) && changed) maintenanceChanged = true;
|
||||
@@ -306,6 +316,21 @@ static void remembered_mbmnet_id(char *out, size_t len)
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
// Wie man den MBMNET-Platz verknüpft. Heißt die MBMNET-ID wie eine Nintendo- oder Pretendo-ID, die schon in
|
||||
// einem anderen Platz steht, lässt der 3DS sie dort nicht zu (022-2571) - dann den Zweitnamen "<Name>.m"
|
||||
// nehmen (kennt der MBMNET-Server). So bleiben alle IDs verknüpft und man muss sich nie neu anmelden.
|
||||
static void link_hint(char *out, size_t len)
|
||||
{
|
||||
char name[20] = "";
|
||||
remembered_mbmnet_id(name, sizeof(name));
|
||||
if (!name[0]) frdswitch_slot_linked(FRIEND_ACCOUNT_NINTENDO, name, sizeof(name));
|
||||
if (!name[0]) frdswitch_slot_linked(2, name, sizeof(name)); // Pretendo (Nimbus)
|
||||
if (name[0])
|
||||
snprintf(out, len, "Einstellungen > Nintendo Network ID > Vorhandene ID.\nHeißt sie wie \"%s\": mit \"%.14s.m\" anmelden.", name, name);
|
||||
else
|
||||
snprintf(out, len, "Einstellungen > Nintendo Network ID > Vorhandene ID.\nGleicher Name wie bei Pretendo? Dann Name + \".m\".");
|
||||
}
|
||||
|
||||
// Umschalten auf MBMNET. true = der 3DS muss jetzt neu starten.
|
||||
static bool enable(bool confirmed, char *msg, size_t msglen)
|
||||
{
|
||||
@@ -327,25 +352,16 @@ static bool enable(bool confirmed, char *msg, size_t msglen)
|
||||
return true;
|
||||
}
|
||||
bool linked = frdswitch_slot_linked(FRIEND_ACCOUNT_MBMNET, id, sizeof(id));
|
||||
snprintf(msg, msglen, linked ? "MBMNET ist schon aktiv (Konto %s)." : "MBMNET ist schon aktiv.\n"
|
||||
"Jetzt dein MBMNET-Konto verknüpfen:\nEinstellungen > Nintendo Network ID", id);
|
||||
if (linked) { snprintf(msg, msglen, "MBMNET ist schon aktiv (Konto %s).", id); return false; }
|
||||
char hint[160];
|
||||
link_hint(hint, sizeof(hint));
|
||||
snprintf(msg, msglen, "MBMNET ist schon aktiv. Jetzt einmal verknüpfen:\n%s", hint);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Umstieg von älteren Versionen: Dort steckte die MBMNET-ID im Nintendo-Platz. Sie muss dort raus,
|
||||
// sonst lässt sie sich im eigenen MBMNET-Platz nicht verknüpfen (Fehler 022-2571).
|
||||
bool migrate = old_mbmnet_link() && frdswitch_slot_linked(FRIEND_ACCOUNT_NINTENDO, id, sizeof(id));
|
||||
// Die gemerkte MBMNET-ID steckt noch in einem anderen Platz (z. B. Pretendo mit gleichem Namen)?
|
||||
char mbmnetId[20];
|
||||
remembered_mbmnet_id(mbmnetId, sizeof(mbmnetId));
|
||||
u8 mbmnetSlot = frdswitch_slot_of(FRIEND_ACCOUNT_MBMNET);
|
||||
bool sameNameElsewhere = !migrate && mbmnetId[0] && nnid_name_elsewhere(mbmnetId, mbmnetSlot);
|
||||
if (sameNameElsewhere && !confirmed) {
|
||||
armed = BTN_ENABLE;
|
||||
snprintf(msg, msglen, "\"%s\" ist noch in einem anderen Platz verknüpft (z. B. Pretendo).\n"
|
||||
"Der 3DS erlaubt sie nur einmal: Sie wird dort gelöst, damit du sie\nbei MBMNET verknüpfen kannst. Zum Bestätigen nochmal antippen.", mbmnetId);
|
||||
return false;
|
||||
}
|
||||
if (migrate && !confirmed) {
|
||||
armed = BTN_ENABLE;
|
||||
snprintf(msg, msglen, "Umstellung auf ein eigenes MBMNET-Freundekonto:\n\"%s\" wird aus dem Nintendo-Platz gelöst\n"
|
||||
@@ -360,11 +376,6 @@ static bool enable(bool confirmed, char *msg, size_t msglen)
|
||||
}
|
||||
if (migrate && !nnid_unlink(msg, msglen)) return false;
|
||||
remove(UNLINKED_MARKER);
|
||||
if (sameNameElsewhere && !nnid_unlink_named(mbmnetId, mbmnetSlot, msg, msglen)) {
|
||||
char ignore[160];
|
||||
patch_disable(ignore, sizeof(ignore));
|
||||
return false;
|
||||
}
|
||||
|
||||
bool created = false;
|
||||
if (!frdswitch_to(FRIEND_ACCOUNT_MBMNET, &created, msg, msglen)) {
|
||||
@@ -375,10 +386,11 @@ static bool enable(bool confirmed, char *msg, size_t msglen)
|
||||
bool linked = frdswitch_slot_linked(FRIEND_ACCOUNT_MBMNET, id, sizeof(id));
|
||||
char ignore[96];
|
||||
spotpass_register(MBMNET_SERVER, ignore, sizeof(ignore)); // Mitteilungen per SpotPass
|
||||
snprintf(msg, msglen, "MBMNET aktiv! Der 3DS startet neu.\n%s",
|
||||
created ? "Eigenes MBMNET-Freundekonto angelegt. Danach einmal:\nEinstellungen > Nintendo Network ID > Vorhandene ID"
|
||||
: linked ? "Deine MBMNET-Anmeldung und -Freundesliste sind wieder da."
|
||||
: "Danach einmal: Einstellungen > Nintendo Network ID");
|
||||
char hint[160];
|
||||
link_hint(hint, sizeof(hint));
|
||||
if (linked) snprintf(msg, msglen, "MBMNET aktiv! Der 3DS startet neu.\nDeine MBMNET-Anmeldung und -Freundesliste sind wieder da.");
|
||||
else snprintf(msg, msglen, "MBMNET aktiv! Der 3DS startet neu.\n%sDanach einmal (nur dieses eine Mal):\n%.120s",
|
||||
created ? "Eigenes MBMNET-Freundekonto angelegt. " : "", hint);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -396,24 +408,15 @@ static bool disable(bool confirmed, char *msg, size_t msglen)
|
||||
snprintf(msg, msglen, "MBMNET ist nicht aktiv (anderer Patch).");
|
||||
return false;
|
||||
}
|
||||
// MBMNET-ID aus dem MBMNET-Platz lösen und merken: Heißt die Pretendo-ID genauso, ließe sie sich sonst
|
||||
// im Pretendo-Platz nicht verknüpfen (022-2571). Beim Wechsel zurück zu MBMNET neu anmelden.
|
||||
// Die MBMNET-ID bleibt verknüpft (früher wurde sie hier gelöst, dann musste man sich jedes Mal neu
|
||||
// anmelden). Den Namen merken, für den Hinweis auf den Zweitnamen.
|
||||
char id[20] = "";
|
||||
bool unlinked = false;
|
||||
if (frdswitch_current() == FRIEND_ACCOUNT_MBMNET && nnid_linked(id, sizeof(id))) {
|
||||
remember_mbmnet_id(id);
|
||||
if (!nnid_unlink(msg, msglen)) return false;
|
||||
unlinked = true;
|
||||
}
|
||||
if (frdswitch_current() == FRIEND_ACCOUNT_MBMNET && nnid_linked(id, sizeof(id))) remember_mbmnet_id(id);
|
||||
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();
|
||||
if (unlinked)
|
||||
snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\n\"%s\" wurde vom MBMNET-Platz gelöst (für Pretendo).\n"
|
||||
"Zurück zu MBMNET: danach einmal neu anmelden.", id);
|
||||
else
|
||||
snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\nDeine Nintendo-Freundesliste ist wieder da.");
|
||||
snprintf(msg, msglen, "Nintendo aktiv! Der 3DS startet neu.\nDeine Nintendo-Freundesliste ist wieder da.");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user