mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-13 22:01:04 -04:00
749 lines
36 KiB
Java
Executable File
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;
|
|
}
|
|
}
|