mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-11-22 03:05:16 +00:00
[mod menu] new: option to hide server in debug menu
- Client.hpp: add bool variable and methods - hooks.cpp: save/load value from common.bin - main.cpp: change - StageSceneStateServerConfig: add button to the mod menu to toggle it
This commit is contained in:
parent
e1bd6d8785
commit
65582aafea
5 changed files with 64 additions and 25 deletions
|
@ -30,7 +30,8 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
GAMEMODECONFIG,
|
||||
GAMEMODESWITCH,
|
||||
SETIP,
|
||||
SETPORT
|
||||
SETPORT,
|
||||
HIDESERVER
|
||||
};
|
||||
|
||||
virtual al::MessageSystem* getMessageSystem(void) const override;
|
||||
|
@ -41,6 +42,7 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
void exeMainMenu();
|
||||
void exeOpenKeyboardIP();
|
||||
void exeOpenKeyboardPort();
|
||||
void exeHideServer();
|
||||
void exeGamemodeConfig();
|
||||
void exeGamemodeSelect();
|
||||
void exeSaveData();
|
||||
|
@ -79,6 +81,11 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
inline void activateInput();
|
||||
inline void deactivateInput();
|
||||
|
||||
// Main Menu Options
|
||||
static constexpr int mMainMenuOptionsCount = 5;
|
||||
sead::SafeArray<sead::WFixedSafeString<0x200>, mMainMenuOptionsCount>* mMainMenuOptions = nullptr;
|
||||
const sead::WFixedSafeString<0x200>* getMainMenuOptions();
|
||||
|
||||
bool mIsDecideConfig = false;
|
||||
};
|
||||
|
||||
|
@ -86,6 +93,7 @@ namespace {
|
|||
NERVE_HEADER(StageSceneStateServerConfig, MainMenu)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, OpenKeyboardIP)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, OpenKeyboardPort)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, HideServer)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, GamemodeConfig)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, GamemodeSelect)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, SaveData)
|
||||
|
|
|
@ -131,7 +131,7 @@ class Client {
|
|||
|
||||
static sead::Heap *getClientHeap() { return sInstance ? sInstance->mHeap : nullptr; }
|
||||
|
||||
static int getMaxPlayerCount() { return sInstance ? sInstance->maxPuppets + 1 : 10;}
|
||||
static int getMaxPlayerCount() { return sInstance ? sInstance->maxPuppets + 1 : 10; }
|
||||
|
||||
static const int getCurrentPort();
|
||||
|
||||
|
@ -151,6 +151,10 @@ class Client {
|
|||
|
||||
static const char* getCurrentIP();
|
||||
|
||||
static bool isServerHidden() { return sInstance ? sInstance->mServerHidden : true; }
|
||||
static void setServerHidden(bool hide) { if (sInstance) { sInstance->mServerHidden = hide; } }
|
||||
static void toggleServerHidden() { if (sInstance) { sInstance->mServerHidden = !sInstance->mServerHidden; } }
|
||||
|
||||
static nn::account::Uid getClientId() { return sInstance ? sInstance->mUserID : nn::account::Uid::EmptyId;}
|
||||
|
||||
static sead::FixedSafeString<0x20> getUsername() { return sInstance ? sInstance->mUsername : sead::FixedSafeString<0x20>::cEmptyString;}
|
||||
|
@ -239,8 +243,8 @@ class Client {
|
|||
Keyboard* mKeyboard = nullptr; // keyboard for setting server IP
|
||||
|
||||
hostname mServerIP;
|
||||
|
||||
int mServerPort = 0;
|
||||
bool mServerHidden = false;
|
||||
|
||||
bool waitForGameInit = true;
|
||||
bool mIsFirstConnect = true;
|
||||
|
|
|
@ -35,8 +35,9 @@ bool comboBtnHook(int port) {
|
|||
|
||||
void saveWriteHook(al::ByamlWriter* saveByml) {
|
||||
|
||||
const char *serverIP = Client::getCurrentIP();
|
||||
const int serverPort = Client::getCurrentPort();
|
||||
const char *serverIP = Client::getCurrentIP();
|
||||
const int serverPort = Client::getCurrentPort();
|
||||
const bool serverHidden = Client::isServerHidden();
|
||||
|
||||
if (serverIP) {
|
||||
saveByml->addString("ServerIP", serverIP);
|
||||
|
@ -50,13 +51,16 @@ void saveWriteHook(al::ByamlWriter* saveByml) {
|
|||
saveByml->addInt("ServerPort", 0);
|
||||
}
|
||||
|
||||
saveByml->addBool("ServerHidden", serverHidden);
|
||||
|
||||
saveByml->pop();
|
||||
}
|
||||
|
||||
bool saveReadHook(int* padRumbleInt, al::ByamlIter const& saveByml, char const* padRumbleKey) {
|
||||
|
||||
const char *serverIP = "";
|
||||
int serverPort = 0;
|
||||
const char *serverIP = "";
|
||||
int serverPort = 0;
|
||||
bool serverHidden = false;
|
||||
|
||||
if (al::tryGetByamlString(&serverIP, saveByml, "ServerIP")) {
|
||||
Client::setLastUsedIP(serverIP);
|
||||
|
@ -65,7 +69,11 @@ bool saveReadHook(int* padRumbleInt, al::ByamlIter const& saveByml, char const*
|
|||
if (al::tryGetByamlS32(&serverPort, saveByml, "ServerPort")) {
|
||||
Client::setLastUsedPort(serverPort);
|
||||
}
|
||||
|
||||
|
||||
if (al::tryGetByamlBool(&serverHidden, saveByml, "ServerHidden")) {
|
||||
Client::setServerHidden(serverHidden);
|
||||
}
|
||||
|
||||
return al::tryGetByamlS32(padRumbleInt, saveByml, padRumbleKey);
|
||||
}
|
||||
|
||||
|
|
|
@ -113,19 +113,19 @@ void drawMainHook(HakoniwaSequence *curSequence, sead::Viewport *viewport, sead:
|
|||
gTextWriter->setCursorFromTopLeft(sead::Vector2f(10.f, (dispHeight / 3) + 30.f));
|
||||
gTextWriter->setScaleFromFontHeight(20.f);
|
||||
|
||||
if (isConnected) {
|
||||
if (Client::isServerHidden()) {
|
||||
gTextWriter->printf(
|
||||
"Server: %s:%d | %d/%d Players\n",
|
||||
socket->getIP(),
|
||||
socket->getPort(),
|
||||
Client::getConnectCount() + 1,
|
||||
Client::getMaxPlayerCount()
|
||||
isConnected ? "Server: <hidden> | %d/%d Players\n" : "Server: <hidden>\n",
|
||||
isConnected ? Client::getConnectCount() + 1 : 0,
|
||||
isConnected ? Client::getMaxPlayerCount() : 0
|
||||
);
|
||||
} else {
|
||||
gTextWriter->printf(
|
||||
"Server: %s:%d\n",
|
||||
isConnected ? "Server: %s:%d | %d/%d Players\n" : "Server: %s:%d\n",
|
||||
socket->getIP(),
|
||||
socket->getPort()
|
||||
socket->getPort(),
|
||||
isConnected ? Client::getConnectCount() + 1 : 0,
|
||||
isConnected ? Client::getMaxPlayerCount() : 0
|
||||
);
|
||||
}
|
||||
gTextWriter->printf("Your TCP status: %s\n", socket->getStateChar());
|
||||
|
|
|
@ -41,17 +41,16 @@ StageSceneStateServerConfig::StageSceneStateServerConfig(const char *name, al::S
|
|||
|
||||
mMainOptionsList->unkInt1 = 1;
|
||||
|
||||
mMainOptionsList->initDataNoResetSelected(4);
|
||||
mMainOptionsList->initDataNoResetSelected(mMainMenuOptionsCount);
|
||||
|
||||
sead::SafeArray<sead::WFixedSafeString<0x200>, 4>* mainMenuOptions =
|
||||
new sead::SafeArray<sead::WFixedSafeString<0x200>, 4>();
|
||||
mMainMenuOptions = new sead::SafeArray<sead::WFixedSafeString<0x200>, mMainMenuOptionsCount>();
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::GAMEMODECONFIG].copy(u"Gamemode Config");
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::GAMEMODESWITCH].copy(u"Change Gamemode");
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::SETIP].copy(u"Change Server IP");
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::SETPORT].copy(u"Change Server Port");
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::HIDESERVER].copy(u"Hide Server in Debug (OFF)"); // TBD
|
||||
|
||||
mainMenuOptions->mBuffer[ServerConfigOption::GAMEMODECONFIG].copy(u"Gamemode Config");
|
||||
mainMenuOptions->mBuffer[ServerConfigOption::GAMEMODESWITCH].copy(u"Change Gamemode");
|
||||
mainMenuOptions->mBuffer[ServerConfigOption::SETIP].copy(u"Change Server IP");
|
||||
mainMenuOptions->mBuffer[ServerConfigOption::SETPORT].copy(u"Change Server Port");
|
||||
|
||||
mMainOptionsList->addStringData(mainMenuOptions->mBuffer, "TxtContent");
|
||||
mMainOptionsList->addStringData(getMainMenuOptions(), "TxtContent");
|
||||
|
||||
// WIP work on RollPartsData, not exactly working out atm
|
||||
// RollPartsData* testArr = new RollPartsData[2]();
|
||||
|
@ -176,6 +175,10 @@ void StageSceneStateServerConfig::exeMainMenu() {
|
|||
al::setNerve(this, &nrvStageSceneStateServerConfigOpenKeyboardPort);
|
||||
break;
|
||||
}
|
||||
case ServerConfigOption::HIDESERVER: {
|
||||
al::setNerve(this, &nrvStageSceneStateServerConfigHideServer);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
kill();
|
||||
break;
|
||||
|
@ -221,6 +224,16 @@ void StageSceneStateServerConfig::exeOpenKeyboardPort() {
|
|||
}
|
||||
}
|
||||
|
||||
void StageSceneStateServerConfig::exeHideServer() {
|
||||
if (al::isFirstStep(this)) {
|
||||
Client::toggleServerHidden();
|
||||
mMainOptionsList->initDataNoResetSelected(mMainMenuOptionsCount);
|
||||
mMainOptionsList->addStringData(getMainMenuOptions(), "TxtContent");
|
||||
mMainOptionsList->updateParts();
|
||||
al::setNerve(this, &nrvStageSceneStateServerConfigSaveData);
|
||||
}
|
||||
}
|
||||
|
||||
void StageSceneStateServerConfig::exeGamemodeConfig() {
|
||||
if (al::isFirstStep(this)) {
|
||||
mGamemodeConfigMenu = &mGamemodeConfigMenus[GameModeManager::instance()->getGameMode()];
|
||||
|
@ -347,10 +360,16 @@ void StageSceneStateServerConfig::deactivateInput() {
|
|||
mIsDecideConfig = true;
|
||||
}
|
||||
|
||||
const sead::WFixedSafeString<0x200>* StageSceneStateServerConfig::getMainMenuOptions() {
|
||||
mMainMenuOptions->mBuffer[ServerConfigOption::HIDESERVER].copy(Client::isServerHidden() ? u"Hide Server in Debug (ON) " : u"Hide Server in Debug (OFF)");
|
||||
return mMainMenuOptions->mBuffer;
|
||||
}
|
||||
|
||||
namespace {
|
||||
NERVE_IMPL(StageSceneStateServerConfig, MainMenu)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, OpenKeyboardIP)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, OpenKeyboardPort)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, HideServer)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, GamemodeConfig)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, GamemodeSelect)
|
||||
NERVE_IMPL(StageSceneStateServerConfig, SaveData)
|
||||
|
|
Loading…
Reference in a new issue