Merge pull request #110 from Lonaasan/main

[Small Addition] Added respawnInWorld Command
This commit is contained in:
Kae 2024-09-09 20:52:06 +10:00 committed by GitHub
commit 8457c2e954
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 35 additions and 12 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,7 +51,8 @@ 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, _1)}
}; };
} }
@ -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() {
@ -186,7 +187,7 @@ String ClientCommandProcessor::setGravity(String const& argumentsString) {
return "You must be an admin to use this command."; return "You must be an admin to use this command.";
m_universeClient->worldClient()->overrideGravity(lexicalCast<float>(arguments.at(0))); m_universeClient->worldClient()->overrideGravity(lexicalCast<float>(arguments.at(0)));
return strf("Gravity set to {}, the change is LOCAL ONLY", arguments.at(0)); return strf("Gravity set to {} (This is client-side!)", arguments.at(0));
} }
String ClientCommandProcessor::resetGravity() { String ClientCommandProcessor::resetGravity() {
@ -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,16 @@ String ClientCommandProcessor::swap(String const& argumentsString) {
return "Failed to swap player"; return "Failed to swap player";
} }
String ClientCommandProcessor::respawnInWorld(String const& argumentsString) {
auto arguments = m_parser.tokenizeToStringList(argumentsString);
auto worldClient = m_universeClient->worldClient();
if (arguments.size() == 0)
return strf("Respawn in this world is currently {}", worldClient->respawnInWorld() ? "true" : "false");
bool respawnInWorld = Json::parse(arguments.at(0)).toBool();
worldClient->setRespawnInWorld(respawnInWorld);
return strf("Respawn in this world set to {} (This is client-side!)", respawnInWorld ? "true" : "false");
} }
}

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(String const& argumentsString);
UniverseClientPtr m_universeClient; UniverseClientPtr m_universeClient;
CinematicPtr m_cinematicOverlay; CinematicPtr m_cinematicOverlay;

View File

@ -142,6 +142,10 @@ bool WorldClient::respawnInWorld() const {
return m_respawnInWorld; return m_respawnInWorld;
} }
void WorldClient::setRespawnInWorld(bool respawnInWorld) {
m_respawnInWorld = respawnInWorld;
}
void WorldClient::removeEntity(EntityId entityId, bool andDie) { void WorldClient::removeEntity(EntityId entityId, bool andDie) {
auto entity = m_entityMap->entity(entityId); auto entity = m_entityMap->entity(entityId);
if (!entity) if (!entity)

View File

@ -108,6 +108,7 @@ public:
bool mainPlayerDead() const; bool mainPlayerDead() const;
void reviveMainPlayer(); void reviveMainPlayer();
bool respawnInWorld() const; bool respawnInWorld() const;
void setRespawnInWorld(bool respawnInWorld);
void removeEntity(EntityId entityId, bool andDie); void removeEntity(EntityId entityId, bool andDie);
@ -175,6 +176,9 @@ public:
typedef std::function<bool(PlayerPtr, StringView)> BroadcastCallback; typedef std::function<bool(PlayerPtr, StringView)> BroadcastCallback;
BroadcastCallback& broadcastCallback(); BroadcastCallback& broadcastCallback();
private: private:
static const float DropDist; static const float DropDist;