mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-28 22:15:54 -04:00
* Code compiles - execution NOT tested * updating gitignore * Removed intellij settings files * Removed more intellij files * Added exclusion for JDK classes. * Fixed purchasing script for vendors that have listed coin types. * Updated script to not kick off until the entire preload is complete. * adds static name entry for Solo movie poster and tcg9 vendor entry * clean up empty and orphaned object templates * adds placeholder black market (static) spawns * corrects entries for the video game table to correctly set it in tcg series 2 and remove series 1 console errors * Updated gitignore and removed intellij project files * Fixed appearance reference for thranta payroll and kashyyyk door, added skipLosCheck objvar due to cannit see issue. Requires updated src * Fixed appearance and template for terminal (#2) * Fixed appearance and template for terminal (#3) * Fixed appearance and template for terminal (#4) * Deleted another faulty/orphaned object template * Fixed gcw ranks option on frog. Only issue is that it doesn't award the officer commands or badges. * Fixed some unneeded java 11 changes
1310 lines
67 KiB
Java
Executable File
1310 lines
67 KiB
Java
Executable File
package script.systems.gcw;
|
|
|
|
import script.dictionary;
|
|
import script.gcw_score;
|
|
import script.library.*;
|
|
import script.location;
|
|
import script.obj_id;
|
|
|
|
import java.util.Vector;
|
|
|
|
public class gcw_city extends script.base_script
|
|
{
|
|
public gcw_city()
|
|
{
|
|
}
|
|
public static final location KEREN_ANNOUNCEMENT_ORIGIN = new location(1616, 24, 2705, "naboo", null);
|
|
public static final location BESTINE_ANNOUNCEMENT_ORIGIN = new location(-1097, 12, -3583, "tatooine", null);
|
|
public static final location DEARIC_ANNOUNCEMENT_ORIGIN = new location(435, 6, -2966, "talus", null);
|
|
public static final float KEREN_ANNOUNCEMENT_RADIUS = 700.0f;
|
|
public static final float BESTINE_ANNOUNCEMENT_RADIUS = 450.0f;
|
|
public static final float DEARIC_ANNOUNCEMENT_RADIUS = 650.0f;
|
|
public static final String COLOR_REBELS = "\\" + colors_hex.COLOR_REBELS;
|
|
public static final String COLOR_IMPERIALS = "\\" + colors_hex.COLOR_IMPERIALS;
|
|
|
|
/*
|
|
CITY_OBJECT_BESTINE 9835358 tatooine(-1292.5868, 12.0, -3590.0999)
|
|
CITY_OBJECT_DEARIC 9805353 talus(329.7967, 6.0, -2930.803)
|
|
CITY_OBJECT_KEREN 9865353 naboo(1434.6715, 13.0, 2771.1726)
|
|
*/
|
|
public static final obj_id CITY_OBJECT_BESTINE = getObjIdWithNull(9835358);
|
|
public static final obj_id CITY_OBJECT_DEARIC = getObjIdWithNull(9805353);
|
|
public static final obj_id CITY_OBJECT_KEREN = getObjIdWithNull(9865353);
|
|
public void qaInstabuild(obj_id[] kits) throws InterruptedException
|
|
{
|
|
for (obj_id kit : kits) {
|
|
if (!isIdValid(kit) || !exists(kit)) {
|
|
continue;
|
|
}
|
|
int construction = getIntObjVar(kit, "gcw.constructionQuestsCompleted");
|
|
int newConstruction = gcw.GCW_CONSTRUCTION_MAXIMUM / 2;
|
|
if (construction >= newConstruction) {
|
|
newConstruction = gcw.GCW_CONSTRUCTION_MAXIMUM;
|
|
}
|
|
setObjVar(kit, "gcw.constructionQuestsCompleted", newConstruction);
|
|
messageTo(kit, "handleUpdateName", null, 1.0f, false);
|
|
}
|
|
}
|
|
public void qaInstaclear(obj_id[] kits) throws InterruptedException
|
|
{
|
|
for (obj_id kit : kits) {
|
|
if (!isIdValid(kit) || !exists(kit)) {
|
|
continue;
|
|
}
|
|
setObjVar(kit, "gcw.constructionQuestsCompleted", 0);
|
|
messageTo(kit, "handleUpdateName", null, 1.0f, false);
|
|
}
|
|
}
|
|
public int OnHearSpeech(obj_id self, obj_id objSpeaker, String strText) throws InterruptedException
|
|
{
|
|
if (!isGod(objSpeaker))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary params = trial.getSessionDict(self);
|
|
switch (strText) {
|
|
case "gcwcleanup":
|
|
case "gcwend": {
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwcleanup command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet)) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find planet Tatooine.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String city = gcw.getCityFromTable(self);
|
|
if (city == null || city.length() <= 0) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find city name.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(planet, "gcw.calendar_time." + city, getCalendarTime() - gcw.GCW_CONSTRUCTION_END_TIMER - gcw.GCW_COMBAT_END_TIMER);
|
|
messageTo(self, "cleanupInvasion", params, 1.0f, false);
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: Cleaning up invasion.");
|
|
break;
|
|
}
|
|
case "gcwdefensewin": {
|
|
if (!utils.hasScriptVar(self, "gcw.constructionEnded") && !utils.hasScriptVar(self, "gcw.invasionRunning")) {
|
|
debugSpeakMsg(self, "Must be used when in construction or combat phase.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwcleanup command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet)) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find planet Tatooine.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String city = gcw.getCityFromTable(self);
|
|
if (city == null || city.length() <= 0) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find city name.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral)) {
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
Vector loserDefenseParticipants = new Vector();
|
|
loserDefenseParticipants.setSize(0);
|
|
Vector winnerOffenseParticipants = new Vector();
|
|
winnerOffenseParticipants.setSize(0);
|
|
|
|
int loserFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
int winnerFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
|
|
if (factions.isImperialorImperialHelper(defendingGeneral)) {
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
loserFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
} else if (factions.isRebelorRebelHelper(defendingGeneral)) {
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
loserFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
}
|
|
|
|
if (loserDefenseParticipants != null && loserDefenseParticipants.size() > 0) {
|
|
gcw.awardGcwInvasionParticipants(loserDefenseParticipants, loserFactionFlag, gcw.GCW_TOKENS_LOSER_PARTICIPANTS, gcw.GCW_POINTS_LOSER_PARTICIPANTS, null);
|
|
}
|
|
|
|
if (winnerOffenseParticipants != null && winnerOffenseParticipants.size() > 0) {
|
|
String iconicMob;
|
|
String music;
|
|
String kudosText;
|
|
if (winnerFactionFlag == factions.FACTION_FLAG_IMPERIAL) {
|
|
iconicMob = "object/mobile/darth_vader.iff";
|
|
music = "sound/music_darth_vader_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_safe_imperial_" + planet + "_" + city;
|
|
} else {
|
|
iconicMob = "object/mobile/rebel_emperorsday_leia.iff";
|
|
music = "sound/music_leia_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_safe_rebel_" + planet + "_" + city;
|
|
}
|
|
dictionary iconicParams = new dictionary();
|
|
iconicParams.put("string_file", "gcw");
|
|
if (iconicMob.length() > 0 && music.length() > 0 && kudosText.length() > 0) {
|
|
iconicParams.put("iconicMob", iconicMob);
|
|
iconicParams.put("music", music);
|
|
iconicParams.put("kudosText", kudosText);
|
|
}
|
|
gcw.awardGcwInvasionParticipants(winnerOffenseParticipants, winnerFactionFlag, gcw.GCW_TOKENS_WINNER_PARTICIPANTS, gcw.GCW_POINTS_WINNER_PARTICIPANTS, iconicParams);
|
|
}
|
|
utils.setScriptVar(planet, "gcw.calendar_time." + city, getCalendarTime() - gcw.GCW_CONSTRUCTION_END_TIMER - gcw.GCW_COMBAT_END_TIMER);
|
|
messageTo(self, "cleanupInvasion", params, 1.0f, false);
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: Defense has won the invasion -- No announcements will be sent.");
|
|
break;
|
|
}
|
|
case "gcwbegin":
|
|
case "gcwstart": {
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwbegin command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet)) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find planet Tatooine.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String city = gcw.getCityFromTable(self);
|
|
if (city == null || city.length() <= 0) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find city name.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityConfig = getConfigSetting("GameServer", "gcwcity" + city);
|
|
if (cityConfig == null || cityConfig.length() <= 0) {
|
|
sendSystemMessageTestingOnly(objSpeaker, "The city configuration (gcwcity" + city + ") is turned off. OVERRIDING");
|
|
utils.setScriptVar(self, "gcw.configOverride", 1);
|
|
}
|
|
utils.setScriptVar(planet, "gcw.time." + city, getGameTime());
|
|
utils.setScriptVar(planet, "gcw.object." + city, self);
|
|
utils.setScriptVar(planet, "gcw.calendar_time." + city, getCalendarTime());
|
|
messageTo(self, "beginInvasion", null, 1.0f, false);
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: Starting construction.");
|
|
break;
|
|
}
|
|
case "gcwendbuild":
|
|
case "gcwstartinvasion": {
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwendbuild command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet)) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find planet Tatooine.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String city = gcw.getCityFromTable(self);
|
|
if (city == null || city.length() <= 0) {
|
|
debugSpeakMsg(self, "GCW Controller: Failed to find city name.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(planet, "gcw.calendar_time." + city, getCalendarTime() - gcw.GCW_CONSTRUCTION_END_TIMER);
|
|
messageTo(self, "endConstruction", params, 1.0f, false);
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: Starting invasion.");
|
|
break;
|
|
}
|
|
case "gcwkits":
|
|
obj_id[] npcs = trial.getObjectsInInstanceBySpawnId(self, "defense_kit");
|
|
sendSystemMessageTestingOnly(self, "count: " + npcs.length);
|
|
break;
|
|
case "gcwquickbuild": {
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwquickbuild command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id[] kits = trial.getObjectsInInstanceBySpawnId(self, "defense_kit");
|
|
qaInstabuild(kits);
|
|
int kitsLength = kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "defense_patrol");
|
|
qaInstabuild(kits);
|
|
kitsLength += kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "offense_patrol");
|
|
qaInstabuild(kits);
|
|
kitsLength += kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "vehicle_patrol");
|
|
qaInstabuild(kits);
|
|
kitsLength += kits.length / 2;
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: " + kitsLength + " Construction kits modified.");
|
|
break;
|
|
}
|
|
case "gcwquickbuildclear": {
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnHearSpeech: God Player: " + objSpeaker + " has used the gcwquickbuildclear command. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
obj_id[] kits = trial.getObjectsInInstanceBySpawnId(self, "defense_kit");
|
|
qaInstaclear(kits);
|
|
int kitsLength = kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "defense_patrol");
|
|
qaInstaclear(kits);
|
|
kitsLength += kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "offense_patrol");
|
|
qaInstaclear(kits);
|
|
kitsLength += kits.length / 2;
|
|
kits = trial.getObjectsInInstanceBySpawnId(self, "vehicle_patrol");
|
|
qaInstaclear(kits);
|
|
kitsLength += kits.length / 2;
|
|
sendSystemMessageTestingOnly(objSpeaker, "GCW Controller: " + kitsLength + " Construction kits modified to zero quests completed.");
|
|
break;
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnInitialize(obj_id self) throws InterruptedException
|
|
{
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.OnInitialize: The city sequencer object is starting for the fist time.");
|
|
messageTo(self, "checkForInvasion", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int checkForInvasion(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
String cityName = gcw.getCityFromTable(self);
|
|
if (cityName != null && cityName.length() > 0 && isIdValid(planet) && gcw.gcwIsInvasionCityOn(cityName))
|
|
{
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.checkForInvasion: The city sequencer object is being checked for a running invasion. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
params = new dictionary();
|
|
params.put("sequencer", self);
|
|
params.put("city", cityName);
|
|
int gameTime = getGameTime();
|
|
params.put("gameTime" + cityName, gameTime);
|
|
utils.setScriptVar(planet, "gcw.lastTrackTime." + cityName, gameTime);
|
|
utils.setScriptVar(self, "phase", gcw.GCW_CITY_PHASE_UNKNOWN);
|
|
setAnnouncementLocation(self, cityName);
|
|
int percentage = gcw.getRebelPercentileByRegion(self);
|
|
if (percentage > 50)
|
|
{
|
|
utils.setScriptVar(self, "currentOccupyFaction", factions.FACTION_FLAG_REBEL);
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "currentOccupyFaction", factions.FACTION_FLAG_IMPERIAL);
|
|
}
|
|
utils.setScriptVar(self, "cityName", cityName);
|
|
messageTo(planet, "gcwInvasionTracker", params, 1.0f, false);
|
|
messageTo(self, "updateGcwMapData", params, 5.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
This is the messageHandler received when construction
|
|
phase starts.
|
|
*/
|
|
public int beginInvasion(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "beginInvasion init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("gcwlog", "gcw_city beginInvasion");
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isIdValid(planet))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = gcw.getCityFromTable(self);
|
|
String cityConfig = getConfigSetting("GameServer", "gcwcity" + cityName);
|
|
if (!utils.hasScriptVar(self, "gcw.configOverride") && (cityConfig == null || cityConfig.length() <= 0))
|
|
{
|
|
LOG("gcwlog", "beginInvasion bad config gcwcity" + cityName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.removeScriptVar(self, "gcw.configOverride");
|
|
|
|
// If the invasion is already running, then do not start again.
|
|
if (utils.hasScriptVar(self, "gcw.invasionRunning"))
|
|
{
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.beginInvasion: beginInvasion has been called but according to the city object AN INVASION IS CURRENTLY RUNNING. session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
if (cityName == null || cityName.length() < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int lastPulse = utils.getIntScriptVar(self, "gcw.time." + cityName);
|
|
int gameTime = getGameTime();
|
|
if (gameTime - lastPulse > gcw.gcwGetTimeToInvasion())
|
|
{
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.beginInvasion: The city sequencer object had a gcw.invasionRunning var on it. The invasionRunning and constructionEnded vars are being removed because the system thinks we have an invasion that failed to end properly. Removing vars at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageTo(self, "cleanupInvasion", params, 1.0f, false);
|
|
utils.removeScriptVar(self, "gcw.invasionRunning");
|
|
utils.removeScriptVar(planet, "gcw.invasionRunning." + cityName);
|
|
utils.removeScriptVar(self, "gcw.constructionEnded");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int calendarTime = getCalendarTime();
|
|
|
|
// When did this city last have its invasion?
|
|
int[] convertedCalendarTime = player_structure.convertSecondsTime(calendarTime);
|
|
int hour = convertedCalendarTime[1];
|
|
CustomerServiceLog("gcw_city_invasion_started", "gcw_city.beginInvasion: cityName: " + cityName + " interval: " + gcw.gcwGetTimeToInvasion() + " cycle: " + gcw.gcwCalculateInvasionCycle() + " hour: " + hour);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.beginInvasion: beginInvasion has been called. we are starting the construction phase at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageTo(self, "beginSpawn", null, 1.0f, false);
|
|
messageTo(self, "startFactionDefense", null, 5.0f, false);
|
|
utils.setScriptVar(self, "gcw.invasionRunning", 1);
|
|
gcw_score.setGcwPhase(gcw.GCW_CITY_PHASE_CONSTRUCTION);
|
|
utils.setScriptVar(planet, "gcw.invasionRunning." + cityName, 1);
|
|
LOG("gcw_announcement", "beginInvasion getting defending general");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void setAnnouncementLocation(obj_id self, String cityName) throws InterruptedException
|
|
{
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return;
|
|
}
|
|
switch (cityName) {
|
|
case gcw.CITY_DEARIC:
|
|
utils.setScriptVar(self, "announcementOrigin", DEARIC_ANNOUNCEMENT_ORIGIN);
|
|
utils.setScriptVar(self, "announcementRadius", DEARIC_ANNOUNCEMENT_RADIUS);
|
|
utils.setScriptVar(self, "cityObject", CITY_OBJECT_DEARIC);
|
|
break;
|
|
case gcw.CITY_BESTINE:
|
|
utils.setScriptVar(self, "announcementOrigin", BESTINE_ANNOUNCEMENT_ORIGIN);
|
|
utils.setScriptVar(self, "announcementRadius", BESTINE_ANNOUNCEMENT_RADIUS);
|
|
utils.setScriptVar(self, "cityObject", CITY_OBJECT_BESTINE);
|
|
break;
|
|
case gcw.CITY_KEREN:
|
|
utils.setScriptVar(self, "announcementOrigin", KEREN_ANNOUNCEMENT_ORIGIN);
|
|
utils.setScriptVar(self, "announcementRadius", KEREN_ANNOUNCEMENT_RADIUS);
|
|
utils.setScriptVar(self, "cityObject", CITY_OBJECT_KEREN);
|
|
break;
|
|
}
|
|
}
|
|
public int beginInvasionNotifyFactions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "beginInvasionNotifyFactions init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneralList[] = trial.getObjectsInInstanceBySpawnId(self, "defense_camp");
|
|
if (defendingGeneralList == null || defendingGeneralList.length <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = defendingGeneralList[0];
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(self, "defendingGeneral", defendingGeneral);
|
|
utils.setScriptVar(self, "currentOccupyFaction", getIntObjVar(defendingGeneral, "factionFlag"));
|
|
dictionary dict = trial.getSessionDict(self);
|
|
messageTo(self, "checkGeneral", dict, 30.0f, false);
|
|
if (!utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
String planetName = getCurrentSceneName();
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = gcw.getCityFromTable(self);
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
setAnnouncementLocation(self, cityName);
|
|
utils.setScriptVar(self, "planetName", planetName);
|
|
utils.setScriptVar(self, "cityName", cityName);
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("gcw_announcement", "beginInvasionNotifyFactions planetName: " + planetName + " cityName: " + cityName);
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "beginInvasionNotifyFactions defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_construct_defenses_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_call_to_arms_rebel_");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "beginInvasionNotifyFactions defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_call_to_arms_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_construct_defenses_rebel_");
|
|
}
|
|
webster.put("neutral_announcement", "gcw_announcement_construct_defenses_neutral_");
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.beginInvasionNotifyFactions: beginInvasionNotifyFactions has sent all players messages regarding the construction phase starting at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
utils.setScriptVar(self, "phase", gcw.GCW_CITY_PHASE_CONSTRUCTION);
|
|
messageTo(self, "updateGcwMapData", params, 0.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
This is the messageHandler received when the construction
|
|
phase is about to end.
|
|
*/
|
|
public int constructionEndsSoon(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "constructionEndsSoon init");
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, "defendingGeneral") || !utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "constructionEndsSoon defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_building_almost_complete_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_rally_for_invasion_rebel_");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "constructionEndsSoon defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_rally_for_invasion_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_building_almost_complete_rebel_");
|
|
}
|
|
webster.put("neutral_announcement", "gcw_announcement_rally_for_invasion_neutral_");
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.constructionEndsSoon: constructionEndsSoon has sent all players messages regarding the construction phase ending soon. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
This is the messageHandler received when the battle phase is
|
|
about to end.
|
|
*/
|
|
public int invasionEndsSoon(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "invasionEndsSoon init");
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, "defendingGeneral") || !utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "invasionEndsSoon defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_invasion_almost_defeated_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_invasion_almost_lost_rebel_");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "invasionEndsSoon defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_invasion_almost_lost_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_invasion_almost_defeated_rebel_");
|
|
}
|
|
webster.put("neutral_announcement", "gcw_announcement_invasion_almost_defeated_neutral_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.invasionEndsSoon: invasionEndsSoon has sent all players messages regarding the combat phase ending soon. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int defenseGeneralUnderSustainedAttack(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "defenseGeneralUnderSustainedAttack init");
|
|
if (!utils.hasScriptVar(self, "defendingGeneral") || !utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "defenseGeneralUnderSustainedAttack defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_general_under_attack_imperial_");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "defenseGeneralUnderSustainedAttack defending general is Rebel");
|
|
webster.put("rebel_announcement", "gcw_announcement_general_under_attack_rebel_");
|
|
}
|
|
webster.put("neutral_announcement", "gcw_announcement_general_under_attack_neutral_");
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.defenseGeneralUnderSustainedAttack: defenseGeneralUnderSustainedAttack has sent all players messages regarding the generals status. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int startFactionDefense(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!isIdValid(self) && !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
gcw_score.clearGcwData();
|
|
gcw_score.setGcwPhase(gcw.GCW_CITY_PHASE_CONSTRUCTION);
|
|
int percentage = gcw.getRebelPercentileByRegion(self);
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
String cityName = gcw.getCityFromTable(self);
|
|
if (percentage > 50)
|
|
{
|
|
LOG("dologging", "gcw_city beginInvasion rebel_defense > 50");
|
|
sendSequenceTrigger(self, "rebel_defense");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.startFactionDefense: startFactionDefense is setting the city object " + self + " to be rebel_defense at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
utils.setScriptVar(planet, "gcw.factionDefending." + cityName, factions.FACTION_FLAG_REBEL);
|
|
}
|
|
else if (percentage < 50)
|
|
{
|
|
LOG("dologging", "gcw_city beginInvasion imperial_defense < 50");
|
|
sendSequenceTrigger(self, "imperial_defense");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.startFactionDefense: startFactionDefense is setting the city object " + self + " to be imperial_defense at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
utils.setScriptVar(planet, "gcw.factionDefending." + cityName, factions.FACTION_FLAG_IMPERIAL);
|
|
}
|
|
else if (percentage == 50)
|
|
{
|
|
LOG("dologging", "gcw_city beginInvasion rebel_defense == 50");
|
|
sendSequenceTrigger(self, "rebel_defense");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.startFactionDefense: startFactionDefense is setting the city object " + self + " to be rebel_defense at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
utils.setScriptVar(planet, "gcw.factionDefending." + cityName, factions.FACTION_FLAG_REBEL);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int endConstruction(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw", "endConstruction");
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(self, "gcw.constructionEnded"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(self, "gcw.constructionEnded", 1);
|
|
gcw_score.setGcwPhase(gcw.GCW_CITY_PHASE_COMBAT);
|
|
LOG("gcw", "endConstruction 2");
|
|
sendSequenceTrigger(self, "invasion");
|
|
if (!utils.hasScriptVar(self, "defendingGeneral") || !utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "endConstruction defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_man_defenses_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_attack_city_rebel_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.endConstruction: Construction Phase over. Imperials are defending city: " + cityName + " from Rebel forces.");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "endConstruction defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_attack_city_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_man_defenses_rebel_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.endConstruction: Construction Phase over. Rebels are defending city: " + cityName + " from Imperial forces.");
|
|
}
|
|
Vector rebelParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
Vector imperialParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
gcw.awardGcwInvasionParticipants(rebelParticipants, factions.FACTION_FLAG_REBEL, gcw.GCW_TOKENS_CONSTRUCTION_PHASE, gcw.GCW_POINTS_CONSTRUCTION_PHASE, null);
|
|
gcw.awardGcwInvasionParticipants(imperialParticipants, factions.FACTION_FLAG_IMPERIAL, gcw.GCW_TOKENS_CONSTRUCTION_PHASE, gcw.GCW_POINTS_CONSTRUCTION_PHASE, null);
|
|
webster.put("neutral_announcement", "gcw_announcement_man_defenses_neutral_");
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.endConstruction: endConstruction has sent all players messages regarding the construction phase has ended. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
utils.setScriptVar(self, "phase", gcw.GCW_CITY_PHASE_COMBAT);
|
|
messageTo(self, "updateGcwMapData", params, 0.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void sendSequenceTrigger(obj_id self, String trig) throws InterruptedException
|
|
{
|
|
dictionary dict = trial.getSessionDict(self);
|
|
LOG("dologging", "sendSequenceTrigger dict.getInt(MESSAGE_SESSION): " + dict.getInt(trial.MESSAGE_SESSION));
|
|
dict.put("triggerType", "triggerId");
|
|
dict.put("triggerName", trig);
|
|
messageTo(self, "triggerFired", dict, 2.0f, false);
|
|
}
|
|
public int invasionHalfWayPoint(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "invasionHalfWayPoint init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, "defendingGeneral") || !utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id defendingGeneral = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (!isValidId(defendingGeneral) || !exists(defendingGeneral))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
if (factions.isImperialorImperialHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "invasionHalfWayPoint defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_defense_half_done_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_attack_half_done_rebel_");
|
|
}
|
|
else if (factions.isRebelorRebelHelper(defendingGeneral))
|
|
{
|
|
LOG("gcw_announcement", "invasionHalfWayPoint defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_attack_half_done_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_defense_half_done_rebel_");
|
|
}
|
|
webster.put("neutral_announcement", "gcw_announcement_defense_half_done_neutral_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.invasionHalfWayPoint: invasionHalfWayPoint has sent all players messages regarding the combat phase being half over Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
setInvulnerable(defendingGeneral, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
The City has been invaded and the defenders have lost.
|
|
*/
|
|
public int defendersEvacuate(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "defendersEvacuate init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
messageTo(self, "cleanupInvasion", params, 1.0f, false);
|
|
if (!utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int faction = utils.getIntScriptVar(planet, "gcw.factionDefending." + cityName);
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
Vector loserDefenseParticipants = new Vector();
|
|
loserDefenseParticipants.setSize(0);
|
|
Vector winnerOffenseParticipants = new Vector();
|
|
winnerOffenseParticipants.setSize(0);
|
|
int loserFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
int winnerFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
if (faction == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
LOG("gcw_announcement", "defendersEvacuate defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_city_lost_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_city_won_rebel_");
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
loserFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cityAttackUnsuccessful: Imperials have lost the city: " + cityName + ". Rebel forces have successfully invaded. The General has been killed.");
|
|
}
|
|
else if (faction == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
LOG("gcw_announcement", "defendersEvacuate defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_city_won_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_city_lost_rebel_");
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
loserFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cityAttackUnsuccessful: Rebels have lost the city: " + cityName + ". Imperial forces have successfully invaded. The General has been killed.");
|
|
}
|
|
gcw_score.setGcwWinner(winnerFactionFlag);
|
|
webster.put("neutral_announcement", "gcw_announcement_city_lost_neutral_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.defendersEvacuate: defendersEvacuate has sent all players messages regarding the defense losing the battle. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
if (loserDefenseParticipants != null && loserDefenseParticipants.size() > 0)
|
|
{
|
|
gcw.awardGcwInvasionParticipants(loserDefenseParticipants, loserFactionFlag, gcw.GCW_TOKENS_LOSER_PARTICIPANTS, gcw.GCW_POINTS_LOSER_PARTICIPANTS, null);
|
|
}
|
|
if (winnerOffenseParticipants != null && winnerOffenseParticipants.size() > 0)
|
|
{
|
|
String iconicMob;
|
|
String music;
|
|
String kudosText;
|
|
if (winnerFactionFlag == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
iconicMob = "object/mobile/darth_vader.iff";
|
|
music = "sound/music_darth_vader_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_won_imperial_" + planetName + "_" + cityName;
|
|
}
|
|
else
|
|
{
|
|
iconicMob = "object/mobile/rebel_emperorsday_leia.iff";
|
|
music = "sound/music_leia_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_won_rebel_" + planetName + "_" + cityName;
|
|
}
|
|
dictionary iconicParams = new dictionary();
|
|
iconicParams.put("string_file", "gcw");
|
|
if (iconicMob.length() > 0 && music.length() > 0 && kudosText.length() > 0)
|
|
{
|
|
iconicParams.put("iconicMob", iconicMob);
|
|
iconicParams.put("music", music);
|
|
iconicParams.put("kudosText", kudosText);
|
|
}
|
|
gcw.awardGcwInvasionParticipants(winnerOffenseParticipants, winnerFactionFlag, gcw.GCW_TOKENS_WINNER_PARTICIPANTS, gcw.GCW_POINTS_WINNER_PARTICIPANTS, iconicParams);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
The Defenders have won.
|
|
*/
|
|
public int cityAttackUnsuccessful(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_announcement", "cityAttackUnsuccessful init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
messageTo(self, "cleanupInvasion", params, 1.0f, false);
|
|
if (!utils.hasScriptVar(self, "planetName") || !utils.hasScriptVar(self, "cityName"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String planetName = utils.getStringScriptVar(self, "planetName");
|
|
if (planetName == null || planetName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int faction = utils.getIntScriptVar(planet, "gcw.factionDefending." + cityName);
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float announcementRadius = utils.getFloatScriptVar(self, "announcementRadius");
|
|
if (announcementRadius <= -1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary webster = new dictionary();
|
|
webster.put("string_file", "gcw");
|
|
webster.put("planetName", planetName);
|
|
webster.put("cityName", cityName);
|
|
Vector loserDefenseParticipants = new Vector();
|
|
loserDefenseParticipants.setSize(0);
|
|
Vector winnerOffenseParticipants = new Vector();
|
|
winnerOffenseParticipants.setSize(0);
|
|
int loserFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
int winnerFactionFlag = factions.FACTION_FLAG_UNKNOWN;
|
|
if (faction == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
LOG("gcw_announcement", "cityAttackUnsuccessful defending general is Imperial");
|
|
webster.put("imperial_announcement", "gcw_announcement_city_safe_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_attack_unsuccessful_rebel_");
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
loserFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cityAttackUnsuccessful: Imperials have successfully defended the city: " + cityName + " from Rebel forces.");
|
|
}
|
|
else if (faction == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
LOG("gcw_announcement", "cityAttackUnsuccessful defending general is Rebel");
|
|
webster.put("imperial_announcement", "gcw_announcement_attack_unsuccessful_imperial_");
|
|
webster.put("rebel_announcement", "gcw_announcement_city_safe_rebel_");
|
|
loserDefenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_IMPERIAL);
|
|
loserFactionFlag = factions.FACTION_FLAG_IMPERIAL;
|
|
winnerOffenseParticipants = trial.getNonInstanceFactionParticipants(self, factions.FACTION_FLAG_REBEL);
|
|
winnerFactionFlag = factions.FACTION_FLAG_REBEL;
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cityAttackUnsuccessful: Rebels have successfully defended the city: " + cityName + " from Imperial forces.");
|
|
}
|
|
gcw_score.setGcwWinner(winnerFactionFlag);
|
|
webster.put("neutral_announcement", "gcw_announcement_city_safe_neutral_");
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cityAttackUnsuccessful: cityAttackUnsuccessful has sent all players messages regarding the offense losing the battle. Message sent at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
messageToPlayersOnPlanet("notifyPlayerOfGcwCityEventAnnouncement", webster, 0.0f, announcementOrigin, announcementRadius, false);
|
|
if (loserDefenseParticipants != null && loserDefenseParticipants.size() > 0)
|
|
{
|
|
gcw.awardGcwInvasionParticipants(loserDefenseParticipants, loserFactionFlag, gcw.GCW_TOKENS_LOSER_PARTICIPANTS, gcw.GCW_POINTS_LOSER_PARTICIPANTS, null);
|
|
}
|
|
if (winnerOffenseParticipants != null && winnerOffenseParticipants.size() > 0)
|
|
{
|
|
String iconicMob;
|
|
String music;
|
|
String kudosText;
|
|
if (winnerFactionFlag == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
iconicMob = "object/mobile/darth_vader.iff";
|
|
music = "sound/music_darth_vader_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_safe_imperial_" + planetName + "_" + cityName;
|
|
}
|
|
else
|
|
{
|
|
iconicMob = "object/mobile/rebel_emperorsday_leia.iff";
|
|
music = "sound/music_leia_theme.snd";
|
|
kudosText = "gcw_announcement_city_end_safe_rebel_" + planetName + "_" + cityName;
|
|
}
|
|
dictionary iconicParams = new dictionary();
|
|
iconicParams.put("string_file", "gcw");
|
|
if (iconicMob.length() > 0 && music.length() > 0 && kudosText.length() > 0)
|
|
{
|
|
iconicParams.put("iconicMob", iconicMob);
|
|
iconicParams.put("music", music);
|
|
iconicParams.put("kudosText", kudosText);
|
|
}
|
|
gcw.awardGcwInvasionParticipants(winnerOffenseParticipants, winnerFactionFlag, gcw.GCW_TOKENS_WINNER_PARTICIPANTS, gcw.GCW_POINTS_WINNER_PARTICIPANTS, iconicParams);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cleanupInvasion(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
trial.clearNonInstanceFactionParticipants(self);
|
|
utils.setScriptVar(self, "phase", gcw.GCW_CITY_PHASE_UNKNOWN);
|
|
messageTo(self, "updateGcwMapData", params, 0.0f, false);
|
|
utils.removeScriptVar(self, "gcw.constructionEnded");
|
|
utils.removeScriptVar(self, "gcw.invasionRunning");
|
|
gcw_score.setGcwPhase(gcw.GCW_CITY_PHASE_UNKNOWN);
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
String cityName = gcw.getCityFromTable(self);
|
|
if (isIdValid(planet))
|
|
{
|
|
utils.removeScriptVar(planet, "gcw.invasionRunning." + cityName);
|
|
utils.removeScriptVar(planet, "gcw.factionDefending." + cityName);
|
|
}
|
|
messageTo(self, "cleanupSpawn", null, 1.0f, false);
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.cleanupInvasion: cleanupInvasion is cleaning up all the assets for the battle. This happened at: " + getGameTime() + " session: " + params.getInt(trial.MESSAGE_SESSION));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
This handler updates the player overhead map. There are a few possible phases identified
|
|
in the handler:
|
|
1. Rebel Construction
|
|
2. Imperial Construction
|
|
3. Rebel Attack
|
|
4. Imperial Attack
|
|
5. Rebel Occupation
|
|
6. Imperial Occupation
|
|
*/
|
|
public int updateGcwMapData(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("gcw_map_data", "updateGcwMapData init");
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
LOG("gcw_map_data", "!isIdValid(self) || !exists(self)");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, "phase"))
|
|
{
|
|
LOG("gcw_map_data", "!utils.hasScriptVar(self, 'phase')");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int phase = utils.getIntScriptVar(self, "phase");
|
|
if (phase < gcw.GCW_CITY_PHASE_UNKNOWN)
|
|
{
|
|
LOG("gcw_map_data", "phase < gcw.GCW_CITY_PHASE_UNKNOWN");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id cityObject = utils.getObjIdScriptVar(self, "cityObject");
|
|
if (!isValidId(cityObject) || !exists(cityObject))
|
|
{
|
|
LOG("gcw_map_data_faction", "(!isValidId(cityObject) || !exists(cityObject))");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/*
|
|
CHECK TO MAKE SURE THE CITY REGION FACTION IS THE SAME AS
|
|
THE OCCUPATION FACTION
|
|
*/
|
|
if (phase == gcw.GCW_CITY_PHASE_UNKNOWN)
|
|
{
|
|
LOG("gcw_map_data_faction", "verifyCurrentOccupyFaction");
|
|
int percentage = gcw.getRebelPercentileByRegion(self);
|
|
if (percentage > -1)
|
|
{
|
|
if (percentage > 50)
|
|
{
|
|
removePlanetaryMapLocation(cityObject);
|
|
LOG("gcw_map_data_faction", "switchCurrentOccupyFaction switching to REB faction");
|
|
utils.setScriptVar(self, "currentOccupyFaction", factions.FACTION_FLAG_REBEL);
|
|
}
|
|
else if (percentage < 50)
|
|
{
|
|
removePlanetaryMapLocation(cityObject);
|
|
LOG("gcw_map_data_faction", "switchCurrentOccupyFaction switching to IMP faction");
|
|
utils.setScriptVar(self, "currentOccupyFaction", factions.FACTION_FLAG_IMPERIAL);
|
|
}
|
|
}
|
|
}
|
|
LOG("gcw_map_data", "updateGcwMapData phase: " + phase);
|
|
if (params == null)
|
|
{
|
|
LOG("gcw_map_data", "(params == null)");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location announcementOrigin = utils.getLocationScriptVar(self, "announcementOrigin");
|
|
if (announcementOrigin == null)
|
|
{
|
|
LOG("gcw_map_data", "(announcementOrigin == null)");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = utils.getStringScriptVar(self, "cityName");
|
|
if (cityName == null || cityName.length() <= 0)
|
|
{
|
|
LOG("gcw_map_data", "(cityName == null || cityName.length() <= 0)");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityFirstLetter = cityName.substring(0, 1);
|
|
String remainder = cityName.substring(1);
|
|
String cityNameString = cityFirstLetter.toUpperCase() + remainder.toLowerCase();
|
|
String cityConfig = getConfigSetting("GameServer", "gcwcity" + cityName);
|
|
if (cityConfig == null || cityConfig.length() <= 0)
|
|
{
|
|
LOG("gcw_map_data", "(cityConfig == null || cityConfig.length() <= 0)");
|
|
removePlanetaryMapLocation(cityObject);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String color;
|
|
String defenders;
|
|
String invaders;
|
|
String stringName = "";
|
|
int faction = utils.getIntScriptVar(self, "currentOccupyFaction");
|
|
LOG("gcw_map_data", "updateGcwMapData faction: " + faction);
|
|
if (faction != factions.FACTION_FLAG_REBEL && faction != factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
LOG("gcw_map_data", "(faction != factions.FACTION_FLAG_REBEL && faction != factions.FACTION_FLAG_IMPERIAL)");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (faction == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
LOG("gcw_map_data", "updateGcwMapData faction is REB");
|
|
color = COLOR_REBELS;
|
|
defenders = "Rebel";
|
|
invaders = "Imperial";
|
|
}
|
|
else// faction == factions.FACTION_FLAG_IMPERIAL
|
|
{
|
|
LOG("gcw_map_data", "updateGcwMapData faction is IMP");
|
|
color = COLOR_IMPERIALS;
|
|
defenders = "Imperial";
|
|
invaders = "Rebel";
|
|
}
|
|
if (phase == gcw.GCW_CITY_PHASE_CONSTRUCTION)
|
|
{
|
|
String theNextPulse = gcw.getFormattedInvasionTime(self, gcw.GCW_CITY_PHASE_CONSTRUCTION);
|
|
if (theNextPulse != null && theNextPulse.length() > 0)
|
|
{
|
|
stringName = color + cityNameString + "\n" + defenders + "s Building Defenses\n" + theNextPulse;
|
|
|
|
}
|
|
else
|
|
{
|
|
stringName = color + cityNameString + "\n" + defenders + "s Building Defenses";
|
|
}
|
|
}
|
|
else if (phase == gcw.GCW_CITY_PHASE_COMBAT)
|
|
{
|
|
String theNextPulse = gcw.getFormattedInvasionTime(self, gcw.GCW_CITY_PHASE_COMBAT);
|
|
if (theNextPulse != null && theNextPulse.length() > 0)
|
|
{
|
|
stringName = color + cityNameString + "\n" + invaders + "s Invading\n" + theNextPulse;
|
|
|
|
}
|
|
else
|
|
{
|
|
stringName = color + cityNameString + "\n" + invaders + "s Invading ";
|
|
}
|
|
}
|
|
else if (phase == gcw.GCW_CITY_PHASE_UNKNOWN)
|
|
{
|
|
String theNextPulse = gcw.getFormattedInvasionTime(self, gcw.GCW_CITY_PHASE_UNKNOWN);
|
|
if (theNextPulse != null && theNextPulse.length() > 0)
|
|
{
|
|
stringName = color + cityNameString + "\n" + defenders + " Occupation\n" + theNextPulse;
|
|
}
|
|
else
|
|
{
|
|
stringName = color + cityNameString + "\n" + defenders + " Occupation";
|
|
}
|
|
}
|
|
LOG("gcw_map_data", "updateGcwMapData stringName: " + stringName);
|
|
removePlanetaryMapLocation(cityObject);
|
|
if (!addPlanetaryMapLocation(cityObject, stringName, (int)announcementOrigin.x, (int)announcementOrigin.z - 10, planetary_map.CITY, null, MLT_STATIC, planetary_map.NO_FLAG))
|
|
{
|
|
LOG("gcw_map_data", "updateGcwMapData addPlanetaryMapLocation FAILED to update planet map");
|
|
}
|
|
else
|
|
{
|
|
LOG("gcw_map_data", "updateGcwMapData addPlanetaryMapLocation successfully updated planet map");
|
|
}
|
|
messageTo(self, "updateGcwMapData", params, 60.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public boolean verifyCurrentOccupyFaction(obj_id cityObject) throws InterruptedException
|
|
{
|
|
LOG("gcw_map_data", "switchCurrentOccupyFaction init");
|
|
if (!isValidId(cityObject) || !exists(cityObject))
|
|
{
|
|
return false;
|
|
}
|
|
if (!utils.hasScriptVar(cityObject, "currentOccupyFaction"))
|
|
{
|
|
return false;
|
|
}
|
|
int faction = utils.getIntScriptVar(cityObject, "currentOccupyFaction");
|
|
LOG("gcw_map_data", "switchCurrentOccupyFaction faction: " + faction);
|
|
if (faction != factions.FACTION_FLAG_REBEL && faction != factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
return false;
|
|
}
|
|
int percentage = gcw.getRebelPercentileByRegion(cityObject);
|
|
|
|
// Rebels own this region?
|
|
if (percentage > 50 && faction == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
LOG("gcw_map_data", "switchCurrentOccupyFaction switching to REB faction");
|
|
utils.setScriptVar(cityObject, "currentOccupyFaction", factions.FACTION_FLAG_REBEL);
|
|
}
|
|
// Imperials own this region
|
|
else if (percentage < 50 && faction == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
LOG("gcw_map_data", "switchCurrentOccupyFaction switching to IMP faction");
|
|
utils.setScriptVar(cityObject, "currentOccupyFaction", factions.FACTION_FLAG_IMPERIAL);
|
|
}
|
|
else if (percentage == 50 && faction == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
LOG("gcw_map_data", "switchCurrentOccupyFaction switching to REB faction");
|
|
utils.setScriptVar(cityObject, "currentOccupyFaction", factions.FACTION_FLAG_REBEL);
|
|
}
|
|
dictionary dict = trial.getSessionDict(cityObject);
|
|
messageTo(cityObject, "updateGcwMapData", dict, 0.0f, false);
|
|
return true;
|
|
}
|
|
|
|
// The general is checked every 30 seconds to see if the object is valid.
|
|
public int checkGeneral(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
// self is invalid if the object is null or does not exist
|
|
if (!isIdValid(self) || !exists(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// only process messageTo()'s that are for this version of the sequencer
|
|
if (!trial.verifySession(self, params))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, "defendingGeneral"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id general = utils.getObjIdScriptVar(self, "defendingGeneral");
|
|
if (isIdValid(general) && exists(general))
|
|
{
|
|
dictionary dict = trial.getSessionDict(self);
|
|
messageTo(self, "checkGeneral", dict, 30.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
CustomerServiceLog("gcw_city_invasion", "gcw_city.checkGeneral: The general is dead, but the invasion has not cleaned up. Starting cleanup!");
|
|
obj_id planet = getPlanetByName("tatooine");
|
|
if (!isValidId(planet))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String cityName = gcw.getCityFromTable(self);
|
|
int faction = utils.getIntScriptVar(planet, "gcw.factionDefending." + cityName);
|
|
if (faction == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
sendSequenceTrigger(self, "rebel_general_died");
|
|
}
|
|
else if (faction == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
sendSequenceTrigger(self, "imperial_general_died");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|