Files
dsrc/sku.0/sys.server/compiled/game/script/event/gcwraids/gcwraid.java
T
2018-03-26 01:21:00 +01:00

423 lines
18 KiB
Java
Executable File

package script.event.gcwraids;
import script.dictionary;
import script.library.badge;
import script.library.create;
import script.library.gcw;
import script.library.locations;
import script.location;
import script.obj_id;
import script.string_id;
public class gcwraid extends script.base_script
{
public gcwraid()
{
}
public static final String DATATABLE = "datatables/event/gcwraid/city_data.iff";
public int OnInitialize(obj_id self) throws InterruptedException
{
if (hasObjVar(self, "event.gcwraids.shuttle"))
{
destroyObject(getObjIdObjVar(self, "event.gcwraids.shuttle"));
}
if (!hasScript(self, "event.gcwraids.cheerleader"))
{
attachScript(self, "event.gcwraids.cheerleader");
}
if (!hasScript(self, "systems.gcw.gcw_data_updater"))
{
attachScript(self, "systems.gcw.gcw_data_updater");
}
String setting = getConfigSetting("EventTeam", "gcwraid");
if (setting == null || setting.equals("") || !setting.equals("true"))
{
return SCRIPT_CONTINUE;
}
String myCity = locations.getGuardSpawnerRegionName(getLocation(self));
if (myCity == null || myCity.equals(""))
{
return SCRIPT_CONTINUE;
}
if (myCity.equals("@corellia_region_names:bela_vistal") || myCity.equals("@naboo_region_names:moenia"))
{
return SCRIPT_CONTINUE;
}
if (!hasObjVar(self, "auto_invasion.reference_number"))
{
for (int i = 0; i < dataTableGetNumRows(DATATABLE); i++)
{
if (dataTableGetString(DATATABLE, i, "CITY").equals(myCity))
{
setObjVar(self, "auto_invasion.reference_number", i);
}
}
}
if (!hasObjVar(self, "auto_invasion.reference_number"))
{
return SCRIPT_CONTINUE;
}
int referenceNumber = getIntObjVar(self, "auto_invasion.reference_number");
float minInvasionTime = dataTableGetFloat(DATATABLE, referenceNumber, "MINTIME");
float timeChunkSize = dataTableGetFloat(DATATABLE, referenceNumber, "TIMECHUNKSIZE");
int numTimeChunk = dataTableGetInt(DATATABLE, referenceNumber, "NUMTIMECHUNK");
if (!hasObjVar(self, "auto_invasion.next_invasion_time"))
{
float nextInvasionTime = (rand(1, numTimeChunk) * timeChunkSize) + minInvasionTime + getGameTime();
setObjVar(self, "auto_invasion.next_invasion_time", nextInvasionTime);
}
setObjVar(self, "auto_invasion.invasion_active", 0);
setObjVar(self, "auto_invasion.testing_multiplier", 1);
messageTo(self, "invasionTimerPing", null, 30, false);
messageTo(self, "endInvasion", null, 1, false);
return SCRIPT_CONTINUE;
}
public int invasionTimerPing(obj_id self, dictionary params) throws InterruptedException
{
if (!hasObjVar(self, "auto_invasion.next_invasion_time"))
{
return SCRIPT_CONTINUE;
}
float nextInvasionTime = getFloatObjVar(self, "auto_invasion.next_invasion_time");
int invasionActive = getIntObjVar(self, "auto_invasion.invasion_active");
if (invasionActive == 1)
{
return SCRIPT_CONTINUE;
}
if (getGameTime() > nextInvasionTime && invasionActive == 0)
{
if (rand(0, 100) < 66)
{
messageTo(self, "startCheerleaderEvent", null, 1, false);
}
else
{
messageTo(self, "startInvasion", null, 1, false);
}
setObjVar(self, "auto_invasion.invasion_active", 1);
return SCRIPT_CONTINUE;
}
else
{
messageTo(self, "invasionTimerPing", null, 3600, false);
}
return SCRIPT_CONTINUE;
}
public int startInvasion(obj_id self, dictionary params) throws InterruptedException
{
if (!hasObjVar(self, "auto_invasion.reference_number"))
{
return SCRIPT_CONTINUE;
}
removeObjVar(self, "auto_invasion.next_invasion_time");
int referenceNumber = getIntObjVar(self, "auto_invasion.reference_number");
String invasionTable;
if (gcw.getRebelRatio(self) >= gcw.getImperialRatio(self))
{
invasionTable = dataTableGetString(DATATABLE, referenceNumber, "INV1");
}
else
{
invasionTable = dataTableGetString(DATATABLE, referenceNumber, "INV2");
}
String myCity = locations.getGuardSpawnerRegionName(getLocation(self));
if (myCity.equals("@tatooine_region_names:bestine"))
{
invasionTable = dataTableGetString(DATATABLE, referenceNumber, "INV2");
}
if (myCity.equals("@tatooine_region_names:anchorhead"))
{
invasionTable = dataTableGetString(DATATABLE, referenceNumber, "INV1");
}
if (invasionTable == null || invasionTable.equals(""))
{
return SCRIPT_CONTINUE;
}
int difficulty = rand(1, 100);
int mobMin = 0;
int mobMax = 46;
if (difficulty <= 5)
{
mobMin = 0;
mobMax = 8;
}
else if (difficulty <= 20)
{
mobMin = 8;
mobMax = 18;
}
else if (difficulty <= 45)
{
mobMin = 18;
mobMax = 33;
}
else if (difficulty <= 70)
{
mobMin = 33;
mobMax = 45;
}
else if (difficulty <= 95)
{
mobMin = 36;
mobMax = 46;
}
String locTable = dataTableGetString(DATATABLE, referenceNumber, "LOCS");
String destTable = dataTableGetString(DATATABLE, referenceNumber, "DEST");
int locTableLength = dataTableGetNumRows(locTable);
int destTableLength = dataTableGetNumRows(destTable);
setObjVar(self, "auto_invasion.loc_table_length", locTableLength);
setObjVar(self, "auto_invasion.dest_table_length", destTableLength);
location loc = getLocation(self);
for (int i = 0; i < locTableLength; i++)
{
loc.x = dataTableGetFloat(locTable, i, "SPAWN_X");
loc.y = dataTableGetFloat(locTable, i, "SPAWN_Y");
loc.z = dataTableGetFloat(locTable, i, "SPAWN_Z");
setObjVar(self, "auto_invasion.spawn_loc_" + i, loc);
}
for (int i = 0; i < destTableLength; i++)
{
loc.x = dataTableGetFloat(destTable, i, "DEST_X");
loc.y = dataTableGetFloat(destTable, i, "DEST_Y");
loc.z = dataTableGetFloat(destTable, i, "DEST_Z");
setObjVar(self, "auto_invasion.dest_off_" + i, dataTableGetFloat(destTable, i, "DEST_OFF"));
setObjVar(self, "auto_invasion.spawn_dest_" + i, loc);
}
setObjVar(self, "auto_invasion.badge_awarded", dataTableGetInt(invasionTable, 0, "BADGE"));
setObjVar(self, "auto_invasion.spawn_delay", dataTableGetInt(invasionTable, 0, "SPAWNDELAY"));
setObjVar(self, "auto_invasion.invasion_table", invasionTable);
setObjVar(self, "auto_invasion.max_waves", dataTableGetInt(invasionTable, 0, "NUMWAVES"));
setObjVar(self, "auto_invasion.current_wave", 0);
setObjVar(self, "auto_invasion.spawn_number", 1);
setObjVar(self, "auto_invasion.dest_table", destTable);
setObjVar(self, "auto_invasion.mob_min_index", mobMin);
setObjVar(self, "auto_invasion.mob_max_index", mobMax);
messageTo(self, "launchWave", null, 1, false);
return SCRIPT_CONTINUE;
}
public int launchWave(obj_id self, dictionary params) throws InterruptedException
{
String invasionTable = getStringObjVar(self, "auto_invasion.invasion_table");
int currentWave = getIntObjVar(self, "auto_invasion.current_wave");
int maxWaves = getIntObjVar(self, "auto_invasion.max_waves");
int numberDead = 0;
String startMessage = dataTableGetString(invasionTable, 0, "SYSMESSTART");
String endMessage = dataTableGetString(invasionTable, 0, "SYSMESEND");
if (currentWave == maxWaves)
{
announceStatusToPlayers(self, endMessage);
messageTo(self, "endInvasion", null, 1, false);
return SCRIPT_CONTINUE;
}
if (currentWave == 0)
{
announceStatusToPlayers(self, startMessage);
}
setObjVar(self, "auto_invasion.current_wave", currentWave + 1);
setObjVar(self, "auto_invasion.spawn_number", 1);
setObjVar(self, "auto_invasion.done_spawning", 0);
setObjVar(self, "auto_invasion.number_dead", numberDead);
messageTo(self, "startSpawning", null, 1, false);
return SCRIPT_CONTINUE;
}
public int startSpawning(obj_id self, dictionary params) throws InterruptedException
{
String invasionTable = getStringObjVar(self, "auto_invasion.invasion_table");
if (invasionTable.equals("null") || invasionTable.equals(""))
{
messageTo(self, "endInvasion", null, 1, false);
return SCRIPT_CONTINUE;
}
int currentWave = getIntObjVar(self, "auto_invasion.current_wave");
int spawnNum = getIntObjVar(self, "auto_invasion.spawn_number");
int spawnDelay = dataTableGetInt(invasionTable, 0, "SPAWNDELAY");
int maxWaveTimeMinutes = dataTableGetInt(invasionTable, 0, "MAXWAVETIME");
int maxWaveTime = maxWaveTimeMinutes * 60;
int mobMinIndex = getIntObjVar(self, "auto_invasion.mob_min_index");
int mobMaxIndex = getIntObjVar(self, "auto_invasion.mob_max_index");
int doneSpawning = getIntObjVar(self, "auto_invasion.done_spawning");
String script = dataTableGetString(invasionTable, 0, "SCRIPT");
if (doneSpawning == 1)
{
return SCRIPT_CONTINUE;
}
int locTableLength = getIntObjVar(self, "auto_invasion.loc_table_length") - 1;
int locIndex = rand(0, locTableLength);
location spawnLoc = getLocationObjVar(self, "auto_invasion.spawn_loc_" + locIndex);
int destTableLength = getIntObjVar(self, "auto_invasion.dest_table_length") - 1;
int destIndex = rand(0, destTableLength);
location dest = getLocationObjVar(self, "auto_invasion.spawn_dest_" + destIndex);
float destOff = getFloatObjVar(self, "auto_invasion.dest_off_" + destIndex);
if (spawnLoc == null)
{
spawnLoc = getLocationObjVar(self, "auto_invasion.spawn_loc_0");
}
if (dest == null)
{
dest = getLocationObjVar(self, "auto_invasion.spawn_dest_0");
}
if (destOff == -1)
{
destOff = getFloatObjVar(self, "auto_invasion.dest_off_" + destIndex);
}
int mobIndex = rand(mobMinIndex, mobMaxIndex);
String spawnType = dataTableGetString(invasionTable, mobIndex, "SPAWN");
obj_id spawn = create.object(spawnType, spawnLoc);
if (isIdValid(spawn))
{
setObjVar(spawn, "auto_invasion.dest_offset", destOff);
setObjVar(spawn, "auto_invasion.target", dest);
setObjVar(spawn, "auto_invasion.my_number", spawnNum);
setObjVar(spawn, "auto_invasion.mom", self);
attachScript(spawn, script);
setObjVar(self, "auto_invasion.spawn" + spawnNum, spawn);
spawnNum++;
}
setObjVar(self, "auto_invasion.spawn_number", spawnNum);
if (spawnNum > 19)
{
params.put("currentWave", currentWave);
messageTo(self, "waveTimeLimitCheck", params, maxWaveTime, false);
setObjVar(self, "auto_invasion.done_spawning", 1);
return SCRIPT_CONTINUE;
}
else
{
messageTo(self, "startSpawning", null, spawnDelay, false);
}
return SCRIPT_CONTINUE;
}
public int invaderDied(obj_id self, dictionary params) throws InterruptedException
{
int myNumber = params.getInt("myNumber");
removeObjVar(self, "auto_invasion.spawn" + myNumber);
int spawnNum = getIntObjVar(self, "auto_invasion.spawn_number");
int numberDead = 0;
int doneSpawning = getIntObjVar(self, "auto_invasion.done_spawning");
String invasionTable = getStringObjVar(self, "auto_invasion.invasion_table");
int timeBetweenWaves = dataTableGetInt(invasionTable, 0, "TIMEBETWEENWAVES");
if (doneSpawning == 1)
{
for (int i = 1; i <= spawnNum; i++)
{
if (!isIdValid(getObjIdObjVar(self, "auto_invasion.spawn" + i)))
{
numberDead++;
setObjVar(self, "auto_invasion.number_dead", numberDead);
}
}
}
if (doneSpawning == 1 && numberDead >= spawnNum)
{
messageTo(self, "launchWave", null, timeBetweenWaves * 60, false);
}
return SCRIPT_CONTINUE;
}
public int waveTimeLimitCheck(obj_id self, dictionary params) throws InterruptedException
{
int lastWave = params.getInt("currentWave");
int currentWave = getIntObjVar(self, "auto_invasion.current_wave");
int spawnNum = getIntObjVar(self, "auto_invasion.spawn_number");
int invasionActive = getIntObjVar(self, "auto_invasion.invasion_active");
if (lastWave == currentWave)
{
for (int i = 1; i <= spawnNum; i++)
{
obj_id spawn = getObjIdObjVar(self, "auto_invasion.spawn" + i);
if (isIdValid(spawn))
{
messageTo(spawn, "goDie", null, 1, false);
}
removeObjVar(self, "auto_invasion.spawn" + i);
}
if (invasionActive == 1)
{
messageTo(self, "launchWave", null, 1, false);
}
}
return SCRIPT_CONTINUE;
}
public int endInvasion(obj_id self, dictionary params) throws InterruptedException
{
setObjVar(self, "auto_invasion.invasion_active", 0);
obj_id spawn;
for (int i = 1; i <= 20; i++)
{
spawn = getObjIdObjVar(self, "auto_invasion.spawn" + i);
if (isIdValid(spawn))
{
messageTo(spawn, "goDie", null, 1, false);
}
removeObjVar(self, "auto_invasion.spawn" + i);
}
int badgeAwarded = getIntObjVar(self, "auto_invasion.badge_awarded");
String badgeName = getCollectionSlotName(badgeAwarded);
if ((badgeAwarded > 0) && (badgeName != null) && (badgeName.length() > 0))
{
obj_id[] objPlayers = getPlayerCreaturesInRange(self, 255);
if (objPlayers != null && objPlayers.length > 0)
{
for (obj_id objPlayer : objPlayers) {
badge.grantBadge(objPlayer, badgeName);
}
}
}
removeObjVar(self, "auto_invasion.spawn_delay");
removeObjVar(self, "auto_invasion.max_waves");
removeObjVar(self, "auto_invasion.current_wave");
removeObjVar(self, "auto_invasion.spawn_number");
removeObjVar(self, "auto_invasion.mob_min_index");
removeObjVar(self, "auto_invasion.mob_max_index");
removeObjVar(self, "auto_invasion.done_spawning");
removeObjVar(self, "auto_invasion.number_dead");
int referenceNumber = getIntObjVar(self, "auto_invasion.reference_number");
float minInvasionTime = dataTableGetFloat(DATATABLE, referenceNumber, "MINTIME");
float timeChunkSize = dataTableGetFloat(DATATABLE, referenceNumber, "TIMECHUNKSIZE");
int numTimeChunk = dataTableGetInt(DATATABLE, referenceNumber, "NUMTIMECHUNK");
float rightNow = getGameTime();
if (!hasObjVar(self, "auto_invasion.next_invasion_time"))
{
float nextInvasionTime = (rand(1, numTimeChunk) * timeChunkSize) + minInvasionTime + rightNow;
setObjVar(self, "auto_invasion.next_invasion_time", nextInvasionTime);
}
setObjVar(self, "auto_invasion.testing_multiplier", 1);
messageTo(self, "invasionTimerPing", null, 2700, false);
return SCRIPT_CONTINUE;
}
private void announceStatusToPlayers(obj_id self, String messageId) throws InterruptedException
{
obj_id[] objPlayers = getPlayerCreaturesInRange(self, 256.0f);
if (objPlayers != null && objPlayers.length > 0)
{
for (obj_id objPlayer : objPlayers) {
sendSystemMessage(objPlayer, new string_id("auto_invasion", messageId));
}
}
}
public int OnHearSpeech(obj_id self, obj_id objSpeaker, String strText) throws InterruptedException
{
if (isGod(objSpeaker))
{
if ((toLower(strText)).startsWith("forcegcwraid"))
{
int invasionActive = getIntObjVar(self, "auto_invasion.invasion_active");
if (invasionActive == 0)
{
messageTo(self, "startInvasion", null, 1, false);
setObjVar(self, "auto_invasion.invasion_active", 1);
}
}
if ((toLower(strText)).startsWith("endcheerleaderevent"))
{
messageTo(self, "everyoneWalkBack", null, 1, false);
}
if ((toLower(strText)).startsWith("forcecheerleaderevent"))
{
messageTo(self, "startCheerleaderEvent", null, 1, false);
setObjVar(self, "auto_invasion.invasion_active", 1);
}
}
return SCRIPT_CONTINUE;
}
}