diff --git a/engine/server/library/serverGame/src/shared/core/ServerWorld.cpp b/engine/server/library/serverGame/src/shared/core/ServerWorld.cpp index a3fb0233..5488b5f9 100755 --- a/engine/server/library/serverGame/src/shared/core/ServerWorld.cpp +++ b/engine/server/library/serverGame/src/shared/core/ServerWorld.cpp @@ -14,7 +14,7 @@ #include "serverGame/CellObject.h" #include "serverGame/CollisionCallbacks.h" #include "serverGame/CombatTracker.h" -#include "serverGame/ConfigServerGame.h" +#include "serverGame/ConfigServerGame.h" #include "serverGame/ConnectionServerConnection.h" #include "serverGame/ContainerInterface.h" #include "serverGame/ContainmentMessageManager.h" @@ -154,9 +154,6 @@ #include "unicodeArchive/UnicodeArchive.h" #include "sharedLog/Log.h" - - - Object const *getContainingPobForObjectInWorld(Object const &object) { Object const * const containingObject = ContainerInterface::getContainedByObject(object); @@ -174,81 +171,72 @@ Object const *getContainingPobForObjectInWorld(Object const &object) return 0; } - - - -void compare_results_int( std::set &results, const std::set &results2, ServerObject* object ) +void compare_results_int(std::set &results, const std::set &results2, ServerObject* object) { - if ( results.empty() && results2.empty() ) // nothing to say........ + if (results.empty() && results2.empty()) // nothing to say........ return; - Vector v=object->getPosition_w(); + Vector v = object->getPosition_w(); const Object* p = getContainingPobForObjectInWorld(*object); - if ( results == results2 ) + if (results == results2) { return; } - LOG("SphereGrid", ("---- Results differ for object at (%f %f %f) %p --------", v.x, v.y, v.z, p )); + LOG("SphereGrid", ("---- Results differ for object at (%f %f %f) %p --------", v.x, v.y, v.z, p)); std::set::iterator iter; - LOG("SphereGrid", ("=============== Tree Results %d =================",results.size())); - for ( iter = results.begin(); iter != results.end(); ++iter ) + LOG("SphereGrid", ("=============== Tree Results %d =================", results.size())); + for (iter = results.begin(); iter != results.end(); ++iter) { TriggerVolume* volume = *iter; ServerObject const &volumeOwner = volume->getOwner(); const Object* pob = getContainingPobForObjectInWorld(volume->getOwner()); Sphere const &localSphere = volumeOwner.getLocalSphere(); Sphere world(volumeOwner.getTransform_o2w().rotateTranslate_l2p(localSphere.getCenter()), volume->getRadius()); - Vector c=world.getCenter(); - LOG("SphereGrid",(" (%f %f %f) %f POB = %p DIST=%f",c.x,c.y,c.z,world.getRadius(),pob, c.magnitudeBetween(v) )); - + Vector c = world.getCenter(); + LOG("SphereGrid", (" (%f %f %f) %f POB = %p DIST=%f", c.x, c.y, c.z, world.getRadius(), pob, c.magnitudeBetween(v))); } - LOG("SphereGrid", ("------------------ Grid Results %d ------------------",results2.size())); - for ( iter = results2.begin(); iter != results2.end(); ++iter ) + LOG("SphereGrid", ("------------------ Grid Results %d ------------------", results2.size())); + for (iter = results2.begin(); iter != results2.end(); ++iter) { TriggerVolume* volume = *iter; ServerObject const &volumeOwner = volume->getOwner(); const Object* pob = getContainingPobForObjectInWorld(volume->getOwner()); Sphere const &localSphere = volumeOwner.getLocalSphere(); Sphere world(volumeOwner.getTransform_o2w().rotateTranslate_l2p(localSphere.getCenter()), volume->getRadius()); // o2p or o2w - Vector c=world.getCenter(); - LOG("SphereGrid",(" (%f %f %f) %f POB = %p DIST=%f",c.x,c.y,c.z,world.getRadius(),pob, c.magnitudeBetween(v) )); - + Vector c = world.getCenter(); + LOG("SphereGrid", (" (%f %f %f) %f POB = %p DIST=%f", c.x, c.y, c.z, world.getRadius(), pob, c.magnitudeBetween(v))); } - DEBUG_FATAL(true,("FATAL: SphereGrid failed to match SphereTree result set.")); + DEBUG_FATAL(true, ("FATAL: SphereGrid failed to match SphereTree result set.")); } - - - -void compare_results( Capsule const &test, std::vector &results_in, const std::set &results2, ServerObject* object ) +void compare_results(Capsule const &test, std::vector &results_in, const std::set &results2, ServerObject* object) { size_t i; std::set results; - for ( i = 0; i < results_in.size(); ++i ) + for (i = 0; i < results_in.size(); ++i) { TriggerVolume* volume = results_in[i]; ServerObject const &volumeOwner = volume->getOwner(); Sphere const &localSphere = volumeOwner.getLocalSphere(); Sphere world(volumeOwner.getTransform_o2w().rotateTranslate_l2p(localSphere.getCenter()), volume->getRadius()); // o2p or o2w - if ( test.intersectsSphere( world ) ) + if (test.intersectsSphere(world)) { - results.insert( results_in[ i ] ); + results.insert(results_in[i]); } } - compare_results_int( results, results2, object ); + compare_results_int(results, results2, object); } - -void compare_results( Vector const ¢er_w, float radius, std::vector &results_in, const std::set &results2, ServerObject* object ) +void compare_results(Vector const ¢er_w, float radius, std::vector &results_in, const std::set &results2, ServerObject* object) { size_t i; std::set results; - for ( i = 0; i < results_in.size(); ++i ) + for (i = 0; i < results_in.size(); ++i) { TriggerVolume* volume = results_in[i]; ServerObject const &volumeOwner = volume->getOwner(); @@ -256,24 +244,21 @@ void compare_results( Vector const ¢er_w, float radius, std::vectorgetRadius()); // o2p or o2w Sphere test(center_w, radius); - if ( test.intersectsSphere( world ) ) + if (test.intersectsSphere(world)) { - results.insert( results_in[ i ] ); + results.insert(results_in[i]); } } - compare_results_int( results, results2, object ); + compare_results_int(results, results2, object); } - - - // ====================================================================== namespace ServerWorldNamespace { std::vector s_loadBeaconEntries; bool ms_logTriggerStats = false; - + std::vector gs_pendingConcludeVector; std::vector > gs_pendingConcludeOpsVector; bool gs_pendingConcludeLock = false; @@ -319,9 +304,9 @@ bool ServerWorldNamespace::isPlayerHouseHook(Object const *object) if (object && object->getPortalProperty()) { ServerObject const * const serverObject = object->asServerObject(); - if ( serverObject - && ( serverObject->asShipObject() - || serverObject->getObjVars().hasItem("player_structure"))) + if (serverObject + && (serverObject->asShipObject() + || serverObject->getObjVars().hasItem("player_structure"))) return true; } return false; @@ -335,20 +320,20 @@ void ServerWorldNamespace::issueCollisionNearWarpWarning(Object const &object, V //-- Only issue these for authoritative server objects. Proxy server objects will hit this condition after an intra-planet teleport. // @todo allow proxies to know about a teleport and inform CollisionWorld so that we can always report these. - WARNING(!serverObject || serverObject->isAuthoritative(), + WARNING(!serverObject || serverObject->isAuthoritative(), ("CollisionWorld::update() had %d segments for object id=[%s], template=[%s], authority=[%s], game sever id=[%d], start position=[%.2f,%.2f,%.2f], end position=[%.2f,%.2f,%.2f], object probably should have warped but collision system is not warping it.", - segmentCount, - object.getNetworkId().getValueString().c_str(), - object.getObjectTemplateName(), - serverObject ? (serverObject->isAuthoritative() ? "authoritative" : "proxy") : "", - static_cast(GameServer::getInstance().getProcessId()), - oldPosition_w.x, - oldPosition_w.y, - oldPosition_w.z, - newPosition_w.x, - newPosition_w.y, - newPosition_w.z - )); + segmentCount, + object.getNetworkId().getValueString().c_str(), + object.getObjectTemplateName(), + serverObject ? (serverObject->isAuthoritative() ? "authoritative" : "proxy") : "", + static_cast(GameServer::getInstance().getProcessId()), + oldPosition_w.x, + oldPosition_w.y, + oldPosition_w.z, + newPosition_w.x, + newPosition_w.y, + newPosition_w.z + )); } // ---------------------------------------------------------------------- @@ -359,20 +344,20 @@ void ServerWorldNamespace::issueCollisionFarWarpWarning(Object const &object, Ve //-- Only issue these for authoritative server objects. Proxy server objects will hit this condition after an intra-planet teleport. // @todo allow proxies to know about a teleport and inform CollisionWorld so that we can always report these. - WARNING(!serverObject || serverObject->isAuthoritative(), + WARNING(!serverObject || serverObject->isAuthoritative(), ("CollisionWorld::update() had %d segments for object id=[%s], template=[%s], authority=[%s], game sever id=[%d], start position=[%.2f,%.2f,%.2f], end position=[%.2f,%.2f,%.2f], collision system will consider this a warp and adjust accordingly.", - segmentCount, - object.getNetworkId().getValueString().c_str(), - object.getObjectTemplateName(), - serverObject ? (serverObject->isAuthoritative() ? "authoritative" : "proxy") : "", - static_cast(GameServer::getInstance().getProcessId()), - oldPosition_w.x, - oldPosition_w.y, - oldPosition_w.z, - newPosition_w.x, - newPosition_w.y, - newPosition_w.z - )); + segmentCount, + object.getNetworkId().getValueString().c_str(), + object.getObjectTemplateName(), + serverObject ? (serverObject->isAuthoritative() ? "authoritative" : "proxy") : "", + static_cast(GameServer::getInstance().getProcessId()), + oldPosition_w.x, + oldPosition_w.y, + oldPosition_w.z, + newPosition_w.x, + newPosition_w.y, + newPosition_w.z + )); } // ---------------------------------------------------------------------- @@ -382,10 +367,9 @@ bool isRelevantToTriggerVolumes(Object const &object) return object.getObjectTemplate()->getId() == ServerCreatureObjectTemplate::ServerCreatureObjectTemplate_tag; } - // ---------------------------------------------------------------------- -class PlayerShipFilter: public SpatialSubdivisionFilter +class PlayerShipFilter : public SpatialSubdivisionFilter { public: PlayerShipFilter(ServerObject const *excludeObject) : @@ -402,23 +386,25 @@ private: ServerObject const *m_excludeObject; }; -class CreatureFilter: public SpatialSubdivisionFilter +class CreatureFilter : public SpatialSubdivisionFilter { public: CreatureFilter() {} bool operator() (ServerObject * const &object) const { - return (object->getObjectTemplate()->getId() == ServerCreatureObjectTemplate::ServerCreatureObjectTemplate_tag); } + return (object->getObjectTemplate()->getId() == ServerCreatureObjectTemplate::ServerCreatureObjectTemplate_tag); + } }; -class AuthoritativeNonPlayerCreatureFilter: public SpatialSubdivisionFilter +class AuthoritativeNonPlayerCreatureFilter : public SpatialSubdivisionFilter { public: AuthoritativeNonPlayerCreatureFilter() {} bool operator() (ServerObject * const &object) const { - return (object->isAuthoritative() && object->asCreatureObject() != nullptr && !object->isPlayerControlled()); } + return (object->isAuthoritative() && object->asCreatureObject() != nullptr && !object->isPlayerControlled()); + } }; -class TriggerVolumeFilter: public SpatialSubdivisionFilter +class TriggerVolumeFilter : public SpatialSubdivisionFilter { public: TriggerVolumeFilter() {} @@ -428,7 +414,7 @@ public: } }; -class TriggerVolumeFilterWithIgnoredObject: public SpatialSubdivisionFilter +class TriggerVolumeFilterWithIgnoredObject : public SpatialSubdivisionFilter { public: TriggerVolumeFilterWithIgnoredObject(ServerObject const &ignoredObject) : @@ -449,7 +435,7 @@ private: ServerObject const &m_ignoredObject; }; -class ServerObjectSphereExtentAccessor: public PortallizedSphereTreeAccessor +class ServerObjectSphereExtentAccessor : public PortallizedSphereTreeAccessor { public: @@ -464,12 +450,11 @@ public: { return getContainingPobForObjectInWorld(*NON_NULL(object)); } - }; //----------------------------------------------------------------------- -class TriggerVolumeSphereExtentAccessor: public PortallizedSphereTreeAccessor +class TriggerVolumeSphereExtentAccessor : public PortallizedSphereTreeAccessor { public: @@ -486,12 +471,11 @@ public: NOT_NULL(t); return getContainingPobForObjectInWorld(t->getOwner()); } - }; //----------------------------------------------------------------------- -class TriggerVolumeSphereExtentAccessor_Grid: public PortallizedSphereTreeAccessor +class TriggerVolumeSphereExtentAccessor_Grid : public PortallizedSphereTreeAccessor { public: @@ -508,14 +492,13 @@ public: NOT_NULL(t); return getContainingPobForObjectInWorld(t->getOwner()); } - }; //---------------------------------------------------------------------- -bool ServerWorld::m_installed = false; -Timer * ServerWorld::m_idleTimer = 0; -std::string * ServerWorld::m_sceneId = 0; +bool ServerWorld::m_installed = false; +Timer * ServerWorld::m_idleTimer = 0; +std::string * ServerWorld::m_sceneId = 0; SynchronizedWeatherGenerator * ServerWorld::m_weatherGenerator = 0; //----------------------------------------------------------------------- @@ -525,15 +508,12 @@ SynchronizedWeatherGenerator * ServerWorld::m_weatherGenerator = 0; // sphere extents. // // g_triggerSphereTree has a many to one relationship between trigger volumes -// and their owner objects. +// and their owner objects. PortallizedSphereTree *g_objectSphereTree = 0; PortallizedSphereTree *g_triggerSphereTree = 0; DoubleSphereGrid *g_triggerSphereGrid = 0; - - - // ---------------------------------------------------------------------- void ServerWorld::addIntangibleObject(Object * object) @@ -546,16 +526,16 @@ void ServerWorld::addIntangibleObject(Object * object) void ServerWorld::removeIntangibleObject(Object * object) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::removeIntangibleObject"); - IGNORE_RETURN( World::removeObject(object, static_cast(WOL_Intangible)) ); + IGNORE_RETURN(World::removeObject(object, static_cast(WOL_Intangible))); } //----------------------------------------------------------------------- void ServerWorld::addObjectToConcludeList(ServerObject * object) { - if(! gs_pendingConcludeLock) + if (!gs_pendingConcludeLock) { - if(object) + if (object) { gs_pendingConcludeVector.push_back(object); } @@ -570,18 +550,18 @@ void ServerWorld::addObjectToConcludeList(ServerObject * object) void ServerWorld::addTangibleObject(ServerObject * object) { - if(object) + if (object) { DEBUG_FATAL(object->isBeingDestroyed(), ("Destroyed objects should no longer be added back to the world, they should have Object::scheduleForAlter() called on them.")); - + DEBUG_FATAL(!object->getObjectType(), ("Attempt to add unknown object to world, aborting add, continuing to run (FIXME!)")); #ifdef _DEBUG if (object->getPosition_w() == Vector::zero && (!dynamic_cast(object))) { DEBUG_WARNING(true, ("Adding object to origin, probably an error. server id=[%d], object id=[%s], object template name=[%s]", - static_cast(GameServer::getInstance().getProcessId()), - object->getNetworkId().getValueString().c_str(), - object->getObjectTemplateName())); + static_cast(GameServer::getInstance().getProcessId()), + object->getNetworkId().getValueString().c_str(), + object->getObjectTemplateName())); } #endif if (object->getObjectType()) @@ -594,8 +574,9 @@ void ServerWorld::addTangibleObject(ServerObject * object) Sphere s = object->getSphereExtent(); float r = s.getRadius(); WARNING_STRICT_FATAL(r != r, ("Someone is adding object %s:%s to the world that has a sphere extent radius that is Not a Number!", object->getObjectTemplateName(), object->getNetworkId().getValueString().c_str())); - - if((r == r) && (s.getCenter() == s.getCenter())) // check for NaN in radius + + //what the fuck? + if ((r == r) && (s.getCenter() == s.getCenter())) // check for NaN in radius { //First put in object sphere tree g_objectSphereTree->onObjectAdded(object); @@ -608,30 +589,30 @@ void ServerWorld::addTangibleObject(ServerObject * object) int system = ConfigServerGame::getTriggerVolumeSystem(); // 0 = old, 1 = compare, 2 = new - if ( system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_find"); g_triggerSphereTree->findInRange(s.getCenter(), s.getRadius(), results); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_find"); - g_triggerSphereGrid->findInRange( s.getCenter(), s.getRadius(), results2); + g_triggerSphereGrid->findInRange(s.getCenter(), s.getRadius(), results2); } - if ( system == 1 ) + if (system == 1) { - compare_results( s.getCenter(), s.getRadius(), results,results2,object); + compare_results(s.getCenter(), s.getRadius(), results, results2, object); } - + // potential add to trigger volumes - if ( system != 2 ) + if (system != 2) { for (std::vector::const_iterator i = results.begin(); i != results.end(); ++i) (*i)->addObject(*object); } - else if ( system == 2 ) + else if (system == 2) { for (std::set::const_iterator i = results2.begin(); i != results2.end(); ++i) (*i)->addObject(*object); @@ -663,7 +644,7 @@ void ServerWorld::addUniverseObject(UniverseObject * object) void ServerWorld::removeUniverseObject(UniverseObject * object) { - IGNORE_RETURN( World::removeObject(object, static_cast(WOL_Intangible)) ); + IGNORE_RETURN(World::removeObject(object, static_cast(WOL_Intangible))); } //----------------------------------------------------------------------- @@ -671,19 +652,19 @@ void ServerWorld::removeUniverseObject(UniverseObject * object) void ServerWorld::addObjectTriggerVolume(TriggerVolume * triggerVolume) { int system = ConfigServerGame::getTriggerVolumeSystem(); // 0 = old, 1 = compare, 2 = new - if ( system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_add"); g_triggerSphereTree->onObjectAdded(triggerVolume); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_add"); g_triggerSphereGrid->onObjectAdded(triggerVolume); } - // query the object sphere tree for objects that will be added to + // query the object sphere tree for objects that will be added to // the trigger volume now that it has been added std::vector results; // This is filtered as appropriate for things which should be in trigger volumes @@ -696,7 +677,7 @@ void ServerWorld::addObjectTriggerVolume(TriggerVolume * triggerVolume) /** * Creates a new authoritative object. The object will be added to the world - * when we have received a signal that it has been persisted. + * when we have received a signal that it has been persisted. * NOTE: createNewObjectEnd must be called to complete the creation process. * * @param templateName template to create the object from @@ -724,7 +705,7 @@ ServerObject *ServerWorld::createNewObject(std::string const &templateName, Tran /** * Creates a new authoritative object. The object will be added to the world - * when we have received a signal that it has been persisted. + * when we have received a signal that it has been persisted. * NOTE: createNewObjectEnd must be called to complete the creation process. * * @param templateCrc template to create the object from @@ -752,7 +733,7 @@ ServerObject *ServerWorld::createNewObject(uint32 templateCrc, Transform const & /** * Creates a new authoritative object. The object will be added to the world - * when we have received a signal that it has been persisted. + * when we have received a signal that it has been persisted. * NOTE: createNewObjectEnd must be called to complete the creation process. * * @param objectTemplate template to create the object from @@ -826,7 +807,7 @@ ServerObject *ServerWorld::createNewObject(uint32 templateCrc, ServerObject &con //----------------------------------------------------------------------- /** - * Creates a new authoritative object in a conatiner. + * Creates a new authoritative object in a conatiner. * NOTE: createNewObjectEnd must be called to complete the creation process. * * @param objectTemplate template to create the object from @@ -842,7 +823,7 @@ ServerObject *ServerWorld::createNewObject(ServerObjectTemplate const &objectTem ServerObject * const newObject = createObjectFromTemplate(objectTemplate, NetworkId::cms_invalid); if (!newObject) return 0; - + return createNewObjectIntermediate(newObject, container, persisted, allowOverload); } @@ -855,7 +836,7 @@ ServerObject *ServerWorld::createNewObject(ServerObjectTemplate const &objectTem ServerObject * const newObject = createObjectFromTemplate(objectTemplate, NetworkId::cms_invalid); if (!newObject) return 0; - + return createNewObjectIntermediate(newObject, container, slotId, persisted); } @@ -880,8 +861,8 @@ ServerObject *ServerWorld::createNewObject(uint32 templateCrc, ServerObject &con PROFILER_AUTO_BLOCK_DEFINE("createNewObject6crc"); ServerObject * const newObject = createObjectFromTemplate(templateCrc, NetworkId::cms_invalid); - if (!newObject) - return 0; + if (!newObject) + return 0; return createNewObjectIntermediate(newObject, container, slotId, persisted); } @@ -900,14 +881,14 @@ ServerObject *ServerWorld::createNewObject(uint32 templateCrc, ServerObject &con * * @return the newly created schematic */ -ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( - const CachedNetworkId & creator, ServerObject & container, const SlotId & slotId, +ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic( + const CachedNetworkId & creator, ServerObject & container, const SlotId & slotId, bool persisted) { CreatureObject * const creature = dynamic_cast(creator.getObject()); if (creature == nullptr) return nullptr; - + PlayerObject * player = PlayerCreatureController::getPlayerObject(creature); if (player == nullptr) return nullptr; @@ -920,7 +901,7 @@ ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( if (manfSchematic == nullptr) return nullptr; - if (createNewObjectIntermediate(manfSchematic, container, slotId, + if (createNewObjectIntermediate(manfSchematic, container, slotId, persisted) == nullptr) { delete manfSchematic; @@ -943,10 +924,10 @@ ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( * * @return the newly created schematic */ -ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( +ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic( const DraftSchematicObject & source, const Vector & position, bool persisted) { - ManufactureSchematicObject * const manfSchematic = + ManufactureSchematicObject * const manfSchematic = source.createManufactureSchematic(CachedNetworkId::cms_cachedInvalid); if (manfSchematic == nullptr) return nullptr; @@ -975,10 +956,10 @@ ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( * * @return the newly created schematic */ -ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( +ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic( const DraftSchematicObject & source, ServerObject & container, bool persisted) { - ManufactureSchematicObject * const manfSchematic = + ManufactureSchematicObject * const manfSchematic = source.createManufactureSchematic(CachedNetworkId::cms_cachedInvalid); if (manfSchematic == nullptr) return nullptr; @@ -991,7 +972,7 @@ ManufactureSchematicObject* ServerWorld::createNewManufacturingSchematic ( //----------------------------------------------------------------------- /** - * Called by the two above createNewObjectStart functions. Done to provide a + * Called by the two above createNewObjectStart functions. Done to provide a * function for common code. * * @param newObject the new object being created @@ -1010,7 +991,7 @@ ServerObject* ServerWorld::createNewObjectIntermediate(ServerObject *newObject, WARNING_STRICT_FATAL(true, ("Tried to create an object with network id 0.")); return nullptr; } - + NetworkController *objectController = dynamic_cast(newObject->getController()); if (objectController == nullptr) objectController = dynamic_cast(newObject->createDefaultController()); @@ -1034,14 +1015,14 @@ ServerObject* ServerWorld::createNewObjectIntermediate(ServerObject *newObject, { newObject->persist(); } - + return newObject; } //----------------------------------------------------------------------- /** - * Called by the two above createNewObjectStart in container functions. Done to + * Called by the two above createNewObjectStart in container functions. Done to * provide a function for common code. * * @param newObject the new object being created @@ -1059,7 +1040,7 @@ ServerObject* ServerWorld::createNewObjectIntermediate(ServerObject* newObject, WARNING_STRICT_FATAL(true, ("Tried to create an object with network id 0.")); return nullptr; } - + NetworkController *objectController = dynamic_cast(newObject->getController()); if (objectController == nullptr) objectController = dynamic_cast(newObject->createDefaultController()); @@ -1072,7 +1053,7 @@ ServerObject* ServerWorld::createNewObjectIntermediate(ServerObject* newObject, // prevent initial object data from being re-sent as deltas newObject->clearDeltas(); - Container::ContainerErrorCode tmp = Container::CEC_Success; + Container::ContainerErrorCode tmp = Container::CEC_Success; if (!ContainerInterface::transferItemToGeneralContainer(container, *newObject, nullptr, tmp, allowOverload)) { IGNORE_RETURN(newObject->permanentlyDestroy(DeleteReasons::BadContainerTransfer)); @@ -1141,7 +1122,7 @@ ServerObject* ServerWorld::createNewObjectIntermediate(ServerObject* newObject, PROFILER_AUTO_BLOCK_DEFINE("successTransfer"); const ServerObjectTemplate * objectTemplate = safe_cast< const ServerObjectTemplate *>(newObject->getObjectTemplate()); - + if (persisted || objectTemplate->getPersistByDefault()) { newObject->persist(); @@ -1186,13 +1167,13 @@ ServerObject* ServerWorld::createProxyObject(uint32 templateCrc, const NetworkId ServerObject *newObject = createObjectFromTemplate(templateCrc, id); DEBUG_WARNING(newObject == 0, ("Failed to load object from template [%s]", ObjectTemplateList::lookUp(templateCrc).getString())); - if(newObject) + if (newObject) { ServerController *objectController = dynamic_cast(newObject->getController()); if (objectController == nullptr) objectController = dynamic_cast(newObject->createDefaultController()); NOT_NULL(objectController); - + // initialize the object if (createAuthoritative) newObject->setAuthority(); @@ -1204,7 +1185,7 @@ ServerObject* ServerWorld::createProxyObject(uint32 templateCrc, const NetworkId //----------------------------------------------------------------------- -void ServerWorld::debugDump () +void ServerWorld::debugDump() { World::debugReport(); } @@ -1230,9 +1211,9 @@ ServerObject * ServerWorld::findObjectByNetworkId(const NetworkId& id, bool sear UNREF(searchQueuedList); if (id.getValue() == 0) return 0; - + ServerObject * object = safe_cast(NetworkIdManager::getObjectById(id)); - if (object && ( !object->isInitialized() || object->isBeingDestroyed()) ) + if (object && (!object->isInitialized() || object->isBeingDestroyed())) return 0; return object; } @@ -1246,7 +1227,7 @@ ServerObject * ServerWorld::findUninitializedObjectByNetworkId(const NetworkId& DEBUG_REPORT_LOG(true, ("ERROR - Tried to invoke ServerWorld::findUninitializedObjectByNetworkId with id %s\n", id.getValueString().c_str())); return 0; } - + ServerObject * object = safe_cast(NetworkIdManager::getObjectById(id)); if (object && object->isInitialized()) { @@ -1265,12 +1246,12 @@ void ServerWorld::findObjectsInRange(const Vector & location, const float distan //----------------------------------------------------------------------- -class StaticCollidableObjectFilter: public SpatialSubdivisionFilter +class StaticCollidableObjectFilter : public SpatialSubdivisionFilter { public: StaticCollidableObjectFilter() {} - bool operator() (ServerObject * const &object) const - { + bool operator() (ServerObject * const &object) const + { CollisionProperty const * collision = object->getCollisionProperty(); if (!collision) return false; @@ -1286,7 +1267,6 @@ void ServerWorld::findStaticCollidableObjectsInRange(const Vector & location, co //----------------------------------------------------------------------- - void ServerWorld::findCreaturesInRange(const Vector & location, const float distance, std::vector & results) { g_objectSphereTree->findInRange(location, distance, CreatureFilter(), results); @@ -1301,13 +1281,13 @@ void ServerWorld::findAuthoritativeNonPlayerCreaturesInRange(const Vector & loca //----------------------------------------------------------------------- -class CreatureNicheFilter: public SpatialSubdivisionFilter +class CreatureNicheFilter : public SpatialSubdivisionFilter { public: - explicit CreatureNicheFilter(int i_type, int i_mask): type(i_type), mask(i_mask) { type &= mask; } - bool operator() (ServerObject * const &object) const - { - CreatureObject * creature = dynamic_cast(object); + explicit CreatureNicheFilter(int i_type, int i_mask) : type(i_type), mask(i_mask) { type &= mask; } + bool operator() (ServerObject * const &object) const + { + CreatureObject * creature = dynamic_cast(object); if (!creature) return false; return (creature->getNiche() & mask) == type; @@ -1327,12 +1307,12 @@ void ServerWorld::findCreaturesOfNicheInRange(const Vector & location, const flo //----------------------------------------------------------------------- -class CreatureSpeciesFilter: public SpatialSubdivisionFilter +class CreatureSpeciesFilter : public SpatialSubdivisionFilter { public: - explicit CreatureSpeciesFilter(int i_species): species(i_species) {} - bool operator() (ServerObject * const &object) const - { + explicit CreatureSpeciesFilter(int i_species) : species(i_species) {} + bool operator() (ServerObject * const &object) const + { CreatureObject * creature = object->asCreatureObject(); if (!creature) return false; @@ -1353,12 +1333,12 @@ void ServerWorld::findCreaturesOfSpeciesInRange(const Vector & location, const f //----------------------------------------------------------------------- -class CreatureRaceFilter: public SpatialSubdivisionFilter +class CreatureRaceFilter : public SpatialSubdivisionFilter { public: - explicit CreatureRaceFilter(int i_species, int i_race): species(i_species), race(i_race) {} - bool operator() (ServerObject * const &object) const - { + explicit CreatureRaceFilter(int i_species, int i_race) : species(i_species), race(i_race) {} + bool operator() (ServerObject * const &object) const + { CreatureObject * creature = dynamic_cast(object); if (!creature) return false; @@ -1379,12 +1359,12 @@ void ServerWorld::findCreaturesOfRaceInRange(const Vector & location, const floa //----------------------------------------------------------------------- -class NPCFilter: public SpatialSubdivisionFilter +class NPCFilter : public SpatialSubdivisionFilter { public: bool operator() (ServerObject * const &object) const { - CreatureObject *c=dynamic_cast(object); + CreatureObject *c = dynamic_cast(object); if (c) return !(c->isPlayerControlled()); else @@ -1402,12 +1382,12 @@ void ServerWorld::findNPCsInRange(const Vector & location, const float distance, //----------------------------------------------------------------------- -class PlayerFilter: public SpatialSubdivisionFilter +class PlayerFilter : public SpatialSubdivisionFilter { public: bool operator() (ServerObject * const &object) const { - CreatureObject *c=dynamic_cast(object); + CreatureObject *c = dynamic_cast(object); if (c) return (c->isPlayerControlled()); else @@ -1489,9 +1469,9 @@ static bool _isObjectInConeLoop(const Object & coneCenterObject, const Object & //-- return true if angle between forward and position_o is smaller than the cone angle - const float dotProduct = coneAxisVector.dot(testOrientation); - const bool withinCone = (dotProduct >= cosAngle); - + const float dotProduct = coneAxisVector.dot(testOrientation); + const bool withinCone = (dotProduct >= cosAngle); + return withinCone; } @@ -1505,8 +1485,8 @@ static bool _isObjectInConeLoop(const Object & coneCenterObject, const Object & * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findObjectsInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, +void ServerWorld::findObjectsInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, std::vector & results) { std::vector rangeResults; @@ -1543,8 +1523,8 @@ void ServerWorld::findObjectsInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findObjectsInCone(const Object & coneCenterObject, - const Location & coneDirection, float distance, +void ServerWorld::findObjectsInCone(const Object & coneCenterObject, + const Location & coneDirection, float distance, float angle, std::vector & results) { std::vector rangeResults; @@ -1580,7 +1560,7 @@ void ServerWorld::findObjectsInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, +void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, const Object & coneDirectionObject, float distance, float angle, std::vector & results) { @@ -1618,7 +1598,7 @@ void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, +void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, const Location & coneDirection, float distance, float angle, std::vector & results) { @@ -1655,7 +1635,7 @@ void ServerWorld::findCreaturesInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findAuthoritativeNonPlayerCreaturesInCone(const Object & coneCenterObject, +void ServerWorld::findAuthoritativeNonPlayerCreaturesInCone(const Object & coneCenterObject, const Object & coneDirectionObject, float distance, float angle, std::vector & results) { @@ -1692,8 +1672,8 @@ void ServerWorld::findAuthoritativeNonPlayerCreaturesInCone(const Object & coneC * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findCreaturesOfNicheInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, float angle, int niche, +void ServerWorld::findCreaturesOfNicheInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, int niche, int mask, std::vector & results) { std::vector rangeResults; @@ -1728,7 +1708,7 @@ void ServerWorld::findCreaturesOfNicheInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findCreaturesOfSpeciesInCone(const Object & coneCenterObject, +void ServerWorld::findCreaturesOfSpeciesInCone(const Object & coneCenterObject, const Object & coneDirectionObject, float distance, float angle, int species, std::vector & results) { @@ -1764,8 +1744,8 @@ void ServerWorld::findCreaturesOfSpeciesInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findCreaturesOfRaceInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, +void ServerWorld::findCreaturesOfRaceInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, int species, int race, std::vector & results) { std::vector rangeResults; @@ -1800,8 +1780,8 @@ void ServerWorld::findCreaturesOfRaceInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findNonCreaturesInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, float angle, +void ServerWorld::findNonCreaturesInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, std::vector & results) { std::vector rangeResults; @@ -1836,8 +1816,8 @@ void ServerWorld::findNonCreaturesInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findNPCsInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, +void ServerWorld::findNPCsInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, std::vector & results) { std::vector rangeResults; @@ -1872,8 +1852,8 @@ void ServerWorld::findNPCsInCone(const Object & coneCenterObject, * @param angle cone angle in radians * @param results vector to store the found objects in */ -void ServerWorld::findPlayerCreaturesInCone(const Object & coneCenterObject, - const Object & coneDirectionObject, float distance, +void ServerWorld::findPlayerCreaturesInCone(const Object & coneCenterObject, + const Object & coneDirectionObject, float distance, float angle, std::vector & results) { std::vector rangeResults; @@ -1931,15 +1911,12 @@ ServerObject *ServerWorld::findClosestPlayer(const Vector & location, float dist return findClosestObjectInList(location, candidates); } - - - -class PobFilter: public SpatialSubdivisionFilter +class PobFilter : public SpatialSubdivisionFilter { public: PobFilter() {} - bool operator() (ServerObject * const &object) const - { + bool operator() (ServerObject * const &object) const + { PortalProperty const * portal = object->getPortalProperty(); if (!portal) return false; @@ -1947,21 +1924,18 @@ public: } }; - ServerObject *ServerWorld::findPobAtLocation(const Vector & location_w) { std::vector candidates; g_objectSphereTree->findInRange(location_w, 0.1f, PobFilter(), candidates); return findClosestObjectInList(location_w, candidates); - } - CellProperty const * ServerWorld::findCellAtLocation(const Vector & location_w) { CellProperty const * cell = CellProperty::getWorldCellProperty(); - + ServerObject const * const pob = findPobAtLocation(location_w); if (pob) { @@ -1985,19 +1959,19 @@ CellProperty const * ServerWorld::findCellAtLocation(const Vector & location_w) ServerObject *ServerWorld::findClosestObjectInList(const Vector &location, const std::vector &candidates) { if (candidates.empty()) return nullptr; - + typedef std::vector CandidatesType; - - CandidatesType::const_iterator closest=candidates.begin(); - float minDistance =(*closest)->getPosition_w().magnitudeBetweenSquared(location); - - for (CandidatesType::const_iterator i=closest+1; i != candidates.end(); ++i) + + CandidatesType::const_iterator closest = candidates.begin(); + float minDistance = (*closest)->getPosition_w().magnitudeBetweenSquared(location); + + for (CandidatesType::const_iterator i = closest + 1; i != candidates.end(); ++i) { float distance = (*i)->getPosition_w().magnitudeBetweenSquared(location); if (distance < minDistance) { minDistance = distance; - closest=i; + closest = i; } } @@ -2006,7 +1980,7 @@ ServerObject *ServerWorld::findClosestObjectInList(const Vector &location, const //----------------------------------------------------------------------- -class NonCreatureFilter: public SpatialSubdivisionFilter +class NonCreatureFilter : public SpatialSubdivisionFilter { public: bool operator() (ServerObject * const &object) const { return dynamic_cast(object) == 0; } @@ -2064,7 +2038,7 @@ static void endCreateServerCellObject(Object *newObject) } cellObject->setLoadWith(portalObject->getNetworkId()); - + if (portalObject->isPersisted()) cellObject->persist(); } @@ -2075,13 +2049,13 @@ void ServerWorld::install() { DEBUG_FATAL(m_installed, ("Trying to reinstall ServerWorld")); - DebugFlags::registerFlag (ms_logTriggerStats, "ServerGame", "logTriggerStats"); + DebugFlags::registerFlag(ms_logTriggerStats, "ServerGame", "logTriggerStats"); - m_idleTimer = new Timer; - g_objectSphereTree = new PortallizedSphereTree; + m_idleTimer = new Timer; + g_objectSphereTree = new PortallizedSphereTree; - g_triggerSphereTree = new PortallizedSphereTree; - g_triggerSphereGrid = new DoubleSphereGrid; + g_triggerSphereTree = new PortallizedSphereTree; + g_triggerSphereGrid = new DoubleSphereGrid; s_numMoveLists = ConfigServerGame::getNumberOfMoveObjectLists(); for (int i = 0; i < s_numMoveLists; ++i) @@ -2089,7 +2063,7 @@ void ServerWorld::install() s_moveObjectList.push_back(new MoveObjectMap); } s_moveObjectListValid = true; - + PortalProperty::install(beginCreateServerCellObject, endCreateServerCellObject); { @@ -2110,13 +2084,13 @@ void ServerWorld::install() CollisionWorld::setNearWarpWarningCallback(issueCollisionNearWarpWarning); CollisionWorld::setFarWarpWarningCallback(issueCollisionFarWarpWarning); } - + Region3dMaster::install(); RegionMaster::install(); Pvp::install(); // must be done after RegionMaster::install() GameServerMessageArchive::install(); AiCombatPulseQueue::install(); - + // install the object templates ServerArmorTemplate::install(true); ServerBattlefieldMarkerObjectTemplate::install(true); @@ -2180,7 +2154,7 @@ void ServerWorld::install() FormManagerServer::install(); // install the world - World::install (); + World::install(); m_idleTimer->setExpireTime(1.0f); m_installed = true; @@ -2213,16 +2187,16 @@ void ServerWorld::updateTriggerDatabase(ServerObject & movingObject) for (ServerObject::TriggerVolumeMap::const_iterator v = volumes.begin(); v != volumes.end(); ++v) { int system = ConfigServerGame::getTriggerVolumeSystem(); // 0 = old, 1 = compare, 2 = new - if ( system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_move"); g_triggerSphereTree->onObjectMoved((*v).second); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_move"); - g_triggerSphereGrid->onObjectMoved((*v).second ); + g_triggerSphereGrid->onObjectMoved((*v).second); } } } @@ -2250,31 +2224,29 @@ void ServerWorld::triggerMovingObjects(ServerObject &movingObject, Vector const static std::vector results; static std::set results2; - int system = ConfigServerGame::getTriggerVolumeSystem(); // 0 = old, 1 = compare, 2 = new - if (system <= 1 ) + if (system <= 1) g_triggerSphereTree->findInRange(pob, Vector::zero, 16384.f, results); - if ( system >= 1 ) + if (system >= 1) g_triggerSphereGrid->findInRange(pob, Vector::zero, 16384.f, results2); - if ( system == 1 ) + if (system == 1) { DEBUG_FATAL(results.size() != results2.size(), ("SphereGrid failed (%d vs. %d).", results.size(), results2.size())); } - if ( system != 2) + if (system != 2) { for (std::vector::const_iterator i = results.begin(); i != results.end(); ++i) if ((*i) && &(*i)->getOwner() != &movingObject) (*i)->objectMoved(movingObject); } - else if ( system == 2 ) + else if (system == 2) { for (std::set::const_iterator i = results2.begin(); i != results2.end(); ++i) if ((*i) && &(*i)->getOwner() != &movingObject) (*i)->objectMoved(movingObject); - } results.clear(); @@ -2295,21 +2267,21 @@ void ServerWorld::triggerMovingObjects(ServerObject &movingObject, Vector const { Capsule const queryCapsule(start, end, extentSphereRadius); { - if (system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_find"); g_triggerSphereTree->findInRange(queryCapsule, results); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_find"); - g_triggerSphereGrid->findInRange( queryCapsule, results2); + g_triggerSphereGrid->findInRange(queryCapsule, results2); } - if ( system == 1 ) + if (system == 1) { - compare_results(queryCapsule, results,results2,&movingObject); + compare_results(queryCapsule, results, results2, &movingObject); } } } @@ -2318,32 +2290,32 @@ void ServerWorld::triggerMovingObjects(ServerObject &movingObject, Vector const PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::triggerMovingObject::findInRange (teleport)"); // We moved really far, so consider this a warp - if ( system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_find"); g_triggerSphereTree->findInRange(end, extentSphereRadius, results); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_find"); - g_triggerSphereGrid->findInRange( end, extentSphereRadius, results2); + g_triggerSphereGrid->findInRange(end, extentSphereRadius, results2); } - if ( system == 1 ) + if (system == 1) { - compare_results( end, extentSphereRadius, results,results2,&movingObject); + compare_results(end, extentSphereRadius, results, results2, &movingObject); } } - if ( system != 2 ) + if (system != 2) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::triggerMovingObject::loop"); for (std::vector::const_iterator i = results.begin(); i != results.end(); ++i) if ((*i) && &(*i)->getOwner() != &movingObject) (*i)->moveObject(movingObject, start, end); } - else if ( system == 2 ) + else if (system == 2) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::triggerMovingObject::loop"); for (std::set::const_iterator i = results2.begin(); i != results2.end(); ++i) @@ -2419,7 +2391,7 @@ void ServerWorld::triggerMovingTriggers(ServerObject &movingObject, Vector const if (object->getClient()) clcount++; } - + if (object != nullptr) t->moveTriggerVolume(*object, start, end); } @@ -2465,12 +2437,12 @@ void ServerWorld::moveObject(ServerObject & movingObject, const Vector & start, void ServerWorld::updateMoveObjectList() { DEBUG_FATAL(!s_moveObjectListValid, ("Cannot operate on uninitialized object list")); - + if (s_numMoveLists <= 0 || !s_moveObjectListValid) return; static int frameCounter = 0; - + s_moveObjectListLock = true; if (++frameCounter >= s_numMoveLists) frameCounter = 0; @@ -2486,20 +2458,19 @@ void ServerWorld::updateMoveObjectList() s_moveObjectListLock = false; } - //----------------------------------------------------------------------- void ServerWorld::internalMoveObject(ServerObject & movingObject, const Vector & start, const Vector & end) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::moveObject"); - - // check for NaN - if(start == start && end == end && movingObject.getSphereExtent().getRadius() == movingObject.getSphereExtent().getRadius()) + + // check for NaN + if (start == start && end == end && movingObject.getSphereExtent().getRadius() == movingObject.getSphereExtent().getRadius()) { updateObjectDatabase(movingObject); updateTriggerDatabase(movingObject); - triggerMovingObjects(movingObject,start,end); - triggerMovingTriggers(movingObject,start,end); + triggerMovingObjects(movingObject, start, end); + triggerMovingTriggers(movingObject, start, end); } else { @@ -2508,7 +2479,6 @@ void ServerWorld::internalMoveObject(ServerObject & movingObject, const Vector & DEBUG_FATAL(start != start, ("Object %s:%s is moving from an invalid start position (NaN)", movingObject.getObjectTemplateName(), movingObject.getNetworkId().getValueString().c_str())); DEBUG_FATAL(movingObject.getSphereExtent().getRadius() != movingObject.getSphereExtent().getRadius(), ("Object %s:%s has an invalid sphere extent radius %f", movingObject.getNetworkId().getValueString().c_str(), movingObject.getSphereExtent().getRadius())); } - } //------------------------------------------------------------------------------------------ @@ -2517,9 +2487,9 @@ void ServerWorld::remove() { DEBUG_FATAL(!m_installed, ("Trying to reremove ServerWorld")); - DebugFlags::unregisterFlag (ms_logTriggerStats); - - World::remove (); + DebugFlags::unregisterFlag(ms_logTriggerStats); + + World::remove(); delete m_sceneId; m_sceneId = 0; @@ -2533,7 +2503,7 @@ void ServerWorld::remove() g_triggerSphereGrid = 0; delete m_idleTimer; - m_idleTimer =0; + m_idleTimer = 0; delete m_weatherGenerator; m_weatherGenerator = 0; @@ -2560,13 +2530,13 @@ void ServerWorld::remove() void ServerWorld::removeObjectTriggerVolume(TriggerVolume * triggerVolume) { int system = ConfigServerGame::getTriggerVolumeSystem(); // 0 = old, 1 = compare, 2 = new - if ( system <= 1 ) + if (system <= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_tree_remove"); g_triggerSphereTree->onObjectRemoved(triggerVolume); } - if ( system >= 1 ) + if (system >= 1) { PROFILER_AUTO_BLOCK_DEFINE("sphere_grid_remove"); g_triggerSphereGrid->onObjectRemoved(triggerVolume); @@ -2581,7 +2551,7 @@ void ServerWorld::removeObjectFromGame(const ServerObject& object) PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::removeObjectFromGame"); FATAL(gs_pendingConcludeLock, ("Attempt to delete an object DURING CONCLUDE")); std::vector::iterator vf = std::find(gs_pendingConcludeVector.begin(), gs_pendingConcludeVector.end(), const_cast(&object)); - if(vf != gs_pendingConcludeVector.end()) + if (vf != gs_pendingConcludeVector.end()) { *vf = gs_pendingConcludeVector.back(); gs_pendingConcludeVector.pop_back(); @@ -2621,7 +2591,7 @@ void ServerWorld::removeTangibleObject(ServerObject *object) if (!object) return; - + if (!object->isInWorld()) { WARNING_STRICT_FATAL(!object->isInWorld(), ("Tried to remove an object that was not in the world!")); @@ -2681,12 +2651,12 @@ void ServerWorld::removeTangibleObject(ServerObject *object) for (TriggerVolume::ContentsSet::const_iterator objectIterator = contents.begin(); objectIterator != contents.end(); ++objectIterator) t->removeObject(**objectIterator); // Now remove the actual trigger volume - removeObjectTriggerVolume( t ); + removeObjectTriggerVolume(t); } // remove the object sphere g_objectSphereTree->onObjectRemoved(object); } - + { PROFILER_AUTO_BLOCK_DEFINE("removeTangibleObject - World::removeObject 2"); IGNORE_RETURN(World::removeObject(object, static_cast(WOL_Tangible))); @@ -2695,7 +2665,7 @@ void ServerWorld::removeTangibleObject(ServerObject *object) //If the object is a ref obejct, remove it. { PROFILER_AUTO_BLOCK_DEFINE("removeTangibleObject - removeReferenceObject"); - TerrainObject * const terrain = TerrainObject::getInstance (); + TerrainObject * const terrain = TerrainObject::getInstance(); if (terrain && terrain->isReferenceObject(object)) terrain->removeReferenceObject(object); } @@ -2706,7 +2676,7 @@ void ServerWorld::removeTangibleObject(ServerObject *object) void ServerWorld::update(real time) { DEBUG_FATAL(!m_installed, ("ServerWorld is NOT installed!")); - + //-- update network { PROFILER_AUTO_BLOCK_DEFINE("NetworkHandler::dispatch()"); @@ -2714,7 +2684,7 @@ void ServerWorld::update(real time) } // scheduler code - World::beginFrame (); + World::beginFrame(); { { PROFILER_AUTO_BLOCK_DEFINE("Alter"); @@ -2730,7 +2700,7 @@ void ServerWorld::update(real time) PROFILER_AUTO_BLOCK_DEFINE("CreatureObject::updateMissionRequestQueue"); CreatureObject::updateMissionRequestQueue(); } - + { PROFILER_AUTO_BLOCK_DEFINE("CreatureObject::runMissionCreationQueue"); CreatureObject::runMissionCreationQueue(); @@ -2868,10 +2838,10 @@ void ServerWorld::update(real time) PROFILER_AUTO_BLOCK_DEFINE("AiCombatPulseQueue::alter"); AiCombatPulseQueue::alter(time); } - - { + + { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::conclude"); - + ServerObject::concludeScriptVars(); static std::vector deferredConcludes; // for objects not initialized deferredConcludes.clear(); @@ -2879,10 +2849,10 @@ void ServerWorld::update(real time) if (!gs_pendingConcludeVector.empty()) { { - PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::emptyPending"); + PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::emptyPending"); std::vector::iterator concludeIter; gs_pendingConcludeLock = true; - for(concludeIter = gs_pendingConcludeVector.begin(); concludeIter != gs_pendingConcludeVector.end(); ++concludeIter) + for (concludeIter = gs_pendingConcludeVector.begin(); concludeIter != gs_pendingConcludeVector.end(); ++concludeIter) { ServerObject *o = (*concludeIter)->asServerObject(); WARNING_STRICT_FATAL(!o, ("nullptr object in conclude list!")); @@ -2898,28 +2868,28 @@ void ServerWorld::update(real time) gs_pendingConcludeLock = false; } { - PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::pendingConcludeOps"); + PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::pendingConcludeOps"); std::vector >::iterator po; - for(po = gs_pendingConcludeOpsVector.begin(); po != gs_pendingConcludeOpsVector.end(); ++po) + for (po = gs_pendingConcludeOpsVector.begin(); po != gs_pendingConcludeOpsVector.end(); ++po) { - switch((*po).first) + switch ((*po).first) { - case 0: - addObjectToConcludeList((*po).second); - break; - case 1: - removeObjectFromGame(*(*po).second); - break; - default: - break; + case 0: + addObjectToConcludeList((*po).second); + break; + case 1: + removeObjectFromGame(*(*po).second); + break; + default: + break; } } gs_pendingConcludeOpsVector.clear(); } { - PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::addDeferredConclude"); + PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::addDeferredConclude"); std::vector::iterator i; - for(i = deferredConcludes.begin(); i != deferredConcludes.end(); ++i) + for (i = deferredConcludes.begin(); i != deferredConcludes.end(); ++i) { addObjectToConcludeList(*i); } @@ -2945,16 +2915,16 @@ void ServerWorld::update(real time) weatherFrameCount = 10; std::string buffer; getWeather().debugPrint(buffer); - DEBUG_REPORT_LOG(true,("Weather data is %s\n",buffer.c_str())); - } -#endif + DEBUG_REPORT_LOG(true, ("Weather data is %s\n", buffer.c_str())); } +#endif +} updatePlanetServer(); LineOfSightCache::update(); - World::endFrame (); + World::endFrame(); } //----------------------------------------------------------------------- @@ -2969,28 +2939,28 @@ const std::string &ServerWorld::getSceneId() const ObjectNotification &ServerWorld::getTangibleNotification() { - return ServerWorldTangibleNotification::getInstance (); + return ServerWorldTangibleNotification::getInstance(); } //----------------------------------------------------------------------- const ObjectNotification &ServerWorld::getTerrainObjectNotification() { - return ServerWorldTerrainObjectNotification::getInstance (); + return ServerWorldTerrainObjectNotification::getInstance(); } //----------------------------------------------------------------------- const ObjectNotification &ServerWorld::getIntangibleNotification() { - return ServerWorldIntangibleNotification::getInstance (); + return ServerWorldIntangibleNotification::getInstance(); } //----------------------------------------------------------------------- const ObjectNotification &ServerWorld::getUniverseNotification() { - return ServerWorldUniverseNotification::getInstance (); + return ServerWorldUniverseNotification::getInstance(); } //------------------------------------------------------------------- @@ -3022,12 +2992,12 @@ void ServerWorld::removeLoadBeacon(const TangibleObject * loadBeacon) bool ServerWorld::isInLoadBeaconRange(const Vector & worldPosition) { std::vector::const_iterator i; - for(i = ServerWorldNamespace::s_loadBeaconEntries.begin(); i != ServerWorldNamespace::s_loadBeaconEntries.end(); ++i) + for (i = ServerWorldNamespace::s_loadBeaconEntries.begin(); i != ServerWorldNamespace::s_loadBeaconEntries.end(); ++i) { float radius = static_cast((*i)->getInterestRadius()) + 300.0f; radius = radius * radius * 2; Vector beaconPosition = (*i)->getTransform_o2w().getPosition_p(); - if(beaconPosition.magnitudeBetweenSquared(worldPosition) < radius) + if (beaconPosition.magnitudeBetweenSquared(worldPosition) < radius) return true; } return false; @@ -3036,7 +3006,7 @@ bool ServerWorld::isInLoadBeaconRange(const Vector & worldPosition) //----------------------------------------------------------------------- /** - * Finds a "good" location in the world where we can place an object. Good is + * Finds a "good" location in the world where we can place an object. Good is * defined as a resonably flat area, not in water, where the object being placed * won't intersect other objects. The caller may disable the slope or water check * if they want. @@ -3048,69 +3018,69 @@ bool ServerWorld::isInLoadBeaconRange(const Vector & worldPosition) * @param dontCheckWater flag to skip the underwater check * @param dontCheckSlope flag to skip the slope check * - * @return a position in the world where the object can be placed, or 0 0 0 if + * @return a position in the world where the object can be placed, or 0 0 0 if * there is no valid position */ -Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, - const Vector & searchRectLowerLeftLocation, - const Vector & searchRectUpperRightLocation, +Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, + const Vector & searchRectLowerLeftLocation, + const Vector & searchRectUpperRightLocation, bool dontCheckWater, bool dontCheckSlope) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::getGoodLocation"); Vector goodLocation; - TerrainObject const * const terrainObject = TerrainObject::getInstance (); + TerrainObject const * const terrainObject = TerrainObject::getInstance(); if (!terrainObject) { - DEBUG_WARNING (true, ("getGoodLocation (): PB there is no terrain system")); + DEBUG_WARNING(true, ("getGoodLocation (): PB there is no terrain system")); return goodLocation; } - LotManager const * const lotManager = ServerWorld::getConstLotManager (); + LotManager const * const lotManager = ServerWorld::getConstLotManager(); if (!lotManager) { - DEBUG_WARNING (true, ("getGoodLocation (): PB there is no lot system")); + DEBUG_WARNING(true, ("getGoodLocation (): PB there is no lot system")); return goodLocation; } //build searching rectangles from the given locations const float minimum = -8192.f + 512.f; - const float maximum = 8192.f - 512.f; + const float maximum = 8192.f - 512.f; Rectangle2d searchRect; searchRect.x0 = searchRectLowerLeftLocation.x; - searchRect.x0 = clamp (minimum, searchRectLowerLeftLocation.x, maximum); + searchRect.x0 = clamp(minimum, searchRectLowerLeftLocation.x, maximum); searchRect.y0 = searchRectLowerLeftLocation.z; - searchRect.y0 = clamp (minimum, searchRectLowerLeftLocation.z, maximum); + searchRect.y0 = clamp(minimum, searchRectLowerLeftLocation.z, maximum); searchRect.x1 = searchRectUpperRightLocation.x; - searchRect.x1 = clamp (minimum, searchRectUpperRightLocation.x, maximum); + searchRect.x1 = clamp(minimum, searchRectUpperRightLocation.x, maximum); searchRect.y1 = searchRectUpperRightLocation.z; - searchRect.y1 = clamp (minimum, searchRectUpperRightLocation.z, maximum); + searchRect.y1 = clamp(minimum, searchRectUpperRightLocation.z, maximum); //validate scripter-input rectangle areas > 0 if (searchRect.x0 > searchRect.x1) { - DEBUG_WARNING (true, ("getGoodLocation (): DB searchRect.x0 (%1.2f) > searchRect.x1 (%1.2f)", searchRect.x0, searchRect.x1)); + DEBUG_WARNING(true, ("getGoodLocation (): DB searchRect.x0 (%1.2f) > searchRect.x1 (%1.2f)", searchRect.x0, searchRect.x1)); return goodLocation; } if (searchRect.y0 > searchRect.y1) { - DEBUG_WARNING (true, ("getGoodLocation (): DB searchRect.z0 (%1.2f) > searchRect.z1 (%1.2f)", searchRect.y0, searchRect.y1)); + DEBUG_WARNING(true, ("getGoodLocation (): DB searchRect.z0 (%1.2f) > searchRect.z1 (%1.2f)", searchRect.y0, searchRect.y1)); return goodLocation; } //validate that the area we want to find is smaller than our search area if (areaSizeX > searchRect.getWidth()) { - DEBUG_WARNING (true, ("getGoodLocation (): DB goal rectangle x (%1.2f) is larger than our search rectangle width (%1.2f)", areaSizeX, searchRect.getWidth())); + DEBUG_WARNING(true, ("getGoodLocation (): DB goal rectangle x (%1.2f) is larger than our search rectangle width (%1.2f)", areaSizeX, searchRect.getWidth())); return goodLocation; } if (areaSizeZ > searchRect.getHeight()) { - DEBUG_WARNING (true, ("getGoodLocation (): DB goal rectangle y (%1.2f) is larger than our search rectangle height (%1.2f)", areaSizeZ, searchRect.getHeight())); + DEBUG_WARNING(true, ("getGoodLocation (): DB goal rectangle y (%1.2f) is larger than our search rectangle height (%1.2f)", areaSizeZ, searchRect.getHeight())); return goodLocation; } @@ -3127,9 +3097,9 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, static std::vector yRange; xRange.clear(); yRange.clear(); - for(int i = 0; i < numRows; ++i) + for (int i = 0; i < numRows; ++i) xRange.push_back(i); - for(int j = 0; j < numCols; ++j) + for (int j = 0; j < numCols; ++j) yRange.push_back(j); std::random_shuffle(xRange.begin(), xRange.end()); @@ -3138,9 +3108,9 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, Rectangle2d successRect; bool success = false; Rectangle2d currentRect; - for(std::vector::iterator it_x = xRange.begin(); it_x != xRange.end() && !success; ++it_x) + for (std::vector::iterator it_x = xRange.begin(); it_x != xRange.end() && !success; ++it_x) { - for(std::vector::iterator it_y = yRange.begin(); it_y != yRange.end() && !success; ++it_y) + for (std::vector::iterator it_y = yRange.begin(); it_y != yRange.end() && !success; ++it_y) { currentRect = startingRect; @@ -3148,13 +3118,13 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, currentRect.translate(*it_x * areaSizeX, *it_y * areaSizeZ); //the rectangle is a "good location" if it has neither water nor a steep slope - if (!dontCheckWater && terrainObject->getWater (currentRect)) + if (!dontCheckWater && terrainObject->getWater(currentRect)) continue; - if (!dontCheckSlope && terrainObject->getSlope (currentRect)) + if (!dontCheckSlope && terrainObject->getSlope(currentRect)) continue; - if (!lotManager->canPlace (currentRect)) + if (!lotManager->canPlace(currentRect)) continue; success = true; @@ -3168,7 +3138,7 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, //validate that our success point lies within the search area (debugging tests) if (successRect.x0 < searchRect.x0 || successRect.x1 > searchRect.x1 || successRect.y0 < searchRect.y0 || successRect.y1 > searchRect.y1) { - DEBUG_WARNING (true, ("getGoodLocation (): PB result does not fit within the search location")); + DEBUG_WARNING(true, ("getGoodLocation (): PB result does not fit within the search location")); return goodLocation; } @@ -3178,7 +3148,7 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, //conver that point into a location-friendly 3d point goodLocation = Vector(successLoc2d.x, 0.f, successLoc2d.y); - IGNORE_RETURN( terrainObject->getHeightForceChunkCreation(goodLocation, goodLocation.y) ); + IGNORE_RETURN(terrainObject->getHeightForceChunkCreation(goodLocation, goodLocation.y)); return goodLocation; } // ServerWorld::getGoodLocation @@ -3186,7 +3156,7 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, //----------------------------------------------------------------------- /** -* Finds a "good" location in the world where we can place an object. Good is +* Finds a "good" location in the world where we can place an object. Good is * defined as a resonably flat area, not in water, where the object being placed * won't intersect other objects. The caller may disable the slope or water check * if they want. This function checks for nearby collidable static objects as well. @@ -3199,69 +3169,69 @@ Vector ServerWorld::getGoodLocation(float areaSizeX, float areaSizeZ, * @param dontCheckSlope flag to skip the slope check * @param minStaticObjDistance the minimum distance a static object must be away from a "good" location * -* @return a position in the world where the object can be placed, or 0 0 0 if +* @return a position in the world where the object can be placed, or 0 0 0 if * there is no valid position */ -Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaSizeZ, - const Vector & searchRectLowerLeftLocation, - const Vector & searchRectUpperRightLocation, - bool dontCheckWater, bool dontCheckSlope, float minStaticObjDistance) +Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaSizeZ, + const Vector & searchRectLowerLeftLocation, + const Vector & searchRectUpperRightLocation, + bool dontCheckWater, bool dontCheckSlope, float minStaticObjDistance) { PROFILER_AUTO_BLOCK_DEFINE("ServerWorld::getGoodLocation"); Vector goodLocation; - TerrainObject const * const terrainObject = TerrainObject::getInstance (); + TerrainObject const * const terrainObject = TerrainObject::getInstance(); if (!terrainObject) { - DEBUG_WARNING (true, ("getGoodLocation (): PB there is no terrain system")); + DEBUG_WARNING(true, ("getGoodLocation (): PB there is no terrain system")); return goodLocation; } - LotManager const * const lotManager = ServerWorld::getConstLotManager (); + LotManager const * const lotManager = ServerWorld::getConstLotManager(); if (!lotManager) { - DEBUG_WARNING (true, ("getGoodLocation (): PB there is no lot system")); + DEBUG_WARNING(true, ("getGoodLocation (): PB there is no lot system")); return goodLocation; } //build searching rectangles from the given locations const float minimum = -8192.f + 512.f; - const float maximum = 8192.f - 512.f; + const float maximum = 8192.f - 512.f; Rectangle2d searchRect; searchRect.x0 = searchRectLowerLeftLocation.x; - searchRect.x0 = clamp (minimum, searchRectLowerLeftLocation.x, maximum); + searchRect.x0 = clamp(minimum, searchRectLowerLeftLocation.x, maximum); searchRect.y0 = searchRectLowerLeftLocation.z; - searchRect.y0 = clamp (minimum, searchRectLowerLeftLocation.z, maximum); + searchRect.y0 = clamp(minimum, searchRectLowerLeftLocation.z, maximum); searchRect.x1 = searchRectUpperRightLocation.x; - searchRect.x1 = clamp (minimum, searchRectUpperRightLocation.x, maximum); + searchRect.x1 = clamp(minimum, searchRectUpperRightLocation.x, maximum); searchRect.y1 = searchRectUpperRightLocation.z; - searchRect.y1 = clamp (minimum, searchRectUpperRightLocation.z, maximum); + searchRect.y1 = clamp(minimum, searchRectUpperRightLocation.z, maximum); //validate scripter-input rectangle areas > 0 if (searchRect.x0 > searchRect.x1) { - DEBUG_WARNING (true, ("getGoodLocation (): DB searchRect.x0 (%1.2f) > searchRect.x1 (%1.2f)", searchRect.x0, searchRect.x1)); + DEBUG_WARNING(true, ("getGoodLocation (): DB searchRect.x0 (%1.2f) > searchRect.x1 (%1.2f)", searchRect.x0, searchRect.x1)); return goodLocation; } if (searchRect.y0 > searchRect.y1) { - DEBUG_WARNING (true, ("getGoodLocation (): DB searchRect.z0 (%1.2f) > searchRect.z1 (%1.2f)", searchRect.y0, searchRect.y1)); + DEBUG_WARNING(true, ("getGoodLocation (): DB searchRect.z0 (%1.2f) > searchRect.z1 (%1.2f)", searchRect.y0, searchRect.y1)); return goodLocation; } //validate that the area we want to find is smaller than our search area if (areaSizeX > searchRect.getWidth()) { - DEBUG_WARNING (true, ("getGoodLocation (): DB goal rectangle x (%1.2f) is larger than our search rectangle width (%1.2f)", areaSizeX, searchRect.getWidth())); + DEBUG_WARNING(true, ("getGoodLocation (): DB goal rectangle x (%1.2f) is larger than our search rectangle width (%1.2f)", areaSizeX, searchRect.getWidth())); return goodLocation; } if (areaSizeZ > searchRect.getHeight()) { - DEBUG_WARNING (true, ("getGoodLocation (): DB goal rectangle y (%1.2f) is larger than our search rectangle height (%1.2f)", areaSizeZ, searchRect.getHeight())); + DEBUG_WARNING(true, ("getGoodLocation (): DB goal rectangle y (%1.2f) is larger than our search rectangle height (%1.2f)", areaSizeZ, searchRect.getHeight())); return goodLocation; } @@ -3278,9 +3248,9 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS static std::vector yRange; xRange.clear(); yRange.clear(); - for(int i = 0; i < numRows; ++i) + for (int i = 0; i < numRows; ++i) xRange.push_back(i); - for(int j = 0; j < numCols; ++j) + for (int j = 0; j < numCols; ++j) yRange.push_back(j); std::random_shuffle(xRange.begin(), xRange.end()); @@ -3289,9 +3259,9 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS Rectangle2d successRect; bool success = false; Rectangle2d currentRect; - for(std::vector::iterator it_x = xRange.begin(); it_x != xRange.end() && !success; ++it_x) + for (std::vector::iterator it_x = xRange.begin(); it_x != xRange.end() && !success; ++it_x) { - for(std::vector::iterator it_y = yRange.begin(); it_y != yRange.end() && !success; ++it_y) + for (std::vector::iterator it_y = yRange.begin(); it_y != yRange.end() && !success; ++it_y) { currentRect = startingRect; @@ -3299,15 +3269,15 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS currentRect.translate(*it_x * areaSizeX, *it_y * areaSizeZ); //the rectangle is a "good location" if it has neither water nor a steep slope - if (!dontCheckWater && terrainObject->getWater (currentRect)) + if (!dontCheckWater && terrainObject->getWater(currentRect)) continue; - if (!dontCheckSlope && terrainObject->getSlope (currentRect)) + if (!dontCheckSlope && terrainObject->getSlope(currentRect)) continue; - if (!lotManager->canPlace (currentRect)) + if (!lotManager->canPlace(currentRect)) continue; - + // Look for nearby static collidable objects. std::vector collidables; Vector2d Loc2d = currentRect.getCenter(); @@ -3315,7 +3285,7 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS ServerWorld::findStaticCollidableObjectsInRange(checkLoc, minStaticObjDistance, collidables); - if(!collidables.empty()) + if (!collidables.empty()) continue; success = true; @@ -3329,7 +3299,7 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS //validate that our success point lies within the search area (debugging tests) if (successRect.x0 < searchRect.x0 || successRect.x1 > searchRect.x1 || successRect.y0 < searchRect.y0 || successRect.y1 > searchRect.y1) { - DEBUG_WARNING (true, ("getGoodLocation (): PB result does not fit within the search location")); + DEBUG_WARNING(true, ("getGoodLocation (): PB result does not fit within the search location")); return goodLocation; } @@ -3339,7 +3309,7 @@ Vector ServerWorld::getGoodLocationAvoidCollidables(float areaSizeX, float areaS //convert that point into a location-friendly 3d point goodLocation = Vector(successLoc2d.x, 0.f, successLoc2d.y); - IGNORE_RETURN( terrainObject->getHeightForceChunkCreation(goodLocation, goodLocation.y) ); + IGNORE_RETURN(terrainObject->getHeightForceChunkCreation(goodLocation, goodLocation.y)); return goodLocation; } // ServerWorld::getGoodLocationAvoidCollidables @@ -3386,8 +3356,8 @@ bool ServerWorld::isSpaceScene() { if (!s_checkedForSpaceScene) { - s_spaceScene=(strncmp("space_",getSceneId().c_str(),6)==0); - s_checkedForSpaceScene=true; + s_spaceScene = (strncmp("space_", getSceneId().c_str(), 6) == 0); + s_checkedForSpaceScene = true; } return s_spaceScene; @@ -3577,5 +3547,4 @@ void ServerWorldNamespace::updatePlanetServer() } } -// ====================================================================== - +// ====================================================================== \ No newline at end of file diff --git a/engine/server/library/serverGame/src/shared/objectTemplate/ServerXpManagerObjectTemplate.cpp b/engine/server/library/serverGame/src/shared/objectTemplate/ServerXpManagerObjectTemplate.cpp index 0ea899e7..332585f5 100755 --- a/engine/server/library/serverGame/src/shared/objectTemplate/ServerXpManagerObjectTemplate.cpp +++ b/engine/server/library/serverGame/src/shared/objectTemplate/ServerXpManagerObjectTemplate.cpp @@ -29,15 +29,15 @@ const TriggerVolumeData DefaultTriggerVolumeData; bool ServerXpManagerObjectTemplate::ms_allowDefaultTemplateParams = true; - /** * Class constructor. */ ServerXpManagerObjectTemplate::ServerXpManagerObjectTemplate(const std::string & filename) //@BEGIN TFD INIT : ServerUniverseObjectTemplate(filename) - ,m_versionOk(true) -//@END TFD INIT + , m_versionOk(true) + , m_templateVersion(0) + //@END TFD INIT { } // ServerXpManagerObjectTemplate::ServerXpManagerObjectTemplate @@ -46,8 +46,8 @@ ServerXpManagerObjectTemplate::ServerXpManagerObjectTemplate(const std::string & */ ServerXpManagerObjectTemplate::~ServerXpManagerObjectTemplate() { -//@BEGIN TFD CLEANUP -//@END TFD CLEANUP + //@BEGIN TFD CLEANUP + //@END TFD CLEANUP } // ServerXpManagerObjectTemplate::~ServerXpManagerObjectTemplate /** @@ -110,7 +110,7 @@ Tag ServerXpManagerObjectTemplate::getHighestTemplateVersion(void) const */ Object * ServerXpManagerObjectTemplate::createObject(void) const { -// return new XpManagerObject(this); + // return new XpManagerObject(this); return nullptr; } // ServerXpManagerObjectTemplate::createObject @@ -124,8 +124,8 @@ Object * ServerXpManagerObjectTemplate::createObject(void) const */ void ServerXpManagerObjectTemplate::load(Iff &file) { -static const int MAX_NAME_SIZE = 256; -char paramName[MAX_NAME_SIZE]; + static const int MAX_NAME_SIZE = 256; + char paramName[MAX_NAME_SIZE]; if (file.getCurrentName() != ServerXpManagerObjectTemplate_tag) { @@ -135,7 +135,7 @@ char paramName[MAX_NAME_SIZE]; file.enterForm(); m_templateVersion = file.getCurrentName(); - if (m_templateVersion == TAG(D,E,R,V)) + if (m_templateVersion == TAG(D, E, R, V)) { file.enterForm(); file.enterChunk(); @@ -155,10 +155,8 @@ char paramName[MAX_NAME_SIZE]; file.exitForm(); m_templateVersion = file.getCurrentName(); } - if (getHighestTemplateVersion() != TAG(0,0,0,0)) + if (getHighestTemplateVersion() != TAG(0, 0, 0, 0)) { - - m_versionOk = false; } @@ -176,4 +174,4 @@ char paramName[MAX_NAME_SIZE]; return; } // ServerXpManagerObjectTemplate::load -//@END TFD +//@END TFD \ No newline at end of file diff --git a/engine/server/library/serverKeyShare/src/shared/KeyShare.cpp b/engine/server/library/serverKeyShare/src/shared/KeyShare.cpp index fc46f736..7c92da55 100755 --- a/engine/server/library/serverKeyShare/src/shared/KeyShare.cpp +++ b/engine/server/library/serverKeyShare/src/shared/KeyShare.cpp @@ -2,7 +2,6 @@ // copyright 2000 Verant Interactive // Author: Justin Randall - //----------------------------------------------------------------------- #include "serverKeyShare/FirstServerKeyShare.h" @@ -13,13 +12,13 @@ //----------------------------------------------------------------------- -KeyShare::Token::Token(const unsigned char * const newCipherData, - const uint32 newDataLen, - const unsigned char newDigest[KeyShareConstants::keyLength], - const uint32 newCipherDataLen) : -cipherData(0), -cipherDataLen(newCipherDataLen), -dataLen(newDataLen) +KeyShare::Token::Token(const unsigned char * const newCipherData, + const uint32 newDataLen, + const unsigned char newDigest[KeyShareConstants::keyLength], + const uint32 newCipherDataLen) : + cipherData(0), + cipherDataLen(newCipherDataLen), + dataLen(newDataLen) { cipherData = new unsigned char[cipherDataLen]; memcpy(cipherData, newCipherData, cipherDataLen); @@ -29,9 +28,9 @@ dataLen(newDataLen) //----------------------------------------------------------------------- KeyShare::Token::Token(const Token & source) : -cipherData(0), -cipherDataLen(source.cipherDataLen), -dataLen(source.dataLen) + cipherData(0), + cipherDataLen(source.cipherDataLen), + dataLen(source.dataLen) { cipherData = new unsigned char[cipherDataLen]; memcpy(cipherData, source.cipherData, cipherDataLen); @@ -39,25 +38,25 @@ dataLen(source.dataLen) } //----------------------------------------------------------------------- - + KeyShare::Token::Token(Archive::ReadIterator & source) : -cipherData(0), -cipherDataLen(0), -dataLen(0) + cipherData(0), + cipherDataLen(0), + dataLen(0) { Archive::get(source, cipherDataLen); // if the cipher data has been tampered with, don't unpack it. The vaidation will fail - if(cipherDataLen < 64) + if (cipherDataLen < 64) { Archive::get(source, dataLen); cipherData = new unsigned char[cipherDataLen]; unsigned int i; - for(i = 0; i < cipherDataLen; i ++) + for (i = 0; i < cipherDataLen; i++) { Archive::get(source, cipherData[i]); } - for(i = 0; i < KeyShareConstants::keyLength; i ++) + for (i = 0; i < KeyShareConstants::keyLength; i++) { Archive::get(source, digest[i]); } @@ -112,11 +111,11 @@ void KeyShare::Token::pack(Archive::ByteStream & target) const Archive::put(target, cipherDataLen); Archive::put(target, dataLen); unsigned int i; - for(i = 0; i < cipherDataLen; i ++) + for (i = 0; i < cipherDataLen; i++) { Archive::put(target, cipherData[i]); } - for(i = 0; i < KeyShareConstants::keyLength; i ++) + for (i = 0; i < KeyShareConstants::keyLength; i++) { Archive::put(target, digest[i]); } @@ -125,17 +124,17 @@ void KeyShare::Token::pack(Archive::ByteStream & target) const //----------------------------------------------------------------------- KeyShare::KeyShare(const unsigned int newKeyCount) : -decryptors(0), -encryptors(0), -hasher(0), -keyCount(newKeyCount), -keys(0) + decryptors(0), + encryptors(0), + hasher(0), + keyCount(newKeyCount), + keys(0) { keys = new Key[keyCount]; decryptors = new Crypto::TwofishDecryptor *[keyCount]; encryptors = new Crypto::TwofishEncryptor *[keyCount]; - for(unsigned int i = 0; i < keyCount; i ++) + for (unsigned int i = 0; i < keyCount; i++) { decryptors[i] = 0; encryptors[i] = 0; @@ -148,7 +147,7 @@ keys(0) KeyShare::~KeyShare() { delete[] keys; - for(unsigned int i = 0; i < keyCount; i ++) + for (unsigned int i = 0; i < keyCount; i++) { delete decryptors[i]; delete encryptors[i]; @@ -164,7 +163,7 @@ KeyShare::~KeyShare() bool KeyShare::decipherToken(const KeyShare::Token & token, unsigned char * clearTextData, uint32 & dataLen) const { bool result = false; - if(dataLen < token.getDataLen()) + if (dataLen < token.getDataLen()) { dataLen = token.getDataLen(); } @@ -175,10 +174,10 @@ bool KeyShare::decipherToken(const KeyShare::Token & token, unsigned char * clea unsigned char * clearText = new unsigned char[cipherDataLen]; memcpy(cipherText, token.getData(), cipherDataLen); - for(unsigned int i = 0; i < keyCount; i ++) + for (unsigned int i = 0; i < keyCount; i++) { DEBUG_REPORT_LOG(true, ("Decrypting with key: ")); - for(uint32 j = 0; j < 16; j ++) + for (uint32 j = 0; j < 16; j++) { DEBUG_REPORT_LOG(true, ("[%3i] ", keys[i].value[j])); } @@ -193,10 +192,10 @@ bool KeyShare::decipherToken(const KeyShare::Token & token, unsigned char * clea NOT_NULL(hasher); result = hasher->verify(digest, clearTextData, dataLen); - if(result) + if (result) { DEBUG_REPORT_LOG(true, ("succeeded\n")); - + break; } else @@ -215,14 +214,14 @@ bool KeyShare::decipherToken(const KeyShare::Token & token, unsigned char * clea void KeyShare::decrypt(const unsigned char * const sourceBuffer, const uint32 sourceBufferSize, unsigned char * resultBuffer, const uint32 keyIndex) const { const uint32 blockSize = decryptors[0]->getBlockSize(); - unsigned char * inBlock = new unsigned char [blockSize]; - unsigned char * outBlock = new unsigned char [blockSize]; + unsigned char * inBlock = new unsigned char[blockSize]; + unsigned char * outBlock = new unsigned char[blockSize]; memset(resultBuffer, 0, sourceBufferSize); - for(uint32 i = 0; i < sourceBufferSize; i += blockSize) + for (uint32 i = 0; i < sourceBufferSize; i += blockSize) { - if(i + blockSize > sourceBufferSize) + if (i + blockSize > sourceBufferSize) memcpy(inBlock, &sourceBuffer[i], sourceBufferSize - i); else memcpy(inBlock, &sourceBuffer[i], blockSize); @@ -241,7 +240,7 @@ const uint32 KeyShare::encrypt(const unsigned char * const sourceData, const uin const uint32 blockSize = encryptors[0]->getBlockSize(); // calculate the size of the encrypted result buffer - if(sourceDataSize % blockSize) + if (sourceDataSize % blockSize) { // if it's larger than some multiple of the cipher block size .... i = static_cast((sourceDataSize / blockSize) + 1) * blockSize; @@ -251,22 +250,22 @@ const uint32 KeyShare::encrypt(const unsigned char * const sourceData, const uin // it's already aligned on the cipher block byte boundary i = sourceDataSize; } - *resultBuffer = new unsigned char [i]; + *resultBuffer = new unsigned char[i]; DEBUG_REPORT_LOG(true, ("Encrypting with key: ")); - for(i = 0; i < 16; i ++) + for (i = 0; i < 16; i++) { DEBUG_REPORT_LOG(true, ("[%3i] ", keys[0].value[i])); } DEBUG_REPORT_LOG(true, ("\n")); - - unsigned char * inBlock = new unsigned char [blockSize]; - unsigned char * outBlock = new unsigned char [blockSize]; - for(i = 0; i < sourceDataSize; i += 16) + unsigned char * inBlock = new unsigned char[blockSize]; + unsigned char * outBlock = new unsigned char[blockSize]; + + for (i = 0; i < sourceDataSize; i += 16) { memset(inBlock, 0, KeyShareConstants::keyLength); - if(i + blockSize > sourceDataSize) + if (i + blockSize > sourceDataSize) memcpy(inBlock, &sourceData[i], sourceDataSize - i); else memcpy(inBlock, &sourceData[i], KeyShareConstants::keyLength); @@ -283,10 +282,9 @@ const uint32 KeyShare::encrypt(const unsigned char * const sourceData, const uin bool KeyShare::hasKey(const Key & source) { - for(unsigned int i = 0; i < getKeyCount(); i ++) + for (unsigned int i = 0; i < getKeyCount(); i++) { - - if(memcmp(source.value, keys[i].value, KeyShareConstants::keyLength) == 0) + if (memcmp(source.value, keys[i].value, KeyShareConstants::keyLength) == 0) return true; } return false; @@ -306,7 +304,7 @@ KeyShare::Token KeyShare::makeToken(const unsigned char * const data, const uint // encrypt the digest unsigned char * cipherDigest; IGNORE_RETURN(encrypt(digest, KeyShareConstants::keyLength, &cipherDigest)); ///@todo error checking - + // encrypt the cleartext data unsigned char * cipherData = 0; uint32 cipherDataLen = encrypt(data, dataLen, &cipherData); @@ -314,7 +312,7 @@ KeyShare::Token KeyShare::makeToken(const unsigned char * const data, const uint // build a token using the ciphertext data and digest Token token(cipherData, dataLen, cipherDigest, cipherDataLen); - // clean up allocation for cipher text, + // clean up allocation for cipher text, // it was deep copied in the token delete[] cipherData; delete[] cipherDigest; @@ -347,7 +345,7 @@ void KeyShare::setKey(const Key & newKey, const unsigned int index) void KeyShare::shift(void) { // shift key array - for(unsigned int i = getKeyCount() - 1; i > 0; i --) + for (unsigned int i = getKeyCount() - 1; i > 0; i--) { setKey(getKey(i - 1), i); } @@ -356,14 +354,15 @@ void KeyShare::shift(void) //----------------------------------------------------------------------- AutoVariableKeyShare::AutoVariableKeyShare() : -AutoVariableBase() + AutoVariableBase(), + value() { } //----------------------------------------------------------------------- AutoVariableKeyShare::AutoVariableKeyShare(const KeyShare::Key & source) : -AutoVariableBase() + AutoVariableBase() { value = source; } @@ -400,17 +399,16 @@ AutoVariableKeyShare::operator const KeyShare::Key & () const void AutoVariableKeyShare::pack(Archive::ByteStream & target) const { - for(unsigned int i = 0; i < KeyShareConstants::keyLength; ++i) + for (unsigned int i = 0; i < KeyShareConstants::keyLength; ++i) Archive::put(target, value.value[i]); - } //----------------------------------------------------------------------- -void AutoVariableKeyShare::unpack(Archive::ReadIterator & source) +void AutoVariableKeyShare::unpack(Archive::ReadIterator & source) { - for(unsigned int i = 0; i < KeyShareConstants::keyLength; ++i) + for (unsigned int i = 0; i < KeyShareConstants::keyLength; ++i) Archive::get(source, value.value[i]); } -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- \ No newline at end of file diff --git a/engine/server/library/serverScript/src/shared/JavaLibrary.cpp b/engine/server/library/serverScript/src/shared/JavaLibrary.cpp index 52c11b4d..2125176f 100755 --- a/engine/server/library/serverScript/src/shared/JavaLibrary.cpp +++ b/engine/server/library/serverScript/src/shared/JavaLibrary.cpp @@ -60,7 +60,6 @@ using namespace JNIWrappersNamespace; // macros //======================================================================== - #define GET_CLASS(var, name) tempClass = ms_env->FindClass(name); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); WARNING(true, ("Unable to find Java class "#name)); return false; } var = static_cast(ms_env->NewGlobalRef(tempClass)); ms_env->DeleteLocalRef(tempClass); if (var == 0) { DEBUG_WARNING(true, ("Unable to create global reference for JavaLibrary " #var )); return false; } #define GET_FIELD(var, clazz, name, sig) var = ms_env->GetFieldID(clazz, name, sig); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); WARNING(true, ("Unable to find Java field "#name" for class "#clazz)); return false; } #define GET_METHOD(var, clazz, name, sig) var = ms_env->GetMethodID(clazz, name, sig); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); WARNING(true, ("Unable to find Java method "#name" for class "#clazz)); return false; } @@ -72,7 +71,6 @@ using namespace JNIWrappersNamespace; // local constants //======================================================================== - // set path to jvm #if defined(WIN32) #define PATH_SEPARATOR ";" @@ -84,14 +82,13 @@ const char *JNI_DLL_PATH = "libjvm.so"; #endif extern "C" { -typedef jint (JNICALL *JNI_CREATEJAVAVMPROC)(JavaVM**, void**, void*); + typedef jint(JNICALL *JNI_CREATEJAVAVMPROC)(JavaVM**, void**, void*); } //======================================================================== // JNI native function namespaces //======================================================================== - namespace ScriptMethodsActionStatesNamespace { bool install(); @@ -721,7 +718,7 @@ jmethodID JavaLibrary::ms_midLibraryGMLibUnfreeze = nullptr; ////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////// -int JavaLibrary::ms_loaded = 0; +volatile int JavaLibrary::ms_loaded = 0; Semaphore * JavaLibrary::ms_shutdownJava = nullptr; int JavaLibrary::GlobalInstances::ms_stringIdIndex = 0; @@ -740,7 +737,6 @@ GlobalRefPtr JavaLibrary::GlobalInstances::ms_menuInfo; GlobalArrayRefPtr JavaLibrary::ms_attribModList[MAX_RECURSION_COUNT]; GlobalArrayRefPtr JavaLibrary::ms_mentalStateModList[MAX_RECURSION_COUNT]; - // ====================================================================== std::set s_profileSections; @@ -783,7 +779,6 @@ void JavaLibrary::fatalHandler(int signum) fprintf(stderr, "In JavaLibrary::fatalHandler, signal %d: ", signum); if (signum == SIGSEGV && ms_jvm) { - // try to see if our call stack came from C or Java void *frameAddress = __builtin_frame_address(0); // the address that generated the segfault is stored at an offset of 0x44 from @@ -811,14 +806,14 @@ void JavaLibrary::fatalHandler(int signum) if (crashAddress2a != nullptr) { frameAddressA = __builtin_frame_address(1); - if (frameAddressA != nullptr && + if (frameAddressA != nullptr && (reinterpret_cast(frameAddressA) >> 16 == frameAddressHigh)) { crashAddress2b = __builtin_return_address(1); if (crashAddress2b != nullptr) { frameAddressB = __builtin_frame_address(2); - if (frameAddressB != nullptr && + if (frameAddressB != nullptr && (reinterpret_cast(frameAddressB) >> 16 == frameAddressHigh)) { crashAddress2c = __builtin_return_address(2); @@ -882,7 +877,7 @@ void JavaLibrary::fatalHandler(int signum) */ JavaLibrary::JavaLibrary(void) { -int i; + int i; if (ms_instance != nullptr || ms_loaded != 0) return; @@ -908,7 +903,6 @@ int i; for (i = 0; i < MAX_MODIFIABLE_STRING_ID_PARAMS; ++i) GlobalInstances::ms_modifiableStringIds[i] = GlobalRef::cms_nullPtr; - m_initializerThread = new MemberFunctionThreadZero("JavaLibrary", *this, &JavaLibrary::initializeJavaThread); ThreadHandle tempThreadHandle(m_initializerThread); // for some obscure reason, the thread doesn't run unless you create a handle, but we don't need the handle for anything UNREF(tempThreadHandle); @@ -932,7 +926,7 @@ int i; */ JavaLibrary::~JavaLibrary() { - disconnectFromJava(); + disconnectFromJava(); if (ms_shutdownJava != nullptr) { @@ -966,7 +960,7 @@ void JavaLibrary::install(void) { delete lib; if (ms_javaVmType != JV_none) - FATAL (true, ("Unable to initialize Java")); + FATAL(true, ("Unable to initialize Java")); } } } @@ -1051,7 +1045,7 @@ void JavaLibrary::initializeJavaThread() classPath += ConfigServerGame::getScriptPath(); JavaVMInitArgs vm_args; - JavaVMOption tempOption = {nullptr, nullptr}; + JavaVMOption tempOption = { nullptr, nullptr }; std::vector options; char *jdwpBuffer = nullptr; @@ -1084,8 +1078,8 @@ void JavaLibrary::initializeJavaThread() // java 1.8 and higher uses metaspace...which is apparently unlimited by default // we have to consider it with our 512m max above so 96 on 32-bit is as high as we go - tempOption.optionString = "-XX:MaxMetaspaceSize=96m"; - options.push_back(tempOption); + tempOption.optionString = "-XX:MaxMetaspaceSize=96m"; + options.push_back(tempOption); // rice options!!!!1! yay - actually after much trial and error these are a good mix for speed and efficiency // i should split these someday into separate optionStrings...or not @@ -1128,17 +1122,17 @@ void JavaLibrary::initializeJavaThread() tempOption.optionString = const_cast(classPath.c_str()); options.push_back(tempOption); -// TODO: this really sucks as the jvm won't start without the param -// there's a dynamic method but requires the jvm to already be running, wtf? -// so we'll support the dev and stable versions + // TODO: this really sucks as the jvm won't start without the param + // there's a dynamic method but requires the jvm to already be running, wtf? + // so we'll support the dev and stable versions #ifdef JNI_VERSION_1_9 - vm_args.version = JNI_VERSION_1_9; + vm_args.version = JNI_VERSION_1_9; #define JNIVERSET = 1 #endif #if !defined(JNIVERSET) && defined(JNI_VERSION_1_8) vm_args.version = JNI_VERSION_1_8; -#define JNIVERSET = 1 +#define JNIVERSET = 1 #endif #ifdef JNIVERSET @@ -1153,11 +1147,11 @@ void JavaLibrary::initializeJavaThread() // create the JVM JNIEnv * env = nullptr; - jint result = (*JNI_CreateJavaVMProc)(&ms_jvm, reinterpret_cast(&env), &vm_args); + jint result = (*JNI_CreateJavaVMProc)(&ms_jvm, reinterpret_cast(&env), &vm_args); if (result != 0) { - FATAL (true, ("Failed to CreateJavaVMProc: %d", result)); + FATAL(true, ("Failed to CreateJavaVMProc: %d", result)); ms_loaded = -1; return; } @@ -1165,7 +1159,7 @@ void JavaLibrary::initializeJavaThread() // i don't think this bit functions anymore with new java? if (ConfigServerGame::getTrapScriptCrashes()) - { + { //set up signal handler for fatals in linux OurSa.sa_handler = fatalHandler; sigemptyset(&OurSa.sa_mask); @@ -1199,10 +1193,10 @@ void JavaLibrary::initializeJavaThread() //---------------------------------------------------------------------- /** - * Connects this thread to the Java VM and initializes our member vars that + * Connects this thread to the Java VM and initializes our member vars that * reference Java objects. * - * @return true on success, false if we were unable to connect to Java or + * @return true on success, false if we were unable to connect to Java or * initialize our members */ bool JavaLibrary::connectToJava() @@ -1250,10 +1244,10 @@ bool JavaLibrary::connectToJava() ms_env->ExceptionDescribe(); return false; } - jobject localEntry = ms_env->NewObject(ms_clsScriptEntry, constructor, + jobject localEntry = ms_env->NewObject(ms_clsScriptEntry, constructor, scriptPath.getValue(), ConfigServerGame::getJavaConsoleDebugMessages(), - ConfigServerGame::getCrashOnScriptError(), + ConfigServerGame::getCrashOnScriptError(), ConfigServerGame::getScriptWatcherWarnTime(), ConfigServerGame::getScriptWatcherInterruptTime(), ConfigServerGame::getScriptStackErrorLimit(), @@ -1267,7 +1261,7 @@ bool JavaLibrary::connectToJava() ms_env->DeleteLocalRef(localEntry); // get the methodIDs for the runScript() and the unloadClass() methods - GET_STATIC_METHOD(ms_midRunOne,ms_clsScriptEntry, "runScript", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I"); + GET_STATIC_METHOD(ms_midRunOne, ms_clsScriptEntry, "runScript", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I"); GET_STATIC_METHOD(ms_midRunAll, ms_clsScriptEntry, "runScripts", "(Ljava/lang/String;[Ljava/lang/Object;)I"); GET_STATIC_METHOD(ms_midCallMessages, ms_clsScriptEntry, "callMessageHandlers", "(Ljava/lang/String;JLscript/dictionary;)I"); GET_STATIC_METHOD(ms_midRunConsoleHandler, ms_clsScriptEntry, "runConsoleHandler", "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;"); @@ -1713,7 +1707,7 @@ bool JavaLibrary::connectToJava() GET_FIELD(ms_fidCombatEngineCombatantDataPosture, ms_clsCombatEngineCombatantData, "posture", "I"); GET_FIELD(ms_fidCombatEngineCombatantDataLocomotion, ms_clsCombatEngineCombatantData, "locomotion", "I"); GET_FIELD(ms_fidCombatEngineCombatantDataScriptMod, ms_clsCombatEngineCombatantData, "scriptMod", "I"); - + GET_CLASS(ms_clsCombatEngineAttackerData, "script/combat_engine$attacker_data"); GET_FIELD(ms_fidCombatEngineAttackerDataWeaponSkill, ms_clsCombatEngineAttackerData, "weaponSkillMod", "I"); GET_FIELD(ms_fidCombatEngineAttackerDataAims, ms_clsCombatEngineAttackerData, "aims", "I"); @@ -1734,7 +1728,7 @@ bool JavaLibrary::connectToJava() GET_FIELD(ms_fidCombatEngineWeaponDataElementalValue, ms_clsCombatEngineWeaponData, "elementalValue", "I"); GET_FIELD(ms_fidCombatEngineWeaponDataAttackSpeed, ms_clsCombatEngineWeaponData, "attackSpeed", "F"); GET_FIELD(ms_fidCombatEngineWeaponDataWoundChance, ms_clsCombatEngineWeaponData, "woundChance", "F"); - GET_FIELD(ms_fidCombatEngineWeaponDataAccuracy, ms_clsCombatEngineWeaponData, "accuracy", "I"); + GET_FIELD(ms_fidCombatEngineWeaponDataAccuracy, ms_clsCombatEngineWeaponData, "accuracy", "I"); GET_FIELD(ms_fidCombatEngineWeaponDataMinRange, ms_clsCombatEngineWeaponData, "minRange", "F"); GET_FIELD(ms_fidCombatEngineWeaponDataMaxRange, ms_clsCombatEngineWeaponData, "maxRange", "F"); GET_FIELD(ms_fidCombatEngineWeaponDataDamageRadius, ms_clsCombatEngineWeaponData, "damageRadius", "F"); @@ -1838,23 +1832,20 @@ bool JavaLibrary::connectToJava() GET_CLASS(ms_clsLibrarySpaceTransition, "script/library/space_transition"); GET_STATIC_METHOD(ms_midLibrarySpaceTransitionSetPlayerOvert, ms_clsLibrarySpaceTransition, "setPlayerOvert", "(J)V"); GET_STATIC_METHOD(ms_midLibrarySpaceTransitionClearOvertStatus, ms_clsLibrarySpaceTransition, "clearOvertStatus", "(J)V"); - + /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// - + // get class and field info needed by the CS Handler stuff. These may not have been // written specifically for the CS Handler. - - - - GET_CLASS( ms_clsLibraryDump, "script/library/dump" ); - GET_STATIC_METHOD( ms_midLibraryDumpDumpTargetInfo, ms_clsLibraryDump, "getTargetInfoStringByLong", "(J)Ljava/lang/String;" ); - - GET_CLASS( ms_clsLibraryGMLib, "script/library/gmlib" ); - GET_STATIC_METHOD( ms_midLibraryGMLibFreeze, ms_clsLibraryGMLib, "freezePlayer", "(J)Ljava/lang/String;" ); - GET_STATIC_METHOD( ms_midLibraryGMLibUnfreeze, ms_clsLibraryGMLib, "unFreezePlayer", "(J)V" ); - + GET_CLASS(ms_clsLibraryDump, "script/library/dump"); + GET_STATIC_METHOD(ms_midLibraryDumpDumpTargetInfo, ms_clsLibraryDump, "getTargetInfoStringByLong", "(J)Ljava/lang/String;"); + + GET_CLASS(ms_clsLibraryGMLib, "script/library/gmlib"); + GET_STATIC_METHOD(ms_midLibraryGMLibFreeze, ms_clsLibraryGMLib, "freezePlayer", "(J)Ljava/lang/String;"); + GET_STATIC_METHOD(ms_midLibraryGMLibUnfreeze, ms_clsLibraryGMLib, "unFreezePlayer", "(J)V"); + ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// // register our native methods @@ -1967,7 +1958,7 @@ bool JavaLibrary::registerNatives(const JNINativeMethod natives[], int count) result = lresult; } } - + ms_env->DeleteLocalRef(baseClass); if (ms_env->ExceptionCheck()) { @@ -1985,12 +1976,12 @@ bool JavaLibrary::registerNatives(const JNINativeMethod natives[], int count) //---------------------------------------------------------------------- /** - * Disconnects this thread from the Java VM. Any vars that reference Java objects + * Disconnects this thread from the Java VM. Any vars that reference Java objects * will be invalid after this call. */ void JavaLibrary::disconnectFromJava() { -int i; + int i; if (ms_jvm == 0 || ms_env == 0) return; @@ -2145,9 +2136,9 @@ bool JavaLibrary::queryScriptFunctions(const std::string & scriptName) scriptName); functionList.clear(); -// DEBUG_REPORT_LOG(true, ("Querying script %s methods:\n", scriptName.c_str())); + // DEBUG_REPORT_LOG(true, ("Querying script %s methods:\n", scriptName.c_str())); - // get the name of each method + // get the name of each method bool result = true; int count = getArrayLength(*scriptMethods); for (int i = 0; i < count; ++i) @@ -2168,7 +2159,7 @@ bool JavaLibrary::queryScriptFunctions(const std::string & scriptName) // convert the method name to a C string and store it std::string localName; convert(*methodName, localName); -// DEBUG_REPORT_LOG(true, ("\t%s\n", localName)); + // DEBUG_REPORT_LOG(true, ("\t%s\n", localName)); functionList.insert(localName); } return result; @@ -2183,7 +2174,7 @@ jlong JavaLibrary::getFreeJavaMemory() { if (ms_instance == nullptr || ms_env == nullptr) return 0; - + return ms_env->CallStaticLongMethod(ms_clsScriptEntry, ms_midScriptEntryGetFreeMem); } // JavaLibrary::getFreeJavaMemory @@ -2203,7 +2194,7 @@ void JavaLibrary::printJavaStack() void JavaLibrary::enableLogging(bool enable) const { if (ms_instance == nullptr || ms_env == nullptr) - return; + return; ms_env->CallStaticVoidMethod(ms_clsScriptEntry, ms_midScriptEntryEnableLogging, enable); @@ -2217,7 +2208,7 @@ void JavaLibrary::enableLogging(bool enable) const void JavaLibrary::enableNewJediTracking(bool enableTracking) { if (ms_instance == nullptr || ms_env == nullptr) - return; + return; ms_env->CallStaticVoidMethod(ms_clsScriptEntry, ms_midScriptEntryEnableNewJediTracking, enableTracking); @@ -2271,30 +2262,29 @@ void JavaLibrary::spaceClearOvert(const NetworkId & ship) callStaticVoidMethod(ms_clsLibrarySpaceTransition, ms_midLibrarySpaceTransitionClearOvertStatus, ship.getValue()); } -std::string JavaLibrary::getObjectDumpInfo( NetworkId id ) +std::string JavaLibrary::getObjectDumpInfo(NetworkId id) { - - JavaStringPtr s = callStaticStringMethod(ms_clsLibraryDump, ms_midLibraryDumpDumpTargetInfo, id.getValue() ); + JavaStringPtr s = callStaticStringMethod(ms_clsLibraryDump, ms_midLibraryDumpDumpTargetInfo, id.getValue()); std::string retval; - convert( *s, retval ); - + convert(*s, retval); + return retval; } -void JavaLibrary::freezePlayer( const NetworkId & id ) +void JavaLibrary::freezePlayer(const NetworkId & id) { - DEBUG_REPORT_LOG( true, ( "calling freeze code in script" ) ); - JavaStringPtr s = callStaticStringMethod( ms_clsLibraryGMLib, ms_midLibraryGMLibFreeze, id.getValue() ); - DEBUG_REPORT_LOG( true, ( "done with script" ) ); + DEBUG_REPORT_LOG(true, ("calling freeze code in script")); + JavaStringPtr s = callStaticStringMethod(ms_clsLibraryGMLib, ms_midLibraryGMLibFreeze, id.getValue()); + DEBUG_REPORT_LOG(true, ("done with script")); std::string retval; - convert( *s, retval ); - DEBUG_REPORT_LOG( true, ("Got back %s", retval.c_str() ) ); + convert(*s, retval); + DEBUG_REPORT_LOG(true, ("Got back %s", retval.c_str())); } -void JavaLibrary::unFreezePlayer( const NetworkId & id ) +void JavaLibrary::unFreezePlayer(const NetworkId & id) { - callStaticVoidMethod( ms_clsLibraryGMLib, ms_midLibraryGMLibUnfreeze, id.getValue() ); + callStaticVoidMethod(ms_clsLibraryGMLib, ms_midLibraryGMLibUnfreeze, id.getValue()); } /** @@ -2420,7 +2410,7 @@ void JavaLibrary::setObjIdLoaded(const NetworkId &object) } // JavaLibrary::setObjIdLoaded /** - * Sets the initialized flag of an obj_id. You cannot uninitialize an object, + * Sets the initialized flag of an obj_id. You cannot uninitialize an object, * it is marked uninitialized when it is deleted. * * @param object the object we want to flag as initialized @@ -2476,9 +2466,9 @@ void JavaLibrary::attachScriptToObjId(const NetworkId &object, { LocalRefPtr obj_id = getObjId(object); if (obj_id == LocalRef::cms_nullPtr) - return; + return; - JavaString jscript(script.c_str()); + JavaString jscript(script.c_str()); callVoidMethod(*obj_id, ms_midObjIdAttachScript, jscript.getValue()); } @@ -2543,9 +2533,9 @@ void JavaLibrary::detachScriptFromObjId(const NetworkId &object, { LocalRefPtr obj_id = getObjId(object); if (obj_id == LocalRef::cms_nullPtr) - return; + return; - JavaString jscript(script.c_str()); + JavaString jscript(script.c_str()); callVoidMethod(*obj_id, ms_midObjIdDetachScript, jscript.getValue()); } @@ -2562,7 +2552,7 @@ void JavaLibrary::detachAllScriptsFromObjId(const NetworkId &object) { LocalRefPtr obj_id = getObjId(object); if (obj_id == LocalRef::cms_nullPtr) - return; + return; callVoidMethod(*obj_id, ms_midObjIdDetachAllScripts); } @@ -2656,7 +2646,7 @@ jint JavaLibrary::callScriptEntry(const JavaStringParam & script, { LOG("ScriptInvestigation", ("callScriptEntry failed because runOne was nullptr")); } - + return SCRIPT_OVERRIDE; } @@ -2668,9 +2658,9 @@ jint JavaLibrary::callScriptEntry(const JavaStringParam & script, { LOG("ScriptRecursion", ("callScriptEntry1 recursion %d", ms_currentRecursionCount)); } - jint result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midRunOne, + jint result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midRunOne, script.getValue(), method.getValue(), params); - --ms_currentRecursionCount; + --ms_currentRecursionCount; result = handleScriptEntryCleanup(result); @@ -2718,9 +2708,9 @@ jint JavaLibrary::callScriptEntry(const JavaStringParam & method, jobjectArray p { LOG("ScriptRecursion", ("callScriptEntry2 recursion %d", ms_currentRecursionCount)); } - jint result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midRunAll, + jint result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midRunAll, method.getValue(), params); - --ms_currentRecursionCount; + --ms_currentRecursionCount; result = handleScriptEntryCleanup(result); @@ -2756,7 +2746,7 @@ jstring JavaLibrary::callScriptConsoleHandlerEntry(const JavaStringParam & scrip { LOG("ScriptInvestigation", ("callScriptConsoleHandlerEntry failed because runConsoleHandler was nullptr")); } - + return 0; } @@ -2768,9 +2758,9 @@ jstring JavaLibrary::callScriptConsoleHandlerEntry(const JavaStringParam & scrip { LOG("ScriptRecursion", ("callScriptConsoleHandlerEntry recursion %d", ms_currentRecursionCount)); } - jstring result = static_cast(ms_env->CallStaticObjectMethod( + jstring result = static_cast(ms_env->CallStaticObjectMethod( ms_clsScriptEntry, ms_midRunConsoleHandler, script.getValue(), method.getValue(), params)); - --ms_currentRecursionCount; + --ms_currentRecursionCount; IGNORE_RETURN(handleScriptEntryCleanup(SCRIPT_CONTINUE)); @@ -2806,270 +2796,270 @@ void JavaLibrary::convert(const ScriptParams & params, JavaDictionaryPtr & dicti JavaString paramName(params.getParamName(i).c_str()); switch (params.getParamType(i)) { - case Param::BOOL: + case Param::BOOL: + { + callObjectMethod(*localDictionary, + ms_midDictionaryPutBool, paramName.getValue(), + params.getBoolParam(i)); + } + break; + case Param::BOOL_ARRAY: + { + const std::deque & boolArray = params.getBoolArrayParam(i); + LocalBooleanArrayRefPtr array = createNewBooleanArray(boolArray.size()); + if (array != LocalBooleanArrayRef::cms_nullPtr) + { + if (boolArray.size() > 0) { - callObjectMethod(*localDictionary, - ms_midDictionaryPutBool, paramName.getValue(), - params.getBoolParam(i)); - } - break; - case Param::BOOL_ARRAY: - { - const std::deque & boolArray = params.getBoolArrayParam(i); - LocalBooleanArrayRefPtr array = createNewBooleanArray(boolArray.size()); - if (array != LocalBooleanArrayRef::cms_nullPtr) - { - if (boolArray.size() > 0) - { - // we need the array of bool to be contiguous in order to - // "memcopy" it into the Java return buffer; a deque - // does not store the array of bool contiguously; neither - // does a vector; in fact, if you find an stl container - // of bool that stores the array of bool contiguously, you - // should change this code to use it; for now, we allocate - // a temporary bool array and copy the deque's bool array - // into it, and pass that to the JNI call to do the "memcopy" - bool * tempBoolArray = new bool[boolArray.size()]; - int indexBoolArray = 0; - for (std::deque::const_iterator iter = boolArray.begin(); iter != boolArray.end(); ++iter, ++indexBoolArray) - tempBoolArray[indexBoolArray] = *iter; + // we need the array of bool to be contiguous in order to + // "memcopy" it into the Java return buffer; a deque + // does not store the array of bool contiguously; neither + // does a vector; in fact, if you find an stl container + // of bool that stores the array of bool contiguously, you + // should change this code to use it; for now, we allocate + // a temporary bool array and copy the deque's bool array + // into it, and pass that to the JNI call to do the "memcopy" + bool * tempBoolArray = new bool[boolArray.size()]; + int indexBoolArray = 0; + for (std::deque::const_iterator iter = boolArray.begin(); iter != boolArray.end(); ++iter, ++indexBoolArray) + tempBoolArray[indexBoolArray] = *iter; - setBooleanArrayRegion(*array, 0, boolArray.size(), - const_cast(reinterpret_cast(&tempBoolArray[0]))); + setBooleanArrayRegion(*array, 0, boolArray.size(), + const_cast(reinterpret_cast(&tempBoolArray[0]))); - delete [] tempBoolArray; - } + delete[] tempBoolArray; + } - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), array->getValue() - ); - } - } - break; - case Param::INT: + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), array->getValue() + ); + } + } + break; + case Param::INT: + { + callObjectMethod(*localDictionary, + ms_midDictionaryPutInt, paramName.getValue(), + params.getIntParam(i)); + } + break; + case Param::INT_ARRAY: + { + const std::vector & intArray = params.getIntArrayParam(i); + LocalIntArrayRefPtr array = createNewIntArray(intArray.size()); + if (array != LocalIntArrayRef::cms_nullPtr) + { + if (intArray.size() > 0) { - callObjectMethod(*localDictionary, - ms_midDictionaryPutInt, paramName.getValue(), - params.getIntParam(i)); - } - break; - case Param::INT_ARRAY: - { - const std::vector & intArray = params.getIntArrayParam(i); - LocalIntArrayRefPtr array = createNewIntArray(intArray.size()); - if (array != LocalIntArrayRef::cms_nullPtr) - { - if (intArray.size() > 0) - { #if INT_MAX == LONG_MAX - setIntArrayRegion(*array, 0, intArray.size(), const_cast( - reinterpret_cast(&intArray[0]))); + setIntArrayRegion(*array, 0, intArray.size(), const_cast( + reinterpret_cast(&intArray[0]))); #else - std::vector intArray2(intArray.begin(), intArray.end()); - setIntArrayRegion(*array, 0, intArray.size(), const_cast(&intArray2[0])); + std::vector intArray2(intArray.begin(), intArray.end()); + setIntArrayRegion(*array, 0, intArray.size(), const_cast(&intArray2[0])); #endif - } + } - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), array->getValue() - ); + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), array->getValue() + ); + } + } + break; + case Param::FLOAT: + { + callObjectMethod(*localDictionary, + ms_midDictionaryPutFloat, paramName.getValue(), + params.getFloatParam(i)); + } + break; + case Param::STRING: + { + JavaString value(params.getStringParam(i)); + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), value.getValue()); + } + break; + case Param::STRING_ARRAY: + { + LocalObjectArrayRefPtr value; + ScriptConversion::convert(params.getStringArrayParam(i), value); + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), value->getValue()); + } + break; + case Param::UNICODE: + { + JavaString value(params.getUnicodeParam(i)); + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), value.getValue()); + } + break; + case Param::UNICODE_ARRAY: + { + LocalObjectArrayRefPtr value; + ScriptConversion::convert(params.getUnicodeArrayParam(i), value); + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), value->getValue()); + } + break; + case Param::OBJECT_ID: + { + LocalRefPtr arg = getObjId(params.getObjIdParam(i)); + if (arg == LocalRef::cms_nullPtr) + return; + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), arg->getValue()); + } + break; + case Param::OBJECT_ID_ARRAY: + { + const std::vector & objIds = + params.getObjIdArrayParam(i); + LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjId); + if (array != LocalObjectArrayRef::cms_nullPtr) + { + int count = objIds.size(); + for (int j = 0; j < count; ++j) + { + LocalRefPtr id = getObjId(objIds[j]); + if (id != LocalRef::cms_nullPtr) + { + setObjectArrayElement(*array, j, *id); } } - break; - case Param::FLOAT: + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), array->getValue()); + } + else + { + if (ms_env->ExceptionCheck()) + ms_env->ExceptionDescribe(); + return; + } + } + break; + case Param::CACHED_OBJECT_ID_ARRAY: + { + const std::vector & objIds = + params.getCachedObjIdArrayParam(i); + LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjId); + if (array != LocalObjectArrayRef::cms_nullPtr) + { + int count = objIds.size(); + for (int j = 0; j < count; ++j) { - callObjectMethod(*localDictionary, - ms_midDictionaryPutFloat, paramName.getValue(), - params.getFloatParam(i)); - } - break; - case Param::STRING: - { - JavaString value(params.getStringParam(i)); - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), value.getValue()); - } - break; - case Param::STRING_ARRAY: - { - LocalObjectArrayRefPtr value; - ScriptConversion::convert(params.getStringArrayParam(i), value); - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), value->getValue()); - } - break; - case Param::UNICODE: - { - JavaString value(params.getUnicodeParam(i)); - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), value.getValue()); - } - break; - case Param::UNICODE_ARRAY: - { - LocalObjectArrayRefPtr value; - ScriptConversion::convert(params.getUnicodeArrayParam(i), value); - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), value->getValue()); - } - break; - case Param::OBJECT_ID: - { - LocalRefPtr arg = getObjId(params.getObjIdParam(i)); - if (arg == LocalRef::cms_nullPtr) - return; - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), arg->getValue()); - } - break; - case Param::OBJECT_ID_ARRAY: - { - const std::vector & objIds = - params.getObjIdArrayParam(i); - LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjId); - if (array != LocalObjectArrayRef::cms_nullPtr) + LocalRefPtr id = getObjId(objIds[j]); + if (id != LocalRef::cms_nullPtr) { - int count = objIds.size(); - for (int j = 0; j < count; ++j) + setObjectArrayElement(*array, j, *id); + } + } + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), array->getValue()); + } + else + { + if (ms_env->ExceptionCheck()) + ms_env->ExceptionDescribe(); + return; + } + } + break; + case Param::OBJECT_ID_ARRAY_ARRAY: + { + const std::vector *> & objIds = + params.getObjIdArrayArrayParam(i); + LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjIdArray); + if (array != LocalObjectArrayRef::cms_nullPtr) + { + int count = objIds.size(); + for (int j = 0; j < count; ++j) + { + const std::vector * inner = objIds[j]; + if (inner != nullptr) + { + LocalObjectArrayRefPtr innerArray = createNewObjectArray(inner->size(), ms_clsObjId); + if (innerArray != LocalObjectArrayRef::cms_nullPtr) { - LocalRefPtr id = getObjId(objIds[j]); - if (id != LocalRef::cms_nullPtr) + int innerCount = inner->size(); + for (int k = 0; k < innerCount; ++k) { - setObjectArrayElement(*array, j, *id); - } - } - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), array->getValue()); - } - else - { - if (ms_env->ExceptionCheck()) - ms_env->ExceptionDescribe(); - return; - } - } - break; - case Param::CACHED_OBJECT_ID_ARRAY: - { - const std::vector & objIds = - params.getCachedObjIdArrayParam(i); - LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjId); - if (array != LocalObjectArrayRef::cms_nullPtr) - { - int count = objIds.size(); - for (int j = 0; j < count; ++j) - { - LocalRefPtr id = getObjId(objIds[j]); - if (id != LocalRef::cms_nullPtr) - { - setObjectArrayElement(*array, j, *id); - } - } - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), array->getValue()); - } - else - { - if (ms_env->ExceptionCheck()) - ms_env->ExceptionDescribe(); - return; - } - } - break; - case Param::OBJECT_ID_ARRAY_ARRAY: - { - const std::vector *> & objIds = - params.getObjIdArrayArrayParam(i); - LocalObjectArrayRefPtr array = createNewObjectArray(objIds.size(), ms_clsObjIdArray); - if (array != LocalObjectArrayRef::cms_nullPtr) - { - int count = objIds.size(); - for (int j = 0; j < count; ++j) - { - const std::vector * inner = objIds[j]; - if (inner != nullptr) - { - LocalObjectArrayRefPtr innerArray = createNewObjectArray(inner->size(), ms_clsObjId); - if (innerArray != LocalObjectArrayRef::cms_nullPtr) + LocalRefPtr id = getObjId(inner->at(k)); + if (id != LocalRef::cms_nullPtr) { - int innerCount = inner->size(); - for (int k = 0; k < innerCount; ++k) - { - LocalRefPtr id = getObjId(inner->at(k)); - if (id != LocalRef::cms_nullPtr) - { - setObjectArrayElement(*innerArray, k, *id); - } - } - setObjectArrayElement(*array, j, *innerArray); - } - else - { - if (ms_env->ExceptionCheck()) - ms_env->ExceptionDescribe(); - return; + setObjectArrayElement(*innerArray, k, *id); } } - else - { - setObjectArrayElement(*array, j, *LocalRef::cms_nullPtr); + setObjectArrayElement(*array, j, *innerArray); } + else + { + if (ms_env->ExceptionCheck()) + ms_env->ExceptionDescribe(); + return; } - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), array->getValue()); } else { - if (ms_env->ExceptionCheck()) - ms_env->ExceptionDescribe(); - return; + setObjectArrayElement(*array, j, *LocalRef::cms_nullPtr); } } - break; - case Param::LOCATION: - { - LocalRefPtr location; - if (ScriptConversion::convert(params.getLocationParam(i), "", NetworkId::cms_invalid, location)) - { - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), location->getValue()); - } - } - break; - case Param::LOCATION_ARRAY: - { - LocalObjectArrayRefPtr locations; - if (ScriptConversion::convert(params.getLocationArrayParam(i), locations)) - { - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), locations->getValue()); - } - } - break; - case Param::DICTIONARY: - { - LocalRefPtr dictionaryArg = convert(params.getValueDictionaryParam(i)); - if (dictionaryArg != LocalRef::cms_nullPtr) - { - callObjectMethod(*localDictionary, - ms_midDictionaryPut, paramName.getValue(), dictionaryArg->getValue()); - } - else - { - if (ms_env->ExceptionCheck()) - ms_env->ExceptionDescribe(); - return; - } - } - break; - default: - { - DEBUG_REPORT_LOG(true, ("Unknown/unhandled parameter type " - "%d while parsing ScriptParameters\n", static_cast( - params.getParamType(i)))); - return; - } - break; + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), array->getValue()); + } + else + { + if (ms_env->ExceptionCheck()) + ms_env->ExceptionDescribe(); + return; + } + } + break; + case Param::LOCATION: + { + LocalRefPtr location; + if (ScriptConversion::convert(params.getLocationParam(i), "", NetworkId::cms_invalid, location)) + { + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), location->getValue()); + } + } + break; + case Param::LOCATION_ARRAY: + { + LocalObjectArrayRefPtr locations; + if (ScriptConversion::convert(params.getLocationArrayParam(i), locations)) + { + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), locations->getValue()); + } + } + break; + case Param::DICTIONARY: + { + LocalRefPtr dictionaryArg = convert(params.getValueDictionaryParam(i)); + if (dictionaryArg != LocalRef::cms_nullPtr) + { + callObjectMethod(*localDictionary, + ms_midDictionaryPut, paramName.getValue(), dictionaryArg->getValue()); + } + else + { + if (ms_env->ExceptionCheck()) + ms_env->ExceptionDescribe(); + return; + } + } + break; + default: + { + DEBUG_REPORT_LOG(true, ("Unknown/unhandled parameter type " + "%d while parsing ScriptParameters\n", static_cast( + params.getParamType(i)))); + return; + } + break; } } @@ -3113,7 +3103,7 @@ LocalObjectArrayRefPtr JavaLibrary::convert(const NetworkId & self, const std::s if (convert(jparams, 1, argList, args)) return jparams; - + return LocalObjectArrayRef::cms_nullPtr; } // JavaLibrary::convert @@ -3178,7 +3168,7 @@ bool JavaLibrary::convert(LocalObjectArrayRefPtr & javaParams, int startIndex, c else if (argList[i] != '[') break; else - ++dimensions; + ++dimensions; } if (paramIndex >= args.getParamCount()) @@ -3189,610 +3179,610 @@ bool JavaLibrary::convert(LocalObjectArrayRefPtr & javaParams, int startIndex, c LocalRefParamPtr arg = LocalRefParam::cms_nullPtr; switch (argType) { - case 'b': - if (dimensions == 0) + case 'b': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::BOOL) + break; + jboolean param = args.getBoolParam(paramIndex); + arg = createNewObject(ms_clsBoolean, ms_midBoolean, param); + } + else + { + if (args.getParamType(paramIndex) != Param::BOOL_ARRAY) + break; + const std::deque & param = args.getBoolArrayParam(paramIndex); + int count = param.size(); + LocalBooleanArrayRefPtr localInstance = createNewBooleanArray(count); + + if (count > 0) { - if (args.getParamType(paramIndex) != Param::BOOL) + // we need the array of bool to be contiguous in order to + // "memcopy" it into the Java return buffer; a deque + // does not store the array of bool contiguously; neither + // does a vector; in fact, if you find an stl container + // of bool that stores the array of bool contiguously, you + // should change this code to use it; for now, we allocate + // a temporary bool array and copy the deque's bool array + // into it, and pass that to the JNI call to do the "memcopy" + bool * tempBoolArray = new bool[count]; + int indexBoolArray = 0; + for (std::deque::const_iterator iter = param.begin(); iter != param.end(); ++iter, ++indexBoolArray) + tempBoolArray[indexBoolArray] = *iter; + + setBooleanArrayRegion(*localInstance, 0, count, + const_cast(reinterpret_cast(&tempBoolArray[0]))); + + delete[] tempBoolArray; + } + + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + arg = localInstance; + } + break; + case 'i': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::INT) + break; + if (modifiable) + { + arg = globals.getNextModifiableInt(); + if (arg == GlobalRef::cms_nullPtr) break; - jboolean param = args.getBoolParam(paramIndex); - arg = createNewObject(ms_clsBoolean, ms_midBoolean, param); + jint param = args.getIntParam(paramIndex); + setIntField(*arg, ms_fidModifiableIntData, param); } else { - if (args.getParamType(paramIndex) != Param::BOOL_ARRAY) - break; - const std::deque & param = args.getBoolArrayParam(paramIndex); - int count = param.size(); - LocalBooleanArrayRefPtr localInstance = createNewBooleanArray(count); - - if (count > 0) - { - // we need the array of bool to be contiguous in order to - // "memcopy" it into the Java return buffer; a deque - // does not store the array of bool contiguously; neither - // does a vector; in fact, if you find an stl container - // of bool that stores the array of bool contiguously, you - // should change this code to use it; for now, we allocate - // a temporary bool array and copy the deque's bool array - // into it, and pass that to the JNI call to do the "memcopy" - bool * tempBoolArray = new bool[count]; - int indexBoolArray = 0; - for (std::deque::const_iterator iter = param.begin(); iter != param.end(); ++iter, ++indexBoolArray) - tempBoolArray[indexBoolArray] = *iter; - - setBooleanArrayRegion(*localInstance, 0, count, - const_cast(reinterpret_cast(&tempBoolArray[0]))); - - delete [] tempBoolArray; - } - - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - arg = localInstance; + jint param = args.getIntParam(paramIndex); + arg = createNewObject(ms_clsInteger, ms_midInteger, param); } - break; - case 'i': - if (dimensions == 0) + } + else + { + if (args.getParamType(paramIndex) != Param::INT_ARRAY) + break; + const std::vector & param = args.getIntArrayParam(paramIndex); + int count = param.size(); + LocalIntArrayRefPtr localInstance = createNewIntArray(count); + jint * destination = ms_env->GetIntArrayElements(localInstance->getValue(), 0); + if (destination) { - if (args.getParamType(paramIndex) != Param::INT) + int i; + for (i = 0; i < count; ++i) + { + destination[i] = param[i]; + } + ms_env->ReleaseIntArrayElements(localInstance->getValue(), destination, 0); + } + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + arg = localInstance; + } + break; + case 'U': + { + if (dimensions != 0) + { + if (args.getParamType(paramIndex) != Param::BYTE_ARRAY) + break; + const std::vector & param = args.getByteArrayParam(paramIndex); + int count = param.size(); + LocalByteArrayRefPtr localInstance = createNewByteArray(count); + jbyte * destination = ms_env->GetByteArrayElements(localInstance->getValue(), 0); + if (destination) + { + int i; + for (i = 0; i < count; ++i) + { + destination[i] = param[i]; + } + ms_env->ReleaseByteArrayElements(localInstance->getValue(), destination, 0); + } + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + arg = localInstance; + } + } + break; + case 'f': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::FLOAT) + break; + if (modifiable) + { + arg = globals.getNextModifiableFloat(); + if (arg == GlobalRef::cms_nullPtr) break; - if (modifiable) - { - arg = globals.getNextModifiableInt(); - if (arg == GlobalRef::cms_nullPtr) - break; - jint param = args.getIntParam(paramIndex); - setIntField(*arg, ms_fidModifiableIntData, param); - } - else - { - jint param = args.getIntParam(paramIndex); - arg = createNewObject(ms_clsInteger, ms_midInteger, param); - } + jfloat param = args.getFloatParam(paramIndex); + setFloatField(*arg, ms_fidModifiableFloatData, param); } else { - if (args.getParamType(paramIndex) != Param::INT_ARRAY) - break; - const std::vector & param = args.getIntArrayParam(paramIndex); - int count = param.size(); - LocalIntArrayRefPtr localInstance = createNewIntArray(count); - jint * destination = ms_env->GetIntArrayElements(localInstance->getValue(), 0); - if (destination) - { - int i; - for (i=0; iReleaseIntArrayElements(localInstance->getValue(), destination, 0); - } - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - arg = localInstance; + jfloat param = args.getFloatParam(paramIndex); + arg = createNewObject(ms_clsFloat, ms_midFloat, param); } - break; - case 'U': + } + else + { + if (args.getParamType(paramIndex) != Param::FLOAT_ARRAY) + break; + const std::vector & floats = args.getFloatArrayParam(paramIndex); + LocalFloatArrayRefPtr farray = createNewFloatArray(floats.size()); + if (farray != LocalFloatArrayRef::cms_nullPtr) { - if (dimensions != 0) + if (floats.size() > 0) + setFloatArrayRegion(*farray, 0, floats.size(), const_cast(&floats[0])); + arg = farray; + } + } + break; + case 's': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::STRING) + break; + arg = createNewString(args.getStringParam(paramIndex)); + } + else + { + if (args.getParamType(paramIndex) != Param::STRING_ARRAY) + break; + + const std::vector & strings = + args.getStringArrayParam(paramIndex); + LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsString); + int i; + std::vector::const_iterator iter; + for (i = 0, iter = strings.begin(); iter != strings.end(); + ++i, ++iter) + { + if (*iter) { - if (args.getParamType(paramIndex) != Param::BYTE_ARRAY) + JavaString newString(*iter); + setObjectArrayElement(*localInstance, i, newString); + } + } + arg = localInstance; + } + break; + case 'u': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::UNICODE) + break; + if (modifiable) + break; + const String_t ¶m = args.getUnicodeParam(paramIndex); + arg = createNewString(param.c_str(), static_cast(param.size())); + } + else + { + if (args.getParamType(paramIndex) != Param::UNICODE_ARRAY) + break; + + const std::vector & strings = + args.getUnicodeArrayParam(paramIndex); + LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsString); + int i; + std::vector::const_iterator iter; + for (i = 0, iter = strings.begin(); iter != strings.end(); + ++i, ++iter) + { + if (*iter != nullptr) + { + JavaString newString(**iter); + setObjectArrayElement(*localInstance, i, newString); + } + } + arg = localInstance; + } + break; + case 'L': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::LOCATION) + break; + NetworkId cell; + LocalRefPtr target; + if (!ScriptConversion::convert(args.getLocationParam(paramIndex), cell, target)) + break; + arg = target; + } + else + { + if (args.getParamType(paramIndex) != Param::LOCATION_ARRAY) + break; + const std::vector & locations = args.getLocationArrayParam(paramIndex); + LocalObjectArrayRefPtr target; + if (!ScriptConversion::convert(locations, target)) + break; + arg = target; + } + break; + case 'O': + { + if (modifiable || dimensions > 1) + break; + if (dimensions == 1) + { + // obj_id array + if (args.getParamType(paramIndex) == Param::OBJECT_ID_ARRAY) + { + const std::vector & param = args.getObjIdArrayParam(paramIndex); + int count = param.size(); + int paramCount = 0; + LocalObjectArrayRefPtr localInstance = createNewObjectArray(count, ms_clsObjId); + for (int j = 0; j < count; ++j) + { + LocalRefPtr id = getObjId(param[j]); + if (id == LocalRef::cms_nullPtr) break; - const std::vector & param = args.getByteArrayParam(paramIndex); - int count = param.size(); - LocalByteArrayRefPtr localInstance = createNewByteArray(count); - jbyte * destination = ms_env->GetByteArrayElements(localInstance->getValue(), 0); - if (destination) - { - int i; - for (i=0; iReleaseByteArrayElements(localInstance->getValue(), destination, 0); - } + setObjectArrayElement(*localInstance, static_cast(paramCount), *id); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); return 0; } - arg = localInstance; + ++paramCount; } + arg = localInstance; } - break; - case 'f': - if (dimensions == 0) + else if (args.getParamType(paramIndex) == Param::CACHED_OBJECT_ID_ARRAY) { - if (args.getParamType(paramIndex) != Param::FLOAT) - break; - if (modifiable) + const std::vector & param = args.getCachedObjIdArrayParam(paramIndex); + int count = param.size(); + int paramCount = 0; + LocalObjectArrayRefPtr localInstance = createNewObjectArray(count, ms_clsObjId); + for (int j = 0; j < count; ++j) { - arg = globals.getNextModifiableFloat(); - if (arg == GlobalRef::cms_nullPtr) + LocalRefPtr id = getObjId(param[j]); + if (id == LocalRef::cms_nullPtr) break; - jfloat param = args.getFloatParam(paramIndex); - setFloatField(*arg, ms_fidModifiableFloatData, param); - } - else - { - jfloat param = args.getFloatParam(paramIndex); - arg = createNewObject(ms_clsFloat, ms_midFloat, param); - } - } - else - { - if (args.getParamType(paramIndex) != Param::FLOAT_ARRAY) - break; - const std::vector & floats = args.getFloatArrayParam(paramIndex); - LocalFloatArrayRefPtr farray = createNewFloatArray(floats.size()); - if (farray != LocalFloatArrayRef::cms_nullPtr) - { - if (floats.size() > 0) - setFloatArrayRegion(*farray, 0, floats.size(), const_cast(&floats[0])); - arg = farray; - } - } - break; - case 's': - if (dimensions == 0) - { - if (args.getParamType(paramIndex) != Param::STRING) - break; - arg = createNewString(args.getStringParam(paramIndex)); - } - else - { - if (args.getParamType(paramIndex) != Param::STRING_ARRAY) - break; - - const std::vector & strings = - args.getStringArrayParam(paramIndex); - LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsString); - int i; - std::vector::const_iterator iter; - for (i = 0, iter = strings.begin(); iter != strings.end(); - ++i, ++iter) - { - if (*iter) + setObjectArrayElement(*localInstance, static_cast(paramCount), *id); + if (ms_env->ExceptionCheck()) { - JavaString newString(*iter); - setObjectArrayElement(*localInstance, i, newString); + ms_env->ExceptionDescribe(); + return 0; } + ++paramCount; } arg = localInstance; } - break; - case 'u': - if (dimensions == 0) - { - if (args.getParamType(paramIndex) != Param::UNICODE) - break; - if (modifiable) - break; - const String_t ¶m = args.getUnicodeParam(paramIndex); - arg = createNewString(param.c_str(), static_cast(param.size())); - } - else - { - if (args.getParamType(paramIndex) != Param::UNICODE_ARRAY) - break; - - const std::vector & strings = - args.getUnicodeArrayParam(paramIndex); - LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsString); - int i; - std::vector::const_iterator iter; - for (i = 0, iter = strings.begin(); iter != strings.end(); - ++i, ++iter) - { - if (*iter != nullptr) - { - JavaString newString(**iter); - setObjectArrayElement(*localInstance, i, newString); - } - } - arg = localInstance; - } - break; - case 'L': - if (dimensions == 0) - { - if (args.getParamType(paramIndex) != Param::LOCATION) - break; - NetworkId cell; - LocalRefPtr target; - if (!ScriptConversion::convert(args.getLocationParam(paramIndex), cell, target)) - break; - arg = target; - } - else - { - if (args.getParamType(paramIndex) != Param::LOCATION_ARRAY) - break; - const std::vector & locations = args.getLocationArrayParam(paramIndex); - LocalObjectArrayRefPtr target; - if (!ScriptConversion::convert(locations, target)) - break; - arg = target; - } - break; - case 'O': + } + else { - if (modifiable || dimensions > 1) - break; - if (dimensions == 1) + if (args.getParamType(paramIndex) != Param::OBJECT_ID) + break; + arg = getObjId(args.getObjIdParam(paramIndex)); + } + } + break; + + //---------------------------------------------------------------------- + //-- menu info + + case 'm': + { + if (dimensions != 0) + break; + + if (args.getParamType(paramIndex) != Param::OBJECT_MENU_INFO) + break; + + const MenuDataVector & menuVector = args.getObjectMenuRequestDataArrayParam(paramIndex); + + arg = globals.getMenuInfo(); + + if (!convert(menuVector, arg)) + { + return 0; + } + } + break; + + //---------------------------------------------------------------------- + + case 'S': + if (dimensions == 0) + { + if (args.getParamType(paramIndex) != Param::STRING_ID) + break; + if (modifiable) + arg = globals.getNextModifiableStringId(); + else + arg = globals.getNextStringId(); + if (arg == GlobalArrayRef::cms_nullPtr) + break; + const StringId & param = args.getStringIdParam(paramIndex); + JavaString text(param.getTable().c_str()); + setObjectField(*arg, ms_fidStringIdTable, text); + if (param.getText().empty()) + { + setIntField(*arg, ms_fidStringIdIndexId, + static_cast(param.getTextIndex())); + JavaString text(""); + setObjectField(*arg, ms_fidStringIdAsciiId, text); + } + else + { + JavaString text(param.getText().c_str()); + setObjectField(*arg, ms_fidStringIdAsciiId, text); + } + } + else + { + if (args.getParamType(paramIndex) != Param::STRING_ID_ARRAY) + break; + if (modifiable) + break; + + const std::vector & strings = args.getStringIdArrayParam(paramIndex); + LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsStringId); + + int i; + std::vector::const_iterator iter; + for (i = 0, iter = strings.begin(); iter != strings.end(); ++i, ++iter) + { + const StringId * param = *iter; + // get the next available stringId from the pool + GlobalRefPtr stringIdObject = globals.getNextStringId(); + if (stringIdObject == GlobalRef::cms_nullPtr) + break; + // set the stringId elements + JavaString text(param->getTable().c_str()); + setObjectField(*stringIdObject, ms_fidStringIdTable, text); + if (param->getText().empty()) { - // obj_id array - if (args.getParamType(paramIndex) == Param::OBJECT_ID_ARRAY) - { - const std::vector & param = args.getObjIdArrayParam(paramIndex); - int count = param.size(); - int paramCount = 0; - LocalObjectArrayRefPtr localInstance = createNewObjectArray(count, ms_clsObjId); - for (int j = 0; j < count; ++j) - { - LocalRefPtr id = getObjId(param[j]); - if (id == LocalRef::cms_nullPtr) - break; - setObjectArrayElement(*localInstance, static_cast(paramCount), *id); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - ++paramCount; - } - arg = localInstance; - } - else if (args.getParamType(paramIndex) == Param::CACHED_OBJECT_ID_ARRAY) - { - const std::vector & param = args.getCachedObjIdArrayParam(paramIndex); - int count = param.size(); - int paramCount = 0; - LocalObjectArrayRefPtr localInstance = createNewObjectArray(count, ms_clsObjId); - for (int j = 0; j < count; ++j) - { - LocalRefPtr id = getObjId(param[j]); - if (id == LocalRef::cms_nullPtr) - break; - setObjectArrayElement(*localInstance, static_cast(paramCount), *id); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - ++paramCount; - } - arg = localInstance; - } + setIntField(*stringIdObject, ms_fidStringIdIndexId, + static_cast(param->getTextIndex())); + JavaString text(""); + setObjectField(*stringIdObject, ms_fidStringIdAsciiId, text); } else { - if (args.getParamType(paramIndex) != Param::OBJECT_ID) - break; - arg = getObjId(args.getObjIdParam(paramIndex)); + JavaString text(param->getText().c_str()); + setObjectField(*stringIdObject, ms_fidStringIdAsciiId, text); } + // add the string id to the array + setObjectArrayElement(*localInstance, i, *stringIdObject); + } + arg = localInstance; } break; - - //---------------------------------------------------------------------- - //-- menu info - - case 'm': - { - if (dimensions != 0) - break; - - if (args.getParamType(paramIndex) != Param::OBJECT_MENU_INFO) - break; - - const MenuDataVector & menuVector = args.getObjectMenuRequestDataArrayParam (paramIndex); - - arg = globals.getMenuInfo (); - - if (!convert (menuVector, arg)) - { - return 0; - } - } + case 'E': + //@todo: implement this + break; + case 'A': + if (modifiable || dimensions > 1) break; - - //---------------------------------------------------------------------- - - case 'S': - if (dimensions == 0) + if (dimensions == 1) + { + // attribMod array + if (args.getParamType(paramIndex) != Param::ATTRIB_MOD_ARRAY) + break; + const std::vector & param = args.getAttribModArrayParam(paramIndex); + int count = param.size(); + int paramCount = 0; + for (int j = 0; j < count; ++j) { - if (args.getParamType(paramIndex) != Param::STRING_ID) - break; - if (modifiable) - arg = globals.getNextModifiableStringId(); - else - arg = globals.getNextStringId(); - if (arg == GlobalArrayRef::cms_nullPtr) - break; - const StringId & param = args.getStringIdParam(paramIndex); - JavaString text(param.getTable().c_str()); - setObjectField(*arg, ms_fidStringIdTable, text); - if (param.getText().empty()) + // only send attribMods that actually do something + if (param[j].value != 0) { - setIntField(*arg, ms_fidStringIdIndexId, - static_cast(param.getTextIndex())); - JavaString text(""); - setObjectField(*arg, ms_fidStringIdAsciiId, text); - } - else - { - JavaString text(param.getText().c_str()); - setObjectField(*arg, ms_fidStringIdAsciiId, text); - } - } - else - { - if (args.getParamType(paramIndex) != Param::STRING_ID_ARRAY) - break; - if (modifiable) - break; + arg = globals.getNextAttribMod(); + if (arg == GlobalRef::cms_nullPtr) + return 0; - const std::vector & strings = args.getStringIdArrayParam(paramIndex); - LocalObjectArrayRefPtr localInstance = createNewObjectArray(strings.size(), ms_clsStringId); - - int i; - std::vector::const_iterator iter; - for (i = 0, iter = strings.begin(); iter != strings.end(); ++i, ++iter) - { - const StringId * param = *iter; - // get the next available stringId from the pool - GlobalRefPtr stringIdObject = globals.getNextStringId(); - if (stringIdObject == GlobalRef::cms_nullPtr) - break; - // set the stringId elements - JavaString text(param->getTable().c_str()); - setObjectField(*stringIdObject, ms_fidStringIdTable, text); - if (param->getText().empty()) + JavaString name(AttribModNameManager::getInstance( + ).getAttribModName(param[j].tag)); + setObjectField(*arg, ms_fidAttribModName, name); + if (!AttribMod::isSkillMod(param[j])) { - setIntField(*stringIdObject, ms_fidStringIdIndexId, - static_cast(param->getTextIndex())); - JavaString text(""); - setObjectField(*stringIdObject, ms_fidStringIdAsciiId, text); + setIntField(*arg, ms_fidAttribModType, static_cast(param[j].attrib)); } else { - JavaString text(param->getText().c_str()); - setObjectField(*stringIdObject, ms_fidStringIdAsciiId, text); + JavaString skill(AttribModNameManager::getInstance( + ).getAttribModName(param[j].skill)); + setObjectField(*arg, ms_fidAttribModSkill, skill); + } + setIntField(*arg, ms_fidAttribModValue, param[j].value); + setFloatField(*arg, ms_fidAttribModTime, param[j].sustain); + setFloatField(*arg, ms_fidAttribModAttack, param[j].attack); + setFloatField(*arg, ms_fidAttribModDecay, param[j].decay); + setIntField(*arg, ms_fidAttribModFlags, param[j].flags); + setObjectArrayElement(*ms_attribModList[ms_currentRecursionCount], static_cast(paramCount), *arg); + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + ++paramCount; + } + } + // fill in the rest of ms_attribModList with nullptr + for (; paramCount < MAX_ATTRIB_MOD_PARAMS; ++paramCount) + { + setObjectArrayElement(*ms_attribModList[ms_currentRecursionCount], static_cast(paramCount), *LocalRefParam::cms_nullPtr); + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + } + arg = ms_attribModList[ms_currentRecursionCount]; + } + else + { + // single attribMod + if (args.getParamType(paramIndex) != Param::ATTRIB_MOD) + break; + const AttribMod::AttribMod ¶m = args.getAttribModParam(paramIndex); + arg = globals.getNextAttribMod(); + if (arg == GlobalRef::cms_nullPtr) + return 0; + + JavaString name(AttribModNameManager::getInstance( + ).getAttribModName(param.tag)); + setObjectField(*arg, ms_fidAttribModName, name); + if (!AttribMod::isSkillMod(param)) + { + setIntField(*arg, ms_fidAttribModType, param.attrib); + } + else + { + JavaString skill(AttribModNameManager::getInstance( + ).getAttribModName(param.skill)); + setObjectField(*arg, ms_fidAttribModSkill, skill); + } + setIntField(*arg, ms_fidAttribModValue, param.value); + setFloatField(*arg, ms_fidAttribModTime, param.sustain); + setFloatField(*arg, ms_fidAttribModAttack, param.attack); + setFloatField(*arg, ms_fidAttribModDecay, param.decay); + setIntField(*arg, ms_fidAttribModFlags, param.flags); + } + break; + + case 'M': + if (modifiable || dimensions > 1) + break; + if (dimensions == 1) + { + // mental_state_mod array + if (args.getParamType(paramIndex) != Param::MENTAL_STATE_MOD_ARRAY) + break; + const std::vector & param = args.getMentalStateModArrayParam(paramIndex); + int count = param.size(); + int paramCount = 0; + for (int j = 0; j < count; ++j) + { + // only send mental_state_mods that actually do something + if (param[j].value != 0) + { + arg = globals.getNextMentalStateMod(); + if (arg == GlobalRef::cms_nullPtr) + return 0; + + setIntField(*arg, ms_fidMentalStateModType, param[j].target); + setFloatField(*arg, ms_fidMentalStateModValue, param[j].value); + setFloatField(*arg, ms_fidMentalStateModTime, param[j].timeAtValue); + setFloatField(*arg, ms_fidMentalStateModAttack, param[j].time); + setFloatField(*arg, ms_fidMentalStateModDecay, param[j].decay); + setObjectArrayElement( + *ms_mentalStateModList[ms_currentRecursionCount], + static_cast(paramCount), *arg); + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + ++paramCount; + } + } + // fill in the rest of ms_mentalStateModList with nullptr + for (; paramCount < MAX_MENTAL_STATE_MOD_PARAMS; ++paramCount) + { + setObjectArrayElement( + *ms_mentalStateModList[ms_currentRecursionCount], + static_cast(paramCount), *LocalRefParam::cms_nullPtr); + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; + } + } + arg = ms_mentalStateModList[ms_currentRecursionCount]; + } + else + { + // single mental_state_mod + if (args.getParamType(paramIndex) != Param::MENTAL_STATE_MOD) + break; + const ServerObjectTemplate::MentalStateMod ¶m = args.getMentalStateModParam(paramIndex); + arg = globals.getNextMentalStateMod(); + if (arg == GlobalRef::cms_nullPtr) + return 0; + + setIntField(*arg, ms_fidMentalStateModType, param.target); + setFloatField(*arg, ms_fidMentalStateModValue, param.value); + setFloatField(*arg, ms_fidMentalStateModTime, param.timeAtValue); + setFloatField(*arg, ms_fidMentalStateModAttack, param.time); + setFloatField(*arg, ms_fidMentalStateModDecay, param.decay); + } + break; + + case 'D': + if (!modifiable && dimensions == 0) + { + const ManufactureObjectInterface & schematic = args.getManufactureSchematicParam(paramIndex); + arg = convert(schematic); + } + break; + + case 'I': + if (!modifiable && dimensions == 0) + { + const Crafting::IngredientSlot & slot = args.getIngredientSlotParam(paramIndex); + const ManufactureObjectInterface & schematic = args.getIngredientSlotParamSchematic(paramIndex); + int amountRequired = args.getIngredientSlotParamAmountRequired(paramIndex); + const std::string & appearance = args.getIngredientSlotParamAppearance(paramIndex); + arg = convert(schematic, slot, amountRequired, appearance, ""); + } + break; + + case 'V': + if (!modifiable) + { + if (dimensions == 0) + { + const ValueDictionary & dictionary = args.getValueDictionaryParam(paramIndex); + arg = convert(dictionary); + } + else if (dimensions == 1) + { + const std::vector & param = args.getValueDictionaryArrayParam(paramIndex); + LocalObjectArrayRefPtr localInstance = createNewObjectArray(param.size(), ms_clsDictionary); + + int paramCount = 0; + std::vector::const_iterator iter; + for (iter = param.begin(); iter != param.end(); ++iter) + { + setObjectArrayElement(*localInstance, static_cast(paramCount++), *convert(*iter)); + + if (ms_env->ExceptionCheck()) + { + ms_env->ExceptionDescribe(); + return 0; } - // add the string id to the array - setObjectArrayElement(*localInstance, i, *stringIdObject); } arg = localInstance; } - break; - case 'E': - //@todo: implement this - break; - case 'A': - if (modifiable || dimensions > 1) - break; - if (dimensions == 1) - { - // attribMod array - if (args.getParamType(paramIndex) != Param::ATTRIB_MOD_ARRAY) - break; - const std::vector & param = args.getAttribModArrayParam(paramIndex); - int count = param.size(); - int paramCount = 0; - for (int j = 0; j < count; ++j) - { - // only send attribMods that actually do something - if (param[j].value != 0) - { - arg = globals.getNextAttribMod(); - if (arg == GlobalRef::cms_nullPtr) - return 0; + } + break; - JavaString name(AttribModNameManager::getInstance( - ).getAttribModName(param[j].tag)); - setObjectField(*arg, ms_fidAttribModName, name); - if (!AttribMod::isSkillMod(param[j])) - { - setIntField(*arg, ms_fidAttribModType, static_cast(param[j].attrib)); - } - else - { - JavaString skill(AttribModNameManager::getInstance( - ).getAttribModName(param[j].skill)); - setObjectField(*arg, ms_fidAttribModSkill, skill); - } - setIntField(*arg, ms_fidAttribModValue, param[j].value); - setFloatField(*arg, ms_fidAttribModTime, param[j].sustain); - setFloatField(*arg, ms_fidAttribModAttack, param[j].attack); - setFloatField(*arg, ms_fidAttribModDecay, param[j].decay); - setIntField(*arg, ms_fidAttribModFlags, param[j].flags); - setObjectArrayElement(*ms_attribModList[ms_currentRecursionCount], static_cast(paramCount), *arg); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - ++paramCount; - } - } - // fill in the rest of ms_attribModList with nullptr - for (; paramCount < MAX_ATTRIB_MOD_PARAMS; ++paramCount) - { - setObjectArrayElement(*ms_attribModList[ms_currentRecursionCount], static_cast(paramCount), *LocalRefParam::cms_nullPtr); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - } - arg = ms_attribModList[ms_currentRecursionCount]; - } - else - { - // single attribMod - if (args.getParamType(paramIndex) != Param::ATTRIB_MOD) - break; - const AttribMod::AttribMod ¶m = args.getAttribModParam(paramIndex); - arg = globals.getNextAttribMod(); - if (arg == GlobalRef::cms_nullPtr) - return 0; - - JavaString name(AttribModNameManager::getInstance( - ).getAttribModName(param.tag)); - setObjectField(*arg, ms_fidAttribModName, name); - if (!AttribMod::isSkillMod(param)) - { - setIntField(*arg, ms_fidAttribModType, param.attrib); - } - else - { - JavaString skill(AttribModNameManager::getInstance( - ).getAttribModName(param.skill)); - setObjectField(*arg, ms_fidAttribModSkill, skill); - } - setIntField(*arg, ms_fidAttribModValue, param.value); - setFloatField(*arg, ms_fidAttribModTime, param.sustain); - setFloatField(*arg, ms_fidAttribModAttack, param.attack); - setFloatField(*arg, ms_fidAttribModDecay, param.decay); - setIntField(*arg, ms_fidAttribModFlags, param.flags); - } - break; - - case 'M': - if (modifiable || dimensions > 1) - break; - if (dimensions == 1) - { - // mental_state_mod array - if (args.getParamType(paramIndex) != Param::MENTAL_STATE_MOD_ARRAY) - break; - const std::vector & param = args.getMentalStateModArrayParam(paramIndex); - int count = param.size(); - int paramCount = 0; - for (int j = 0; j < count; ++j) - { - // only send mental_state_mods that actually do something - if (param[j].value != 0) - { - arg = globals.getNextMentalStateMod(); - if (arg == GlobalRef::cms_nullPtr) - return 0; - - setIntField(*arg, ms_fidMentalStateModType, param[j].target); - setFloatField(*arg, ms_fidMentalStateModValue, param[j].value); - setFloatField(*arg, ms_fidMentalStateModTime, param[j].timeAtValue); - setFloatField(*arg, ms_fidMentalStateModAttack, param[j].time); - setFloatField(*arg, ms_fidMentalStateModDecay, param[j].decay); - setObjectArrayElement( - *ms_mentalStateModList[ms_currentRecursionCount], - static_cast(paramCount), *arg); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - ++paramCount; - } - } - // fill in the rest of ms_mentalStateModList with nullptr - for (; paramCount < MAX_MENTAL_STATE_MOD_PARAMS; ++paramCount) - { - setObjectArrayElement( - *ms_mentalStateModList[ms_currentRecursionCount], - static_cast(paramCount), *LocalRefParam::cms_nullPtr); - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - } - arg = ms_mentalStateModList[ms_currentRecursionCount]; - } - else - { - // single mental_state_mod - if (args.getParamType(paramIndex) != Param::MENTAL_STATE_MOD) - break; - const ServerObjectTemplate::MentalStateMod ¶m = args.getMentalStateModParam(paramIndex); - arg = globals.getNextMentalStateMod(); - if (arg == GlobalRef::cms_nullPtr) - return 0; - - setIntField(*arg, ms_fidMentalStateModType, param.target); - setFloatField(*arg, ms_fidMentalStateModValue, param.value); - setFloatField(*arg, ms_fidMentalStateModTime, param.timeAtValue); - setFloatField(*arg, ms_fidMentalStateModAttack, param.time); - setFloatField(*arg, ms_fidMentalStateModDecay, param.decay); - } - break; - - case 'D': - if (!modifiable && dimensions == 0) - { - const ManufactureObjectInterface & schematic = args.getManufactureSchematicParam(paramIndex); - arg = convert(schematic); - } - break; - - case 'I': - if (!modifiable && dimensions == 0) - { - const Crafting::IngredientSlot & slot = args.getIngredientSlotParam(paramIndex); - const ManufactureObjectInterface & schematic = args.getIngredientSlotParamSchematic(paramIndex); - int amountRequired = args.getIngredientSlotParamAmountRequired(paramIndex); - const std::string & appearance = args.getIngredientSlotParamAppearance(paramIndex); - arg = convert(schematic, slot, amountRequired, appearance, ""); - } - break; - - case 'V': - if (!modifiable) - { - if (dimensions == 0) - { - const ValueDictionary & dictionary = args.getValueDictionaryParam(paramIndex); - arg = convert(dictionary); - } - else if (dimensions == 1) - { - const std::vector & param = args.getValueDictionaryArrayParam(paramIndex); - LocalObjectArrayRefPtr localInstance = createNewObjectArray(param.size(), ms_clsDictionary); - - int paramCount = 0; - std::vector::const_iterator iter; - for (iter = param.begin(); iter != param.end(); ++iter) - { - setObjectArrayElement(*localInstance, static_cast(paramCount++), *convert(*iter)); - - if (ms_env->ExceptionCheck()) - { - ms_env->ExceptionDescribe(); - return 0; - } - } - arg = localInstance; - } - } - break; - - default: - DEBUG_REPORT_LOG(true, ("unknown parameter type %c(%#x)\n", argType, - static_cast(argType))); //lint !e571 suspicious cast - return 0; + default: + DEBUG_REPORT_LOG(true, ("unknown parameter type %c(%#x)\n", argType, + static_cast(argType))); //lint !e571 suspicious cast + return 0; } if (arg.get() == nullptr || arg == LocalRef::cms_nullPtr) { DEBUG_REPORT_LOG(true, ("bad parameter, %c%s%d%s\n", argType, - modifiable ? "*" : "", - dimensions, - dimensions > 0 ? " dimensions" : "" + modifiable ? "*" : "", + dimensions, + dimensions > 0 ? " dimensions" : "" )); return 0; } @@ -3832,197 +3822,196 @@ void JavaLibrary::alterScriptParams(jobjectArray jparams, const std::string& arg { switch (argList[i]) { - case 'i': - if (i < argList.size() - 1 && argList[i+1] == '*') + case 'i': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + if (i == argList.size() || argList[i + 1] != '[') { - ++i; - if (i == argList.size() || argList[i+1] != '[') - { - LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalRef::cms_nullPtr) - { - int value = getIntField(*arg, ms_fidModifiableIntData); - args.changeParam(paramIndex, value); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back integer param on script return paramIndex=%d, i=%d", paramIndex, i)); - } - } - else if (i < argList.size() - 1 && argList[i+1] == '[') - { - ++i; - - LocalArrayRefPtr arg = getArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalArrayRef::cms_nullPtr) - { - int count = getArrayLength(*arg); - std::vector * values = new std::vector(count, 0); - jint * jvalues = static_cast(ms_env->GetPrimitiveArrayCritical(static_cast(arg->getValue()), nullptr)); - for (int j = 0; j < count; ++j) - { - values->at(j) = static_cast(jvalues[j]); - } - ms_env->ReleasePrimitiveArrayCritical(static_cast(arg->getValue()), jvalues, JNI_ABORT); - args.changeParam(paramIndex, *values, true); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back integer array param on script return")); - } - } - } - break; - case 'U': - if (i < argList.size() - 1 && argList[i+1] == '*') - { - ++i; - if (i == argList.size() || argList[i+1] != '[') - { - WARNING_STRICT_FATAL(true, ("Error getting back vector param on script return paramIndex=%d, i=%d", paramIndex, i)); - } - else if (i < argList.size() - 1 && argList[i+1] == '[') - { - ++i; - - LocalArrayRefPtr arg = getArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalArrayRef::cms_nullPtr) - { - int count = getArrayLength(*arg); - std::vector * values = new std::vector(count, 0); - jbyte * jvalues = static_cast(ms_env->GetPrimitiveArrayCritical(static_cast(arg->getValue()), nullptr)); - for (int j = 0; j < count; ++j) - { - values->at(j) = static_cast(jvalues[j]); - } - ms_env->ReleasePrimitiveArrayCritical(static_cast(arg->getValue()), jvalues, JNI_ABORT); - args.changeParam(paramIndex, *values, true); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back integer array param on script return")); - } - } - } - break; - - case 'f': - if (i < argList.size() - 1 && argList[i+1] == '*') - { - ++i; LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); if (arg != LocalRef::cms_nullPtr) { - args.changeParam(paramIndex, getFloatField(*arg, ms_fidModifiableFloatData)); + int value = getIntField(*arg, ms_fidModifiableIntData); + args.changeParam(paramIndex, value); } else { - WARNING_STRICT_FATAL(true, ("Error getting back float param on script return")); + WARNING_STRICT_FATAL(true, ("Error getting back integer param on script return paramIndex=%d, i=%d", paramIndex, i)); } } - break; - case 's': - if (i < argList.size() - 1 && argList[i+1] == '*') + else if (i < argList.size() - 1 && argList[i + 1] == '[') { ++i; - if (i < argList.size() - 1 && argList[i+1] == '[') - { - ++i; - LocalObjectArrayRefPtr arg = getObjectArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalObjectArrayRef::cms_nullPtr) - { - std::vector * strings = new std::vector(); - getStringArray(*arg, *strings); - args.changeParam(paramIndex, *strings, true); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back string array param on script return")); - } - } - } - break; - case 'u': - if (i < argList.size() - 1 && argList[i+1] == '*') - { - ++i; - if (i < argList.size() - 1 && argList[i+1] == '[') - { - ++i; - LocalObjectArrayRefPtr arg = getObjectArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalObjectArrayRef::cms_nullPtr) - { - std::vector * strings = new std::vector(); - getStringArray(*arg, *strings); - args.changeParam(paramIndex, *strings, true); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back string array param on script return")); - } - } - } - break; - case 'S': - if (i < argList.size() - 1 && argList[i+1] == '*') - { - ++i; - StringId * value = new StringId(); - LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - if (arg != LocalRef::cms_nullPtr) - { - // get the string id table - JavaStringPtr table = getStringField(*arg, ms_fidStringIdTable); - std::string localString; - convert(*table, localString); - value->setTable(localString); - // get the string id text, if it is not nullptr/empty, use it - localString.clear(); - JavaStringPtr text = getStringField(*arg, ms_fidStringIdAsciiId); - if (text != JavaString::cms_nullPtr) - convert(*text, localString); - if (localString[0] != '\0') - value->setText(localString); - else - { - // use the textIndex field instead - jint textIndex = getIntField(*arg, ms_fidStringIdIndexId); - value->setTextIndex(textIndex); - } - args.changeParam(paramIndex, *value, true); - } - else - { - WARNING_STRICT_FATAL(true, ("Error getting back string id param on script return")); - } - } - break; + LocalArrayRefPtr arg = getArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalArrayRef::cms_nullPtr) + { + int count = getArrayLength(*arg); + std::vector * values = new std::vector(count, 0); + jint * jvalues = static_cast(ms_env->GetPrimitiveArrayCritical(static_cast(arg->getValue()), nullptr)); + for (int j = 0; j < count; ++j) + { + values->at(j) = static_cast(jvalues[j]); + } + ms_env->ReleasePrimitiveArrayCritical(static_cast(arg->getValue()), jvalues, JNI_ABORT); + args.changeParam(paramIndex, *values, true); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back integer array param on script return")); + } + } + } + break; + case 'U': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + if (i == argList.size() || argList[i + 1] != '[') + { + WARNING_STRICT_FATAL(true, ("Error getting back vector param on script return paramIndex=%d, i=%d", paramIndex, i)); + } + else if (i < argList.size() - 1 && argList[i + 1] == '[') + { + ++i; + + LocalArrayRefPtr arg = getArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalArrayRef::cms_nullPtr) + { + int count = getArrayLength(*arg); + std::vector * values = new std::vector(count, 0); + jbyte * jvalues = static_cast(ms_env->GetPrimitiveArrayCritical(static_cast(arg->getValue()), nullptr)); + for (int j = 0; j < count; ++j) + { + values->at(j) = static_cast(jvalues[j]); + } + ms_env->ReleasePrimitiveArrayCritical(static_cast(arg->getValue()), jvalues, JNI_ABORT); + args.changeParam(paramIndex, *values, true); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back integer array param on script return")); + } + } + } + break; + + case 'f': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalRef::cms_nullPtr) + { + args.changeParam(paramIndex, getFloatField(*arg, ms_fidModifiableFloatData)); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back float param on script return")); + } + } + break; + case 's': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + if (i < argList.size() - 1 && argList[i + 1] == '[') + { + ++i; + LocalObjectArrayRefPtr arg = getObjectArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalObjectArrayRef::cms_nullPtr) + { + std::vector * strings = new std::vector(); + getStringArray(*arg, *strings); + args.changeParam(paramIndex, *strings, true); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back string array param on script return")); + } + } + } + break; + case 'u': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + if (i < argList.size() - 1 && argList[i + 1] == '[') + { + ++i; + LocalObjectArrayRefPtr arg = getObjectArrayArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalObjectArrayRef::cms_nullPtr) + { + std::vector * strings = new std::vector(); + getStringArray(*arg, *strings); + args.changeParam(paramIndex, *strings, true); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back string array param on script return")); + } + } + } + break; + case 'S': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; + StringId * value = new StringId(); + LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + if (arg != LocalRef::cms_nullPtr) + { + // get the string id table + JavaStringPtr table = getStringField(*arg, ms_fidStringIdTable); + std::string localString; + convert(*table, localString); + value->setTable(localString); + // get the string id text, if it is not nullptr/empty, use it + localString.clear(); + JavaStringPtr text = getStringField(*arg, ms_fidStringIdAsciiId); + if (text != JavaString::cms_nullPtr) + convert(*text, localString); + if (localString[0] != '\0') + value->setText(localString); + else + { + // use the textIndex field instead + jint textIndex = getIntField(*arg, ms_fidStringIdIndexId); + value->setTextIndex(textIndex); + } + args.changeParam(paramIndex, *value, true); + } + else + { + WARNING_STRICT_FATAL(true, ("Error getting back string id param on script return")); + } + } + break; //---------------------------------------------------------------------- //-- menu info - case 'm': - if (i < argList.size() - 1 && argList[i+1] == '*') - { - ++i; + case 'm': + if (i < argList.size() - 1 && argList[i + 1] == '*') + { + ++i; - LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); - MenuDataVector * menuVector = new MenuDataVector; - convert(arg, *menuVector); - args.changeParam (paramIndex, *menuVector, true); - } - break; + LocalRefPtr arg = getObjectArrayElement(LocalObjectArrayRefParam(jparams), paramIndex + 1); + MenuDataVector * menuVector = new MenuDataVector; + convert(arg, *menuVector); + args.changeParam(paramIndex, *menuVector, true); + } + break; //---------------------------------------------------------------------- - default: - break; + default: + break; } // skip extra characters in the arglist if (i < argList.size() - 1) { - if (argList[i+1] == '[' || argList[i+1] == '*') + if (argList[i + 1] == '[' || argList[i + 1] == '*') ++i; } } @@ -4053,7 +4042,7 @@ int JavaLibrary::runScripts(const NetworkId & caller, caller.getValueString().c_str(), method.c_str())); if (ms_env == nullptr || ms_clsObject == nullptr) - { + { DEBUG_REPORT_LOG(ConfigServerGame::getJavaConsoleDebugMessages(), ( "JavaLibrary::runScripts exit, self = %s, method = %s\n", caller.getValueString().c_str(), method.c_str())); @@ -4071,9 +4060,9 @@ int JavaLibrary::runScripts(const NetworkId & caller, if (ms_currentRecursionCount >= MAX_RECURSION_COUNT) { DEBUG_REPORT_LOG(true, ("JavaLibrary::runScripts (C version) max recursion " - "count reached, method = %s, object id = %s, dumping script!\n", + "count reached, method = %s, object id = %s, dumping script!\n", method.c_str(), caller.getValueString().c_str())); - LOG("ScriptInvestigation", ("runSCripts failed because max recursion count reached")); + LOG("ScriptInvestigation", ("runSCripts failed because max recursion count reached")); return SCRIPT_OVERRIDE; } @@ -4097,7 +4086,7 @@ int JavaLibrary::runScripts(const NetworkId & caller, DEBUG_REPORT_LOG(ConfigServerGame::getJavaConsoleDebugMessages(), ( "JavaLibrary::runScripts exit, self = %s, method = %s\n", caller.getValueString().c_str(), method.c_str())); - LOG("ScriptInvestigation", ("runSCripts failed because could not convert params")); + LOG("ScriptInvestigation", ("runSCripts failed because could not convert params")); return SCRIPT_OVERRIDE; } @@ -4105,7 +4094,7 @@ int JavaLibrary::runScripts(const NetworkId & caller, jint result = callScriptEntry(jmethod, jparams->getValue()); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4131,7 +4120,7 @@ int JavaLibrary::runScripts(const NetworkId & caller, DEBUG_REPORT_LOG(ConfigServerGame::getJavaConsoleDebugMessages(), ( "JavaLibrary::runScripts exit, self = %s, method = %s\n", caller.getValueString().c_str(), method.c_str())); - LOG("ScriptInvestigation", ("runSCripts failed because exception after delete")); + LOG("ScriptInvestigation", ("runSCripts failed because exception after delete")); return SCRIPT_OVERRIDE; } } @@ -4157,7 +4146,7 @@ int JavaLibrary::runScripts(const NetworkId & caller, * * @return SCRIPT_CONTINUE or SCRIPT_OVERRIDE */ -int JavaLibrary::runScripts(const NetworkId & caller, +int JavaLibrary::runScripts(const NetworkId & caller, const std::string& method, const std::string& argList, const StringVector_t &args) { DEBUG_WARNING(true, ("Running scripts from the console not currently supported")); @@ -4191,7 +4180,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, script.c_str(), caller.getValueString().c_str(), method.c_str())); if (ms_env == nullptr || ms_midRunOne == nullptr || ms_clsObject == nullptr) - { + { if (!ms_env) { LOG("ScriptInvestigation", ("runSCripts2 failed because env was nullptr")); @@ -4204,7 +4193,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, { LOG("ScriptInvestigation", ("runSCripts2 failed because clsObject was nullptr")); } - + return SCRIPT_OVERRIDE; } @@ -4213,7 +4202,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, DEBUG_REPORT_LOG(true, ("JavaLibrary::runScript (C version) max recursion " "count reached, script = %s, method = %s, object id = %s, dumping " "script!\n", script.c_str(), method.c_str(), caller.getValueString().c_str())); - LOG("ScriptInvestigation", ("runSCripts2 failed because max recursion count reached")); + LOG("ScriptInvestigation", ("runSCripts2 failed because max recursion count reached")); return SCRIPT_OVERRIDE; } @@ -4222,14 +4211,14 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts2 failed because of exception")); + LOG("ScriptInvestigation", ("runSCripts2 failed because of exception")); return SCRIPT_OVERRIDE; } JavaString jmethod(method.c_str()); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts2 failed because of exception2")); + LOG("ScriptInvestigation", ("runSCripts2 failed because of exception2")); return SCRIPT_OVERRIDE; } @@ -4238,15 +4227,15 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (jparams == LocalObjectArrayRef::cms_nullPtr) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts2 failed because of exception3")); + LOG("ScriptInvestigation", ("runSCripts2 failed because of exception3")); return SCRIPT_OVERRIDE; } // invoke the script method jint result = callScriptEntry(jscript, jmethod, jparams->getValue()); - + //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4271,7 +4260,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runScript failed because of exception4")); + LOG("ScriptInvestigation", ("runScript failed because of exception4")); return SCRIPT_OVERRIDE; } } @@ -4308,7 +4297,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, PROFILER_AUTO_BLOCK_CHECK_DEFINE("JavaLibrary::runScript"); DEBUG_REPORT_LOG(true, ("JavaLibrary::runScript %s enter, method = %s\n", - script.c_str(), method.c_str())); + script.c_str(), method.c_str())); if (ms_env == nullptr || ms_midRunOne == nullptr || ms_clsObject == nullptr) { @@ -4331,9 +4320,9 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, { DEBUG_REPORT_LOG(true, ("JavaLibrary::runScript (Java version) max " "recursion count reached, script = %s, method = %s, object id = %s, " - "dumping script!\n", script.c_str(), method.c_str(), + "dumping script!\n", script.c_str(), method.c_str(), caller.getValueString().c_str())); - LOG("ScriptInvestigation", ("runSCripts3 failed because of max recursion count")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of max recursion count")); return SCRIPT_OVERRIDE; } @@ -4342,14 +4331,14 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts3 failed because of exception")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of exception")); return SCRIPT_OVERRIDE; } JavaString jmethod(method.c_str()); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts3 failed because of exception2")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of exception2")); return SCRIPT_OVERRIDE; } @@ -4362,7 +4351,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts3 failed because of exception3")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of exception3")); return SCRIPT_OVERRIDE; } for (int i = 1; i < argsCount; ++i) @@ -4377,7 +4366,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts3 failed because of exception4")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of exception4")); return SCRIPT_OVERRIDE; } @@ -4385,7 +4374,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, jint result = callScriptEntry(jscript, jmethod, jparams->getValue()); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4394,7 +4383,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts3 failed because of exception5")); + LOG("ScriptInvestigation", ("runSCripts3 failed because of exception5")); return SCRIPT_OVERRIDE; } } @@ -4408,7 +4397,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, } DEBUG_REPORT_LOG(true, ("JavaLibrary::runScript %s exit, method = %s\n", - script.c_str(), method.c_str())); + script.c_str(), method.c_str())); return result; } // JavaLibrary::runScript(jobjectArray args) @@ -4451,7 +4440,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, { LOG("ScriptInvestigation", ("runSCripts4 failed because clsObject was nullptr")); } - + return SCRIPT_OVERRIDE; } @@ -4459,9 +4448,9 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, { DEBUG_REPORT_LOG(true, ("JavaLibrary::runScript (console version) max " "recursion count reached, script = %s, method = %s, object id = %s, " - "dumping script!\n", script.c_str(), method.c_str(), + "dumping script!\n", script.c_str(), method.c_str(), caller.getValueString().c_str())); - LOG("ScriptInvestigation", ("runSCripts4 failed because of max recursion count")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of max recursion count")); return SCRIPT_OVERRIDE; } @@ -4470,13 +4459,13 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception")); return SCRIPT_OVERRIDE; } JavaString jmethod(method.c_str()); if (ms_env->ExceptionCheck()) { - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception2")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception2")); ms_env->ExceptionDescribe(); return SCRIPT_OVERRIDE; } @@ -4487,7 +4476,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception3")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception3")); return SCRIPT_OVERRIDE; } // add the "self" parameter @@ -4496,7 +4485,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception4")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception4")); return SCRIPT_OVERRIDE; } @@ -4507,55 +4496,55 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, const char *stringArg = Unicode::wideToNarrow(args[i]).c_str(); switch (argList[i]) { - case 'i': - { - jint param = atoi(stringArg); - arg = createNewObject(ms_clsInteger, ms_midInteger, param); - } - break; - case 'f': - { - jfloat param = static_cast(atof(stringArg)); - arg = createNewObject(ms_clsFloat, ms_midFloat, param); - } - break; - case 's': - { - arg = createNewString(stringArg); - } - break; - case 'u': - { - arg = createNewString(args[i].c_str(), static_cast(args[i].size())); - } - break; - case 'O': - { - arg = getObjId(NetworkId(stringArg)); - if (arg == LocalRef::cms_nullPtr) - { - LOG("ScriptInvestigation", ("runSCripts4 failed because of bad objid")); - return SCRIPT_OVERRIDE; - } - } - break; - default: - DEBUG_REPORT_LOG(true, ("unknown parameter type %c(%#x)\n", argList[i], - static_cast(argList[i]))); //lint !e571 suspicious cast - LOG("ScriptInvestigation", ("runSCripts4 failed because of param")); + case 'i': + { + jint param = atoi(stringArg); + arg = createNewObject(ms_clsInteger, ms_midInteger, param); + } + break; + case 'f': + { + jfloat param = static_cast(atof(stringArg)); + arg = createNewObject(ms_clsFloat, ms_midFloat, param); + } + break; + case 's': + { + arg = createNewString(stringArg); + } + break; + case 'u': + { + arg = createNewString(args[i].c_str(), static_cast(args[i].size())); + } + break; + case 'O': + { + arg = getObjId(NetworkId(stringArg)); + if (arg == LocalRef::cms_nullPtr) + { + LOG("ScriptInvestigation", ("runSCripts4 failed because of bad objid")); return SCRIPT_OVERRIDE; + } + } + break; + default: + DEBUG_REPORT_LOG(true, ("unknown parameter type %c(%#x)\n", argList[i], + static_cast(argList[i]))); //lint !e571 suspicious cast + LOG("ScriptInvestigation", ("runSCripts4 failed because of param")); + return SCRIPT_OVERRIDE; } if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception5")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception5")); return SCRIPT_OVERRIDE; } setObjectArrayElement(*jparams, static_cast(i + 1), *arg); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception6")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception6")); return SCRIPT_OVERRIDE; } } @@ -4564,7 +4553,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, jint result = callScriptEntry(jscript, jmethod, jparams->getValue()); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4573,7 +4562,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("runSCripts4 failed because of exception7")); + LOG("ScriptInvestigation", ("runSCripts4 failed because of exception7")); return SCRIPT_OVERRIDE; } } @@ -4590,7 +4579,7 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, } // JavaLibrary::runScript(StringVector_t args) /** - * Calls a special function on a script that returns a string instead of an + * Calls a special function on a script that returns a string instead of an * integer. The script function has no "self" associated with it. * * @param script the name of the script to call @@ -4600,10 +4589,10 @@ int JavaLibrary::runScript(const NetworkId & caller, const std::string& script, * * @return the string returned from the script function */ -std::string JavaLibrary::callScriptConsoleHandler(const std::string & script, +std::string JavaLibrary::callScriptConsoleHandler(const std::string & script, const std::string & method, const std::string & argList, ScriptParams & args) { -static const std::string errorReturnString; + static const std::string errorReturnString; // get the current env count, in case we reset our Java connection int currentEnvCount = ms_envCount; @@ -4613,11 +4602,11 @@ static const std::string errorReturnString; GlobalInstances globals; DEBUG_REPORT_LOG(ConfigServerGame::getJavaConsoleDebugMessages(), ( - "JavaLibrary::runScript %s enter, method = %s\n", script.c_str(), + "JavaLibrary::runScript %s enter, method = %s\n", script.c_str(), method.c_str())); if (ms_env == nullptr || ms_midRunConsoleHandler == nullptr || ms_clsObject == nullptr) - { + { if (!ms_env) { LOG("ScriptInvestigation", ("runSCripts2 failed because env was nullptr")); @@ -4630,7 +4619,7 @@ static const std::string errorReturnString; { LOG("ScriptInvestigation", ("runSCripts2 failed because clsObject was nullptr")); } - + return errorReturnString; } @@ -4648,14 +4637,14 @@ static const std::string errorReturnString; if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception")); + LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception")); return errorReturnString; } JavaString jmethod(method.c_str()); if (ms_env->ExceptionCheck()) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception2")); + LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception2")); return errorReturnString; } @@ -4664,7 +4653,7 @@ static const std::string errorReturnString; if (jparams == LocalObjectArrayRef::cms_nullPtr) { ms_env->ExceptionDescribe(); - LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception3")); + LOG("ScriptInvestigation", ("callScriptConsoleHandler failed because of exception3")); return errorReturnString; } @@ -4672,7 +4661,7 @@ static const std::string errorReturnString; jstring result = callScriptConsoleHandlerEntry(jscript, jmethod, jparams->getValue()); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4777,7 +4766,7 @@ int JavaLibrary::callMessages(const NetworkId & caller, const std::string & meth { LOG("ScriptInvestigation", ("callMessages failed because clsObject was nullptr")); } - + return SCRIPT_OVERRIDE; } @@ -4812,13 +4801,13 @@ int JavaLibrary::callMessages(const NetworkId & caller, const std::string & meth { LOG("ScriptRecursion", ("callMessages recursion %d", ms_currentRecursionCount)); } - result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midCallMessages, jmethod.getValue(), caller.getValue(), jdictionary); - --ms_currentRecursionCount; + result = ms_env->CallStaticIntMethod(ms_clsScriptEntry, ms_midCallMessages, jmethod.getValue(), caller.getValue(), jdictionary); + --ms_currentRecursionCount; result = handleScriptEntryCleanup(result); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4882,7 +4871,7 @@ int JavaLibrary::callMessage(const NetworkId & caller, const std::string & scrip script.c_str(), method.c_str(), caller.getValueString().c_str())); LOG("ScriptInvestigation", ("callMessage failed because max recursion count")); return SCRIPT_OVERRIDE; - } + } const JavaDictionary * dictionary = dynamic_cast(&data); if (dictionary == nullptr) @@ -4955,7 +4944,7 @@ int JavaLibrary::callMessage(const NetworkId & caller, const std::string & scrip int result = callScriptEntry(jscript, jmethod, jparams->getValue()); //========================================================================== - // !!IMPORTANT after this point our env pointer may have changed, we can't + // !!IMPORTANT after this point our env pointer may have changed, we can't // call any JNI functions on objects created with the old pointer!! //========================================================================== @@ -4991,7 +4980,7 @@ int JavaLibrary::callMessage(const NetworkId & caller, const std::string & scrip const bool JavaLibrary::getClassName(const jclass & sourceClass, std::string & target) { bool result = false; - if(ms_env) + if (ms_env) { const LocalRefParamPtr classPtr(new LocalRefParam(sourceClass)); JavaStringPtr s = callStringMethod(*classPtr, JavaLibrary::ms_midClassGetName); @@ -5070,12 +5059,12 @@ bool JavaLibrary::unpackDictionary(const std::vector & packedData, uint32 crc = 0; int dataLen = packedData.size(); const int8 * data = &packedData[0]; - - std::vector::const_iterator result = std::find(packedData.begin(), + + std::vector::const_iterator result = std::find(packedData.begin(), packedData.end(), '*'); if (result != packedData.end()) { - // double-check: verify all the characters before the marker are + // double-check: verify all the characters before the marker are // digits int i; int markerPos = packedData.end() - result; @@ -5087,7 +5076,7 @@ bool JavaLibrary::unpackDictionary(const std::vector & packedData, } if (i == markerPos) { - data = &data[markerPos+1]; + data = &data[markerPos + 1]; // verify the crc dataLen -= markerPos + 1; uint32 dataCrc = Crc::calculate(data, dataLen); @@ -5099,7 +5088,7 @@ bool JavaLibrary::unpackDictionary(const std::vector & packedData, } } } - + if (data != nullptr && *data != '\0') { LocalByteArrayRefPtr jdata = createNewByteArray(dataLen); @@ -5133,7 +5122,7 @@ const bool JavaLibrary::convert(const JavaStringParam & source, std::string & ta { jboolean isCopy(false); const char * temp = ms_env->GetStringUTFChars(source.getValue(), &isCopy); - if(temp) + if (temp) { target = temp; ms_env->ReleaseStringUTFChars(source.getValue(), temp); @@ -5200,14 +5189,13 @@ const bool JavaLibrary::convert(const JavaDictionary & source, std::vector return result; } // JavaLibrary::convert(const JavaDictionary &, std::string &) - //======================================================================= const bool JavaLibrary::convert(const std::map & source, JavaDictionaryPtr & target) { std::vector > sourceData; - std::map:: const_iterator i; - for(i = source.begin(); i != source.end(); ++i) + std::map::const_iterator i; + for (i = source.begin(); i != source.end(); ++i) { sourceData.push_back(*i); } @@ -5226,7 +5214,7 @@ const bool JavaLibrary::convert(const std::vector > return false; std::vector >::const_iterator i; - for(i = source.begin(); i != source.end(); ++i) + for (i = source.begin(); i != source.end(); ++i) { int value = (*i).second; JavaString name((*i).first.c_str()); @@ -5247,7 +5235,7 @@ const bool JavaLibrary::convert(const std::vector > >::const_iterator i; - for(i = source.begin(); i != source.end(); ++i) + for (i = source.begin(); i != source.end(); ++i) { int value = (*i).second.first; JavaString name((*i).first.c_str()); @@ -5268,8 +5256,8 @@ const bool JavaLibrary::convert(const std::vector > return false; std::vector >::const_iterator i; - for(i = source.begin(); i != source.end(); ++i) -{ + for (i = source.begin(); i != source.end(); ++i) + { JavaString name((*i).first.c_str()); bool value = (*i).second; callObjectMethod(*target, ms_midDictionaryPutBool, name.getValue(), value); @@ -5280,288 +5268,287 @@ const bool JavaLibrary::convert(const std::vector > //======================================================================= namespace ScriptConversion { - -const bool convert(const jobject & source, Vector & target, NetworkId & targetCell, const Vector & i_default) -{ - if (!convert(source, target, targetCell)) + const bool convert(const jobject & source, Vector & target, NetworkId & targetCell, const Vector & i_default) { - target = i_default; - targetCell = NetworkId::cms_invalid; + if (!convert(source, target, targetCell)) + { + target = i_default; + targetCell = NetworkId::cms_invalid; + } + return true; } - return true; -} -const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) -{ - if (!JavaLibrary::getEnv()) - return false; + const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) + { + if (!JavaLibrary::getEnv()) + return false; - bool result = false; + bool result = false; int count = source.size(); - target = createNewObjectArray(count, JavaLibrary::ms_clsString); - if (target != LocalObjectArrayRef::cms_nullPtr) + target = createNewObjectArray(count, JavaLibrary::ms_clsString); + if (target != LocalObjectArrayRef::cms_nullPtr) { result = true; for (int i = 0; i < count; ++i) { if (source[i] != nullptr) { - JavaString targetElement(*source[i]); - setObjectArrayElement(*target, i, targetElement); + JavaString targetElement(*source[i]); + setObjectArrayElement(*target, i, targetElement); + } } } - } - return result; -} - -const bool convert(const jobject source, StringId & target) -{ - if (source == 0) - return false; - - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (env->IsInstanceOf(source, JavaLibrary::ms_clsStringId) == JNI_FALSE) - return false; - - // @todo: it would be nice if we had a known max length for the table - // name and text in order to use buffers to get the strings - - // get the table - { - JavaStringPtr tempString = getStringField(LocalRefParam(source), JavaLibrary::ms_fidStringIdTable); - std::string localString; - JavaLibrary::convert(*tempString, localString); - target.setTable(localString); + return result; } - // get the text + const bool convert(const jobject source, StringId & target) { - JavaStringPtr tempString = getStringField(LocalRefParam(source), JavaLibrary::ms_fidStringIdAsciiId); - if (tempString != JavaString::cms_nullPtr && getStringLength(*tempString) > 0) + if (source == 0) + return false; + + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (env->IsInstanceOf(source, JavaLibrary::ms_clsStringId) == JNI_FALSE) + return false; + + // @todo: it would be nice if we had a known max length for the table + // name and text in order to use buffers to get the strings + + // get the table { + JavaStringPtr tempString = getStringField(LocalRefParam(source), JavaLibrary::ms_fidStringIdTable); std::string localString; JavaLibrary::convert(*tempString, localString); - target.setText(localString); + target.setTable(localString); } - else + + // get the text { - // get the text index - jint textIndex = env->GetIntField(source, JavaLibrary::ms_fidStringIdIndexId); - target.setTextIndex(textIndex); + JavaStringPtr tempString = getStringField(LocalRefParam(source), JavaLibrary::ms_fidStringIdAsciiId); + if (tempString != JavaString::cms_nullPtr && getStringLength(*tempString) > 0) + { + std::string localString; + JavaLibrary::convert(*tempString, localString); + target.setText(localString); + } + else + { + // get the text index + jint textIndex = env->GetIntField(source, JavaLibrary::ms_fidStringIdIndexId); + target.setTextIndex(textIndex); + } } + + return true; } - return true; -} - -const bool convert(const LocalRefParam & source, StringId & target) -{ - return convert(source.getValue(), target); -} - -const bool convert(const StringId & source, LocalRefPtr & target) -{ - if (!JavaLibrary::getEnv()) - return false; - - target = allocObject(JavaLibrary::ms_clsStringId); - if (target == LocalRef::cms_nullPtr) - return false; - - // convert the table + const bool convert(const LocalRefParam & source, StringId & target) { - JavaString tempString(source.getTable().c_str()); - setObjectField(*target, JavaLibrary::ms_fidStringIdTable, tempString); + return convert(source.getValue(), target); } - // convert the text + const bool convert(const StringId & source, LocalRefPtr & target) { - JavaString tempString(source.getText().c_str()); - setObjectField(*target, JavaLibrary::ms_fidStringIdAsciiId, tempString); + if (!JavaLibrary::getEnv()) + return false; + + target = allocObject(JavaLibrary::ms_clsStringId); + if (target == LocalRef::cms_nullPtr) + return false; + + // convert the table + { + JavaString tempString(source.getTable().c_str()); + setObjectField(*target, JavaLibrary::ms_fidStringIdTable, tempString); + } + + // convert the text + { + JavaString tempString(source.getText().c_str()); + setObjectField(*target, JavaLibrary::ms_fidStringIdAsciiId, tempString); + } + + // convert the index + setIntField(*target, JavaLibrary::ms_fidStringIdIndexId, source.getTextIndex()); + return true; } - // convert the index - setIntField(*target, JavaLibrary::ms_fidStringIdIndexId, source.getTextIndex()); - return true; -} - -const bool convert(const std::vector & source, LocalObjectArrayRefPtr & strArray) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (env->ExceptionCheck()) + const bool convert(const std::vector & source, LocalObjectArrayRefPtr & strArray) { - env->ExceptionDescribe(); - return false; - } + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; - strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); - std::vector::const_iterator i; - int index = 0; - for(i = source.begin(); i != source.end(); ++i) - { - const char * s = (*i).c_str(); - JavaString js(s); if (env->ExceptionCheck()) { env->ExceptionDescribe(); return false; } - setObjectArrayElement(*strArray, index, js); + + strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); + std::vector::const_iterator i; + int index = 0; + for (i = source.begin(); i != source.end(); ++i) + { + const char * s = (*i).c_str(); + JavaString js(s); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + setObjectArrayElement(*strArray, index, js); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + ++index; + } + return true; + } + + const bool convert(const std::vector & source, LocalObjectArrayRefPtr & strArray) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + if (env->ExceptionCheck()) { env->ExceptionDescribe(); return false; } - ++index; - } - return true; -} -const bool convert(const std::vector & source, LocalObjectArrayRefPtr & strArray) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - return false; + strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); + std::vector::const_iterator i; + int index = 0; + for (i = source.begin(); i != source.end(); ++i) + { + JavaString js(*i); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + setObjectArrayElement(*strArray, index, js); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + ++index; + } + return true; } - strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); - std::vector::const_iterator i; - int index = 0; - for(i = source.begin(); i != source.end(); ++i) + const bool convert(const std::set & source, LocalObjectArrayRefPtr & strArray) { - JavaString js(*i); + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + if (env->ExceptionCheck()) { env->ExceptionDescribe(); return false; } - setObjectArrayElement(*strArray, index, js); - if (env->ExceptionCheck()) + + strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); + std::set::const_iterator i; + int index = 0; + for (i = source.begin(); i != source.end(); ++i) { - env->ExceptionDescribe(); - return false; + const std::string name = (*i).getName(); + const char * const s = name.c_str(); + + JavaString js(s); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + setObjectArrayElement(*strArray, index, js); + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + return false; + } + ++index; } - ++index; - } - return true; -} -const bool convert(const std::set & source, LocalObjectArrayRefPtr & strArray) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - return false; + return true; } - strArray = createNewObjectArray(static_cast(source.size()), JavaLibrary::ms_clsString); - std::set::const_iterator i; - int index = 0; - for(i = source.begin(); i != source.end(); ++i) + const bool convert(const jobjectArray & source, stdvector::fwd & target) { - const std::string name = (*i).getName(); - const char * const s = name.c_str(); + JNIEnv * env = JavaLibrary::getEnv(); + if (!env || !source) + return false; - JavaString js(s); - if (env->ExceptionCheck()) + int count = env->GetArrayLength(source); + target.resize(count, ""); + + std::string tempString; + for (int i = 0; i < count; ++i) { - env->ExceptionDescribe(); - return false; + JavaStringPtr s = getStringArrayElement(LocalObjectArrayRefParam(source), i); + if (s != JavaString::cms_nullPtr) + { + if (JavaLibrary::convert(*s, tempString)) + target[i] = tempString; + } } - setObjectArrayElement(*strArray, index, js); - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - return false; - } - ++index; + return true; } - return true; -} - -const bool convert(const jobjectArray & source, stdvector::fwd & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env || !source) - return false; - - int count = env->GetArrayLength(source); - target.resize(count, ""); - - std::string tempString; - for (int i = 0; i < count; ++i) + const bool convert(const jlongArray & source, std::vector &results) { - JavaStringPtr s = getStringArrayElement(LocalObjectArrayRefParam(source), i); - if (s != JavaString::cms_nullPtr) -{ - if (JavaLibrary::convert(*s, tempString)) - target[i] = tempString; - } - } - return true; -} - -const bool convert(const jlongArray & source, std::vector &results) -{ - bool result = false; - JNIEnv * env = JavaLibrary::getEnv(); - if (!env || !source) - return false; + bool result = false; + JNIEnv * env = JavaLibrary::getEnv(); + if (!env || !source) + return false; jsize count = env->GetArrayLength(source); jsize i; result = true; - jlong jlongTmp; - for (i=0; iGetLongArrayRegion(source, i, 1, &jlongTmp); - NetworkId nid(jlongTmp); - if (!nid) - { + env->GetLongArrayRegion(source, i, 1, &jlongTmp); + NetworkId nid(jlongTmp); + if (!nid) + { result = false; - } - else - { + } + else + { results.push_back(nid); - } + } } - return result; -} + return result; + } -const bool convert(const jlongArray & source, std::vector &results) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env || !source) + const bool convert(const jlongArray & source, std::vector &results) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env || !source) return false; - bool result = false; + bool result = false; jsize count = env->GetArrayLength(source); jsize i; result = true; - for (i=0; iGetLongArrayRegion(source, i, 1, &id); + jlong id; + env->GetLongArrayRegion(source, i, 1, &id); ServerObject * object = 0; - if (!JavaLibrary::getObject(id, object)) + if (!JavaLibrary::getObject(id, object)) { result = false; } @@ -5571,855 +5558,852 @@ const bool convert(const jlongArray & source, std::vector &resul } } - return result; -} + return result; + } -const bool convert(const std::vector &source, LocalLongArrayRefPtr & result) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) + const bool convert(const std::vector &source, LocalLongArrayRefPtr & result) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) return false; - int count = source.size(); - bool rv = true; - int resultCount = 0; - for (int i = 0; i < count; ++i) - { - if (source[i]) + int count = source.size(); + bool rv = true; + int resultCount = 0; + for (int i = 0; i < count; ++i) { - resultCount++; - } - } - result = createNewLongArray(resultCount); - for (int j = 0; j < count; ++j) - { - if (source[j]) - { - jlong arg = (source[j]->getNetworkId()).getValue(); - if (arg == 0) + if (source[i]) { - rv = false; - break; + resultCount++; } - setLongArrayRegion(*result, static_cast(--resultCount), 1, &arg); } - } - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - rv = false; - } - return rv; -} - -const bool convert(const std::vector &source, LocalLongArrayRefPtr & result) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - int count = source.size(); - bool rv = true; - int i; - int resultCount = 0; - for (i = 0; i < count; ++i) - { - if (source[i].isValid()) + result = createNewLongArray(resultCount); + for (int j = 0; j < count; ++j) { - resultCount++; - } - } - result = createNewLongArray(resultCount); - jlong jlongTmp; - for (int j = 0; j < count; ++j) - { - if (source[j].isValid()) - { - jlongTmp = source[j].getValue(); - - setLongArrayRegion(*result, static_cast(--resultCount), 1, &jlongTmp); + if (source[j]) + { + jlong arg = (source[j]->getNetworkId()).getValue(); + if (arg == 0) + { + rv = false; + break; + } + setLongArrayRegion(*result, static_cast(--resultCount), 1, &arg); } - else + } + if (env->ExceptionCheck()) { + env->ExceptionDescribe(); rv = false; } + return rv; } - if (env->ExceptionCheck()) + + const bool convert(const std::vector &source, LocalLongArrayRefPtr & result) { - env->ExceptionDescribe(); - rv = false; - } - return rv; -} + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; -const bool convert(const jobject & source, Vector &target, NetworkId & targetCell) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (!source) - return false; - - ServerObject * object = 0; - - if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) - { - target.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); - target.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); - target.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); - - LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); - targetCell = JavaLibrary::getNetworkId(*cell); - return true; - } - else if (JavaLibrary::getObject(source, object)) - { - target = object->getPosition_p(); - const Object * cell = ContainerInterface::getContainedByObject(*object); - targetCell = (cell) ? cell->getNetworkId() : NetworkId::cms_invalid; - return true; - } - return false; -} - -const bool convertWorld(const jobject & source, Vector &target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (!source) - return false; - - ServerObject * object = 0; - - if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) - { - target.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); - target.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); - target.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); - - LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); - Object * cellObject = 0; - if (JavaLibrary::getObject(*cell, cellObject)) + int count = source.size(); + bool rv = true; + int i; + int resultCount = 0; + for (i = 0; i < count; ++i) { - target = cellObject->rotateTranslate_o2w(target); + if (source[i].isValid()) + { + resultCount++; + } + } + result = createNewLongArray(resultCount); + jlong jlongTmp; + for (int j = 0; j < count; ++j) + { + if (source[j].isValid()) + { + jlongTmp = source[j].getValue(); + + setLongArrayRegion(*result, static_cast(--resultCount), 1, &jlongTmp); + } + else + { + rv = false; + } + } + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); + rv = false; + } + return rv; + } + + const bool convert(const jobject & source, Vector &target, NetworkId & targetCell) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (!source) + return false; + + ServerObject * object = 0; + + if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) + { + target.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); + target.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); + target.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); + + LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); + targetCell = JavaLibrary::getNetworkId(*cell); + return true; + } + else if (JavaLibrary::getObject(source, object)) + { + target = object->getPosition_p(); + const Object * cell = ContainerInterface::getContainedByObject(*object); + targetCell = (cell) ? cell->getNetworkId() : NetworkId::cms_invalid; + return true; + } + return false; + } + + const bool convertWorld(const jobject & source, Vector &target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (!source) + return false; + + ServerObject * object = 0; + + if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) + { + target.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); + target.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); + target.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); + + LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); + Object * cellObject = 0; + if (JavaLibrary::getObject(*cell, cellObject)) + { + target = cellObject->rotateTranslate_o2w(target); + } + return true; + } + else if (JavaLibrary::getObject(source, object)) + { + target = object->getPosition_w(); + return true; + } + return false; + } + + const bool convertWorld(const jlong & source, Vector &target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (source == 0) + return false; + + ServerObject * object = 0; + + if (JavaLibrary::getObject(source, object)) + { + target = object->getPosition_w(); + return true; + } + return false; + } + + const bool convertWorld(const LocalRefParam & source, Vector &target) + { + return convertWorld(source.getValue(), target); + } + + const bool convert(const Vector & source, const NetworkId & sourceCell, LocalRefPtr & target) + { + return convert(source, ServerWorld::getSceneId(), sourceCell, target); + } + + const bool convert(const jobject & source, Vector & targetLoc, std::string & targetSceneId, NetworkId & targetCell) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (!source) + return false; + + Object * object = 0; + + if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) + { + // get the xyz coords + targetLoc.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); + targetLoc.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); + targetLoc.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); + + // get the scene + //@todo EAS what's the right answer here? + JavaStringPtr sceneId = getStringField(LocalRefParam(source), JavaLibrary::ms_fidLocationArea); + if (sceneId == JavaString::cms_nullPtr) + { + targetSceneId.clear(); + return false; + } + JavaLibrary::convert(*sceneId, targetSceneId); + + // get the cell + LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); + targetCell = JavaLibrary::getNetworkId(*cell); + return true; + } + else if (JavaLibrary::getObject(source, object)) + { + targetLoc = object->getPosition_p(); + targetSceneId = ServerWorld::getSceneId(); + const Object * cell = ContainerInterface::getContainedByObject(*object); + targetCell = (cell) ? cell->getNetworkId() : NetworkId::cms_invalid; + return true; + } + return false; + } + + const bool convertWorld(const jobject & source, Vector & targetLoc, std::string & targetSceneId) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (!source) + return false; + + Object * object = 0; + + if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) + { + // get the xyz coords + targetLoc.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); + targetLoc.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); + targetLoc.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); + + // get the scene + //@todo EAS what's the right answer here? + JavaStringPtr sceneId = getStringField(LocalRefParam(source), JavaLibrary::ms_fidLocationArea); + if (sceneId == JavaString::cms_nullPtr) + { + targetSceneId.clear(); + return false; + } + JavaLibrary::convert(*sceneId, targetSceneId); + + // get the cell + LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); + Object * cellObject = 0; + if (JavaLibrary::getObject(*cell, cellObject)) + { + targetLoc = cellObject->rotateTranslate_o2w(targetLoc); + } + return true; + } + else if (JavaLibrary::getObject(source, object)) + { + targetLoc = object->getPosition_w(); + targetSceneId = ServerWorld::getSceneId(); + return true; + } + return false; + } + + const bool convert(const Location & sourceLoc, LocalRefPtr & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + target = allocObject(JavaLibrary::ms_clsLocation); + if (target == LocalRef::cms_nullPtr) + return false; + + // set xyz + setFloatField(*target, JavaLibrary::ms_fidLocationX, sourceLoc.getCoordinates().x); + setFloatField(*target, JavaLibrary::ms_fidLocationY, sourceLoc.getCoordinates().y); + setFloatField(*target, JavaLibrary::ms_fidLocationZ, sourceLoc.getCoordinates().z); + // set scene id + JavaString area(sourceLoc.getSceneId()); //ServerWorld::getSceneId().c_str()); + setObjectField(*target, JavaLibrary::ms_fidLocationArea, area); + // set cell + LocalRefPtr cell = JavaLibrary::getObjId(sourceLoc.getCell()); + setObjectField(*target, JavaLibrary::ms_fidLocationCell, *cell); + return true; + } + + const bool convert(const LocalRefParam & sourceLoc, Location & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (sourceLoc.getValue() == 0) + return false; + + float x = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationX); + float y = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationY); + float z = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationZ); + + std::string planetName; + JavaStringPtr jplanetName = getStringField(sourceLoc, JavaLibrary::ms_fidLocationArea); + if (!JavaLibrary::convert(*jplanetName, planetName)) + return false; + + LocalRefPtr cell = getObjectField(sourceLoc, JavaLibrary::ms_fidLocationCell); + NetworkId targetCell = JavaLibrary::getNetworkId(*cell); + + target.setCoordinates(Vector(x, y, z)); + target.setSceneId(planetName.c_str()); + target.setCell(targetCell); + return true; + } + + const bool convert(const LocalObjectArrayRefParam & sourceLoc, std::vector & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + if (sourceLoc.getValue() == 0) + return false; + + jsize count = getArrayLength(sourceLoc); + target.resize(count); + for (int i = 0; i < count; ++i) + { + LocalRefPtr location(getObjectArrayElement(sourceLoc, i)); + if (location == LocalRef::cms_nullPtr || !convert(*location, target.at(i))) + return false; } return true; } - else if (JavaLibrary::getObject(source, object)) + + const bool convert(const Vector & sourceLoc, const std::string & sourceSceneId, const NetworkId & sourceCell, LocalRefPtr & target) { - target = object->getPosition_w(); - return true; - } - return false; -} - -const bool convertWorld(const jlong & source, Vector &target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (source == 0) - return false; - - ServerObject * object = 0; - - if (JavaLibrary::getObject(source, object)) - { - target = object->getPosition_w(); - return true; - } - return false; -} - -const bool convertWorld(const LocalRefParam & source, Vector &target) -{ - return convertWorld(source.getValue(), target); -} - -const bool convert(const Vector & source, const NetworkId & sourceCell, LocalRefPtr & target) -{ - return convert(source, ServerWorld::getSceneId(), sourceCell, target); -} - -const bool convert(const jobject & source, Vector & targetLoc, std::string & targetSceneId, NetworkId & targetCell) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) return false; - if (!source) - return false; + target = allocObject(JavaLibrary::ms_clsLocation); + if (target == LocalRef::cms_nullPtr) + return false; - Object * object = 0; + // set xyz + setFloatField(*target, JavaLibrary::ms_fidLocationX, sourceLoc.x); + setFloatField(*target, JavaLibrary::ms_fidLocationY, sourceLoc.y); + setFloatField(*target, JavaLibrary::ms_fidLocationZ, sourceLoc.z); + // set scene id + JavaString area(sourceSceneId.c_str()); //ServerWorld::getSceneId().c_str()); + setObjectField(*target, JavaLibrary::ms_fidLocationArea, area); + // set cell + LocalRefPtr cell = JavaLibrary::getObjId(sourceCell); + setObjectField(*target, JavaLibrary::ms_fidLocationCell, *cell); + return true; + } - if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) + const bool convertWorld(const jobjectArray & source, std::vector &target) { - // get the xyz coords - targetLoc.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); - targetLoc.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); - targetLoc.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; - // get the scene - //@todo EAS what's the right answer here? - JavaStringPtr sceneId = getStringField(LocalRefParam(source), JavaLibrary::ms_fidLocationArea); - if (sceneId == JavaString::cms_nullPtr) + if (!source || !env->IsInstanceOf(source, JavaLibrary::ms_clsLocationArray)) return false; + + jsize count = env->GetArrayLength(source); + jsize i; + Vector v; + NetworkId cell; + bool result = true; + for (i = 0; i < count; ++i) { - targetSceneId.clear(); - return false; + LocalRefPtr element = getObjectArrayElement(LocalObjectArrayRefParam(source), i); + if (convertWorld(*element, v)) + { + target.push_back(v); + } + else + { + result = false; + } } - JavaLibrary::convert(*sceneId, targetSceneId); - // get the cell - LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); - targetCell = JavaLibrary::getNetworkId(*cell); - return true; + return result && !target.empty(); } - else if (JavaLibrary::getObject(source, object)) + + const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) { - targetLoc = object->getPosition_p(); - targetSceneId = ServerWorld::getSceneId(); - const Object * cell = ContainerInterface::getContainedByObject(*object); - targetCell = (cell) ? cell->getNetworkId() : NetworkId::cms_invalid; - return true; - } - return false; -} - -const bool convertWorld(const jobject & source, Vector & targetLoc, std::string & targetSceneId) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) return false; - if (!source) - return false; - - Object * object = 0; - - if (env->IsInstanceOf(source, JavaLibrary::ms_clsLocation)) - { - // get the xyz coords - targetLoc.x = env->GetFloatField(source, JavaLibrary::ms_fidLocationX); - targetLoc.y = env->GetFloatField(source, JavaLibrary::ms_fidLocationY); - targetLoc.z = env->GetFloatField(source, JavaLibrary::ms_fidLocationZ); - - // get the scene - //@todo EAS what's the right answer here? - JavaStringPtr sceneId = getStringField(LocalRefParam(source), JavaLibrary::ms_fidLocationArea); - if (sceneId == JavaString::cms_nullPtr) - { - targetSceneId.clear(); + if (source.empty()) return false; - } - JavaLibrary::convert(*sceneId, targetSceneId); - // get the cell - LocalRefPtr cell = getObjectField(LocalRefParam(source), JavaLibrary::ms_fidLocationCell); - Object * cellObject = 0; - if (JavaLibrary::getObject(*cell, cellObject)) + int count = source.size(); + int i; + + target = createNewObjectArray(source.size(), JavaLibrary::ms_clsLocation); + if (target == LocalObjectArrayRef::cms_nullPtr) + return false; + + NetworkId cell(NetworkId::cms_invalid); + bool result = true; + for (i = 0; i < count; ++i) { - targetLoc = cellObject->rotateTranslate_o2w(targetLoc); + LocalRefPtr element; + if (convert(*source[i], cell, element)) + { + setObjectArrayElement(*target, i, *element); + } + else + { + result = false; + } } + + return result; + } + + const bool convert(const LocalRefParam & source, const Region * & target) + { + return convert(source.getValue(), target); + } + + /** This method converts a java script.region class into a C++ Region class + */ + const bool convert(const jobject & source, const Region * &target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr || source == nullptr) + return false; + if (!env->IsInstanceOf(source, JavaLibrary::ms_clsRegion)) + return false; + + std::string planetName; + JavaStringPtr jplanetName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidRegionPlanet); + if (!JavaLibrary::convert(*jplanetName, planetName)) + return false; + + Unicode::String regionName; + JavaStringPtr jregionName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidRegionName); + if (!JavaLibrary::convert(*jregionName, regionName)) + return false; + + target = RegionMaster::getRegionByName(planetName, regionName); + return target != 0; + } + + /** This method converts a C++ RegionObject class into a Java script.region class + */ + const bool convert(const Region & source, LocalRefPtr & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (!env) + return false; + + int pvp = source.getPvp(); + int mun = source.getMunicipal(); + int build = source.getBuildable(); + int geo = source.getGeography(); + int minDiff = source.getMinDifficulty(); + int maxDiff = source.getMaxDifficulty(); + int spawn = source.getSpawn(); + int mission = source.getMission(); + + const Unicode::String name(source.getName()); + JavaString jname(name); + + const std::string planetName(source.getPlanet()); + JavaString jplanetName(planetName); + + target = createNewObject(JavaLibrary::ms_clsRegion, JavaLibrary::ms_midRegion, + jname.getValue(), pvp, build, mun, geo, minDiff, maxDiff, spawn, mission, jplanetName.getValue()); + return (target != LocalRef::cms_nullPtr); + } + + // ---------------------------------------------------------------------- + + const bool convert(Transform const &sourceTransform, LocalRefPtr &target) + { + JNIEnv * const env = JavaLibrary::getEnv(); + if (!env) + return false; + + Vector const i(sourceTransform.getLocalFrameI_p()); + Vector const j(sourceTransform.getLocalFrameJ_p()); + Vector const k(sourceTransform.getLocalFrameK_p()); + Vector const p(sourceTransform.getPosition_p()); + target = createNewObject(JavaLibrary::ms_clsTransform, JavaLibrary::ms_midTransform, + i.x, j.x, k.x, p.x, + i.y, j.y, k.y, p.y, + i.z, j.z, k.z, p.z); + return (target != LocalRef::cms_nullPtr); + } + + // ---------------------------------------------------------------------- + + const bool convert(const jobject &sourceTransform, Transform &target) + { + JNIEnv * const env = JavaLibrary::getEnv(); + if (!env || !sourceTransform) + return false; + if (!env->IsInstanceOf(sourceTransform, JavaLibrary::ms_clsTransform)) + return false; + + LocalObjectArrayRefPtr matrix = getArrayObjectField(LocalRefParam(sourceTransform), JavaLibrary::ms_fidTransformMatrix); + LocalFloatArrayRefPtr row0 = getFloatArrayArrayElement(*matrix, 0); + LocalFloatArrayRefPtr row1 = getFloatArrayArrayElement(*matrix, 1); + LocalFloatArrayRefPtr row2 = getFloatArrayArrayElement(*matrix, 2); + + float * const row0Elements = env->GetFloatArrayElements(row0->getValue(), 0); + float * const row1Elements = env->GetFloatArrayElements(row1->getValue(), 0); + float * const row2Elements = env->GetFloatArrayElements(row2->getValue(), 0); + + target.setLocalFrameIJK_p( + Vector(row0Elements[0], row1Elements[0], row2Elements[0]), + Vector(row0Elements[1], row1Elements[1], row2Elements[1]), + Vector(row0Elements[2], row1Elements[2], row2Elements[2])); + target.setPosition_p(row0Elements[3], row1Elements[3], row2Elements[3]); + + env->ReleaseFloatArrayElements(row2->getValue(), row2Elements, JNI_ABORT); + env->ReleaseFloatArrayElements(row1->getValue(), row1Elements, JNI_ABORT); + env->ReleaseFloatArrayElements(row0->getValue(), row0Elements, JNI_ABORT); + return true; } - else if (JavaLibrary::getObject(source, object)) + + // ---------------------------------------------------------------------- + + const bool convert(const LocalRefParam &sourceTransform, Transform &target) { - targetLoc = object->getPosition_w(); - targetSceneId = ServerWorld::getSceneId(); - return true; + return convert(sourceTransform.getValue(), target); } - return false; -} -const bool convert(const Location & sourceLoc, LocalRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; + // ---------------------------------------------------------------------- - target = allocObject(JavaLibrary::ms_clsLocation); - if (target == LocalRef::cms_nullPtr) - return false; - - // set xyz - setFloatField(*target, JavaLibrary::ms_fidLocationX, sourceLoc.getCoordinates().x); - setFloatField(*target, JavaLibrary::ms_fidLocationY, sourceLoc.getCoordinates().y); - setFloatField(*target, JavaLibrary::ms_fidLocationZ, sourceLoc.getCoordinates().z); - // set scene id - JavaString area(sourceLoc.getSceneId()); //ServerWorld::getSceneId().c_str()); - setObjectField(*target, JavaLibrary::ms_fidLocationArea, area); - // set cell - LocalRefPtr cell = JavaLibrary::getObjId(sourceLoc.getCell()); - setObjectField(*target, JavaLibrary::ms_fidLocationCell, *cell); - return true; -} - -const bool convert(const LocalRefParam & sourceLoc, Location & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (sourceLoc.getValue() == 0) - return false; - - float x = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationX); - float y = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationY); - float z = getFloatField(sourceLoc, JavaLibrary::ms_fidLocationZ); - - std::string planetName; - JavaStringPtr jplanetName = getStringField(sourceLoc, JavaLibrary::ms_fidLocationArea); - if (!JavaLibrary::convert(*jplanetName, planetName)) - return false; - - LocalRefPtr cell = getObjectField(sourceLoc, JavaLibrary::ms_fidLocationCell); - NetworkId targetCell = JavaLibrary::getNetworkId(*cell); - - target.setCoordinates(Vector(x, y, z)); - target.setSceneId(planetName.c_str()); - target.setCell(targetCell); - return true; -} - -const bool convert(const LocalObjectArrayRefParam & sourceLoc, std::vector & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (sourceLoc.getValue() == 0) - return false; - - jsize count = getArrayLength(sourceLoc); - target.resize(count); - for (int i = 0; i < count; ++i) + const bool convert(const jobjectArray & source, std::vector &target) { - LocalRefPtr location(getObjectArrayElement(sourceLoc, i)); - if (location == LocalRef::cms_nullPtr || !convert(*location, target.at(i))) + JNIEnv * const env = JavaLibrary::getEnv(); + if (!env) return false; - } - return true; -} -const bool convert(const Vector & sourceLoc, const std::string & sourceSceneId, const NetworkId & sourceCell, LocalRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; + if (!source || !env->IsInstanceOf(source, JavaLibrary::ms_clsTransformArray)) return false; - target = allocObject(JavaLibrary::ms_clsLocation); - if (target == LocalRef::cms_nullPtr) - return false; - - // set xyz - setFloatField(*target, JavaLibrary::ms_fidLocationX, sourceLoc.x); - setFloatField(*target, JavaLibrary::ms_fidLocationY, sourceLoc.y); - setFloatField(*target, JavaLibrary::ms_fidLocationZ, sourceLoc.z); - // set scene id - JavaString area(sourceSceneId.c_str()); //ServerWorld::getSceneId().c_str()); - setObjectField(*target, JavaLibrary::ms_fidLocationArea, area); - // set cell - LocalRefPtr cell = JavaLibrary::getObjId(sourceCell); - setObjectField(*target, JavaLibrary::ms_fidLocationCell, *cell); - return true; -} - -const bool convertWorld(const jobjectArray & source, std::vector &target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (!source || !env->IsInstanceOf(source, JavaLibrary::ms_clsLocationArray)) return false; - - jsize count = env->GetArrayLength(source); - jsize i; - Vector v; - NetworkId cell; - bool result = true; - for (i=0; iGetArrayLength(source); + bool result = true; + for (jsize i = 0; i < count; ++i) { - target.push_back(v); + LocalRefPtr element = getObjectArrayElement(LocalObjectArrayRefParam(source), i); + + Transform t; + if (convert(*element, t)) + { + target.push_back(t); + } + else + { + result = false; + } } - else + + return result && !target.empty(); + } + + // ---------------------------------------------------------------------- + + const bool convert(const std::vector &source, LocalObjectArrayRefPtr & target) + { + JNIEnv * const env = JavaLibrary::getEnv(); + if (!env) + return false; + + int const count = source.size(); + + bool result = true; + + target = createNewObjectArray(count, JavaLibrary::ms_clsObjId); + + for (int i = 0; i < count; ++i) { + LocalRefPtr temp; + if (convert(source[i], temp)) + { + setObjectArrayElement(*target, i, *temp); + } + else + { + result = false; + target = LocalObjectArrayRef::cms_nullPtr; + break; + } + } + + if (env->ExceptionCheck()) + { + env->ExceptionDescribe(); result = false; } + + return result; } - return result && !target.empty(); -} + // ---------------------------------------------------------------------- -const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (source.empty()) - return false; - - int count = source.size(); - int i; - - target = createNewObjectArray(source.size(), JavaLibrary::ms_clsLocation); - if (target == LocalObjectArrayRef::cms_nullPtr) - return false; - - NetworkId cell(NetworkId::cms_invalid); - bool result = true; - for (i=0; i < count; ++i) + const bool convert(const Vector &sourceVector, LocalRefPtr &target) { - LocalRefPtr element; - if (convert(*source[i], cell, element)) - { - setObjectArrayElement(*target, i, *element); - } - else - { - result = false; - } + JNIEnv *env = JavaLibrary::getEnv(); + if (!env) + return false; + + target = allocObject(JavaLibrary::ms_clsVector); + if (target == LocalRef::cms_nullPtr) + return false; + + setFloatField(*target, JavaLibrary::ms_fidVectorX, sourceVector.x); + setFloatField(*target, JavaLibrary::ms_fidVectorY, sourceVector.y); + setFloatField(*target, JavaLibrary::ms_fidVectorZ, sourceVector.z); + return true; } - return result; -} + // ---------------------------------------------------------------------- -const bool convert(const LocalRefParam & source, const Region * & target) -{ - return convert(source.getValue(), target); -} - -/** This method converts a java script.region class into a C++ Region class - */ -const bool convert(const jobject & source, const Region * &target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr || source == nullptr) - return false; - if (!env->IsInstanceOf(source, JavaLibrary::ms_clsRegion)) - return false; - - std::string planetName; - JavaStringPtr jplanetName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidRegionPlanet); - if (!JavaLibrary::convert(*jplanetName, planetName)) - return false; - - Unicode::String regionName; - JavaStringPtr jregionName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidRegionName); - if (!JavaLibrary::convert(*jregionName, regionName)) - return false; - - target = RegionMaster::getRegionByName(planetName, regionName); - return target != 0; -} - -/** This method converts a C++ RegionObject class into a Java script.region class - */ -const bool convert(const Region & source, LocalRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (!env) - return false; - - int pvp = source.getPvp(); - int mun = source.getMunicipal(); - int build = source.getBuildable(); - int geo = source.getGeography(); - int minDiff = source.getMinDifficulty(); - int maxDiff = source.getMaxDifficulty(); - int spawn = source.getSpawn(); - int mission = source.getMission(); - - const Unicode::String name(source.getName()); - JavaString jname(name); - - const std::string planetName(source.getPlanet()); - JavaString jplanetName(planetName); - - target = createNewObject(JavaLibrary::ms_clsRegion, JavaLibrary::ms_midRegion, - jname.getValue(), pvp, build, mun, geo, minDiff, maxDiff, spawn, mission, jplanetName.getValue()); - return (target != LocalRef::cms_nullPtr); -} - -// ---------------------------------------------------------------------- - -const bool convert(Transform const &sourceTransform, LocalRefPtr &target) -{ - JNIEnv * const env = JavaLibrary::getEnv(); - if (!env) - return false; - - Vector const i(sourceTransform.getLocalFrameI_p()); - Vector const j(sourceTransform.getLocalFrameJ_p()); - Vector const k(sourceTransform.getLocalFrameK_p()); - Vector const p(sourceTransform.getPosition_p()); - target = createNewObject(JavaLibrary::ms_clsTransform, JavaLibrary::ms_midTransform, - i.x, j.x, k.x, p.x, - i.y, j.y, k.y, p.y, - i.z, j.z, k.z, p.z); - return (target != LocalRef::cms_nullPtr); -} - -// ---------------------------------------------------------------------- - -const bool convert(const jobject &sourceTransform, Transform &target) -{ - JNIEnv * const env = JavaLibrary::getEnv(); - if (!env || !sourceTransform) - return false; - if (!env->IsInstanceOf(sourceTransform, JavaLibrary::ms_clsTransform)) - return false; - - LocalObjectArrayRefPtr matrix = getArrayObjectField(LocalRefParam(sourceTransform), JavaLibrary::ms_fidTransformMatrix); - LocalFloatArrayRefPtr row0 = getFloatArrayArrayElement(*matrix, 0); - LocalFloatArrayRefPtr row1 = getFloatArrayArrayElement(*matrix, 1); - LocalFloatArrayRefPtr row2 = getFloatArrayArrayElement(*matrix, 2); - - float * const row0Elements = env->GetFloatArrayElements(row0->getValue(), 0); - float * const row1Elements = env->GetFloatArrayElements(row1->getValue(), 0); - float * const row2Elements = env->GetFloatArrayElements(row2->getValue(), 0); - - target.setLocalFrameIJK_p( - Vector(row0Elements[0], row1Elements[0], row2Elements[0]), - Vector(row0Elements[1], row1Elements[1], row2Elements[1]), - Vector(row0Elements[2], row1Elements[2], row2Elements[2])); - target.setPosition_p(row0Elements[3], row1Elements[3], row2Elements[3]); - - env->ReleaseFloatArrayElements(row2->getValue(), row2Elements, JNI_ABORT); - env->ReleaseFloatArrayElements(row1->getValue(), row1Elements, JNI_ABORT); - env->ReleaseFloatArrayElements(row0->getValue(), row0Elements, JNI_ABORT); - - return true; -} - -// ---------------------------------------------------------------------- - -const bool convert(const LocalRefParam &sourceTransform, Transform &target) -{ - return convert(sourceTransform.getValue(), target); -} - -// ---------------------------------------------------------------------- - -const bool convert(const jobjectArray & source, std::vector &target) -{ - JNIEnv * const env = JavaLibrary::getEnv(); - if (!env) - return false; - - if (!source || !env->IsInstanceOf(source, JavaLibrary::ms_clsTransformArray)) return false; - - jsize const count = env->GetArrayLength(source); - bool result = true; - for (jsize i = 0; i < count; ++i) + const bool convert(const jobject & sourceVector, Vector & target) { - LocalRefPtr element = getObjectArrayElement(LocalObjectArrayRefParam(source), i); + JNIEnv *env = JavaLibrary::getEnv(); + if (!env || !sourceVector) + return false; + if (!env->IsInstanceOf(sourceVector, JavaLibrary::ms_clsVector)) + return false; - Transform t; - if (convert(*element, t)) - { - target.push_back(t); - } - else + target.x = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorX); + target.y = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorY); + target.z = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorZ); + return true; + } + + // ---------------------------------------------------------------------- + + const bool convert(const LocalRefParam & sourceVector, Vector & target) { - result = false; - } + return convert(sourceVector.getValue(), target); } - return result && !target.empty(); - } + // ---------------------------------------------------------------------- -// ---------------------------------------------------------------------- - -const bool convert(const std::vector &source, LocalObjectArrayRefPtr & target) -{ - JNIEnv * const env = JavaLibrary::getEnv(); - if (!env) - return false; - - int const count = source.size(); - - bool result = true; - - target = createNewObjectArray(count, JavaLibrary::ms_clsObjId); - - for (int i = 0; i < count; ++i) + /** + * Convert a C++ AttribMod to a Java attrib_mod. + */ + const bool convert(const AttribMod::AttribMod & source, LocalRefPtr & target) { - LocalRefPtr temp; - if (convert(source[i],temp)) - { - setObjectArrayElement(*target, i, *temp); - } - else - { - result = false; - target = LocalObjectArrayRef::cms_nullPtr; - break; - } - } - - if (env->ExceptionCheck()) - { - env->ExceptionDescribe(); - result = false; - } + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; - return result; -} + target = allocObject(JavaLibrary::ms_clsAttribMod); + if (target == LocalRef::cms_nullPtr) + return false; - - -// ---------------------------------------------------------------------- - -const bool convert(const Vector &sourceVector, LocalRefPtr &target) -{ - JNIEnv *env = JavaLibrary::getEnv(); - if (!env) - return false; - - target = allocObject(JavaLibrary::ms_clsVector); - if (target == LocalRef::cms_nullPtr) - return false; - - setFloatField(*target, JavaLibrary::ms_fidVectorX, sourceVector.x); - setFloatField(*target, JavaLibrary::ms_fidVectorY, sourceVector.y); - setFloatField(*target, JavaLibrary::ms_fidVectorZ, sourceVector.z); - return true; -} - -// ---------------------------------------------------------------------- - -const bool convert(const jobject & sourceVector, Vector & target) -{ - JNIEnv *env = JavaLibrary::getEnv(); - if (!env || !sourceVector) - return false; - if (!env->IsInstanceOf(sourceVector, JavaLibrary::ms_clsVector)) - return false; - - target.x = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorX); - target.y = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorY); - target.z = env->GetFloatField(sourceVector, JavaLibrary::ms_fidVectorZ); - return true; -} - -// ---------------------------------------------------------------------- - -const bool convert(const LocalRefParam & sourceVector, Vector & target) -{ - return convert(sourceVector.getValue(), target); -} - -// ---------------------------------------------------------------------- - -/** - * Convert a C++ AttribMod to a Java attrib_mod. - */ -const bool convert(const AttribMod::AttribMod & source, LocalRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; - - target = allocObject(JavaLibrary::ms_clsAttribMod); - if (target == LocalRef::cms_nullPtr) - return false; - - JavaString name(AttribModNameManager::getInstance( + JavaString name(AttribModNameManager::getInstance( ).getAttribModName(source.tag)); - setObjectField(*target, JavaLibrary::ms_fidAttribModName, name); - if (!AttribMod::isSkillMod(source)) - { - setIntField(*target, JavaLibrary::ms_fidAttribModType, source.attrib); - } - else - { - JavaString skill(AttribModNameManager::getInstance( + setObjectField(*target, JavaLibrary::ms_fidAttribModName, name); + if (!AttribMod::isSkillMod(source)) + { + setIntField(*target, JavaLibrary::ms_fidAttribModType, source.attrib); + } + else + { + JavaString skill(AttribModNameManager::getInstance( ).getAttribModName(source.skill)); - setObjectField(*target, JavaLibrary::ms_fidAttribModSkill, skill); - } - setIntField(*target, JavaLibrary::ms_fidAttribModValue, source.value); - setFloatField(*target, JavaLibrary::ms_fidAttribModTime, source.sustain); - setFloatField(*target, JavaLibrary::ms_fidAttribModAttack, source.attack); - setFloatField(*target, JavaLibrary::ms_fidAttribModDecay, source.decay); - setIntField(*target, JavaLibrary::ms_fidAttribModFlags, source.flags); - return true; -} - -/** - * Convert a Java attrib_mod to a C++ AttribMod. - */ -const bool convert(const jobject & source, AttribMod::AttribMod & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; - - if (source == 0 || env->IsInstanceOf(source, JavaLibrary::ms_clsAttribMod) == JNI_FALSE) - return false; - - std::string modName; - JavaStringPtr name = getStringField(LocalRefParam(source), JavaLibrary::ms_fidAttribModName); - if (name != JavaString::cms_nullPtr) - { - if (!JavaLibrary::convert(*name, modName)) - return false; - - target.tag = Crc::calculate(modName.c_str()); - AttribModNameManager::getInstance().addAttribModName(modName.c_str()); - } - else - target.tag = 0; - - target.flags = env->GetIntField(source, JavaLibrary::ms_fidAttribModFlags); - if (!AttribMod::isSkillMod(target)) - { - target.attrib = env->GetIntField(source, JavaLibrary::ms_fidAttribModType); - } - else - { - std::string skillModName; - JavaStringPtr skillName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidAttribModSkill); - - // a skillmod mod must have a skillmod name - if (skillName == JavaString::cms_nullPtr) - return false; - if (!JavaLibrary::convert(*skillName, skillModName)) - return false; - - target.skill = Crc::calculate(skillModName.c_str()); - AttribModNameManager::getInstance().addAttribModName(skillModName.c_str()); - } - target.value = env->GetIntField(source, JavaLibrary::ms_fidAttribModValue); - target.sustain = env->GetFloatField(source, JavaLibrary::ms_fidAttribModTime); - target.attack = env->GetFloatField(source, JavaLibrary::ms_fidAttribModAttack); - target.decay = env->GetFloatField(source, JavaLibrary::ms_fidAttribModDecay); - return true; -} - -/** - * Convert a Java attrib_mod to a C++ AttribMod. - */ -const bool convert(const LocalRefParam & source, AttribMod::AttribMod & target) -{ - return convert(source.getValue(), target); -} - -/** - * Convert a C++ AttribMod vector to a Java attrib_mod[]. - */ -const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; - - int count = source.size(); - target = createNewObjectArray(count, JavaLibrary::ms_clsAttribMod); - if (target == LocalObjectArrayRef::cms_nullPtr) - return false; - - LocalRefPtr mod; - for (int i = 0; i < count; ++i) - { - if (!convert(source[i], mod)) - { - target = LocalObjectArrayRef::cms_nullPtr; - return false; + setObjectField(*target, JavaLibrary::ms_fidAttribModSkill, skill); } - setObjectArrayElement(*target, i, *mod); + setIntField(*target, JavaLibrary::ms_fidAttribModValue, source.value); + setFloatField(*target, JavaLibrary::ms_fidAttribModTime, source.sustain); + setFloatField(*target, JavaLibrary::ms_fidAttribModAttack, source.attack); + setFloatField(*target, JavaLibrary::ms_fidAttribModDecay, source.decay); + setIntField(*target, JavaLibrary::ms_fidAttribModFlags, source.flags); + return true; } - return true; -} -/** - * Convert a Java attrib_mod[] to a C++ AttribMod vector. - */ -const bool convert(const jobjectArray & source, std::vector & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; - - if (source == 0) - return false; - - AttribMod::AttribMod mod; - int count = env->GetArrayLength(source); - for (int i = 0; i < count; ++i) + /** + * Convert a Java attrib_mod to a C++ AttribMod. + */ + const bool convert(const jobject & source, AttribMod::AttribMod & target) { - LocalRefPtr element = getObjectArrayElement(LocalObjectArrayRefParam(source), i); - bool result = convert(*element, mod); - if (!result) - { - target.clear(); + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) return false; + + if (source == 0 || env->IsInstanceOf(source, JavaLibrary::ms_clsAttribMod) == JNI_FALSE) + return false; + + std::string modName; + JavaStringPtr name = getStringField(LocalRefParam(source), JavaLibrary::ms_fidAttribModName); + if (name != JavaString::cms_nullPtr) + { + if (!JavaLibrary::convert(*name, modName)) + return false; + + target.tag = Crc::calculate(modName.c_str()); + AttribModNameManager::getInstance().addAttribModName(modName.c_str()); } - target.push_back(mod); + else + target.tag = 0; + + target.flags = env->GetIntField(source, JavaLibrary::ms_fidAttribModFlags); + if (!AttribMod::isSkillMod(target)) + { + target.attrib = env->GetIntField(source, JavaLibrary::ms_fidAttribModType); + } + else + { + std::string skillModName; + JavaStringPtr skillName = getStringField(LocalRefParam(source), JavaLibrary::ms_fidAttribModSkill); + + // a skillmod mod must have a skillmod name + if (skillName == JavaString::cms_nullPtr) + return false; + if (!JavaLibrary::convert(*skillName, skillModName)) + return false; + + target.skill = Crc::calculate(skillModName.c_str()); + AttribModNameManager::getInstance().addAttribModName(skillModName.c_str()); + } + target.value = env->GetIntField(source, JavaLibrary::ms_fidAttribModValue); + target.sustain = env->GetFloatField(source, JavaLibrary::ms_fidAttribModTime); + target.attack = env->GetFloatField(source, JavaLibrary::ms_fidAttribModAttack); + target.decay = env->GetFloatField(source, JavaLibrary::ms_fidAttribModDecay); + return true; } - return true; -} -const bool convert(const jbyteArray & source, std::vector & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; + /** + * Convert a Java attrib_mod to a C++ AttribMod. + */ + const bool convert(const LocalRefParam & source, AttribMod::AttribMod & target) + { + return convert(source.getValue(), target); + } - if (source == 0) - return false; + /** + * Convert a C++ AttribMod vector to a Java attrib_mod[]. + */ + const bool convert(const std::vector & source, LocalObjectArrayRefPtr & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; - int size = env->GetArrayLength(source); - target.reserve(size); - target.resize(size); - env->GetByteArrayRegion(source, 0, size, &target[0]); - return true; -} + int count = source.size(); + target = createNewObjectArray(count, JavaLibrary::ms_clsAttribMod); + if (target == LocalObjectArrayRef::cms_nullPtr) + return false; -const bool convert(const LocalByteArrayRef & source, std::vector & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; + LocalRefPtr mod; + for (int i = 0; i < count; ++i) + { + if (!convert(source[i], mod)) + { + target = LocalObjectArrayRef::cms_nullPtr; + return false; + } + setObjectArrayElement(*target, i, *mod); + } + return true; + } - if (source.getValue() == 0) - return false; + /** + * Convert a Java attrib_mod[] to a C++ AttribMod vector. + */ + const bool convert(const jobjectArray & source, std::vector & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; - int size = getArrayLength(source); - target.reserve(size); - target.resize(size); - getByteArrayRegion(source, 0, size, &target[0]); - return true; -} + if (source == 0) + return false; -const bool convert(const std::vector & source, LocalByteArrayRefPtr & target) -{ - JNIEnv * env = JavaLibrary::getEnv(); - if (env == nullptr) - return false; + AttribMod::AttribMod mod; + int count = env->GetArrayLength(source); + for (int i = 0; i < count; ++i) + { + LocalRefPtr element = getObjectArrayElement(LocalObjectArrayRefParam(source), i); + bool result = convert(*element, mod); + if (!result) + { + target.clear(); + return false; + } + target.push_back(mod); + } + return true; + } - int count = source.size(); - target = createNewByteArray(count); - if (target == LocalByteArrayRef::cms_nullPtr) - return false; - - if (count > 0) - setByteArrayRegion(*target, 0, count, const_cast(&source[0])); - return true; -} + const bool convert(const jbyteArray & source, std::vector & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; + if (source == 0) + return false; + + int size = env->GetArrayLength(source); + target.reserve(size); + target.resize(size); + env->GetByteArrayRegion(source, 0, size, &target[0]); + return true; + } + + const bool convert(const LocalByteArrayRef & source, std::vector & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; + + if (source.getValue() == 0) + return false; + + int size = getArrayLength(source); + target.reserve(size); + target.resize(size); + getByteArrayRegion(source, 0, size, &target[0]); + return true; + } + + const bool convert(const std::vector & source, LocalByteArrayRefPtr & target) + { + JNIEnv * env = JavaLibrary::getEnv(); + if (env == nullptr) + return false; + + int count = source.size(); + target = createNewByteArray(count); + if (target == LocalByteArrayRef::cms_nullPtr) + return false; + + if (count > 0) + setByteArrayRegion(*target, 0, count, const_cast(&source[0])); + return true; + } }//namespace ScriptConversion //---------------------------------------------------------------------- -ServerObject * JavaLibrary::findObjectByNetworkId (const NetworkId & id) +ServerObject * JavaLibrary::findObjectByNetworkId(const NetworkId & id) { return ServerWorld::findObjectByNetworkId(id); } @@ -6429,9 +6413,9 @@ ServerObject * JavaLibrary::findObjectByNetworkId (const NetworkId & id) CreatureObject *JavaLibrary::getCreatureThrow(JNIEnv *env, jlong objId, char const *errorDescription, bool throwIfNotOnServer) { NOT_NULL(env); - + char buffer[512]; - + if (!objId) { IGNORE_RETURN(snprintf(buffer, sizeof(buffer) - 1, "%s: nullptr object id from script.", errorDescription)); @@ -6468,7 +6452,7 @@ CreatureObject *JavaLibrary::getCreatureThrow(JNIEnv *env, jlong objId, char con } else { - ServerObject *const serverObject = object->asServerObject(); + ServerObject *const serverObject = object->asServerObject(); CreatureObject *const creatureObject = serverObject ? serverObject->asCreatureObject() : nullptr; if (creatureObject) @@ -6490,9 +6474,9 @@ CreatureObject *JavaLibrary::getCreatureThrow(JNIEnv *env, jlong objId, char con ShipObject *JavaLibrary::getShipThrow(JNIEnv *env, jlong objId, char const *errorDescription, bool throwIfNotOnServer) { NOT_NULL(env); - + char buffer[512]; - + if (objId == 0) { IGNORE_RETURN(snprintf(buffer, sizeof(buffer) - 1, "%s: nullptr object id from script.", errorDescription)); @@ -6529,8 +6513,8 @@ ShipObject *JavaLibrary::getShipThrow(JNIEnv *env, jlong objId, char const *erro } else { - ServerObject *const serverObject = object->asServerObject(); - ShipObject *const shipObject = serverObject ? serverObject->asShipObject() : nullptr; + ServerObject *const serverObject = object->asServerObject(); + ShipObject *const shipObject = serverObject ? serverObject->asShipObject() : nullptr; if (shipObject) return shipObject; @@ -6561,4 +6545,4 @@ void JavaLibrary::throwInternalScriptError(const char * message) } } -//----------------------------------------------------------------------- +//----------------------------------------------------------------------- \ No newline at end of file diff --git a/engine/server/library/serverScript/src/shared/JavaLibrary.h b/engine/server/library/serverScript/src/shared/JavaLibrary.h index 6a4a5471..5029f0e3 100755 --- a/engine/server/library/serverScript/src/shared/JavaLibrary.h +++ b/engine/server/library/serverScript/src/shared/JavaLibrary.h @@ -62,7 +62,7 @@ namespace Crafting namespace Archive { -// struct DefaultObjectType; + // struct DefaultObjectType; template class AutoDeltaVector; } @@ -71,12 +71,10 @@ typedef Unicode::String String_t; typedef stdvector ::fwd StringVector_t; typedef stdvector::fwd MenuDataVector; - //======================================================================== // C<->Java conversion functions //======================================================================== - namespace ScriptConversion { const bool convert(const Location & sourceLoc, LocalRefPtr & target); @@ -127,14 +125,13 @@ namespace ScriptConversion const bool convert(const LocalRefParam & sourceVector, Vector & target); } - //======================================================================== // class JavaLibrary //======================================================================== class JavaLibrary { -// friend jobject convertDynamicVariableListToObject(JNIEnv *env, const DynamicVariableList& list); + // friend jobject convertDynamicVariableListToObject(JNIEnv *env, const DynamicVariableList& list); friend const bool ScriptConversion::convert(const Location & sourceLoc, LocalRefPtr & target); friend const bool ScriptConversion::convert(const LocalRefParam & sourceLoc, Location & target); friend const bool ScriptConversion::convert(const LocalObjectArrayRefParam & sourceLoc, stdvector::fwd & target); @@ -239,7 +236,7 @@ public: static jlong getFreeJavaMemory(); static void printJavaStack(); - static ServerObject * findObjectByNetworkId (const NetworkId & id); + static ServerObject * findObjectByNetworkId(const NetworkId & id); static CreatureObject *getCreatureThrow(JNIEnv *env, jlong objId, char const *errorDescription, bool throwIfNotOnServer = true); static ShipObject * getShipThrow(JNIEnv *env, jlong objId, char const *errorDescription, bool throwIfNotOnServer = true); @@ -250,7 +247,7 @@ public: if (obj != 0) { NetworkId id(getNetworkId(obj)); - result = dynamic_cast(findObjectByNetworkId (id)); + result = dynamic_cast(findObjectByNetworkId(id)); return result != 0; } return 0; @@ -262,7 +259,7 @@ public: if (obj != 0) { NetworkId id(static_cast(obj)); - result = dynamic_cast(findObjectByNetworkId (id)); + result = dynamic_cast(findObjectByNetworkId(id)); return result != 0; } return 0; @@ -274,7 +271,7 @@ public: if (obj.getValue() != 0) { NetworkId id(getNetworkId(obj)); - result = dynamic_cast(findObjectByNetworkId (id)); + result = dynamic_cast(findObjectByNetworkId(id)); return result != 0; } return 0; @@ -283,7 +280,7 @@ public: template static bool getObjectController(const jobject obj, OBJPTR &object, CTLPTR &controller) { - if (getObject (obj, object) && object) + if (getObject(obj, object) && object) { controller = dynamic_cast(object->getController()); return controller != 0; @@ -294,7 +291,7 @@ public: template static bool getObjectController(const jlong obj, OBJPTR &object, CTLPTR &controller) { - if (getObject (obj, object) && object) + if (getObject(obj, object) && object) { controller = dynamic_cast(object->getController()); return controller != 0; @@ -341,7 +338,7 @@ public: static void setupWeaponCombatData(JNIEnv *env, const WeaponObject * weapon, jobject weaponData); static LocalRefPtr createObjectAttribute(const ManufactureObjectInterface & manfSchematic, const DraftSchematicObject & draftSchematic, int attribIndex); - static LocalRefPtr createExperimentAttribute(const ManufactureObjectInterface & manfSchematic, const StringId & attribName); + static LocalRefPtr createExperimentAttribute(const ManufactureObjectInterface & manfSchematic, const StringId & attribName); static LocalRefPtr convert(const ManufactureObjectInterface & source); static LocalRefPtr convert(const ManufactureObjectInterface & schematic, const Crafting::IngredientSlot & source, int amountRequired, const std::string & appearance, const std::string & requiredIngredient); static jobject convert(const DraftSchematicObject & source); @@ -355,7 +352,7 @@ public: static jmethodID getMidAttribute(); static jfieldID getFidAttributeType(); static jfieldID getFidAttributeValue(); - + static jclass getClsBaseClassRangeInfo(); static jfieldID getFidBaseClassRangeInfoMinRange(); static jfieldID getFidBaseClassRangeInfoMaxRange(); @@ -375,9 +372,9 @@ public: static jfieldID getFidBaseClassDefenderResultsResult(); static jfieldID getFidBaseClassDefenderResultsClientEffectId(); - static jclass getClsColor(); + static jclass getClsColor(); static jmethodID getMidColor(); - + static jfieldID getFidCombatEngineAttackerDataWeaponSkill(); static jfieldID getFidCombatEngineAttackerDataAims(); static jfieldID getFidCombatEngineCombatantDataPos(); @@ -539,7 +536,7 @@ public: static jclass getClsVector(); static jclass getClsVectorArray(); - + protected: JavaLibrary(void); virtual ~JavaLibrary(); @@ -655,7 +652,6 @@ private: static jclass ms_clsThread; // reference to java.lang.Thread static jmethodID ms_midThreadDumpStack; // reference to java.lang.Thread.dumpStack() - static jclass ms_clsInternalScriptError; // reference to internal_script_exception static jclass ms_clsInternalScriptSeriousError; // reference to internal_script_error static jfieldID ms_fidInternalScriptSeriousErrorError; // fieldID for internal_script_error.wrappedError @@ -908,7 +904,7 @@ private: static jfieldID ms_fidCombatEngineWeaponDataElementalType; static jfieldID ms_fidCombatEngineWeaponDataElementalValue; static jfieldID ms_fidCombatEngineWeaponDataAttackSpeed; - static jfieldID ms_fidCombatEngineWeaponDataWoundChance; + static jfieldID ms_fidCombatEngineWeaponDataWoundChance; static jfieldID ms_fidCombatEngineWeaponDataAccuracy; static jfieldID ms_fidCombatEngineWeaponDataMinRange; static jfieldID ms_fidCombatEngineWeaponDataMaxRange; @@ -967,25 +963,25 @@ private: static jclass ms_clsLibrarySpaceTransition; static jmethodID ms_midLibrarySpaceTransitionSetPlayerOvert; static jmethodID ms_midLibrarySpaceTransitionClearOvertStatus; - -//////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////// - // java classes/methods needed by CS Handlers. These classes may not be CS specific - // if there is no previous call into them specifically. - + + //////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////// + // java classes/methods needed by CS Handlers. These classes may not be CS specific + // if there is no previous call into them specifically. + static jclass ms_clsLibraryDump; static jmethodID ms_midLibraryDumpDumpTargetInfo; - + static jclass ms_clsLibraryGMLib; static jmethodID ms_midLibraryGMLibFreeze; static jmethodID ms_midLibraryGMLibUnfreeze; - -//////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////// - - // flag that the JVM was loaded; once it is, it can never be loaded again - // without restarting the program - static int ms_loaded; + + //////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////// + + // flag that the JVM was loaded; once it is, it can never be loaded again + // without restarting the program + volatile static int ms_loaded; static Semaphore * ms_shutdownJava; // Java initialization functions @@ -1001,7 +997,7 @@ private: static jstring callScriptConsoleHandlerEntry(const JavaStringParam & script, const JavaStringParam & method, jobjectArray params); // obj_id functions - public: +public: static LocalRefPtr getObjId(const ServerObject & object); static LocalRefPtr getObjId(const NetworkId::NetworkIdType & id); static LocalRefPtr getObjId(const NetworkId & id); @@ -1011,20 +1007,20 @@ private: static LocalRefPtr getVector(Vector const & vector); -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////// static void spaceMakeOvert(const NetworkId &player); static void spaceClearOvert(const NetworkId &ship); - static std::string getObjectDumpInfo( NetworkId id ); + static std::string getObjectDumpInfo(NetworkId id); - static void freezePlayer( const NetworkId &id ); - static void unFreezePlayer( const NetworkId &id ); - -///////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////// + static void freezePlayer(const NetworkId &id); + static void unFreezePlayer(const NetworkId &id); - private: + ///////////////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////////// + +private: // misc support functions static LocalObjectArrayRefPtr convert(const NetworkId & caller, const std::string& argList, const ScriptParams &args); @@ -1260,7 +1256,7 @@ inline jfieldID JavaLibrary::getFidBaseClassDefenderResultsId() { return ms_fidBaseClassDefenderResultsId; } - + inline jfieldID JavaLibrary::getFidBaseClassDefenderResultsPosture() { return ms_fidBaseClassDefenderResultsPosture; @@ -1330,7 +1326,7 @@ inline jfieldID JavaLibrary::getFidCombatEngineCombatantDataScriptMod() { return ms_fidCombatEngineCombatantDataScriptMod; } - + inline jfieldID JavaLibrary::getFidCombatEngineDefenderDataCombatSkeleton() { return ms_fidCombatEngineDefenderDataCombatSkeleton; @@ -1620,7 +1616,7 @@ inline jmethodID JavaLibrary::getMidDynamicVariableListSetFloatArray() { return ms_midDynamicVariableListSetFloatArray; } - + inline jmethodID JavaLibrary::getMidDynamicVariableListSetInt() { return ms_midDynamicVariableListSetInt; @@ -1685,7 +1681,7 @@ inline jmethodID JavaLibrary::getMidDynamicVariableListSetVector() { return ms_midDynamicVariableListSetVector; } - + inline jmethodID JavaLibrary::getMidDynamicVariableListSetVectorArray() { return ms_midDynamicVariableListSetVectorArray; @@ -1880,7 +1876,7 @@ inline jclass JavaLibrary::getClsRegion() { return ms_clsRegion; } - + inline jclass JavaLibrary::getClsResourceAttribute() { return ms_clsResourceAttribute;