From 9fea76f6ab84be6ad3fab64a7617f5597e833fab Mon Sep 17 00:00:00 2001 From: Cekis Date: Mon, 7 Feb 2022 09:35:22 -0500 Subject: [PATCH 1/7] Added extra verbiage to logging statement --- .../application/CentralServer/src/shared/CentralServer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/server/application/CentralServer/src/shared/CentralServer.cpp b/engine/server/application/CentralServer/src/shared/CentralServer.cpp index 1cdb83bb..2cf6f0ba 100755 --- a/engine/server/application/CentralServer/src/shared/CentralServer.cpp +++ b/engine/server/application/CentralServer/src/shared/CentralServer.cpp @@ -3325,7 +3325,7 @@ void CentralServer::handleRequestSceneTransfer(const RequestSceneTransfer &msg) } else { - DEBUG_REPORT_LOG(true, ("Starting planet server for login")); + DEBUG_REPORT_LOG(true, ("Starting planet server for login. Host '%s', Scene: '%s'", getHostForScene(msg.getSceneName()), msg.getSceneName())); startPlanetServer(getHostForScene(msg.getSceneName()), msg.getSceneName(), 0); m_messagesWaitingForPlanetServer.push_back(Archive::ByteStream()); msg.pack(m_messagesWaitingForPlanetServer.back()); From 77176f349508dca430821ed194754581f47d43c5 Mon Sep 17 00:00:00 2001 From: Cekis Date: Mon, 21 Mar 2022 15:30:01 -0400 Subject: [PATCH 2/7] Server account lot size now a config value. --- .../serverGame/src/shared/core/ConfigServerGame.cpp | 2 ++ .../serverGame/src/shared/core/ConfigServerGame.h | 11 +++++++++++ .../serverGame/src/shared/object/CreatureObject.cpp | 7 +++---- .../serverGame/src/shared/object/CreatureObject.h | 3 +++ .../src/shared/ScriptMethodsPlayerAccount.cpp | 11 +++++++++++ 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/engine/server/library/serverGame/src/shared/core/ConfigServerGame.cpp b/engine/server/library/serverGame/src/shared/core/ConfigServerGame.cpp index 219b08f6..6fcb2e2b 100755 --- a/engine/server/library/serverGame/src/shared/core/ConfigServerGame.cpp +++ b/engine/server/library/serverGame/src/shared/core/ConfigServerGame.cpp @@ -491,6 +491,8 @@ void ConfigServerGame::install(void) KEY_STRING (serverLoadLevel, "heavy"); + KEY_INT (maxHousingLots, 10); + if (data->baseDecayRate <= 1.0f) data->baseDecayRate = 1.0f; diff --git a/engine/server/library/serverGame/src/shared/core/ConfigServerGame.h b/engine/server/library/serverGame/src/shared/core/ConfigServerGame.h index 80094104..612fc936 100755 --- a/engine/server/library/serverGame/src/shared/core/ConfigServerGame.h +++ b/engine/server/library/serverGame/src/shared/core/ConfigServerGame.h @@ -575,6 +575,8 @@ class ConfigServerGame bool useOldSuidGenerator; const char * serverLoadLevel; + + int maxHousingLots; }; private: @@ -1061,6 +1063,8 @@ class ConfigServerGame static bool getUseOldSuidGenerator(); static const char * getServerLoadLevel(); + + static int getMaxHousingLots(); }; //----------------------------------------------------------------------- @@ -3702,4 +3706,11 @@ inline const char *ConfigServerGame::getServerLoadLevel() return data->serverLoadLevel; } +//----------------------------------------------------------------------- + +inline int ConfigServerGame::getMaxHousingLots(void) +{ + return data->maxHousingLots; +} + #endif diff --git a/engine/server/library/serverGame/src/shared/object/CreatureObject.cpp b/engine/server/library/serverGame/src/shared/object/CreatureObject.cpp index aaf8affd..ab0df583 100755 --- a/engine/server/library/serverGame/src/shared/object/CreatureObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/CreatureObject.cpp @@ -193,9 +193,6 @@ const SharedObjectTemplate * CreatureObject::m_defaultSharedTemplate = nullptr; //---------------------------------------------------------------------- -// The max number of lots available to a player. This value is also defined in base_class.java -static const int HOUSING_MAX_LOTS = 10; - // Slot names static const ConstCharCrcLowerString DATAPAD_SLOT_NAME("datapad"); @@ -869,6 +866,8 @@ CreatureObject::CreatureObject(const ServerCreatureObjectTemplate* newTemplate) IGNORE_RETURN(g_creatureList.insert(this)); ObjectTracker::addCreature(); + + m_maxHousingLots = ConfigServerGame::getMaxHousingLots(); } //----------------------------------------------------------------------- @@ -11915,7 +11914,7 @@ void CreatureObject::runMissionCreationQueue() int CreatureObject::getMaxNumberOfLots() const { - return HOUSING_MAX_LOTS; + return m_maxHousingLots; } //---------------------------------------------------------------------- diff --git a/engine/server/library/serverGame/src/shared/object/CreatureObject.h b/engine/server/library/serverGame/src/shared/object/CreatureObject.h index c1161c70..ab06cefd 100755 --- a/engine/server/library/serverGame/src/shared/object/CreatureObject.h +++ b/engine/server/library/serverGame/src/shared/object/CreatureObject.h @@ -1013,6 +1013,9 @@ private: Archive::AutoDeltaVector m_wearableAppearanceData; // Vector for our appearance items. Archive::AutoDeltaVariable m_decoyOrigin; // The OID of the player whom we copied for this decoy creature. + + // The max number of lots available to a player. This value is also defined in base_class.java + int m_maxHousingLots; }; //---------------------------------------------------------------------- diff --git a/engine/server/library/serverScript/src/shared/ScriptMethodsPlayerAccount.cpp b/engine/server/library/serverScript/src/shared/ScriptMethodsPlayerAccount.cpp index 48fa7ad1..6fe97302 100755 --- a/engine/server/library/serverScript/src/shared/ScriptMethodsPlayerAccount.cpp +++ b/engine/server/library/serverScript/src/shared/ScriptMethodsPlayerAccount.cpp @@ -55,6 +55,7 @@ namespace ScriptMethodsPlayerAccountNamespace jboolean JNICALL isIgnoring(JNIEnv *env, jobject self, jlong player, jstring who); jboolean JNICALL adjustLotCount(JNIEnv *env, jobject self, jlong player, jint adjustment); jint JNICALL getAccountNumLots(JNIEnv *env, jobject self, jlong player); + jint JNICALL getMaxHousingLots(JNIEnv *env, jobject self); jint JNICALL getGameFeatureBits(JNIEnv *env, jobject self, jlong player); jint JNICALL getSubscriptionFeatureBits(JNIEnv *env, jobject self, jlong player); jboolean JNICALL isUsingAdminLogin(JNIEnv *env, jobject self, jlong player); @@ -91,6 +92,7 @@ const JNINativeMethod NATIVES[] = { JF("_isIgnoring", "(JLjava/lang/String;)Z", isIgnoring), JF("_adjustLotCount", "(JI)Z", adjustLotCount), JF("_getAccountNumLots", "(J)I", getAccountNumLots), + JF("_getMaxHousingLots", "()I", getMaxHousingLots), JF("_getGameFeatureBits", "(J)I", getGameFeatureBits), JF("_getSubscriptionFeatureBits", "(J)I", getSubscriptionFeatureBits), JF("_isUsingAdminLogin", "(J)Z", isUsingAdminLogin), @@ -199,6 +201,15 @@ jint JNICALL ScriptMethodsPlayerAccountNamespace::getAccountNumLots(JNIEnv *env, // ---------------------------------------------------------------------- +jint JNICALL ScriptMethodsPlayerAccountNamespace::getMaxHousingLots(JNIEnv *env, jobject self) +{ + UNREF(env); + UNREF(self); + return ConfigServerGame::getMaxHousingLots(); +} + +// ---------------------------------------------------------------------- + jint JNICALL ScriptMethodsPlayerAccountNamespace::getGameFeatureBits(JNIEnv *env, jobject self, jlong player) { CreatureObject *playerObject = 0; From a659007e40bfdef766e1f2e69c38963dd355b027 Mon Sep 17 00:00:00 2001 From: John <63141077+AconiteX@users.noreply.github.com> Date: Mon, 21 Mar 2022 19:00:12 -0400 Subject: [PATCH 3/7] Update ServerObject.cpp --- .../src/shared/object/ServerObject.cpp | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp index 585cd19f..07bbaa8e 100755 --- a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp @@ -1415,6 +1415,36 @@ bool ServerObject::canTrade() const { return false; } + + // aconite 3/21/22 + // if an item has the move flag MF_GM but *doesn't* have the MF_Player flag + // that object shouldn't be considered tradeable because it isn't intended to + // be moved by a player (fixes, e.g., trading your buyback container) + bool hasGmFlag = false; + bool hasPlayerFlag = false; + auto tpf = dynamic_cast(getObjectTemplate()); + if(tpf) + { + const int flags = tpf->getMoveFlagsCount(); + if(flags > 0) + { + for (size_t i = 0; i < tpf->getMoveFlagsCount(); i++) + { + if(tpf->getMoveFlags(i) == ServerObjectTemplate::MF_gm) + { + hasGmFlag = true; + } + if (tpf->getMoveFlags(i) == ServerObjectTemplate::MF_player) + { + hasPlayerFlag = true; + } + } + if(hasGmFlag && !hasPlayerFlag) + { + return false; + } + } + } return !markedNoTrade(); } From 445d9e51e2dbac44512274939ee2b7daf2ce5d5d Mon Sep 17 00:00:00 2001 From: John <63141077+AconiteX@users.noreply.github.com> Date: Mon, 21 Mar 2022 20:33:07 -0400 Subject: [PATCH 4/7] Update ServerObject.cpp --- .../library/serverGame/src/shared/object/ServerObject.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp index 07bbaa8e..28d56891 100755 --- a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp @@ -1425,16 +1425,16 @@ bool ServerObject::canTrade() const auto tpf = dynamic_cast(getObjectTemplate()); if(tpf) { - const int flags = tpf->getMoveFlagsCount(); + const size_t flags = tpf->getMoveFlagsCount(); if(flags > 0) { - for (size_t i = 0; i < tpf->getMoveFlagsCount(); i++) + for (size_t i = 0; i < flags; i++) { - if(tpf->getMoveFlags(i) == ServerObjectTemplate::MF_gm) + if(!hasGmFlag && tpf->getMoveFlags(i) == ServerObjectTemplate::MF_gm) { hasGmFlag = true; } - if (tpf->getMoveFlags(i) == ServerObjectTemplate::MF_player) + if (!hasPlayerFlag && tpf->getMoveFlags(i) == ServerObjectTemplate::MF_player) { hasPlayerFlag = true; } From ac2b7d70ddcb3d125d86256a17d1d65e1e855271 Mon Sep 17 00:00:00 2001 From: John <63141077+AconiteX@users.noreply.github.com> Date: Sun, 3 Apr 2022 06:34:03 -0400 Subject: [PATCH 5/7] Stopgap fix for stoi crash in ext admin level req --- .../src/shared/AdminAccountManager.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/engine/server/library/serverUtility/src/shared/AdminAccountManager.cpp b/engine/server/library/serverUtility/src/shared/AdminAccountManager.cpp index 2118aa18..4a1f5a6a 100755 --- a/engine/server/library/serverUtility/src/shared/AdminAccountManager.cpp +++ b/engine/server/library/serverUtility/src/shared/AdminAccountManager.cpp @@ -77,7 +77,20 @@ int AdminAccountManager::getAdminLevel(const std::string & account) std::ostringstream postBuffer; postBuffer << "user_name=" << account << "&secretKey=" << ConfigServerUtility::getExternalAdminLevelsSecretKey(); std::string response = webAPI::simplePost(ConfigServerUtility::getExternalAdminLevelsURL(), std::string(postBuffer.str()), ""); - level = std::stoi(response); + // aconite 4/3/22 + // stoi inconsistently throws an invalid argument exception from this request + // which causes the login and/or game server to crash on an auth or /setGod; + // this is a temporary patch to safeguard against that until this can be further evaluated + try + { + int newLevel = std::stoi(response); + if(newLevel != 0) + { + level = newLevel; + } + } + catch(std::invalid_argument const& ex) {} + catch(std::out_of_range const& ex) {} return level; } From 20501250aff66d54308196a34e683bbe26bb6262 Mon Sep 17 00:00:00 2001 From: Rory King Date: Sat, 30 Jul 2022 16:02:08 +0100 Subject: [PATCH 6/7] [E] Stop crafting session serverside when finishing last step (#27) This fixes an exploit where you can craft a prototype for a limited use schematic, but before it finishes you teleport by some means to a different game server to prevent the schematic from decrementing. --- .../serverGame/src/shared/command/CommandCppFuncs.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/engine/server/library/serverGame/src/shared/command/CommandCppFuncs.cpp b/engine/server/library/serverGame/src/shared/command/CommandCppFuncs.cpp index c0e08287..d0cb7640 100755 --- a/engine/server/library/serverGame/src/shared/command/CommandCppFuncs.cpp +++ b/engine/server/library/serverGame/src/shared/command/CommandCppFuncs.cpp @@ -5763,8 +5763,7 @@ static void commandFuncCreatePrototype(const Command&, const NetworkId& actor, c GameControllerMessageFlags::RELIABLE | GameControllerMessageFlags::DEST_AUTH_CLIENT); - if (!result) - player->stopCrafting(false); + player->stopCrafting(result); } // ---------------------------------------------------------------------- @@ -5795,8 +5794,7 @@ static void commandFuncCreateManfSchematic(const Command&, const NetworkId& acto GameControllerMessageFlags::RELIABLE | GameControllerMessageFlags::DEST_AUTH_CLIENT); - if (!result) - player->stopCrafting(false); + player->stopCrafting(result); } // ---------------------------------------------------------------------- From 1df9ef14e7e990296fd6388575c7d0b2da680b59 Mon Sep 17 00:00:00 2001 From: Cekis Date: Wed, 21 Sep 2022 19:54:18 -0400 Subject: [PATCH 7/7] Fixed issue where guarded targets in space would crash --- CMakeLists.txt | 1 + .../serverGame/src/shared/space/SpaceSquad.cpp | 12 +++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8547c160..7f12a0f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,6 +105,7 @@ elseif (UNIX) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # O3 and Ofast include one or more flags that cause java to crash when using gcc6 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math -fno-unroll-loops -fno-tree-loop-optimize -fno-plt") + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -Og") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3") diff --git a/engine/server/library/serverGame/src/shared/space/SpaceSquad.cpp b/engine/server/library/serverGame/src/shared/space/SpaceSquad.cpp index 9b998274..be21726f 100755 --- a/engine/server/library/serverGame/src/shared/space/SpaceSquad.cpp +++ b/engine/server/library/serverGame/src/shared/space/SpaceSquad.cpp @@ -116,13 +116,11 @@ SpaceSquad::~SpaceSquad() } // Tell all the squads guarding me that I am not longer guardable - - SpaceSquadList::iterator iterGuardedByList = m_guardedByList->begin(); - - for (; iterGuardedByList != m_guardedByList->end(); ++iterGuardedByList) - { - (*iterGuardedByList)->removeGuardTarget(); - } + for (SpaceSquadList::iterator it = m_guardedByList->begin(), next_it = it; it != m_guardedByList->end(); it = next_it) + { + ++next_it; + (*it)->removeGuardTarget(); + } delete m_guardedByList;