package script.space.content_tools; import script.*; import script.library.*; import java.util.Vector; public class spawner extends script.base_script { public spawner() { } public int getSpawnerData(obj_id self, dictionary params) throws InterruptedException { if (hasObjVar(self, "strAsteroidType")) { if (utils.checkConfigFlag("ScriptFlags", "spawnersOn")) { messageTo(self, "startSpawning", null, 3, false); } return SCRIPT_CONTINUE; } if (!hasObjVar(self, "strDefaultBehavior")) { return SCRIPT_CONTINUE; } String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior"); if ((strDefaultBehavior.equals("patrol")) || (strDefaultBehavior.equals("patrolNoRecycle"))) { String[] strPatrolPoints = objvar_mangle.getMangledStringArrayObjVar(self, "strPatrolPoints"); if (strPatrolPoints == null) { return SCRIPT_CONTINUE; } Vector trPatrolPoints = new Vector<>(0); obj_id[] objTestObjects = getAllObjectsWithTemplate(getLocation(self), 320000, "object/tangible/space/content_infrastructure/basic_patrol_point.iff"); if (objTestObjects == null) { return SCRIPT_CONTINUE; } for (String strPatrolPoint : strPatrolPoints) { for (int intJ = 0; intJ < objTestObjects.length; intJ++) { if (isIdValid(objTestObjects[intJ]) && hasObjVar(objTestObjects[intJ], "strName")) { String strName = getStringObjVar(objTestObjects[intJ], "strName"); if (strName.equals(strPatrolPoint)) { trPatrolPoints.add(getTransform_o2w(objTestObjects[intJ])); intJ = objTestObjects.length + 10; } } } } utils.setScriptVar(self, "trPatrolPoints", trPatrolPoints); } if (utils.checkConfigFlag("ScriptFlags", "spawnersOn")) { messageTo(self, "startSpawning", null, 3, false); return SCRIPT_CONTINUE; } return SCRIPT_CONTINUE; } public int OnInitialize(obj_id self) throws InterruptedException { requestPreloadCompleteTrigger(self); return SCRIPT_CONTINUE; } public int OnAttach(obj_id self) throws InterruptedException { return SCRIPT_CONTINUE; } public int OnPreloadComplete(obj_id self) throws InterruptedException { obj_id questManager = getNamedObject(space_quest.QUEST_MANAGER); if (questManager == null) { return SCRIPT_CONTINUE; } dictionary outparams = new dictionary(); outparams.put("point", self); outparams.put("type", "spawner"); space_utils.notifyObject(questManager, "registerQuestLocation", outparams); space_utils.notifyObject(self, "getSpawnerData", null); if (hasObjVar(self, "strDockingStation")) { String strDockingStation = getStringObjVar(self, "strDockingStation"); obj_id[] objStations = getAllObjectsWithObjVar(getLocation(self), 320000, "intDockable"); if (objStations != null) { for (int intI = 0; intI < objStations.length; intI++) { if (hasObjVar(objStations[intI], "strStationName")) { String strStationName = getStringObjVar(objStations[intI], "strStationName"); if (strStationName.equals(strDockingStation)) { utils.setLocalVar(self, "objDockingStation", objStations[intI]); intI = objStations.length + 1; } } } } } return SCRIPT_CONTINUE; } public boolean isSpawnerActivated(obj_id self) throws InterruptedException { obj_id objManager = space_battlefield.getManagerObject(); if (hasObjVar(objManager, "intSpawnersDeactivated") && hasObjVar(self, "intActivationPhase")) { int intPhase = getIntObjVar(objManager, "intPhase"); int intActivationPhase = getIntObjVar(self, "intActivationPhase"); return intPhase == intActivationPhase || intActivationPhase == -1; } return true; } public int startSpawning(obj_id self, dictionary params) throws InterruptedException { if (!hasObjVar(self, "strSpawnerType")) { debugServerConsoleMsg(self, "**********************************************************"); debugServerConsoleMsg(self, "BAD SPAWNER " + getName(self) + " at " + getLocation(self)); debugServerConsoleMsg(self, "**********************************************************"); return SCRIPT_CONTINUE; } if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String strSpawnerType = getStringObjVar(self, "strSpawnerType"); switch (strSpawnerType) { case "generic": { String[] strSpawns = objvar_mangle.getMangledStringArrayObjVar(self, "strSpawns"); if (strSpawns == null) { return SCRIPT_CONTINUE; } int intSpawnCount = getIntObjVar(self, "intSpawnCount"); float fltMinSpawnTime = getFloatObjVar(self, "fltMinSpawnTime"); float fltMaxSpawnTime = getFloatObjVar(self, "fltMaxSpawnTime"); float fltDelay; String[] strLoopSpawns = new String[1]; for (int intI = 0; intI < intSpawnCount; intI++) { fltDelay = rand(fltMinSpawnTime, fltMaxSpawnTime); strLoopSpawns[0] = strSpawns[rand(0, strSpawns.length - 1)]; dictionary dctParams = new dictionary(); dctParams.put("strSpawns", strLoopSpawns); messageTo(self, "createSpawns", dctParams, fltDelay * intI, false); } break; } case "asteroid": { String strAsteroidType = getStringObjVar(self, "strAsteroidType"); if (strAsteroidType.equals("")) { return SCRIPT_CONTINUE; } int intMinResourcePool = getIntObjVar(self, "intMinResourcePool"); int intMaxResourcePool = getIntObjVar(self, "intMaxResourcePool"); int intDangerLevel = getIntObjVar(self, "intDangerLevel"); int intDangerPct = getIntObjVar(self, "intDangerPct"); dictionary dctParams = new dictionary(); dctParams.put("strAsteroidType", strAsteroidType); dctParams.put("intMinResourcePool", intMinResourcePool); dctParams.put("intMaxResourcePool", intMaxResourcePool); dctParams.put("intDangerLevel", intDangerLevel); dctParams.put("intDangerPct", intDangerPct); messageTo(self, "createAsteroidSpawn", dctParams, 1.0f, false); break; } case "wave": { utils.setScriptVar(self, "intWave", 0); String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves"); if(strWaves == null || strWaves.length == 0) { return SCRIPT_CONTINUE; } String[] strSpawns = dataTableGetStringColumnNoDefaults("datatables/space_content/spawners/waves.iff", strWaves[0]); if (strSpawns == null) { return SCRIPT_CONTINUE; } String strSpawn = strSpawns[0]; float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance"); float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance"); float fltMinSpawnTime = getFloatObjVar(self, "fltMinSpawnTime"); float fltMaxSpawnTime = getFloatObjVar(self, "fltMaxSpawnTime"); if (!isSquad(strSpawn)) { obj_id objShip = createGenericSpawn(self, strSpawn, fltMinSpawnDistance, fltMaxSpawnDistance, false); if (isIdValid(objShip)) { setupSpawnerSpawn(objShip, self); } } else { Vector objMembers = space_create.createSquadHyperspace(self, strSpawn, getTransform_o2p(self), 100, null); if (objMembers != null) { setupSpawnerSpawn(objMembers, self); } } String[] strLoopSpawns = new String[1]; for (int intI = 1; intI < strSpawns.length; intI++) { float fltDelay = rand(fltMinSpawnTime, fltMaxSpawnTime); strLoopSpawns[0] = strSpawns[intI]; dictionary dctParams = new dictionary(); dctParams.put("strSpawns", strLoopSpawns); messageTo(self, "createSpawns", dctParams, fltDelay * intI, false); } utils.setScriptVar(self, "intWavePopulation", strSpawns.length); break; } default: break; } return SCRIPT_CONTINUE; } public int spawnNextWave(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves"); if(strWaves == null || strWaves.length == 0) { return SCRIPT_CONTINUE; } int intWave = utils.getIntScriptVar(self, "intWave"); String[] strSpawns = dataTableGetStringColumnNoDefaults("datatables/space_content/spawners/waves.iff", strWaves[intWave]); if (strSpawns == null) { return SCRIPT_CONTINUE; } float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance"); float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance"); String strSpawn = strSpawns[0]; if (!isSquad(strSpawn)) { obj_id objShip = createGenericSpawn(self, strSpawn, fltMinSpawnDistance, fltMaxSpawnDistance, false); if (isIdValid(objShip)) { setupSpawnerSpawn(objShip, self); } } else { Vector objMembers = space_create.createSquadHyperspace(self, strSpawn, getTransform_o2p(self), 100, null); if (objMembers != null) { setupSpawnerSpawn(objMembers, self); } } String[] strLoopSpawns = new String[1]; for (int intI = 1; intI < strSpawns.length; intI++) { strLoopSpawns[0] = strSpawns[intI]; dictionary dctParams = new dictionary(); dctParams.put("strSpawns", strLoopSpawns); messageTo(self, "createSpawns", dctParams, intI, false); } utils.setScriptVar(self, "intWavePopulation", strSpawns.length); return SCRIPT_CONTINUE; } public int createSpawns(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance"); float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance"); String[] strSpawns = params.getStringArray("strSpawns"); for (String strSpawn : strSpawns) { if (!isSquad(strSpawn)) { obj_id objShip = createGenericSpawn(self, strSpawn, fltMinSpawnDistance, fltMaxSpawnDistance, false); if (isIdValid(objShip)) { setupSpawnerSpawn(objShip, self); } } else { Vector objMembers = space_create.createSquadHyperspace(self, strSpawn, getTransform_o2p(self), 100, null); if (objMembers != null) { setupSpawnerSpawn(objMembers, self); } } } return SCRIPT_CONTINUE; } public int createAsteroidSpawn(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String strAsteroidType = params.getString("strAsteroidType"); int intMinResourcePool = params.getInt("intMinResourcePool"); int intMaxResourcePool = params.getInt("intMaxResourcePool"); int intDangerLevel = params.getInt("intDangerLevel"); int intDangerPct = params.getInt("intDangerPct"); createAsteroidSpawn(self, strAsteroidType, intMinResourcePool, intMaxResourcePool, intDangerLevel, intDangerPct); return SCRIPT_CONTINUE; } public void setupSpawnerSpawn(obj_id objShip, obj_id self) throws InterruptedException { if (hasObjVar(self, "intSpawnsAllowed")) { if ((getIntObjVar(self, "intSpawnsAllowed") - 1) <= 0) { removeObjVar(self, "intSpawnsAllowed"); space_utils.notifyObject(self, "spawnCountReached", null); } } String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior"); setObjVar(objShip, "objParent", self); switch (strDefaultBehavior) { case "loiter": ship_ai.spaceLoiter( objShip, getTransform_o2w(self), getFloatObjVar(self, "fltMinLoiterDistance"), getFloatObjVar(self, "fltMaxLoiterDistance") ); break; case "patrol": { ship_ai.spacePatrol( objShip, utils.getTransformArrayScriptVar(self, "trPatrolPoints") ); break; } case "patrolNoRecycle": { transform[] trPatrolPoints = utils.getTransformArrayScriptVar(self, "trPatrolPoints"); transform trTest = trPatrolPoints[trPatrolPoints.length - 1]; location locTest = utils.getLocationFromTransform(trTest); addLocationTarget3d(objShip, "spawnerArrival", locTest, 64); if (utils.hasLocalVar(self, "objDockingStation")) { setObjVar(objShip, "objDockingStation", utils.getObjIdLocalVar(self, "objDockingStation")); } ship_ai.spaceMoveTo(objShip, trPatrolPoints); break; } case "patrolFixedCircle": { float fltCircleDistance = rand(getFloatObjVar(self, "fltMinCircleDistance"), getFloatObjVar(self, "fltMaxCircleDistance")); transform trTest = getTransform_o2p(self); transform[] trPatrolPoints = ship_ai.createPatrolPathCircle(trTest.getPosition_p(), fltCircleDistance); ship_ai.spacePatrol(objShip, trPatrolPoints); break; } case "patrolRandomPath": { transform[] trPatrolPoints = ship_ai.createPatrolPathLoiter(getTransform_o2p(self), getFloatObjVar(self, "fltMinCircleDistance"), getFloatObjVar(self, "fltMaxCircleDistance")); ship_ai.spacePatrol(objShip, trPatrolPoints); break; } default: break; } if (hasObjVar(self, "objAttackTarget")) { dictionary dctParams = new dictionary(); dctParams.put("objShip", objShip); space_utils.notifyObject(self, "singleAttackerSpawned", dctParams); } } public void setupSpawnerSpawn(Vector objMembers, obj_id self) throws InterruptedException { for (obj_id objMember : objMembers) { setObjVar(objMember, "objParent", self); } if (hasObjVar(self, "intSpawnsAllowed")) { if ((getIntObjVar(self, "intSpawnsAllowed") - objMembers.size()) <= 0) { removeObjVar(self, "intSpawnsAllowed"); space_utils.notifyObject(self, "spawnCountReached", null); } } String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior"); transform trMyLocation = getTransform_o2w(self); int intSquadId = ship_ai.unitGetSquadId(((obj_id)objMembers.get(0))); switch (strDefaultBehavior) { case "loiter": ship_ai.squadLoiter( intSquadId, trMyLocation, getFloatObjVar(self, "fltMinLoiterDistance"), getFloatObjVar(self, "fltMaxLoiterDistance") ); break; case "patrol": { ship_ai.squadAddPatrolPath(intSquadId, utils.getTransformArrayScriptVar(self, "trPatrolPoints")); break; } case "patrolNoRecycle": { transform[] trPatrolPoints = utils.getTransformArrayScriptVar(self, "trPatrolPoints"); transform trTest = trPatrolPoints[trPatrolPoints.length - 1]; location locTest = utils.getLocationFromTransform(trTest); addLocationTarget3d(objMembers.get(0), "leaderSpawnerArrival", locTest, 16); ship_ai.squadMoveTo(intSquadId, trPatrolPoints); break; } case "patrolFixedCircle": { float fltCircleDistance = rand(getFloatObjVar(self, "fltMinCircleDistance"), getFloatObjVar(self, "fltMaxCircleDistance")); transform[] trPatrolPoints = ship_ai.createPatrolPathCircle(getTransform_o2p(self).getPosition_p(), fltCircleDistance); ship_ai.squadAddPatrolPath(intSquadId, trPatrolPoints); break; } case "patrolRandomPath": { transform[] trPatrolPoints = ship_ai.createPatrolPathLoiter(getTransform_o2p(self), getFloatObjVar(self, "fltMinCircleDistance"), getFloatObjVar(self, "fltMaxCircleDistance")); ship_ai.squadAddPatrolPath(intSquadId, trPatrolPoints); break; } default: break; } if (hasObjVar(self, "objAttackTarget")) { dictionary dctParams = new dictionary(); dctParams.put("objMembers", objMembers); space_utils.notifyObject(self, "squadAttackerSpawned", dctParams); } } public int childDestroyed(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String strSpawnerType = getStringObjVar(self, "strSpawnerType"); switch (strSpawnerType) { case "generic": float fltRespawnTime = rand(getFloatObjVar(self, "fltMinSpawnTime"), getFloatObjVar(self, "fltMaxSpawnTime")); messageTo(self, "respawnShip", null, fltRespawnTime, false); break; case "asteroid": messageTo(self, "respawnAsteroid", null, 3, false); break; case "wave": int intWavePopulation = utils.getIntScriptVar(self, "intWavePopulation") - 1; if (intWavePopulation <= 0) { int intWave = utils.getIntScriptVar(self, "intWave"); String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves"); intWave++; if (intWave >= strWaves.length) { utils.setScriptVar(self, "intWave", 0); float fltTime = rand(getFloatObjVar(self, "fltMinResetTime"), getFloatObjVar(self, "fltMaxResetTime")); messageTo(self, "spawnNextWave", null, fltTime, false); } else { utils.setScriptVar(self, "intWave", intWave); float fltTime = rand(getFloatObjVar(self, "fltMinWaveSpawnTime"), getFloatObjVar(self, "fltMaxWaveSpawnTime")); messageTo(self, "spawnNextWave", null, fltTime, false); } } else { utils.setScriptVar(self, "intWavePopulation", intWavePopulation); } break; } return SCRIPT_CONTINUE; } public int respawnAsteroid(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String strAsteroidType = getStringObjVar(self, "strAsteroidType"); int intMinResourcePool = getIntObjVar(self, "intMinResourcePool"); int intMaxResourcePool = getIntObjVar(self, "intMaxResourcePool"); int intDangerLevel = getIntObjVar(self, "intDangerLevel"); int intDangerPct = getIntObjVar(self, "intDangerPct"); createAsteroidSpawn(self, strAsteroidType, intMinResourcePool, intMaxResourcePool, intDangerLevel, intDangerPct); return SCRIPT_CONTINUE; } public int respawnShip(obj_id self, dictionary params) throws InterruptedException { if (!isSpawnerActivated(self)) { return SCRIPT_CONTINUE; } String[] strSpawns = objvar_mangle.getMangledStringArrayObjVar(self, "strSpawns"); if (strSpawns == null || strSpawns.length == 0) { return SCRIPT_CONTINUE; } float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance"); float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance"); String strSpawn = strSpawns[rand(0, strSpawns.length - 1)]; if (!isSquad(strSpawn)) { obj_id objShip = createGenericSpawn(self, strSpawn, fltMinSpawnDistance, fltMaxSpawnDistance, false); if (isIdValid(objShip)) { setupSpawnerSpawn(objShip, self); } } else { Vector objMembers = space_create.createSquadHyperspace(self, strSpawn, getTransform_o2p(self), 100, null); if (objMembers != null) { setupSpawnerSpawn(objMembers, self); } } return SCRIPT_CONTINUE; } public obj_id createGenericSpawn(obj_id objSpawner, String strShipType, float fltMinDistance, float fltMaxDistance, boolean boolRandomizeOrientation) throws InterruptedException { obj_id objShip = null; if (hasObjVar(objSpawner, "intLaunchFromDockingPoint")) { objShip = space_create.createShip(strShipType, getTransform_o2p(objSpawner), null); transform trTest = ship_ai.unitGetDockTransform(objSpawner, objShip); setTransform_o2p(objShip, trTest); } else { transform trSpawnLocation = space_utils.getRandomPositionInSphere(getTransform_o2w(objSpawner), fltMinDistance, fltMaxDistance, boolRandomizeOrientation); objShip = space_create.createShipHyperspace(strShipType, trSpawnLocation, null); } if (isIdValid(objShip)) { setObjVar(objShip, "intNoDump", 1); return objShip; } return null; } public obj_id createAsteroidSpawn(obj_id objSpawner, String strAsteroidType, int intMinResourcePool, int intMaxResourcePool, int intDangerLevel, int intDangerPct) throws InterruptedException { String strAsteroidTable = "datatables/space_mining/mining_asteroids.iff"; transform trSpawnLocation = space_utils.getRandomPositionInSphere(getTransform_o2w(objSpawner), 0, 1, true); obj_id objAsteroid; switch (strAsteroidType) { case "iron": case "silicaceous": case "carbonaceous": case "ice": case "obsidian": case "diamond": case "crystal": case "petrochem": case "acid": case "cyanomethanic": case "sulfuric": case "methane": case "organometallic": { int choice = rand(1, 2); String template = dataTableGetString(strAsteroidTable, strAsteroidType, choice); objAsteroid = createObject(template, trSpawnLocation, null); break; } default: objAsteroid = null; break; } setObjVar(objAsteroid, "objParent", objSpawner); setObjVar(objAsteroid, "strAsteroidType", strAsteroidType); setObjVar(objAsteroid, "intMinResourcePool", intMinResourcePool); setObjVar(objAsteroid, "intMaxResourcePool", intMaxResourcePool); setObjVar(objAsteroid, "intDangerLevel", intDangerLevel); setObjVar(objAsteroid, "intDangerPct", intDangerPct); setObjVar(objAsteroid, "intNoDump", 1); int resourcePool = rand(intMinResourcePool, intMaxResourcePool); setMaxHitpoints(objAsteroid, resourcePool); setHitpoints(objAsteroid, resourcePool); return objAsteroid; } public int destroyableCreated(obj_id self, dictionary params) throws InterruptedException { return SCRIPT_CONTINUE; } public void addDestroyable(obj_id objParent, obj_id objDestroyable) throws InterruptedException { dictionary dctParams = new dictionary(); dctParams.put("objParent", getSelf()); dctParams.put("objDestroyable", objDestroyable); messageTo(getObjIdObjVar(objParent, "objParent"), "destroyableCreated", dctParams, 1, false); } public void RemoveDestroyable(obj_id objParent, obj_id objDestroyable) throws InterruptedException { dictionary dctParams = new dictionary(); dctParams.put("objParent", getSelf()); dctParams.put("objDestroyable", objDestroyable); messageTo(getObjIdObjVar(objParent, "objParent"), "destroyableDestroyed", dctParams, 1, false); } public void writeSpawner(obj_id self) throws InterruptedException { sendSystemMessageTestingOnly(self, "Writing spawner"); obj_id objSpawner = createObject("object/tangible/space/content_infrastructure/basic_iff", getTransform_o2w(self), null); String strSpawnerType = utils.getStringScriptVar(self, "strSpawnerType"); if (strSpawnerType.equals("generic")) { String[] strSpawns = utils.getStringArrayScriptVar(self, "strSpawns"); float fltMinSpawnDistance = utils.getFloatScriptVar(self, "fltMinSpawnDistance"); float fltMaxSpawnDistance = utils.getFloatScriptVar(self, "fltMaxSpawnDistance"); float fltMinSpawnTime = utils.getFloatScriptVar(self, "fltMinSpawnTime"); float fltMaxSpawnTime = utils.getFloatScriptVar(self, "fltMaxSpawnTime"); setObjVar(objSpawner, "strSpawnerType", strSpawnerType); setObjVar(objSpawner, "fltMinSpawnDistance", fltMinSpawnDistance); setObjVar(objSpawner, "fltMaxSpawnDistance", fltMaxSpawnDistance); setObjVar(objSpawner, "fltMinSpawnTime", fltMinSpawnTime); setObjVar(objSpawner, "fltMaxSpawnTime", fltMaxSpawnTime); setObjVar(objSpawner, "strSpawns", strSpawns); } String strDefaultBehavior = utils.getStringScriptVar(self, "strDefaultBehavior"); setObjVar(objSpawner, "strDefaultBehavior", strDefaultBehavior); if (strDefaultBehavior.equals("loiter")) { setObjVar(objSpawner, "fltMinLoiterDistance", utils.getFloatScriptVar(self, "fltMinLoiterDistance")); setObjVar(objSpawner, "fltMaxLoiterDistance", utils.getFloatScriptVar(self, "fltMaxLoiterDistance")); } else if (strDefaultBehavior.equals("patrol")) { String strPatrolPointName = utils.getStringScriptVar(self, "strPatrolPointName"); Vector strPatrolPoints = new Vector<>(0); obj_id[] objPatrolPoints = utils.getObjIdArrayScriptVar(self, "objPatrolPoints"); String strTest; int patrolPointsSize = objPatrolPoints.length; for (int intI = 0; intI < patrolPointsSize; intI++) { strTest = strPatrolPointName + "_" + (intI + 1); strPatrolPoints.add(strTest); setObjVar(objPatrolPoints[intI], "strName", strTest); } if (strPatrolPoints.size() > 0) { setObjVar(objSpawner, "strPatrolPoints", strPatrolPoints); } utils.setScriptVar(objSpawner, "objPatrolPoints", objPatrolPoints); } } public boolean isSquad(String strSpawn) throws InterruptedException { return strSpawn.contains("squad_"); } }