[Small Addition] added respawnInWorld Command

This commit is contained in:
lonaasan 2024-09-09 09:53:11 +02:00
parent 06b865fb84
commit 98a395721e
5 changed files with 52 additions and 13 deletions

View File

@ -10,6 +10,7 @@
}, },
"openSbCommands": { "openSbCommands": {
"swap": "Usage /swap <name>. Swaps the current character, case-insensitive, only substring required." "swap": "Usage /swap <name>. Swaps the current character, case-insensitive, only substring required.",
"respawninworld": "Usage /respawnInWorld. Sets the respawn flag for the current world until you teleport away."
} }
} }

View File

@ -15,9 +15,9 @@
namespace Star { namespace Star {
ClientCommandProcessor::ClientCommandProcessor(UniverseClientPtr universeClient, CinematicPtr cinematicOverlay, ClientCommandProcessor::ClientCommandProcessor(UniverseClientPtr universeClient, CinematicPtr cinematicOverlay,
MainInterfacePaneManager* paneManager, StringMap<StringList> macroCommands) MainInterfacePaneManager* paneManager, StringMap<StringList> macroCommands)
: m_universeClient(std::move(universeClient)), m_cinematicOverlay(std::move(cinematicOverlay)), : m_universeClient(std::move(universeClient)), m_cinematicOverlay(std::move(cinematicOverlay)),
m_paneManager(paneManager), m_macroCommands(std::move(macroCommands)) { m_paneManager(paneManager), m_macroCommands(std::move(macroCommands)) {
m_builtinCommands = { m_builtinCommands = {
{"reload", bind(&ClientCommandProcessor::reload, this)}, {"reload", bind(&ClientCommandProcessor::reload, this)},
{"whoami", bind(&ClientCommandProcessor::whoami, this)}, {"whoami", bind(&ClientCommandProcessor::whoami, this)},
@ -51,13 +51,14 @@ ClientCommandProcessor::ClientCommandProcessor(UniverseClientPtr universeClient,
{"maketechavailable", bind(&ClientCommandProcessor::makeTechAvailable, this, _1)}, {"maketechavailable", bind(&ClientCommandProcessor::makeTechAvailable, this, _1)},
{"enabletech", bind(&ClientCommandProcessor::enableTech, this, _1)}, {"enabletech", bind(&ClientCommandProcessor::enableTech, this, _1)},
{"upgradeship", bind(&ClientCommandProcessor::upgradeShip, this, _1)}, {"upgradeship", bind(&ClientCommandProcessor::upgradeShip, this, _1)},
{"swap", bind(&ClientCommandProcessor::swap, this, _1)} {"swap", bind(&ClientCommandProcessor::swap, this, _1)},
{"respawnInWorld", bind(&ClientCommandProcessor::respawnInWorld, this)}
}; };
} }
bool ClientCommandProcessor::adminCommandAllowed() const { bool ClientCommandProcessor::adminCommandAllowed() const {
return Root::singleton().configuration()->get("allowAdminCommandsFromAnyone").toBool() || return Root::singleton().configuration()->get("allowAdminCommandsFromAnyone").toBool() ||
m_universeClient->mainPlayer()->isAdmin(); m_universeClient->mainPlayer()->isAdmin();
} }
String ClientCommandProcessor::previewQuestPane(StringList const& arguments, function<PanePtr(QuestPtr)> createPane) { String ClientCommandProcessor::previewQuestPane(StringList const& arguments, function<PanePtr(QuestPtr)> createPane) {
@ -128,7 +129,7 @@ String ClientCommandProcessor::reload() {
String ClientCommandProcessor::whoami() { String ClientCommandProcessor::whoami() {
return strf("Client: You are {}. You are {}an Admin.", return strf("Client: You are {}. You are {}an Admin.",
m_universeClient->mainPlayer()->name(), m_universeClient->mainPlayer()->isAdmin() ? "" : "not "); m_universeClient->mainPlayer()->name(), m_universeClient->mainPlayer()->isAdmin() ? "" : "not ");
} }
String ClientCommandProcessor::gravity() { String ClientCommandProcessor::gravity() {
@ -273,8 +274,8 @@ String ClientCommandProcessor::previewNewQuest(String const& argumentsString) {
return "You must be an admin to use this command."; return "You must be an admin to use this command.";
return previewQuestPane(arguments, [this](QuestPtr const& quest) { return previewQuestPane(arguments, [this](QuestPtr const& quest) {
return make_shared<NewQuestInterface>(m_universeClient->questManager(), quest, m_universeClient->mainPlayer()); return make_shared<NewQuestInterface>(m_universeClient->questManager(), quest, m_universeClient->mainPlayer());
}); });
} }
String ClientCommandProcessor::previewQuestComplete(String const& argumentsString) { String ClientCommandProcessor::previewQuestComplete(String const& argumentsString) {
@ -283,8 +284,8 @@ String ClientCommandProcessor::previewQuestComplete(String const& argumentsStrin
return "You must be an admin to use this command."; return "You must be an admin to use this command.";
return previewQuestPane(arguments, [this](QuestPtr const& quest) { return previewQuestPane(arguments, [this](QuestPtr const& quest) {
return make_shared<QuestCompleteInterface>(quest, m_universeClient->mainPlayer(), CinematicPtr{}); return make_shared<QuestCompleteInterface>(quest, m_universeClient->mainPlayer(), CinematicPtr{});
}); });
} }
String ClientCommandProcessor::previewQuestFailed(String const& argumentsString) { String ClientCommandProcessor::previewQuestFailed(String const& argumentsString) {
@ -293,8 +294,8 @@ String ClientCommandProcessor::previewQuestFailed(String const& argumentsString)
return "You must be an admin to use this command."; return "You must be an admin to use this command.";
return previewQuestPane(arguments, [this](QuestPtr const& quest) { return previewQuestPane(arguments, [this](QuestPtr const& quest) {
return make_shared<QuestFailedInterface>(quest, m_universeClient->mainPlayer()); return make_shared<QuestFailedInterface>(quest, m_universeClient->mainPlayer());
}); });
} }
String ClientCommandProcessor::clearScannedObjects() { String ClientCommandProcessor::clearScannedObjects() {
@ -427,4 +428,25 @@ String ClientCommandProcessor::swap(String const& argumentsString) {
return "Failed to swap player"; return "Failed to swap player";
} }
String ClientCommandProcessor::respawnInWorld() {
WorldClientPtr worldClient = m_universeClient->worldClient();
// Make sure we got the worldClient
if (!worldClient) {
return "Error: Unable to access world client.";
}
if (worldClient->toggleRespawnInWorld()) {
// Convert boolean to string for the response
const std::string result = worldClient->respawnInWorld() ? "true" : "false";
return "Successfully switched respawn in this world to " + result;
}
else
return "Failed to switch respawn in this world!";
// This should never trigger, but its better to have it than not :3
return "Something unforseen happend!";
} }
}

View File

@ -58,6 +58,7 @@ private:
String enableTech(String const& argumentsString); String enableTech(String const& argumentsString);
String upgradeShip(String const& argumentsString); String upgradeShip(String const& argumentsString);
String swap(String const& argumentsString); String swap(String const& argumentsString);
String respawnInWorld();
UniverseClientPtr m_universeClient; UniverseClientPtr m_universeClient;
CinematicPtr m_cinematicOverlay; CinematicPtr m_cinematicOverlay;

View File

@ -2421,4 +2421,16 @@ void WorldClient::setupForceRegions() {
} }
} }
bool WorldClient::toggleRespawnInWorld() {
// Setting oldValue to check if m_respawnInWorld triggered correctly later
const bool oldValue = respawnInWorld();
m_respawnInWorld ^= true;
if (respawnInWorld() != oldValue) {
return true;
}
return false;
}
} }

View File

@ -175,6 +175,9 @@ public:
typedef std::function<bool(PlayerPtr, StringView)> BroadcastCallback; typedef std::function<bool(PlayerPtr, StringView)> BroadcastCallback;
BroadcastCallback& broadcastCallback(); BroadcastCallback& broadcastCallback();
bool toggleRespawnInWorld();
private: private:
static const float DropDist; static const float DropDist;