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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build_macos.yml4
-rw-r--r--.github/workflows/build_windows.yml2
-rw-r--r--assets/opensb/opensb/coconut.pngbin0 -> 54869 bytes
-rw-r--r--assets/opensb/rendering/sprites/error.png (renamed from assets/opensb/rendering/error.png)bin145 -> 145 bytes
-rw-r--r--assets/opensb/rendering/sprites/error_left.png (renamed from assets/opensb/rendering/error_left.png)bin178 -> 178 bytes
-rw-r--r--assets/opensb/rendering/sprites/error_right.png (renamed from assets/opensb/rendering/error_right.png)bin174 -> 174 bytes
-rwxr-xr-xscripts/ci/linux/assemble.sh2
-rwxr-xr-xscripts/ci/macos/assemble.sh1
-rw-r--r--scripts/ci/windows/assemble.bat1
-rw-r--r--source/frontend/StarMainInterface.cpp41
-rw-r--r--source/game/StarChatTypes.cpp2
-rw-r--r--source/game/StarObject.cpp9
-rw-r--r--source/game/StarObject.hpp3
-rw-r--r--source/game/StarPlayer.cpp16
-rw-r--r--source/game/StarPlayer.hpp2
-rw-r--r--source/game/StarSystemWorldClient.cpp3
-rw-r--r--source/game/StarUniverseServer.cpp5
-rw-r--r--source/game/StarWorldClient.cpp2
-rw-r--r--source/test/small_vector_test.cpp1
19 files changed, 62 insertions, 32 deletions
diff --git a/.github/workflows/build_macos.yml b/.github/workflows/build_macos.yml
index 951cc40..1cfd12c 100644
--- a/.github/workflows/build_macos.yml
+++ b/.github/workflows/build_macos.yml
@@ -51,7 +51,7 @@ jobs:
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
- name: OpenStarbound-Dev-macOS-Intel
+ name: OpenStarbound-macOS-Intel
path: dist/*
build-arm:
@@ -93,5 +93,5 @@ jobs:
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
- name: OpenStarbound-Dev-macOS-Silicon
+ name: OpenStarbound-macOS-Silicon
path: dist/* \ No newline at end of file
diff --git a/.github/workflows/build_windows.yml b/.github/workflows/build_windows.yml
index cf50594..d3ee36b 100644
--- a/.github/workflows/build_windows.yml
+++ b/.github/workflows/build_windows.yml
@@ -85,5 +85,5 @@ jobs:
- name: Upload Installer
uses: actions/upload-artifact@v4
with:
- name: Installer
+ name: OpenStarbound-Windows-Installer
path: installer/*
diff --git a/assets/opensb/opensb/coconut.png b/assets/opensb/opensb/coconut.png
new file mode 100644
index 0000000..3a5192b
--- /dev/null
+++ b/assets/opensb/opensb/coconut.png
Binary files differ
diff --git a/assets/opensb/rendering/error.png b/assets/opensb/rendering/sprites/error.png
index b5bd3e7..b5bd3e7 100644
--- a/assets/opensb/rendering/error.png
+++ b/assets/opensb/rendering/sprites/error.png
Binary files differ
diff --git a/assets/opensb/rendering/error_left.png b/assets/opensb/rendering/sprites/error_left.png
index 2f4ec6f..2f4ec6f 100644
--- a/assets/opensb/rendering/error_left.png
+++ b/assets/opensb/rendering/sprites/error_left.png
Binary files differ
diff --git a/assets/opensb/rendering/error_right.png b/assets/opensb/rendering/sprites/error_right.png
index 1fadd17..1fadd17 100644
--- a/assets/opensb/rendering/error_right.png
+++ b/assets/opensb/rendering/sprites/error_right.png
Binary files differ
diff --git a/scripts/ci/linux/assemble.sh b/scripts/ci/linux/assemble.sh
index cdd6cb2..241175d 100755
--- a/scripts/ci/linux/assemble.sh
+++ b/scripts/ci/linux/assemble.sh
@@ -21,6 +21,7 @@ cp \
lib/linux/libsteam_api.so \
scripts/ci/linux/sbinit.config \
scripts/ci/linux/run-client.sh \
+ scripts/steam_appid.txt \
client_distribution/linux/
mkdir server_distribution
@@ -38,6 +39,7 @@ cp \
dist/btree_repacker \
scripts/ci/linux/run-server.sh \
scripts/ci/linux/sbinit.config \
+ scripts/steam_appid.txt \
server_distribution/linux/
tar -cvf dist.tar dist
diff --git a/scripts/ci/macos/assemble.sh b/scripts/ci/macos/assemble.sh
index e60b2c0..2e8164d 100755
--- a/scripts/ci/macos/assemble.sh
+++ b/scripts/ci/macos/assemble.sh
@@ -24,4 +24,5 @@ cp \
dist/planet_mapgen \
scripts/ci/macos/sbinit.config \
scripts/ci/macos/run-server.sh \
+ scripts/steam_appid.txt \
client_distribution/osx/ \ No newline at end of file
diff --git a/scripts/ci/windows/assemble.bat b/scripts/ci/windows/assemble.bat
index 68532c0..e7f4dc3 100644
--- a/scripts/ci/windows/assemble.bat
+++ b/scripts/ci/windows/assemble.bat
@@ -8,6 +8,7 @@ mkdir %client%\mods
mkdir %client%\logs
mkdir %client%\assets
mkdir %client%\win
+echo 211820 > %client%\win\steam_appid.txt
set server=server_distribution
if exist %server% rmdir %server% /S /Q
diff --git a/source/frontend/StarMainInterface.cpp b/source/frontend/StarMainInterface.cpp
index f9e8d57..153ce07 100644
--- a/source/frontend/StarMainInterface.cpp
+++ b/source/frontend/StarMainInterface.cpp
@@ -760,23 +760,30 @@ void MainInterface::update(float dt) {
m_chatBubbleManager->setCamera(m_worldPainter->camera());
if (auto worldClient = m_client->worldClient()) {
auto chatActions = worldClient->pullPendingChatActions();
- auto portraitActions = chatActions.filtered([](ChatAction action) { return action.is<PortraitChatAction>(); });
-
- for (auto action : portraitActions) {
- PortraitChatAction portraitAction = action.get<PortraitChatAction>();
-
- String name;
- if (auto npc = as<Npc>(worldClient->entity(portraitAction.entity)))
- name = npc->name();
-
- ChatReceivedMessage message = {
- { MessageContext::World },
- ServerConnectionId,
- Text::stripEscapeCodes(name),
- Text::stripEscapeCodes(portraitAction.text),
- Text::stripEscapeCodes(portraitAction.portrait.replace("<frame>", "0"))
- };
- m_chat->addMessages({message}, false);
+
+ for (auto& action : chatActions) {
+ if (action.is<PortraitChatAction>()) {
+ PortraitChatAction& portraitAction = action.get<PortraitChatAction>();
+
+ String name;
+ if (auto npc = as<Npc>(worldClient->entity(portraitAction.entity)))
+ name = npc->name();
+
+ ChatReceivedMessage message = {
+ {MessageContext::World},
+ ServerConnectionId,
+ Text::stripEscapeCodes(name),
+ Text::stripEscapeCodes(portraitAction.text),
+ Text::stripEscapeCodes(portraitAction.portrait.replace("<frame>", "0"))};
+ m_chat->addMessages({message}, false);
+ } else if (action.is<SayChatAction>()) {
+ SayChatAction& sayAction = action.get<SayChatAction>();
+
+ if (sayAction.config) {
+ if (auto message = sayAction.config.opt("message"))
+ m_chat->addMessages({ChatReceivedMessage(*message)}, sayAction.config.getBool("showPane", false));
+ }
+ }
}
m_chatBubbleManager->addChatActions(chatActions);
diff --git a/source/game/StarChatTypes.cpp b/source/game/StarChatTypes.cpp
index a717be3..79dfc4f 100644
--- a/source/game/StarChatTypes.cpp
+++ b/source/game/StarChatTypes.cpp
@@ -55,7 +55,7 @@ ChatReceivedMessage::ChatReceivedMessage(Json const& json) : ChatReceivedMessage
fromConnection = json.getUInt("fromConnection", 0);
fromNick = json.getString("fromNick", "");
portrait = json.getString("portrait", "");
- text = json.getString("text");
+ text = json.getString("text", "");
}
Json ChatReceivedMessage::toJson() const {
diff --git a/source/game/StarObject.cpp b/source/game/StarObject.cpp
index fe1f3f3..3172c97 100644
--- a/source/game/StarObject.cpp
+++ b/source/game/StarObject.cpp
@@ -110,6 +110,8 @@ Object::Object(ObjectConfigConstPtr config, Json const& parameters) {
m_netGroup.setNeedsLoadCallback(bind(&Object::getNetStates, this, _1));
m_netGroup.setNeedsStoreCallback(bind(&Object::setNetStates, this));
+
+ m_clientEntityMode = ClientEntityModeNames.getLeft(configValue("clientEntityMode", "ClientSlaveOnly").toString());
}
Json Object::diskStore() const {
@@ -127,6 +129,10 @@ EntityType Object::entityType() const {
return EntityType::Object;
}
+ClientEntityMode Object::clientEntityMode() const {
+ return m_clientEntityMode;
+}
+
void Object::init(World* world, EntityId entityId, EntityMode mode) {
Entity::init(world, entityId, mode);
// Only try and find a new orientation if we do not already have one,
@@ -182,7 +188,8 @@ void Object::init(World* world, EntityId entityId, EntityMode mode) {
setKeepAlive(configValue("keepAlive", false).toBool());
- m_scriptComponent.setScripts(m_config->scripts);
+ auto scripts = jsonToStringList(configValue("scripts", JsonArray()).toArray());
+ m_scriptComponent.setScripts(scripts.transformed(bind(AssetPath::relativeTo, m_config->path, _1)));
m_scriptComponent.setUpdateDelta(configValue("scriptDelta", 5).toInt());
m_scriptComponent.addCallbacks("object", makeObjectCallbacks());
diff --git a/source/game/StarObject.hpp b/source/game/StarObject.hpp
index 6483a27..a797842 100644
--- a/source/game/StarObject.hpp
+++ b/source/game/StarObject.hpp
@@ -40,6 +40,7 @@ public:
ByteArray netStore();
virtual EntityType entityType() const override;
+ virtual ClientEntityMode clientEntityMode() const override;
virtual void init(World* world, EntityId entityId, EntityMode mode) override;
virtual void uninit() override;
@@ -267,6 +268,8 @@ private:
NetElementHashMap<String, Json> m_scriptedAnimationParameters;
NetElementData<List<DamageSource>> m_damageSources;
+
+ ClientEntityMode m_clientEntityMode;
};
}
diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp
index 8b15254..94ed991 100644
--- a/source/game/StarPlayer.cpp
+++ b/source/game/StarPlayer.cpp
@@ -976,15 +976,21 @@ void Player::update(float dt, uint64_t) {
});
}
- for (auto tool : {m_tools->primaryHandItem(), m_tools->altHandItem()}) {
+ for (auto& tool : {m_tools->primaryHandItem(), m_tools->altHandItem()}) {
if (auto inspectionTool = as<InspectionTool>(tool)) {
- for (auto ir : inspectionTool->pullInspectionResults()) {
+ for (auto& ir : inspectionTool->pullInspectionResults()) {
if (ir.objectName) {
m_questManager->receiveMessage("objectScanned", true, {*ir.objectName, *ir.entityId});
m_log->addScannedObject(*ir.objectName);
}
- addChatMessage(ir.message);
+ addChatMessage(ir.message, JsonObject{
+ {"message", JsonObject{
+ {"context", JsonObject{{"mode", "RadioMessage"}}},
+ {"fromConnection", world()->connection()},
+ {"text", ir.message}
+ }}
+ });
}
}
}
@@ -2178,12 +2184,12 @@ void Player::queueItemPickupMessage(ItemPtr const& item) {
m_queuedItemPickups.append(item);
}
-void Player::addChatMessage(String const& message) {
+void Player::addChatMessage(String const& message, Json const& config) {
starAssert(!isSlave());
m_chatMessage = message;
m_chatMessageUpdated = true;
m_chatMessageChanged = true;
- m_pendingChatActions.append(SayChatAction{entityId(), message, mouthPosition()});
+ m_pendingChatActions.append(SayChatAction{entityId(), message, mouthPosition(), config});
}
void Player::addEmote(HumanoidEmote const& emote, Maybe<float> emoteCooldown) {
diff --git a/source/game/StarPlayer.hpp b/source/game/StarPlayer.hpp
index fb32005..d6750a5 100644
--- a/source/game/StarPlayer.hpp
+++ b/source/game/StarPlayer.hpp
@@ -381,7 +381,7 @@ public:
void queueUIMessage(String const& message) override;
void queueItemPickupMessage(ItemPtr const& item);
- void addChatMessage(String const& message);
+ void addChatMessage(String const& message, Json const& config = {});
void addEmote(HumanoidEmote const& emote, Maybe<float> emoteCooldown = {});
pair<HumanoidEmote, float> currentEmote() const;
diff --git a/source/game/StarSystemWorldClient.cpp b/source/game/StarSystemWorldClient.cpp
index eb25124..e390860 100644
--- a/source/game/StarSystemWorldClient.cpp
+++ b/source/game/StarSystemWorldClient.cpp
@@ -75,7 +75,8 @@ void SystemWorldClient::update(float dt) {
m_clientShips.clear();
m_ship = {};
m_location = Vec3I();
- }
+ } else if (auto celestialSlave = as<CelestialSlaveDatabase>(m_celestialDatabase))
+ celestialSlave->signalSystem(currentSystem()); // keeps the celestial chunk for our current system alive
}
List<SystemObjectPtr> SystemWorldClient::objects() const {
diff --git a/source/game/StarUniverseServer.cpp b/source/game/StarUniverseServer.cpp
index 7927aae..7317e52 100644
--- a/source/game/StarUniverseServer.cpp
+++ b/source/game/StarUniverseServer.cpp
@@ -735,7 +735,7 @@ void UniverseServer::kickErroredPlayers() {
for (auto const& worldId : m_worlds.keys()) {
if (auto world = getWorld(worldId)) {
for (auto clientId : world->erroredClients())
- m_pendingDisconnections.add(clientId, "Incoming client packet has caused exception");
+ m_pendingDisconnections[clientId] = "Incoming client packet has caused exception";
}
}
}
@@ -1714,8 +1714,9 @@ void UniverseServer::acceptConnection(UniverseConnection connection, Maybe<HostA
Vec3I location = clientContext->shipCoordinate().location();
if (location != Vec3I()) {
- auto clientSystem = createSystemWorld(clientContext->shipCoordinate().location());
+ auto clientSystem = createSystemWorld(location);
clientSystem->addClient(clientId, clientContext->playerUuid(), clientContext->shipUpgrades().shipSpeed, clientContext->shipLocation());
+ addCelestialRequests(clientId, {makeLeft(location.vec2()), makeRight(location)});
clientContext->setSystemWorld(clientSystem);
}
diff --git a/source/game/StarWorldClient.cpp b/source/game/StarWorldClient.cpp
index ef5daa2..aa6f293 100644
--- a/source/game/StarWorldClient.cpp
+++ b/source/game/StarWorldClient.cpp
@@ -496,7 +496,7 @@ void WorldClient::render(WorldRenderData& renderData, unsigned bufferTiles) {
else { // this is THEIR problem!!
Logger::error("WorldClient: Exception caught in {}::render ({}): {}", EntityTypeNames.getRight(entity->entityType()), entity->entityId(), e.what());
auto toolUser = as<ToolUserEntity>(entity);
- String image = toolUser ? strf("/rendering/error_{}.png", DirectionNames.getRight(toolUser->facingDirection())) : "/rendering/error.png";
+ String image = toolUser ? strf("/rendering/sprites/error_{}.png", DirectionNames.getRight(toolUser->facingDirection())) : "/rendering/sprites/error.png";
Color color = Color::rgbf(0.8f + (float)sin(m_currentTime * Constants::pi * 2.0) * 0.2f, 0.0f, 0.0f);
auto drawable = Drawable::makeImage(image, 1.0f / TilePixels, true, entity->position(), color);
drawable.fullbright = true;
diff --git a/source/test/small_vector_test.cpp b/source/test/small_vector_test.cpp
index 387c6a9..c739236 100644
--- a/source/test/small_vector_test.cpp
+++ b/source/test/small_vector_test.cpp
@@ -1,4 +1,5 @@
#include "StarSmallVector.hpp"
+#include "StarFormat.hpp"
#include "gtest/gtest.h"