Files
dsrc/sku.0/sys.server/compiled/game/script/systems/gcw/gcw_city.java
T
TekaohandGitHub 5c2e112349 Java 11.0.2 migration (#32)
* 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
2019-04-18 18:31:52 -05:00

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;
}
}