diff --git a/engine/server/library/serverDatabase/src/shared/ConfigServerDatabase.cpp b/engine/server/library/serverDatabase/src/shared/ConfigServerDatabase.cpp index fd756581..544a93f2 100755 --- a/engine/server/library/serverDatabase/src/shared/ConfigServerDatabase.cpp +++ b/engine/server/library/serverDatabase/src/shared/ConfigServerDatabase.cpp @@ -34,14 +34,14 @@ void ConfigServerDatabase::install(void) ConfigServerUtility::install(); data = &staticData; - KEY_INT (objvarNameCleanupTime, 0); - KEY_INT (orphanedObjectCleanupTime, 0); - KEY_INT (marketAttributesCleanupTime, 0); - KEY_INT (messagesCleanupTime, 0); - KEY_INT (brokenObjectCleanupTime, 0); - KEY_INT (vendorObjectCleanupTime, 0); + KEY_INT (objvarNameCleanupTime, 60); + KEY_INT (orphanedObjectCleanupTime, 60); + KEY_INT (marketAttributesCleanupTime, 60); + KEY_INT (messagesCleanupTime, 60); + KEY_INT (brokenObjectCleanupTime, 60); + KEY_INT (vendorObjectCleanupTime, 60); KEY_STRING (customSQLFilename,""); - KEY_BOOL (enableFixBadCells, false); + KEY_BOOL (enableFixBadCells, true); KEY_STRING (objectTemplateListUpdateFilename,""); KEY_STRING (DSN,"gameserver"); @@ -97,7 +97,7 @@ void ConfigServerDatabase::install(void) KEY_BOOL (enableGoldDatabase, false); KEY_STRING (maxGoldNetworkId, "10000000"); KEY_FLOAT (defaultQueueUpdateTimeLimit, 0.25f); - KEY_BOOL (enableDataCleanup, false); + KEY_BOOL (enableDataCleanup, true); KEY_INT (defaultLazyDeleteBulkBindSize, 100); KEY_INT (defaultLazyDeleteSleepTime, 1000); KEY_INT (writeDelay, 0); diff --git a/engine/server/library/serverDatabase/src/shared/Persister.cpp b/engine/server/library/serverDatabase/src/shared/Persister.cpp index d565ef27..fa57c58b 100755 --- a/engine/server/library/serverDatabase/src/shared/Persister.cpp +++ b/engine/server/library/serverDatabase/src/shared/Persister.cpp @@ -230,7 +230,7 @@ void Persister::onFrameBarrierReached() for (ObjectSnapshotMap::iterator obj=m_objectSnapshotMap.begin(); obj!=m_objectSnapshotMap.end();) { if (obj->second == i->second) - m_objectSnapshotMap.erase(obj++); + obj = m_objectSnapshotMap.erase(obj); else ++obj; } diff --git a/engine/server/library/serverGame/src/shared/core/GameServer.cpp b/engine/server/library/serverGame/src/shared/core/GameServer.cpp index fb0791cf..e8f25f32 100755 --- a/engine/server/library/serverGame/src/shared/core/GameServer.cpp +++ b/engine/server/library/serverGame/src/shared/core/GameServer.cpp @@ -643,7 +643,11 @@ void GameServer::connectToDatabaseProcess(std::string const &address, uint16 por void GameServer::createRemoteProxy(uint32 remoteProcessId, ServerObject *object) { - WARNING_STRICT_FATAL(!object, ("Told to create an object on %d we know nothing about!\n", remoteProcessId)); + if (!object) { + WARNING(!object, ("Told to create an object on %d we know nothing about!\n", remoteProcessId)); + return; + } + NetworkId objectId = object->getNetworkId(); DEBUG_REPORT_LOG(ConfigServerGame::getLogObjectLoading(),("createRemoteProxy(%lu,%s)\n",remoteProcessId, objectId.getValueString().c_str())); diff --git a/engine/server/library/serverGame/src/shared/object/IntangibleObject.cpp b/engine/server/library/serverGame/src/shared/object/IntangibleObject.cpp index fefa162f..dd1170e6 100755 --- a/engine/server/library/serverGame/src/shared/object/IntangibleObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/IntangibleObject.cpp @@ -405,7 +405,7 @@ void IntangibleObject::onPermanentlyDestroyed() * Persists this object in the database. Will also persist all the objects it * is keeping track of. */ -bool IntangibleObject::persist() +void IntangibleObject::persist() { if (isAuthoritative() && isTheater()) { @@ -413,11 +413,11 @@ bool IntangibleObject::persist() { // we are not finished creating our objects, prevent persistance WARNING(true, ("IntangibleObject::persist called before all objects created")); - return false; + return; } if (isPersisted()) - return true; + return; ServerObject::persist(); @@ -471,15 +471,9 @@ bool IntangibleObject::persist() } } - return true; - } - else { + else ServerObject::persist(); - return true; - } - - return false; } // IntangibleObject::persist //------------------------------------------------------------------------------------------ diff --git a/engine/server/library/serverGame/src/shared/object/IntangibleObject.h b/engine/server/library/serverGame/src/shared/object/IntangibleObject.h index 25dd4ff3..e7776c4b 100755 --- a/engine/server/library/serverGame/src/shared/object/IntangibleObject.h +++ b/engine/server/library/serverGame/src/shared/object/IntangibleObject.h @@ -44,7 +44,7 @@ public: virtual float alter(float time); virtual void onPermanentlyDestroyed(); - virtual bool persist(); + virtual void persist(); virtual bool isVisibleOnClient (const Client & client) const; virtual void getAttributes (std::vector > &data) const; virtual bool onContainerAboutToTransfer(ServerObject * destination, ServerObject* transferer); diff --git a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp index 8c6a6342..78839fcf 100755 --- a/engine/server/library/serverGame/src/shared/object/ServerObject.cpp +++ b/engine/server/library/serverGame/src/shared/object/ServerObject.cpp @@ -3203,11 +3203,11 @@ void ServerObject::onRemovedFromTriggerVolume(TriggerVolume & triggerVolume) * After this function is called, changes to this object will be sent to the database. */ -bool ServerObject::persist() +void ServerObject::persist() { // Do not persist buildout objects (buildout objects have negative networkIds) if (getNetworkId() < NetworkId::cms_invalid) - return false; + return; if (isAuthoritative()) { @@ -3221,7 +3221,7 @@ bool ServerObject::persist() if (!contained && !isPlayerControlled() && getPosition_p() != Vector::zero) { WARNING_STRICT_FATAL(true, ("Tried to persist non-player object %s in a space scene away from the origin (not persisting).", getDebugInformation().c_str())); - return false; + return; } } else @@ -3244,15 +3244,11 @@ bool ServerObject::persist() PositionUpdateTracker::sendPositionUpdate(*this); } - - return true; } else { sendControllerMessageToAuthServer(CM_persistObject, 0); } - - return false; } // ---------------------------------------------------------------------- diff --git a/engine/server/library/serverGame/src/shared/object/ServerObject.h b/engine/server/library/serverGame/src/shared/object/ServerObject.h index 24fbd6e8..c0c320bd 100755 --- a/engine/server/library/serverGame/src/shared/object/ServerObject.h +++ b/engine/server/library/serverGame/src/shared/object/ServerObject.h @@ -297,7 +297,7 @@ public: bool isInEndBaselines() const; bool isNeedingPobFixup() const; bool permanentlyDestroy (DeleteReasons::Enumerator reason); - virtual bool persist (); + virtual void persist (); virtual void onRemovingFromWorld (); virtual void unload (); void moveToPlayerAndUnload (const NetworkId &player); diff --git a/engine/server/library/serverScript/src/shared/ScriptMethodsDynamicVariable.cpp b/engine/server/library/serverScript/src/shared/ScriptMethodsDynamicVariable.cpp index effd5bed..12a4f509 100755 --- a/engine/server/library/serverScript/src/shared/ScriptMethodsDynamicVariable.cpp +++ b/engine/server/library/serverScript/src/shared/ScriptMethodsDynamicVariable.cpp @@ -514,15 +514,16 @@ ServerObject * ScriptMethodsDynamicVariableNamespace::getObjectAndName(JNIEnv *e JavaStringParam localName(name); if (localName.fillBuffer(buffer, bufferSize) > 1) { - if (!JavaLibrary::getObject(objId, object) && !ConfigServerGame::getDisableObjvarNullCheck()) + if (!JavaLibrary::getObject(objId, object)) { - fprintf(stderr, "WARNING: Could not get object for objvar %s call\n", buffer); + WARNING((!ConfigServerGame::getDisableObjvarNullCheck()), ("WARNING: Could not get object for objvar %s call\n", buffer)); } } else { - fprintf(stderr, "WARNING: Could not get objvar name\n"); + WARNING(true, ("Could not get objvar name.")); } + if (object == nullptr && !ConfigServerGame::getDisableObjvarNullCheck()) JavaLibrary::printJavaStack(); diff --git a/engine/server/library/serverScript/src/shared/ScriptMethodsObjectCreate.cpp b/engine/server/library/serverScript/src/shared/ScriptMethodsObjectCreate.cpp index 531c0048..25b4382a 100755 --- a/engine/server/library/serverScript/src/shared/ScriptMethodsObjectCreate.cpp +++ b/engine/server/library/serverScript/src/shared/ScriptMethodsObjectCreate.cpp @@ -1125,11 +1125,8 @@ jboolean JNICALL ScriptMethodsObjectCreateNamespace::persistObject(JNIEnv *env, ServerObject* object = nullptr; if (!JavaLibrary::getObject(target, object)) return JNI_FALSE; - if (object->persist()) { - return JNI_TRUE; - } else { - return JNI_FALSE; - } + object->persist(); + return JNI_TRUE; } // JavaLibrary::persistObject /** diff --git a/engine/server/library/serverScript/src/shared/ScriptMethodsObjectInfo.cpp b/engine/server/library/serverScript/src/shared/ScriptMethodsObjectInfo.cpp index 453e5e7f..3a78cfce 100755 --- a/engine/server/library/serverScript/src/shared/ScriptMethodsObjectInfo.cpp +++ b/engine/server/library/serverScript/src/shared/ScriptMethodsObjectInfo.cpp @@ -3367,38 +3367,38 @@ void JNICALL ScriptMethodsObjectInfoNamespace::sendScriptVarsToProxies(JNIEnv * { PROFILER_AUTO_BLOCK_DEFINE("JNI::sendScriptVarsToProxies"); + ServerObject * object = 0; if (obj != 0 && buffer != 0) { - ServerObject *object = nullptr; - if (JavaLibrary::getObject(obj, object) && object != nullptr) + if (JavaLibrary::getObject(obj, object)) { - ProxyList proxyList(object->getExposedProxyList()); + ProxyList const &proxyList = object->getExposedProxyList(); if (!proxyList.empty()) { - std::vector data; - if (ScriptConversion::convert(buffer, data)) + std::vector data; + if (ScriptConversion::convert(buffer, data)) + { + if(data.size() > 0) { - if(data.size() > 0) - { - WARNING(data.size() > 60000, ("JavaLibrary::sendScriptVarsToProxies: " - "Packing scriptvars for object %s, packed data size = %d", - + WARNING(data.size() > 60000, ("JavaLibrary::sendScriptVarsToProxies: " + "Packing scriptvars for object %s, packed data size = %d", object->getNetworkId().getValueString().c_str(), static_cast(data.size()))); uint32 const myProcessId = GameServer::getInstance().getProcessId(); uint32 const authProcessId = object->getAuthServerProcessId(); - + ProxyList syncServers(proxyList); if (myProcessId != authProcessId) { - proxyList.erase(myProcessId); - proxyList.insert(authProcessId); + syncServers.erase(myProcessId); + syncServers.insert(authProcessId); } - - ServerMessageForwarding::begin(std::vector(proxyList.begin(), proxyList.end())); + + ServerMessageForwarding::begin(std::vector(syncServers.begin(), syncServers.end())); + SynchronizeScriptVarDeltasMessage const deltasMessage(object->getNetworkId(), data); - ServerMessageForwarding::send(deltasMessage); + ServerMessageForwarding::end(); } } diff --git a/game/server/application/SwgDatabaseServer/src/shared/buffers/ObjvarBuffer.cpp b/game/server/application/SwgDatabaseServer/src/shared/buffers/ObjvarBuffer.cpp index 5e148cb2..59928dbc 100755 --- a/game/server/application/SwgDatabaseServer/src/shared/buffers/ObjvarBuffer.cpp +++ b/game/server/application/SwgDatabaseServer/src/shared/buffers/ObjvarBuffer.cpp @@ -325,12 +325,8 @@ ObjvarBuffer::updateObjvars(const NetworkId &objectId, const std::vector first.m_objectId == object) { - i = m_data.erase(i); - } else { - ++i; - } + while (i != m_data.end() && i->first.m_objectId==object) { + i = m_data.erase(i); } }