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

summaryrefslogtreecommitdiff
path: root/source/game
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2025-04-16 17:10:00 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2025-04-16 17:10:00 +1000
commitc59fceecf93895c7bd2b2bf9fe327dd79e9d0c51 (patch)
treec69342595e560116a03a35a35f1b0b2fa219f72f /source/game
parent7d1beb6ed8d125286ffa61e909f6389ae648e128 (diff)
add optional data for chat messages, for custom Chat panes to read from
Diffstat (limited to 'source/game')
-rw-r--r--source/game/StarChatTypes.cpp10
-rw-r--r--source/game/StarChatTypes.hpp2
-rw-r--r--source/game/StarNetPackets.cpp6
-rw-r--r--source/game/StarNetPackets.hpp2
-rw-r--r--source/game/StarSkyParameters.cpp2
-rw-r--r--source/game/StarUniverseClient.cpp7
-rw-r--r--source/game/StarUniverseClient.hpp2
7 files changed, 25 insertions, 6 deletions
diff --git a/source/game/StarChatTypes.cpp b/source/game/StarChatTypes.cpp
index 79dfc4f..56fa6d9 100644
--- a/source/game/StarChatTypes.cpp
+++ b/source/game/StarChatTypes.cpp
@@ -56,6 +56,7 @@ ChatReceivedMessage::ChatReceivedMessage(Json const& json) : ChatReceivedMessage
fromNick = json.getString("fromNick", "");
portrait = json.getString("portrait", "");
text = json.getString("text", "");
+ data = json.getObject("data", JsonObject());
}
Json ChatReceivedMessage::toJson() const {
@@ -67,7 +68,8 @@ Json ChatReceivedMessage::toJson() const {
{"fromConnection", fromConnection},
{"fromNick", fromNick.empty() ? Json() : fromNick},
{"portrait", portrait.empty() ? Json() : portrait},
- {"text", text}
+ {"text", text},
+ {"data", data}
};
}
@@ -78,7 +80,8 @@ DataStream& operator>>(DataStream& ds, ChatReceivedMessage& receivedMessage) {
ds.read(receivedMessage.fromNick);
ds.read(receivedMessage.portrait);
ds.read(receivedMessage.text);
-
+ if (ds.streamCompatibilityVersion() >= 5)
+ ds.read(receivedMessage.data);
return ds;
}
@@ -88,7 +91,8 @@ DataStream& operator<<(DataStream& ds, ChatReceivedMessage const& receivedMessag
ds.write(receivedMessage.fromNick);
ds.write(receivedMessage.portrait);
ds.write(receivedMessage.text);
-
+ if (ds.streamCompatibilityVersion() >= 5)
+ ds.write(receivedMessage.data);
return ds;
}
diff --git a/source/game/StarChatTypes.hpp b/source/game/StarChatTypes.hpp
index 3feb413..3c23d7c 100644
--- a/source/game/StarChatTypes.hpp
+++ b/source/game/StarChatTypes.hpp
@@ -55,6 +55,8 @@ struct ChatReceivedMessage {
String portrait;
String text;
+
+ JsonObject data;
};
DataStream& operator>>(DataStream& ds, ChatReceivedMessage& receivedMessage);
diff --git a/source/game/StarNetPackets.cpp b/source/game/StarNetPackets.cpp
index dfe3ff1..0b9f6a3 100644
--- a/source/game/StarNetPackets.cpp
+++ b/source/game/StarNetPackets.cpp
@@ -495,14 +495,20 @@ ChatSendPacket::ChatSendPacket() : sendMode(ChatSendMode::Broadcast) {}
ChatSendPacket::ChatSendPacket(String text, ChatSendMode sendMode) : text(std::move(text)), sendMode(sendMode) {}
+ChatSendPacket::ChatSendPacket(String text, ChatSendMode sendMode, JsonObject data) : text(std::move(text)), sendMode(sendMode), data(std::move(data)) {}
+
void ChatSendPacket::read(DataStream& ds) {
ds.read(text);
ds.read(sendMode);
+ if (ds.streamCompatibilityVersion() >= 5)
+ ds.read(data);
}
void ChatSendPacket::write(DataStream& ds) const {
ds.write(text);
ds.write(sendMode);
+ if (ds.streamCompatibilityVersion() >= 5)
+ ds.write(data);
}
CelestialRequestPacket::CelestialRequestPacket() {}
diff --git a/source/game/StarNetPackets.hpp b/source/game/StarNetPackets.hpp
index 349191f..f2bd99d 100644
--- a/source/game/StarNetPackets.hpp
+++ b/source/game/StarNetPackets.hpp
@@ -371,12 +371,14 @@ struct FlyShipPacket : PacketBase<PacketType::FlyShip> {
struct ChatSendPacket : PacketBase<PacketType::ChatSend> {
ChatSendPacket();
ChatSendPacket(String text, ChatSendMode sendMode);
+ ChatSendPacket(String text, ChatSendMode sendMode, JsonObject data);
void read(DataStream& ds) override;
void write(DataStream& ds) const override;
String text;
ChatSendMode sendMode;
+ JsonObject data;
};
struct CelestialRequestPacket : PacketBase<PacketType::CelestialRequest> {
diff --git a/source/game/StarSkyParameters.cpp b/source/game/StarSkyParameters.cpp
index e2ed885..3d540b8 100644
--- a/source/game/StarSkyParameters.cpp
+++ b/source/game/StarSkyParameters.cpp
@@ -175,6 +175,8 @@ void SkyParameters::read(DataStream& ds) {
ds >> sunType;
if (ds.streamCompatibilityVersion() >= 3)
ds >> settings;
+ else
+ settings = JsonObject();
}
void SkyParameters::write(DataStream& ds) const {
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp
index af33508..f33c953 100644
--- a/source/game/StarUniverseClient.cpp
+++ b/source/game/StarUniverseClient.cpp
@@ -484,10 +484,13 @@ bool UniverseClient::flying() const {
return false;
}
-void UniverseClient::sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak) {
+void UniverseClient::sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak, Maybe<JsonObject> data) {
if (speak.value(!text.beginsWith("/")))
m_mainPlayer->addChatMessage(text);
- m_connection->pushSingle(make_shared<ChatSendPacket>(text, sendMode));
+ auto packet = make_shared<ChatSendPacket>(text, sendMode);
+ if (data)
+ packet->data = std::move(*data);
+ m_connection->pushSingle(packet);
}
List<ChatReceivedMessage> UniverseClient::pullChatMessages() {
diff --git a/source/game/StarUniverseClient.hpp b/source/game/StarUniverseClient.hpp
index b770b07..1cb3bfa 100644
--- a/source/game/StarUniverseClient.hpp
+++ b/source/game/StarUniverseClient.hpp
@@ -80,7 +80,7 @@ public:
SkyConstPtr currentSky() const;
bool flying() const;
- void sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak = {});
+ void sendChat(String const& text, ChatSendMode sendMode, Maybe<bool> speak = {}, Maybe<JsonObject> data = {});
List<ChatReceivedMessage> pullChatMessages();
uint16_t players();