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

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/game/StarPlayer.cpp16
-rw-r--r--source/game/StarPlayer.hpp3
-rw-r--r--source/game/StarPlayerStorage.cpp6
-rw-r--r--source/game/StarPlayerStorage.hpp2
-rw-r--r--source/game/StarUniverseClient.cpp2
5 files changed, 22 insertions, 7 deletions
diff --git a/source/game/StarPlayer.cpp b/source/game/StarPlayer.cpp
index 7036a7b..3e6d502 100644
--- a/source/game/StarPlayer.cpp
+++ b/source/game/StarPlayer.cpp
@@ -243,7 +243,7 @@ void Player::diskLoad(Json const& diskStore) {
m_genericProperties = diskStore.getObject("genericProperties");
- refreshEquipment();
+ refreshArmor();
m_codexes->learnInitialCodexes(species());
@@ -1228,7 +1228,14 @@ void Player::clearSwap() {
endTrigger();
}
-void Player::refreshEquipment() {
+void Player::refreshItems() {
+ if (isSlave())
+ return;
+
+ m_tools->setItems(m_inventory->primaryHeldItem(), m_inventory->secondaryHeldItem());
+}
+
+void Player::refreshArmor() {
if (isSlave())
return;
@@ -1240,8 +1247,11 @@ void Player::refreshEquipment() {
m_armor->setLegsCosmeticItem(m_inventory->legsCosmetic());
m_armor->setBackItem(m_inventory->backArmor());
m_armor->setBackCosmeticItem(m_inventory->backCosmetic());
+}
- m_tools->setItems(m_inventory->primaryHeldItem(), m_inventory->secondaryHeldItem());
+void Player::refreshEquipment() {
+ refreshArmor();
+ refreshItems();
}
PlayerBlueprintsPtr Player::blueprints() const {
diff --git a/source/game/StarPlayer.hpp b/source/game/StarPlayer.hpp
index 99962cd..e888015 100644
--- a/source/game/StarPlayer.hpp
+++ b/source/game/StarPlayer.hpp
@@ -217,6 +217,9 @@ public:
// Clear the item swap slot.
void clearSwap();
+ void refreshArmor();
+ void refreshItems();
+
// Refresh worn equipment from the inventory
void refreshEquipment();
diff --git a/source/game/StarPlayerStorage.cpp b/source/game/StarPlayerStorage.cpp
index c6ae2a3..f128244 100644
--- a/source/game/StarPlayerStorage.cpp
+++ b/source/game/StarPlayerStorage.cpp
@@ -99,7 +99,7 @@ Maybe<Uuid> PlayerStorage::playerUuidAt(size_t index) {
return {};
}
-Maybe<Uuid> PlayerStorage::playerUuidByName(String const& name) {
+Maybe<Uuid> PlayerStorage::playerUuidByName(String const& name, Maybe<Uuid> except) {
String cleanMatch = Text::stripEscapeCodes(name).toLower();
Maybe<Uuid> uuid;
@@ -107,7 +107,9 @@ Maybe<Uuid> PlayerStorage::playerUuidByName(String const& name) {
size_t longest = SIZE_MAX;
for (auto& cache : m_savedPlayersCache) {
- if (auto name = cache.second.optQueryString("identity.name")) {
+ if (except && *except == cache.first)
+ continue;
+ else if (auto name = cache.second.optQueryString("identity.name")) {
auto cleanName = Text::stripEscapeCodes(*name).toLower();
auto len = cleanName.size();
if (len < longest && cleanName.utf8().rfind(cleanMatch.utf8()) == 0) {
diff --git a/source/game/StarPlayerStorage.hpp b/source/game/StarPlayerStorage.hpp
index 4b9edc7..9f7fd4a 100644
--- a/source/game/StarPlayerStorage.hpp
+++ b/source/game/StarPlayerStorage.hpp
@@ -19,7 +19,7 @@ public:
// Returns nothing if index is out of bounds.
Maybe<Uuid> playerUuidAt(size_t index);
// Returns nothing if name doesn't match a player.
- Maybe<Uuid> playerUuidByName(String const& name);
+ Maybe<Uuid> playerUuidByName(String const& name, Maybe<Uuid> except = {});
// Also returns the diskStore Json if needed.
Json savePlayer(PlayerPtr const& player);
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp
index 90d5f07..2ff4631 100644
--- a/source/game/StarUniverseClient.cpp
+++ b/source/game/StarUniverseClient.cpp
@@ -537,7 +537,7 @@ bool UniverseClient::switchPlayer(size_t index) {
}
bool UniverseClient::switchPlayer(String const& name) {
- if (auto uuid = m_playerStorage->playerUuidByName(name))
+ if (auto uuid = m_playerStorage->playerUuidByName(name, mainPlayer()->uuid()))
return switchPlayer(*uuid);
else
return false;