Files
dsrc/sku.0/sys.server/compiled/game/script/space/content_tools/spawner.java
T
2021-03-28 16:44:33 -04:00

749 lines
36 KiB
Java
Executable File

package script.space.content_tools;
import script.*;
import script.library.*;
import java.util.Vector;
public class spawner extends script.base_script
{
public spawner()
{
}
public static final boolean DISABLE_SPACE_SPAWNERS = utils.checkConfigFlag("GameServer", "disableSpaceSpawners");
public int getSpawnerData(obj_id self, dictionary params) throws InterruptedException
{
if (hasObjVar(self, "strAsteroidType"))
{
if (!DISABLE_SPACE_SPAWNERS)
{
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();
trPatrolPoints.setSize(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");
String strTest = strPatrolPoint;
if (strName.equals(strTest)) {
trPatrolPoints = utils.addElement(trPatrolPoints, getTransform_o2w(objTestObjects[intJ]));
intJ = objTestObjects.length + 10;
}
}
}
}
utils.setScriptVar(self, "trPatrolPoints", trPatrolPoints);
}
if (!DISABLE_SPACE_SPAWNERS)
{
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"))
{
if (!hasObjVar(self, "intActivationPhase"))
{
return true;
}
else
{
int intPhase = getIntObjVar(objManager, "intPhase");
int intActivationPhase = getIntObjVar(self, "intActivationPhase");
if ((intPhase != intActivationPhase) && (intActivationPhase != -1))
{
return false;
}
}
}
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;
}
String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior");
String strSpawnerType = getStringObjVar(self, "strSpawnerType");
if (!isSpawnerActivated(self))
{
return SCRIPT_CONTINUE;
}
switch (strSpawnerType) {
case "generic": {
String[] strSpawns = objvar_mangle.getMangledStringArrayObjVar(self, "strSpawns");
if (strSpawns == null) {
return SCRIPT_CONTINUE;
}
int intSpawnCount = getIntObjVar(self, "intSpawnCount");
float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance");
float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance");
float fltMinSpawnTime = getFloatObjVar(self, "fltMinSpawnTime");
float fltMaxSpawnTime = getFloatObjVar(self, "fltMaxSpawnTime");
transform trMyLocation = getTransform_o2w(self);
for (int intI = 0; intI < intSpawnCount; intI++) {
String strSpawn = strSpawns[rand(0, strSpawns.length - 1)];
float fltDelay = 1.0f;
fltDelay = rand(fltMinSpawnTime, fltMaxSpawnTime);
String[] strLoopSpawns = new String[1];
strLoopSpawns[0] = strSpawn;
dictionary dctParams = new dictionary();
dctParams.put("strSpawns", strLoopSpawns);
messageTo(self, "createSpawns", dctParams, fltDelay * intI, false);
}
break;
}
case "asteroid": {
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");
if (strAsteroidType.equals("")) {
return SCRIPT_CONTINUE;
}
transform trMyLocation = getTransform_o2w(self);
float fltDelay = 1.0f;
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, fltDelay, false);
break;
}
case "wave": {
int intWave = 0;
utils.setScriptVar(self, "intWave", 0);
float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance");
float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance");
String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves");
String strFileName = "datatables/space_content/spawners/waves.iff";
String[] strSpawns = dataTableGetStringColumnNoDefaults(strFileName, strWaves[0]);
float fltMinSpawnTime = getFloatObjVar(self, "fltMinSpawnTime");
float fltMaxSpawnTime = getFloatObjVar(self, "fltMaxSpawnTime");
if (strSpawns == null) {
return SCRIPT_CONTINUE;
}
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);
}
}
for (int intI = 1; intI < strSpawns.length; intI++) {
float fltDelay = 1.0f;
fltDelay = rand(fltMinSpawnTime, fltMaxSpawnTime);
String[] strLoopSpawns = new String[1];
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;
}
int intWave = utils.getIntScriptVar(self, "intWave");
float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance");
float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance");
String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves");
String strFileName = "datatables/space_content/spawners/waves.iff";
String[] strSpawns = dataTableGetStringColumnNoDefaults(strFileName, strWaves[intWave]);
if (strSpawns == null)
{
return SCRIPT_CONTINUE;
}
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);
}
}
for (int intI = 1; intI < strSpawns.length; intI++)
{
String[] strLoopSpawns = new String[1];
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");
obj_id objAsteroid = 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"))
{
int intSpawnsAllowed = getIntObjVar(self, "intSpawnsAllowed");
intSpawnsAllowed = intSpawnsAllowed - 1;
if (intSpawnsAllowed <= 0)
{
removeObjVar(self, "intSpawnsAllowed");
space_utils.notifyObject(self, "spawnCountReached", null);
}
}
String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior");
setObjVar(objShip, "objParent", self);
transform trMyLocation = getTransform_o2w(self);
switch (strDefaultBehavior) {
case "loiter":
float fltMinLoiterDistance = getFloatObjVar(self, "fltMinLoiterDistance");
float fltMaxLoiterDistance = getFloatObjVar(self, "fltMaxLoiterDistance");
ship_ai.spaceLoiter(objShip, trMyLocation, fltMinLoiterDistance, fltMaxLoiterDistance);
break;
case "patrol": {
transform[] trPatrolPoints = utils.getTransformArrayScriptVar(self, "trPatrolPoints");
ship_ai.spacePatrol(objShip, 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"));
}
for (int intI = 0; intI < trPatrolPoints.length; intI++) {
}
ship_ai.spaceMoveTo(objShip, trPatrolPoints);
break;
}
case "patrolFixedCircle": {
float fltMinCircleDistance = getFloatObjVar(self, "fltMinCircleDistance");
float fltMaxCircleDistance = getFloatObjVar(self, "fltMaxCircleDistance");
float fltCircleDistance = rand(fltMinCircleDistance, fltMaxCircleDistance);
transform trTest = getTransform_o2p(self);
transform[] trPatrolPoints = ship_ai.createPatrolPathCircle(trTest.getPosition_p(), fltCircleDistance);
ship_ai.spacePatrol(objShip, trPatrolPoints);
break;
}
case "patrolRandomPath": {
float fltMinCircleDistance = getFloatObjVar(self, "fltMinCircleDistance");
float fltMaxCircleDistance = getFloatObjVar(self, "fltMaxCircleDistance");
float fltCircleDistance = rand(fltMinCircleDistance, fltMaxCircleDistance);
transform trTest = getTransform_o2p(self);
transform[] trPatrolPoints = ship_ai.createPatrolPathLoiter(trTest, fltMinCircleDistance, 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);
}
return;
}
public void setupSpawnerSpawn(Vector objMembers, obj_id self) throws InterruptedException
{
for (Object objMember : objMembers) {
setObjVar(((obj_id) objMember), "objParent", self);
}
if (hasObjVar(self, "intSpawnsAllowed"))
{
int intSpawnsAllowed = getIntObjVar(self, "intSpawnsAllowed");
intSpawnsAllowed = intSpawnsAllowed - objMembers.size();
if (intSpawnsAllowed <= 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":
float fltMinLoiterDistance = getFloatObjVar(self, "fltMinLoiterDistance");
float fltMaxLoiterDistance = getFloatObjVar(self, "fltMaxLoiterDistance");
ship_ai.squadLoiter(intSquadId, trMyLocation, fltMinLoiterDistance, fltMaxLoiterDistance);
break;
case "patrol": {
transform[] trPatrolPoints = utils.getTransformArrayScriptVar(self, "trPatrolPoints");
ship_ai.squadAddPatrolPath(intSquadId, trPatrolPoints);
break;
}
case "patrolNoRecycle": {
transform[] trPatrolPoints = utils.getTransformArrayScriptVar(self, "trPatrolPoints");
transform trTest = trPatrolPoints[trPatrolPoints.length - 1];
location locTest = utils.getLocationFromTransform(trTest);
addLocationTarget3d(((obj_id) objMembers.get(0)), "leaderSpawnerArrival", locTest, 16);
ship_ai.squadMoveTo(intSquadId, trPatrolPoints);
break;
}
case "patrolFixedCircle": {
float fltMinCircleDistance = getFloatObjVar(self, "fltMinCircleDistance");
float fltMaxCircleDistance = getFloatObjVar(self, "fltMaxCircleDistance");
float fltCircleDistance = rand(fltMinCircleDistance, fltMaxCircleDistance);
transform trTest = getTransform_o2p(self);
transform[] trPatrolPoints = ship_ai.createPatrolPathCircle(trTest.getPosition_p(), fltCircleDistance);
ship_ai.squadAddPatrolPath(intSquadId, trPatrolPoints);
break;
}
case "patrolRandomPath": {
float fltMinCircleDistance = getFloatObjVar(self, "fltMinCircleDistance");
float fltMaxCircleDistance = getFloatObjVar(self, "fltMaxCircleDistance");
float fltCircleDistance = rand(fltMinCircleDistance, fltMaxCircleDistance);
transform trTest = getTransform_o2p(self);
transform[] trPatrolPoints = ship_ai.createPatrolPathLoiter(trTest, fltMinCircleDistance, 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);
}
return;
}
public int childDestroyed(obj_id self, dictionary params) throws InterruptedException
{
if (!isSpawnerActivated(self))
{
return SCRIPT_CONTINUE;
}
String strSpawnerType = getStringObjVar(self, "strSpawnerType");
if (strSpawnerType.equals("generic"))
{
float fltMinSpawnTime = getFloatObjVar(self, "fltMinSpawnTime");
float fltMaxSpawnTime = getFloatObjVar(self, "fltMaxSpawnTime");
float fltRespawnTime = rand(fltMinSpawnTime, fltMaxSpawnTime);
messageTo(self, "respawnShip", null, fltRespawnTime, false);
}
if (strSpawnerType.equals("asteroid"))
{
messageTo(self, "respawnAsteroid", null, 3, false);
}
if (strSpawnerType.equals("wave"))
{
int intWavePopulation = utils.getIntScriptVar(self, "intWavePopulation");
intWavePopulation = intWavePopulation - 1;
if (intWavePopulation <= 0)
{
int intWave = utils.getIntScriptVar(self, "intWave");
String[] strWaves = objvar_mangle.getMangledStringArrayObjVar(self, "strWaves");
intWave = intWave + 1;
if (intWave >= strWaves.length)
{
intWave = 0;
utils.setScriptVar(self, "intWave", intWave);
float fltMinResetTime = getFloatObjVar(self, "fltMinResetTime");
float fltMaxResetTime = getFloatObjVar(self, "fltMaxResetTime");
float fltTime = rand(fltMinResetTime, fltMaxResetTime);
messageTo(self, "spawnNextWave", null, fltTime, false);
}
else
{
utils.setScriptVar(self, "intWave", intWave);
float fltMinWaveSpawnTime = getFloatObjVar(self, "fltMinWaveSpawnTime");
float fltMaxWaveSpawnTime = getFloatObjVar(self, "fltMaxWaveSpawnTime");
float fltTime = rand(fltMinWaveSpawnTime, fltMaxWaveSpawnTime);
messageTo(self, "spawnNextWave", null, fltTime, false);
}
}
else
{
utils.setScriptVar(self, "intWavePopulation", intWavePopulation);
}
}
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");
obj_id objAsteroid = 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");
float fltMinSpawnDistance = getFloatObjVar(self, "fltMinSpawnDistance");
float fltMaxSpawnDistance = getFloatObjVar(self, "fltMaxSpawnDistance");
String strDefaultBehavior = getStringObjVar(self, "strDefaultBehavior");
transform trMyLocation = getTransform_o2w(self);
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 = null;
switch (strAsteroidType) {
case "iron": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "iron", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "silicaceous": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "silicaceous", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "carbonaceous": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "carbonaceous", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "ice": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "ice", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "obsidian": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "obsidian", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "diamond": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "diamond", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "crystal": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "crystal", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "petrochem": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "petrochem", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "acid": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "acid", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "cyanomethanic": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "cyanomethanic", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "sulfuric": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "sulfuric", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "methane": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "methane", choice);
objAsteroid = createObject(template, trSpawnLocation, null);
break;
}
case "organometallic": {
int choice = rand(1, 2);
String template = dataTableGetString(strAsteroidTable, "organometallic", 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
{
obj_id objDestroyable = params.getObjId("objDestroyable");
obj_id objParent = params.getObjId("objParent");
deltadictionary dctScriptVars = self.getScriptVars();
return SCRIPT_CONTINUE;
}
public void addDestroyable(obj_id objParent, obj_id objDestroyable) throws InterruptedException
{
obj_id self = getSelf();
obj_id objMom = getObjIdObjVar(objParent, "objParent");
dictionary dctParams = new dictionary();
dctParams.put("objParent", self);
dctParams.put("objDestroyable", objDestroyable);
messageTo(objMom, "destroyableCreated", dctParams, 1, false);
return;
}
public void RemoveDestroyable(obj_id objParent, obj_id objDestroyable) throws InterruptedException
{
obj_id self = getSelf();
obj_id objMom = getObjIdObjVar(objParent, "objParent");
dictionary dctParams = new dictionary();
dctParams.put("objParent", self);
dctParams.put("objDestroyable", objDestroyable);
messageTo(objMom, "destroyableDestroyed", dctParams, 1, false);
return;
}
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");
int intSpawnCount = utils.getIntScriptVar(self, "intSpawnCount");
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"))
{
float fltMinLoiterDistance = utils.getFloatScriptVar(self, "fltMinLoiterDistance");
float fltMaxLoiterDistance = utils.getFloatScriptVar(self, "fltMaxLoiterDistance");
setObjVar(objSpawner, "fltMinLoiterDistance", fltMinLoiterDistance);
setObjVar(objSpawner, "fltMaxLoiterDistance", fltMaxLoiterDistance);
}
else if (strDefaultBehavior.equals("patrol"))
{
String strPatrolPointName = utils.getStringScriptVar(self, "strPatrolPointName");
Vector strPatrolPoints = new Vector();
strPatrolPoints.setSize(0);
obj_id[] objPatrolPoints = utils.getObjIdArrayScriptVar(self, "objPatrolPoints");
for (int intI = 0; intI < objPatrolPoints.length; intI++)
{
String strTest = strPatrolPointName + "_" + (intI + 1);
strPatrolPoints = utils.addElement(strPatrolPoints, 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
{
int intIndex = strSpawn.indexOf("squad_");
if (intIndex > -1)
{
return true;
}
return false;
}
}