Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2024-09-12 19:13:57 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2024-09-12 19:13:57 +1000
commit4da398e42dbc9b18ec27ba27d0fa570adfc58922 (patch)
tree26b758398ed032eb951152b47ddcfc44206a7e9c
parent3c4a2eb71eea73c7e505ab631a1abc484f9e7b92 (diff)
parent7852ad9cf2efdf359132c986f46b0e34acbd28ba (diff)
Merge branch 'main' into wip/net-n-btree
-rw-r--r--assets/opensb/help.config.patch9
-rw-r--r--source/base/StarAssets.cpp1
-rw-r--r--source/core/StarImage.cpp6
-rw-r--r--source/core/StarImage.hpp1
-rw-r--r--source/frontend/StarClientCommandProcessor.cpp35
-rw-r--r--source/frontend/StarClientCommandProcessor.hpp1
-rw-r--r--source/game/StarCommandProcessor.cpp10
-rw-r--r--source/game/StarImageMetadataDatabase.cpp6
-rw-r--r--source/game/StarWorldClient.cpp4
-rw-r--r--source/game/StarWorldClient.hpp4
10 files changed, 63 insertions, 14 deletions
diff --git a/assets/opensb/help.config.patch b/assets/opensb/help.config.patch
index 0feb345..ad1da12 100644
--- a/assets/opensb/help.config.patch
+++ b/assets/opensb/help.config.patch
@@ -2,8 +2,15 @@
"basicHelpText": "Basic commands are: {}",
"adminHelpText": "Admin commands are: {}",
"debugHelpText": "Debug commands are: {}",
+ "openSbHelpText": "OpenSB commands are: {}",
+ "openSbDebugHelpText": "OpenSB Debug commands are: {}",
- "debugCommands": {
+ "openSbDebugCommands": {
"run": "Usage /run <lua>. Executes a script on the player and outputs the return value to chat."
+ },
+
+ "openSbCommands": {
+ "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."
}
}
diff --git a/source/base/StarAssets.cpp b/source/base/StarAssets.cpp
index f81a4ee..4a10aab 100644
--- a/source/base/StarAssets.cpp
+++ b/source/base/StarAssets.cpp
@@ -124,6 +124,7 @@ Assets::Assets(Settings settings, StringList assetSources) {
LuaCallbacks callbacks;
callbacks.registerCallbackWithSignature<StringSet, String>("byExtension", bind(&Assets::scanExtension, this, _1));
callbacks.registerCallbackWithSignature<Json, String>("json", bind(&Assets::json, this, _1));
+ callbacks.registerCallbackWithSignature<bool, String>("exists", bind(&Assets::assetExists, this, _1));
callbacks.registerCallback("bytes", [this](String const& path) -> String {
auto assetBytes = bytes(path);
diff --git a/source/core/StarImage.cpp b/source/core/StarImage.cpp
index 82e3b05..52c2370 100644
--- a/source/core/StarImage.cpp
+++ b/source/core/StarImage.cpp
@@ -17,6 +17,12 @@ void readPngData(png_structp pngPtr, png_bytep data, png_size_t length) {
((IODevice*)png_get_io_ptr(pngPtr))->readFull((char*)data, length);
};
+bool Image::isPng(IODevicePtr device) {
+ png_byte header[8];
+ device->readAbsolute(0, (char*)header, sizeof(header));
+ return !png_sig_cmp(header, 0, sizeof(header));
+}
+
Image Image::readPng(IODevicePtr device) {
png_byte header[8];
device->readFull((char*)header, sizeof(header));
diff --git a/source/core/StarImage.hpp b/source/core/StarImage.hpp
index 478d074..aac0105 100644
--- a/source/core/StarImage.hpp
+++ b/source/core/StarImage.hpp
@@ -27,6 +27,7 @@ STAR_CLASS(Image);
class Image {
public:
static Image readPng(IODevicePtr device);
+ static bool isPng(IODevicePtr device);
// Returns the size and pixel format that would be constructed from the given
// png file, without actually loading it.
static tuple<Vec2U, PixelFormat> readPngMetadata(IODevicePtr device);
diff --git a/source/frontend/StarClientCommandProcessor.cpp b/source/frontend/StarClientCommandProcessor.cpp
index 2d98289..ac87397 100644
--- a/source/frontend/StarClientCommandProcessor.cpp
+++ b/source/frontend/StarClientCommandProcessor.cpp
@@ -15,9 +15,9 @@
namespace Star {
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_paneManager(paneManager), m_macroCommands(std::move(macroCommands)) {
+ m_paneManager(paneManager), m_macroCommands(std::move(macroCommands)) {
m_builtinCommands = {
{"reload", bind(&ClientCommandProcessor::reload, this)},
{"whoami", bind(&ClientCommandProcessor::whoami, this)},
@@ -51,7 +51,8 @@ ClientCommandProcessor::ClientCommandProcessor(UniverseClientPtr universeClient,
{"maketechavailable", bind(&ClientCommandProcessor::makeTechAvailable, this, _1)},
{"enabletech", bind(&ClientCommandProcessor::enableTech, 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() {
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() {
@@ -186,7 +187,7 @@ String ClientCommandProcessor::setGravity(String const& argumentsString) {
return "You must be an admin to use this command.";
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() {
@@ -273,8 +274,8 @@ String ClientCommandProcessor::previewNewQuest(String const& argumentsString) {
return "You must be an admin to use this command.";
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) {
@@ -283,8 +284,8 @@ String ClientCommandProcessor::previewQuestComplete(String const& argumentsStrin
return "You must be an admin to use this command.";
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) {
@@ -293,8 +294,8 @@ String ClientCommandProcessor::previewQuestFailed(String const& argumentsString)
return "You must be an admin to use this command.";
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() {
@@ -427,4 +428,16 @@ String ClientCommandProcessor::swap(String const& argumentsString) {
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");
}
+
+} \ No newline at end of file
diff --git a/source/frontend/StarClientCommandProcessor.hpp b/source/frontend/StarClientCommandProcessor.hpp
index b06f3d5..94dad5d 100644
--- a/source/frontend/StarClientCommandProcessor.hpp
+++ b/source/frontend/StarClientCommandProcessor.hpp
@@ -58,6 +58,7 @@ private:
String enableTech(String const& argumentsString);
String upgradeShip(String const& argumentsString);
String swap(String const& argumentsString);
+ String respawnInWorld(String const& argumentsString);
UniverseClientPtr m_universeClient;
CinematicPtr m_cinematicOverlay;
diff --git a/source/game/StarCommandProcessor.cpp b/source/game/StarCommandProcessor.cpp
index 14413b4..b5beb20 100644
--- a/source/game/StarCommandProcessor.cpp
+++ b/source/game/StarCommandProcessor.cpp
@@ -53,12 +53,14 @@ String CommandProcessor::help(ConnectionId connectionId, String const& argumentS
auto assets = Root::singleton().assets();
auto basicCommands = assets->json("/help.config:basicCommands");
+ auto openSbCommands = assets->json("/help.config:openSbCommands");
auto adminCommands = assets->json("/help.config:adminCommands");
auto debugCommands = assets->json("/help.config:debugCommands");
+ auto openSbDebugCommands = assets->json("/help.config:openSbDebugCommands");
if (arguments.size()) {
if (arguments.size() >= 1) {
- if (auto helpText = basicCommands.optString(arguments[0]).orMaybe(adminCommands.optString(arguments[0])).orMaybe(debugCommands.optString(arguments[0])))
+ if (auto helpText = basicCommands.optString(arguments[0]).orMaybe(openSbCommands.optString(arguments[0])).orMaybe(adminCommands.optString(arguments[0])).orMaybe(debugCommands.optString(arguments[0])).orMaybe(openSbDebugCommands.optString(arguments[0])))
return *helpText;
}
}
@@ -74,12 +76,18 @@ String CommandProcessor::help(ConnectionId connectionId, String const& argumentS
String basicHelpFormat = assets->json("/help.config:basicHelpText").toString();
res = res + strf(basicHelpFormat.utf8Ptr(), commandDescriptions(basicCommands));
+ String openSbHelpFormat = assets->json("/help.config:openSbHelpText").toString();
+ res = res + "\n" + strf(openSbHelpFormat.utf8Ptr(), commandDescriptions(openSbCommands));
+
if (!adminCheck(connectionId, "")) {
String adminHelpFormat = assets->json("/help.config:adminHelpText").toString();
res = res + "\n" + strf(adminHelpFormat.utf8Ptr(), commandDescriptions(adminCommands));
String debugHelpFormat = assets->json("/help.config:debugHelpText").toString();
res = res + "\n" + strf(debugHelpFormat.utf8Ptr(), commandDescriptions(debugCommands));
+
+ String openSbDebugHelpFormat = assets->json("/help.config:openSbDebugHelpText").toString();
+ res = res + "\n" + strf(openSbDebugHelpFormat.utf8Ptr(), commandDescriptions(openSbDebugCommands));
}
res = res + "\n" + basicCommands.getString("help");
diff --git a/source/game/StarImageMetadataDatabase.cpp b/source/game/StarImageMetadataDatabase.cpp
index bf84e51..d04e984 100644
--- a/source/game/StarImageMetadataDatabase.cpp
+++ b/source/game/StarImageMetadataDatabase.cpp
@@ -174,7 +174,11 @@ Vec2U ImageMetadataDatabase::calculateImageSize(AssetPath const& path) const {
imageSize = *size;
} else {
locker.unlock();
- imageSize = get<0>(Image::readPngMetadata(assets->openFile(path.basePath)));
+ auto file = assets->openFile(path.basePath);
+ if (Image::isPng(file))
+ imageSize = get<0>(Image::readPngMetadata(file));
+ else
+ imageSize = fallback();
locker.lock();
m_sizeCache[path.basePath] = imageSize;
}
diff --git a/source/game/StarWorldClient.cpp b/source/game/StarWorldClient.cpp
index b18127e..ab5f9bf 100644
--- a/source/game/StarWorldClient.cpp
+++ b/source/game/StarWorldClient.cpp
@@ -142,6 +142,10 @@ bool WorldClient::respawnInWorld() const {
return m_respawnInWorld;
}
+void WorldClient::setRespawnInWorld(bool respawnInWorld) {
+ m_respawnInWorld = respawnInWorld;
+}
+
void WorldClient::removeEntity(EntityId entityId, bool andDie) {
auto entity = m_entityMap->entity(entityId);
if (!entity)
diff --git a/source/game/StarWorldClient.hpp b/source/game/StarWorldClient.hpp
index e00a3b8..1616b10 100644
--- a/source/game/StarWorldClient.hpp
+++ b/source/game/StarWorldClient.hpp
@@ -108,6 +108,7 @@ public:
bool mainPlayerDead() const;
void reviveMainPlayer();
bool respawnInWorld() const;
+ void setRespawnInWorld(bool respawnInWorld);
void removeEntity(EntityId entityId, bool andDie);
@@ -175,6 +176,9 @@ public:
typedef std::function<bool(PlayerPtr, StringView)> BroadcastCallback;
BroadcastCallback& broadcastCallback();
+
+
+
private:
static const float DropDist;