mirror of
https://bitbucket.org/seefoe/dsrc.git
synced 2026-07-31 01:15:55 -04:00
603 lines
17 KiB
Plaintext
603 lines
17 KiB
Plaintext
include library.hue;
|
|
include library.ship_ai;
|
|
include library.sui;
|
|
include java.lang.Math;
|
|
include library.prose;
|
|
|
|
const float RESET_TIME = 90;
|
|
const int STATE_IMPERIAL = 1;
|
|
const int STATE_REBEL = 0;
|
|
|
|
|
|
const int PHASE_ESCORT = 0; // escorty
|
|
const int PHASE_CONTROL = 1; // zones of control
|
|
const int PHASE_DESTROY = 2; // star destroyer
|
|
|
|
const int[] PHASE_DURATIONS =
|
|
{
|
|
9600,
|
|
9600,
|
|
-1
|
|
};
|
|
|
|
|
|
|
|
const int POINTS_PER_TRANSPORT = 100;
|
|
const int POINTS_PER_KILL = 1;
|
|
const int POINTS_FOR_STARDESTROYER = 100000;// ???
|
|
|
|
|
|
// functions we need
|
|
// transition
|
|
// validation
|
|
// cleanup
|
|
|
|
void battlefieldCompleted(obj_id objManager, int intCompletionId)
|
|
{
|
|
CustomerServiceLog("battlefield", "Battlefield Completed and resetting with id "+intCompletionId);
|
|
//obj_id objKesselObject = getPlanetByName("space_light1");
|
|
//obj_id objKesselManager = utils.getObjIdScriptVar(objKesselObject, "objKesselManager");
|
|
//LOG("space", "sending to "+ objKesselManager);
|
|
//dictionary dctParams = new dictionary();
|
|
//dctParams.put("intCompletionId", intCompletionId);
|
|
//messageTo(objKesselManager, "changeSpawnerPhase", dctParams, 0, true);
|
|
// start the cleanup
|
|
obj_id[] objShips = getObjectsInRange(getLocation(objManager), 320000);
|
|
for(int intI = 0; intI< objShips.length; intI++)
|
|
{
|
|
if(!space_utils.isPlayerControlledShip(objShips[intI]))
|
|
{
|
|
if(hasObjVar(objShips[intI], "ship.shipName"))
|
|
{
|
|
if(!hasObjVar(objShips[intI], "intNoCleanup"))
|
|
{
|
|
float fltTime = rand(1,120);
|
|
messageTo(objShips[intI], "destroySelf", null, fltTime, false);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//string_id strSpam = new string_id("this_is_bad_spam", "space_battlefield_resetting");
|
|
//space_utils.sendSystemMessageShip(objShips[intI], strSpam, true, true, true, true);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
void resetSpaceBattlefield(obj_id objManager)
|
|
{
|
|
// move everyone out of the zone
|
|
// destroy all ships
|
|
// reset phase back to 0
|
|
// restart the spawners
|
|
// replace the space stations if needed
|
|
// reset damage for the space sations
|
|
|
|
// destroy space station (only way to be sure)
|
|
LOG("space", "RESETTING");
|
|
|
|
utils.removeScriptVar(objManager, "intResetting");
|
|
obj_id objSpaceStations[] = getAllObjectsWithScript(getLocation(objManager), 320000, "space.battlefields.battlefield_station");
|
|
|
|
if(objSpaceStations!=null)
|
|
{
|
|
for(int intI = 0; intI<objSpaceStations.length; intI++)
|
|
{
|
|
|
|
setObjVar(objSpaceStations[intI], "intCleaningUp", 1);
|
|
detachScript(objSpaceStations[intI], "space.battlefields.battlefield_spawner");
|
|
detachScript(objSpaceStations[intI], "space.content_tools.spawner");
|
|
destroyObject(objSpaceStations[intI]);
|
|
}
|
|
|
|
}
|
|
// destroy Star destroyer!
|
|
obj_id objDestroyers[] = getAllObjectsWithScript(getLocation(objManager), 320000, "space.battlefields.battlefield_star_destroyer");
|
|
if(objDestroyers!=null)
|
|
{
|
|
for(int intI = 0; intI<objDestroyers.length; intI++)
|
|
{
|
|
setObjVar(objDestroyers[intI], "intCleaningUp", 1);
|
|
destroyObject(objDestroyers[intI]);
|
|
}
|
|
|
|
}
|
|
|
|
obj_id objStationEggs[] = getAllObjectsWithObjVar(getLocation(objManager), 320000, "intStationRespawner");
|
|
|
|
|
|
if(objStationEggs!=null)
|
|
{
|
|
for(int intI = 0; intI<objStationEggs.length; intI++)
|
|
{
|
|
string strObjVars= utils.getStringLocalVar(objStationEggs[intI], "strObjVars");
|
|
string strScripts= utils.getStringLocalVar(objStationEggs[intI], "strScripts");
|
|
string strTemplate = utils.getStringLocalVar(objStationEggs[intI], "strTemplate");
|
|
LOG("space", "making "+strTemplate+" from object "+objStationEggs[intI]);
|
|
transform trTest = getTransform_o2p(objStationEggs[intI]);
|
|
|
|
obj_id objStation = createObject(strTemplate, trTest, null);
|
|
LOG("space", "MADE STATION "+objStation);
|
|
setPackedObjvars(objStation, strObjVars);
|
|
space_create.setupShipFromObjVars(objStation);
|
|
if (hasObjVar(objStation, "intCleaningUp"))
|
|
removeObjVar(objStation, "intCleaningUp");
|
|
|
|
if(strScripts!="")
|
|
{
|
|
string[] strScriptArray = split(strScripts, ',');
|
|
for(int intJ = 0; intJ<strScriptArray.length; intJ++)
|
|
{
|
|
string script = strScriptArray[intJ];
|
|
if ( script.indexOf( "script." ) > -1 )
|
|
{
|
|
script = script.substring( 7 );
|
|
}
|
|
if(script!="")
|
|
{
|
|
if ( !hasScript( objStation, script ) )
|
|
attachScript( objStation, script );
|
|
}
|
|
|
|
setObjVar(objStation, "intNoCleanup",1);
|
|
}
|
|
}
|
|
destroyObject(objStationEggs[intI]);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
LOG("space", "NO EGGS");
|
|
}
|
|
|
|
// remade teh stations
|
|
setObjVar(objManager, "intPhase", -1);
|
|
//obj_id[] objShips = getAllObjectsWithScript(getLocation(objManager), 320000, "space.combat.combat_ship");
|
|
dictionary dctParams = new dictionary();
|
|
LOG("space", "RESETTING on "+objManager);
|
|
messageTo(objManager, "nextPhase", dctParams, 1, false);
|
|
resetCounters();
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
void doBattleFieldTransition(obj_id objShip, obj_id objStation)
|
|
{
|
|
LOG("space", "Transition 1");
|
|
string strName = getStringObjVar(objStation, "strName");
|
|
doBattleFieldTransition(objShip, objStation, strName);
|
|
|
|
}
|
|
void doBattleFieldTransition(obj_id objShip, obj_id objStation, string strOverloadName)
|
|
{
|
|
LOG("space", "Transition 2");
|
|
if(canTransitionToBattlefield(objShip, objStation))
|
|
{
|
|
LOG("space", "Transition 3");
|
|
|
|
string strRealName = getStringObjVar(objStation, "strName"); // sometimes the name is overloaded.
|
|
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strRealName);
|
|
int intPointCost = dctStationInfo.getInt("intPointCost");
|
|
string strType = dctStationInfo.getString("strPrestigeType");
|
|
int intTotalCost= getPrestigeCostForTransition(objShip, objStation, intPointCost);
|
|
|
|
// setup the team
|
|
|
|
if(!strOverloadName.equals(strRealName))
|
|
{
|
|
dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strOverloadName);
|
|
}
|
|
string strArea = dctStationInfo.getString("strArea");
|
|
LOG("testing", "area is "+strArea);
|
|
float fltX = dctStationInfo.getFloat("fltX");
|
|
float fltY = dctStationInfo.getFloat("fltY");
|
|
float fltZ = dctStationInfo.getFloat("fltZ");
|
|
transform trTest = space_combat.getClosestStationRespawnLocation(objShip);
|
|
location locTest = new location();
|
|
if(trTest!=null)
|
|
{
|
|
locTest = space_utils.getLocationFromTransform(trTest);
|
|
setObjVar(objShip, "battlefield.locRespawnLocation", locTest);
|
|
}
|
|
else
|
|
{
|
|
setObjVar(objShip, "battlefield.locRespawnLocation", getLocation(objShip));
|
|
}
|
|
|
|
setObjVar(objShip, "battlefield.locEntryLocation", getLocation(objShip));
|
|
|
|
|
|
// randomize
|
|
locTest = new location();
|
|
locTest.x = fltX;
|
|
locTest.y = fltY;
|
|
locTest.z = fltZ;
|
|
|
|
locTest.x = locTest.x + rand(-200, 200);
|
|
locTest.y = locTest.y + rand(-200, 200);
|
|
locTest.z = locTest.z +rand(-200, 200);
|
|
|
|
locTest.area = strArea;
|
|
LOG("testing", "setting location to "+locTest);
|
|
CustomerServiceLog("battlefield", "%TU "+objShip+" is Entering the Deep Space zone from station at "+getLocation(objStation), getOwner(objShip));
|
|
warpPlayer(getPilotId(objShip), strArea, locTest.x, locTest.y, locTest.z, null, locTest.x, locTest.y, locTest.z);
|
|
|
|
}
|
|
else
|
|
{
|
|
LOG("space", "Can't transition");
|
|
}
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
void doKesselTransition(obj_id objShip, obj_id objStation)
|
|
{
|
|
|
|
if(space_utils.isBasicShip(objShip))
|
|
{
|
|
string_id strSpam = new string_id("space/space_interaction", "no_basics");
|
|
space_utils.sendSystemMessageShip(objShip, strSpam, true, false, false, false);
|
|
return;
|
|
}
|
|
LOG("space", "GOING TO KESSEL");
|
|
string strName = getStringObjVar(objStation, "strName");
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strName);
|
|
|
|
float fltKesselX= dctStationInfo.getFloat("fltKesselX");
|
|
float fltKesselY= dctStationInfo.getFloat("fltKesselY");
|
|
float fltKesselZ= dctStationInfo.getFloat("fltKesselZ");
|
|
|
|
transform trTest = space_combat.getClosestStationRespawnLocation(objShip);
|
|
location locTest = space_utils.getLocationFromTransform(trTest);
|
|
|
|
|
|
setObjVar(objShip, "battlefield.locEntryLocation", getLocation(objShip));
|
|
setObjVar(objShip, "battlefield.locRespawnLocation", locTest);
|
|
CustomerServiceLog("battlefield", objShip+" is Entering the Kessel space zone from station at "+getLocation(objStation));
|
|
locTest.x = fltKesselX;
|
|
locTest.y = fltKesselY;
|
|
locTest.z = fltKesselZ;
|
|
locTest.x = locTest.x + rand(-200, 200);
|
|
locTest.y = locTest.y + rand(-200, 200);
|
|
locTest.z = locTest.z +rand(-200, 200);
|
|
locTest.area = "space_light1";
|
|
warpPlayer(getPilotId(objShip), locTest.area, locTest.x, locTest.y, locTest.z, null, locTest.x, locTest.y, locTest.z);
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
void doBattleFieldCommandTransition(obj_id objShip, obj_id player, string zone, string factionEntry)
|
|
{
|
|
string strX = "fltX";
|
|
string strY = "fltY";
|
|
string strZ = "fltZ";
|
|
|
|
//Going to Kessel
|
|
if(zone.equals("light1"))
|
|
{
|
|
|
|
|
|
strX = "fltKesselX";
|
|
strY = "fltKesselY";
|
|
strZ = "fltKesselZ";
|
|
|
|
}
|
|
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", factionEntry);
|
|
|
|
float fltX = dctStationInfo.getFloat(strX);
|
|
float fltY = dctStationInfo.getFloat(strY);
|
|
float fltZ = dctStationInfo.getFloat(strZ);
|
|
|
|
|
|
transform trTest = space_combat.getClosestStationRespawnLocation(objShip);
|
|
location locTest = new location();
|
|
if(trTest!=null)
|
|
{
|
|
locTest = space_utils.getLocationFromTransform(trTest);
|
|
setObjVar(objShip, "battlefield.locRespawnLocation", locTest);
|
|
}
|
|
else
|
|
{
|
|
setObjVar(objShip, "battlefield.locRespawnLocation", getLocation(objShip));
|
|
}
|
|
|
|
setObjVar(objShip, "battlefield.locEntryLocation", getLocation(objShip));
|
|
|
|
|
|
// randomize
|
|
locTest = new location();
|
|
locTest.x = fltX;
|
|
locTest.y = fltY;
|
|
locTest.z = fltZ;
|
|
|
|
locTest.x = locTest.x + rand(-200, 200);
|
|
locTest.y = locTest.y + rand(-200, 200);
|
|
locTest.z = locTest.z +rand(-200, 200);
|
|
|
|
locTest.area = zone;
|
|
warpPlayer(getPilotId(objShip), zone, locTest.x, locTest.y, locTest.z, null, locTest.x, locTest.y, locTest.z);
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
boolean isInBattlefield(obj_id objShip)
|
|
{
|
|
return isSpaceBattlefieldZone();
|
|
}
|
|
|
|
void cleanupBattlefieldMember(obj_id objShip)
|
|
{
|
|
// we take them home
|
|
// we remove all variables
|
|
setObjVar(objShip, "locEntryLocation", getLocation(objShip));
|
|
location locEntryLocation = getLocationObjVar(objShip, "locEntryLocation");
|
|
removeObjVar(objShip, "locEntryLocation");
|
|
setLocation(objShip, locEntryLocation);
|
|
return;
|
|
|
|
}
|
|
|
|
boolean canTransitionToBattlefield(obj_id objShip, obj_id objStation)
|
|
{
|
|
|
|
|
|
|
|
if(space_utils.isBasicShip(objShip))
|
|
{
|
|
string_id strSpam = new string_id("space/space_interaction", "no_basics");
|
|
space_utils.sendSystemMessageShip(objShip, strSpam, true, false, false, false);
|
|
return false;
|
|
}
|
|
|
|
float fltDistance = getDistance(objShip, objStation);
|
|
if(fltDistance>300)
|
|
{
|
|
string_id strSpam = new string_id("space/space_interaction", "too_far");
|
|
space_utils.sendSystemMessageShip(objShip, strSpam, true, false, false, false);
|
|
return false;
|
|
}
|
|
if(isCorrectFactionForStation(objShip, objStation))
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
LOG("testing", "badFaction");
|
|
resizeable obj_id[] objPlayers = space_transition.getContainedPlayers(objShip, null);
|
|
if(objPlayers.length>1)
|
|
{
|
|
string_id strSpam = new string_id("space/space_battlefields", "not_correct_faction_group");
|
|
space_utils.sendSystemMessageShip(objShip, strSpam, true, false, false, false);
|
|
}
|
|
else
|
|
{
|
|
string_id strSpam = new string_id("space/space_battlefields", "not_correct_faction_single");
|
|
space_utils.sendSystemMessageShip(objShip, strSpam, true, false, false, false);
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
boolean isCorrectFactionForStation(obj_id objShip, obj_id objStation)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
|
|
int canAffordPrestigePointCost(obj_id objShip, obj_id objStation, string strType)
|
|
{
|
|
|
|
string strName = getStringObjVar(objStation, "strName");
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strName);
|
|
int intPointCost = dctStationInfo.getInt("intPointCost");
|
|
|
|
|
|
obj_id objPilot = getPilotId(objShip);
|
|
int intCurrentXp = getExperiencePoints(objPilot, strType);
|
|
int intTotalCost = getPrestigeCostForTransition(objShip, objStation, intPointCost);
|
|
|
|
if(intCurrentXp>=Math.abs(intTotalCost))
|
|
{
|
|
return intTotalCost * -1;
|
|
}
|
|
else
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
int canAffordPrestigePointCost(obj_id objShip, obj_id objStation)
|
|
{
|
|
|
|
string strName = getStringObjVar(objStation, "strName");
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strName);
|
|
string strType = dctStationInfo.getString("strPrestigeType");
|
|
return canAffordPrestigePointCost(objShip, objStation, strType);
|
|
}
|
|
|
|
|
|
int getPrestigeCostForTransition(obj_id objPlayer, obj_id objStation)
|
|
{
|
|
obj_id objShip = getPilotedShip(objPlayer);
|
|
string strName = getStringObjVar(objStation, "strName");
|
|
dictionary dctStationInfo = dataTableGetRow("datatables/space_content/battlefields/entry_stations.iff", strName);
|
|
int intPointCost = dctStationInfo.getInt("intPointCost");
|
|
return intPointCost;
|
|
|
|
|
|
}
|
|
int getPrestigeCostForTransition(obj_id objShip, obj_id objStation, int intPointCost)
|
|
{
|
|
return intPointCost;
|
|
|
|
}
|
|
|
|
boolean isInRebelShip(obj_id objPlayer)
|
|
{
|
|
|
|
obj_id objShip = space_transition.getContainingShip(objPlayer);
|
|
if(!isIdValid(objShip))
|
|
{
|
|
return false;
|
|
|
|
}
|
|
int intTest = shipGetSpaceFaction(objShip);
|
|
|
|
if(intTest==##"rebel")
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
boolean isInNeutralShip(obj_id objPlayer)
|
|
{
|
|
if(!isInImperialShip(objPlayer)&&(!isInRebelShip(objPlayer)))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
boolean isInImperialShip(obj_id objPlayer)
|
|
{
|
|
obj_id objShip = space_transition.getContainingShip(objPlayer);
|
|
if(!isIdValid(objShip))
|
|
{
|
|
return false;
|
|
|
|
}
|
|
int intTest = shipGetSpaceFaction(objShip);
|
|
if(intTest==##"imperial")
|
|
{
|
|
LOG("testing", intTest +" vs "+ ##"imperial");
|
|
return true;
|
|
}
|
|
LOG("testing", "Returning ");
|
|
return false;
|
|
}
|
|
|
|
obj_id getManagerObject()
|
|
{
|
|
|
|
return getNamedObject("content_manager");
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void sendNextPhaseNotification(obj_id self)
|
|
{
|
|
|
|
int intPhase = getIntObjVar(self, "intPhase");
|
|
int intPhaseStart = getIntObjVar(self, "intPhaseStart");
|
|
|
|
int intDuration = PHASE_DURATIONS[intPhase];
|
|
LOG("space", "phase is "+intPhase);
|
|
LOG("space", "start is "+intPhaseStart);
|
|
if(intPhaseStart==0)
|
|
{
|
|
intPhaseStart = getGameTime();
|
|
}
|
|
LOG("space", "Duration is "+intDuration);
|
|
if(intDuration>0)
|
|
{
|
|
int intCurrentTime = getGameTime();
|
|
int intDifference = intCurrentTime - intPhaseStart;
|
|
LOG("space", "difference is"+intDifference);
|
|
if(intDifference>intDuration)
|
|
{
|
|
// next phase
|
|
dictionary dctParams = new dictionary();
|
|
space_utils.notifyObject(self, "nextPhase", dctParams);
|
|
LOG("space", "Notifying of nerxtphase");
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
dictionary dctParams = new dictionary();
|
|
LOG("space", "notifying of next phase with delay "+(intDuration - intDifference) );
|
|
messageTo(self, "nextPhase", dctParams, intDuration - intDifference, false);
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
|
|
void doDestroyerPhase(obj_id objManager)
|
|
{
|
|
|
|
obj_id[] objStations = getAllObjectsWithScript(getLocation(objManager), 320000, "space.battlefields.battlefield_station");
|
|
if(objStations!=null)
|
|
{
|
|
|
|
removeObjVar(objStations[0], "intInvincible");// make vulnerable
|
|
//int intCount = getIntObjVar(objManager, "intRebelEscortsCompleted");
|
|
//if(intCount<10)
|
|
//{
|
|
// intCount = 10;
|
|
//}
|
|
//setObjVar(objStations[0], "intSpawnsAllowed", intCount*10);
|
|
int intCount = 1000;
|
|
setShipMaximumChassisHitPoints(objStations[0], intCount * 1000);
|
|
setShipCurrentChassisHitPoints(objStations[0], intCount * 1000);
|
|
attachScript(objStations[0], "space.battlefields.battlefield_spawner");
|
|
attachScript(objStations[0], "space.content_tools.spawner");
|
|
messageTo(objStations[0], "startSpawning", null, 4, false);
|
|
|
|
}
|
|
obj_id[] objDestroyerEgg= getAllObjectsWithObjVar(getLocation(objManager), 320000, "strStarDestroyerAttackStation");
|
|
if(objDestroyerEgg==null)
|
|
{
|
|
LOG("space", "NO STAR DESTROYER EGG");
|
|
return ;
|
|
|
|
}
|
|
transform trDestroyerLocation = getTransform_o2p(objDestroyerEgg[0]);
|
|
LOG("space", "Egg is at "+getLocation(objDestroyerEgg[0]));
|
|
LOG("space", "Creating stardestroyer at "+trDestroyerLocation);
|
|
//obj_id objStarDestroyer = space_create.createShipHyperspace("star_destroyer", trDestroyerLocation);
|
|
obj_id objStarDestroyer = space_create.createShip("star_destroyer", trDestroyerLocation);
|
|
LOG("space", "+objStarDestroyer is at "+getLocation(objStarDestroyer));
|
|
|
|
attachScript(objStarDestroyer, "space.battlefields.battlefield_star_destroyer");
|
|
//setObjVar(objStarDestroyer, "objAttackTarget", objStations[0]);
|
|
space_combat.setupCapitalShipFromTurretDefinition(objStarDestroyer, "star_destroyer");
|
|
setObjVar(objStarDestroyer, "intNoCleanup",1);
|
|
//setObjVar(objStations[0], "objAttackTarget", objStarDestroyer);
|
|
//space_utils.notifyObject(objStarDestroyer, "attackStation", null);
|
|
CustomerServiceLog("battlefield", objStarDestroyer+" :Star Destroyer Spawned!");
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void resetCounters()
|
|
{
|
|
obj_id objContentManager = space_battlefield.getManagerObject();
|
|
removeObjVar(objContentManager, "intImperialEscortsCompleted");
|
|
removeObjVar(objContentManager, "intRebelEscortsCompleted");
|
|
removeObjVar(objContentManager, "intImperialShipCount");
|
|
return;
|
|
|
|
}
|