mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
You can now rename your beast as much as you would like. Police officers will no longer harass corpses. Static NPC's conversing will now successfully converse with one another. When a player dies, the pet will go invulnerable and be immediately packed up. When respecing professions, your weapon will now be unequiped. Fixed the chat system for some NPC's. You can now only mount your vehicle from less than 5 meters. Quest items that can be clicked on cannot be used from less than 5 meters. Added a message to the QaSetup script, notifying the QA that they have received their items.
749 lines
22 KiB
Plaintext
749 lines
22 KiB
Plaintext
/***** INCLUDES ********************************************************/
|
|
|
|
include library.colors_hex;
|
|
include library.factions;
|
|
include library.gcw;
|
|
include library.instance;
|
|
include library.prose;
|
|
include library.pvp;
|
|
include library.regions;
|
|
include library.sui;
|
|
include library.utils;
|
|
include library.ai_lib;
|
|
|
|
/***** CONSTANTS *******************************************************/
|
|
|
|
const string_id SID_ABORT_RESIGNATION = new string_id("faction_recruiter", "abort_resignation");
|
|
const string_id SID_SUI_RESIG_COMPLETE_IN_5 = new string_id("faction_recruiter", "sui_resig_complete_in_5");
|
|
|
|
const string_id SID_NOT_ALIGNED = new string_id("faction_recruiter", "not_aligned");
|
|
const string_id SID_PVP_STATUS_CHANGING = new string_id("faction_recruiter", "pvp_status_changing");
|
|
const string_id SID_ON_LEAVE_TO_COVERT = new string_id("faction_recruiter", "on_leave_to_covert");
|
|
const string_id SID_COVERT_TO_OVERT = new string_id("faction_recruiter", "covert_to_overt");
|
|
const string_id SID_OVERT_TO_COVERT = new string_id("faction_recruiter", "overt_to_covert");
|
|
const string_id SID_DUNGEON_NOCHANGE = new string_id("faction_recruiter", "dungeon_nochange");
|
|
|
|
|
|
const string COLOR_REBELS = "\\" + colors_hex.COLOR_REBELS;
|
|
const string COLOR_IMPERIALS = "\\" + colors_hex.COLOR_IMPERIALS;
|
|
|
|
/***** COMMANDS ********************************************************/
|
|
|
|
commandHandler cmdPVP()
|
|
{
|
|
if (factions.isInAdhocPvpArea(self))
|
|
{
|
|
pvpMakeDeclared(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
string recruiter = "";
|
|
|
|
string planet = getCurrentSceneName();
|
|
|
|
if ( (planet == null) || (planet.equals("")) )
|
|
return SCRIPT_OVERRIDE;
|
|
else if (planet == "dungeon1")
|
|
{
|
|
sendSystemMessage(self, SID_DUNGEON_NOCHANGE);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
if(factions.isRebel(self))
|
|
{
|
|
recruiter = "object/mobile/dressed_rebel_major_human_male_01.iff";
|
|
}
|
|
else if(factions.isImperial(self))
|
|
{
|
|
recruiter = "object/mobile/dressed_imperial_officer_m.iff";
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, SID_NOT_ALIGNED);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
if(factions.isPVPStatusChanging(self))
|
|
{
|
|
sendSystemMessage(self, SID_PVP_STATUS_CHANGING);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
prose_package pp = new prose_package();
|
|
|
|
// if player is currently on leave then go to active duty (covert)
|
|
if(factions.isOnLeave(self))
|
|
{
|
|
pp = prose.setStringId(pp, SID_ON_LEAVE_TO_COVERT);
|
|
commPlayer(self, self, pp, recruiter);
|
|
|
|
factions.goCovertWithDelay(self, 1f);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// if player is currently in special forces (overt), then go back to regular duty (covert)
|
|
if(pvpGetType(self) == PVPTYPE_DECLARED)
|
|
{
|
|
pp = prose.setStringId(pp, SID_OVERT_TO_COVERT);
|
|
commPlayer(self, self, pp, recruiter);
|
|
|
|
factions.goCovertWithDelay(self, 300f);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// if player is currently on active duty (covert), then assign them to special forces (overt)
|
|
if(pvpGetType(self) == PVPTYPE_COVERT)
|
|
{
|
|
pp = prose.setStringId(pp, SID_COVERT_TO_OVERT);
|
|
commPlayer(self, self, pp, recruiter);
|
|
|
|
factions.goOvertWithDelay(self, 30f);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
|
|
/***** TRIGGERS ********************************************************/
|
|
|
|
trigger OnPvpTypeChanged(int oldType, int newType)
|
|
{
|
|
// if the player is going overt, set the "newly declared" timer
|
|
if (newType == PVPTYPE_DECLARED)
|
|
{
|
|
utils.setScriptVar(self, factions.VAR_NEWLY_DECLARED, getGameTime());
|
|
messageTo(self, "msgNewlyDeclared", null, factions.NEWLY_DECLARED_INTERVAL, false);
|
|
}
|
|
|
|
//debugSpeakMsg(self, "PVP TYPE: old="+oldType+" new="+newType);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnPvpFactionChanged(int oldFaction, int newFaction)
|
|
{
|
|
//debugSpeakMsg(self, "PVP FACTION: old="+oldFaction+" new="+newFaction);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
/***** TRIGGERS ********************************************************/
|
|
|
|
trigger OnEnterRegion(string planet, string name)
|
|
{
|
|
if(name.startsWith("gcw_") && name.endsWith("_start"))
|
|
{
|
|
location baseLoc = new location();
|
|
baseLoc.area = planet;
|
|
|
|
string waypointName = "";
|
|
|
|
if(hasObjVar(self, "gcw.static_base.waypoint." + planet))
|
|
{
|
|
obj_id waypoint = getObjIdObjVar(self, "gcw.static_base.waypoint." + planet);
|
|
|
|
if(exists(waypoint))
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
if(planet.equals("talus"))
|
|
{
|
|
baseLoc.x = -4938f;
|
|
baseLoc.y = 0f;
|
|
baseLoc.z = -3107f;
|
|
waypointName = "Weapons Depot";
|
|
}
|
|
else if(planet.equals("corellia"))
|
|
{
|
|
baseLoc.x = 4772f;
|
|
baseLoc.y = 0f;
|
|
baseLoc.z = -5233f;
|
|
waypointName = "Tactical Training Facility";
|
|
}
|
|
else if(planet.equals("naboo"))
|
|
{
|
|
baseLoc.x = 1019f;
|
|
baseLoc.y = 0f;
|
|
baseLoc.z = -1508f;
|
|
waypointName = "Weapons Development Facility";
|
|
}
|
|
else
|
|
return SCRIPT_CONTINUE;
|
|
|
|
obj_id waypoint = createWaypointInDatapad(self, baseLoc);
|
|
|
|
if(isIdValid(waypoint))
|
|
{
|
|
setWaypointName(waypoint, waypointName);
|
|
setWaypointColor(waypoint, "white");
|
|
setWaypointActive(waypoint, true);
|
|
setWaypointVisible(waypoint, true);
|
|
|
|
setObjVar(self, "gcw.static_base.waypoint." + planet, waypoint);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
region enteredRegion = getRegion(planet, name);
|
|
if(enteredRegion != null && enteredRegion.getPvPType() == regions.PVP_REGION_TYPE_ADVANCED)
|
|
{
|
|
if(hasObjVar(self, "gcw.static_base.waypoint." + planet))
|
|
{
|
|
obj_id waypoint = getObjIdObjVar(self, "gcw.static_base.waypoint." + planet);
|
|
destroyWaypointInDatapad(waypoint, self);
|
|
|
|
removeObjVar(self, "gcw.static_base.waypoint." + planet);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnEnteredCombat()
|
|
{
|
|
pvp.validatePlayerDamageTracking(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnCreatureDamaged(obj_id attacker, obj_id wpn, int[] damage)
|
|
{
|
|
pvp.updatePlayerDamageTracking(self, attacker, wpn, damage);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleCloneRespawn()
|
|
{
|
|
if (utils.hasScriptVar(self, factions.IN_ADHOC_PVP_AREA) && !getLocation(self).area.equals("adventure2"))
|
|
utils.removeScriptVar(self, factions.IN_ADHOC_PVP_AREA);
|
|
|
|
if ( !hasScript (self, "theme_park.dungeon.corvette.timer") && !instance.isInInstanceArea(self) )
|
|
{
|
|
if((pvpGetType(self)==PVPTYPE_DECLARED)||(pvpGetType(self)==PVPTYPE_COVERT))
|
|
{
|
|
factions.goOnLeaveWithDelay(self, 0f);
|
|
}
|
|
}
|
|
pvp.clearPlayerDamageTracking(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
|
|
// don't use consts in different files for string id's. It's fucking lame, and makes you an asshole.
|
|
// if you do, someone who tries to change them can't find the fucking entries.Fuckers.
|
|
|
|
|
|
messageHandler msgResignFromFaction()
|
|
{
|
|
if (hasSkill(self, "force_rank_light_novice") || hasSkill(self, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(self, new string_id("faction_recruiter", "jedi_cant_resign"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
factions.resignFromFaction(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler msgGoCovert()
|
|
{
|
|
obj_id top = getTopMostContainer (self);
|
|
if(isIdValid(top))
|
|
{
|
|
string bldgName = getTemplateName (top);
|
|
if (bldgName == "object/building/general/space_dungeon_corellian_corvette.iff" || bldgName == "object/building/general/space_dungeon_corellian_corvette_imperial.iff" || bldgName == "object/building/general/space_dungeon_corellian_corvette_rebel.iff")
|
|
{
|
|
setObjVar (self, "corl_corvette.made_overt", 1);
|
|
removeObjVar(self, "intChangingFactionStatus");
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (hasScript(self, "force_rank_light_novice") || hasScript(self, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(self, new string_id("faction_recruiter", "jedi_cant_go_covert"));
|
|
removeObjVar(self, "intChangingFactionStatus");
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
region[] pvpRegions = getRegionsWithPvPAtPoint(getLocation(self), regions.PVP_REGION_TYPE_ADVANCED);
|
|
|
|
if(pvpRegions != null && pvpRegions.length > 0)
|
|
{
|
|
removeObjVar(self, "intChangingFactionStatus");
|
|
|
|
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_cannot_go_covert"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// make the player covert
|
|
factions.goCovert(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler msgGoOnLeave()
|
|
{
|
|
if (hasScript(self, "force_rank_light_novice") || hasScript(self, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(self, new string_id("faction_recruiter", "jedi_cant_go_covert"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
factions.goOnLeave(self);
|
|
return SCRIPT_CONTINUE;
|
|
|
|
|
|
}
|
|
|
|
messageHandler msgGoOvert()
|
|
{
|
|
if (hasScript(self, "force_rank_light_novice") || hasScript(self, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(self, new string_id("faction_recruiter", "jedi_cant_go_covert"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// No neutral special forces folks
|
|
int intFaction = pvpGetAlignedFaction(self);
|
|
if(intFaction==0)
|
|
{
|
|
sendSystemMessage(self, new string_id("spam", "no_spec_force_neutral") );
|
|
removeObjVar(self, "intChangingFactionStatus");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
factions.goOvert(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
/***** COMMANDHANDLERS *************************************************/
|
|
commandHandler gcwStatus()
|
|
{
|
|
|
|
string_id strSpam = new string_id("gcw", "gcw_status_info");
|
|
sendSystemMessage(self, strSpam);
|
|
return SCRIPT_CONTINUE;
|
|
|
|
}
|
|
|
|
commandHandler cmdDelegateFactionPoints()
|
|
{
|
|
//debugSpeakMsg(self, "cmdDelegateFactionPoints entered...");
|
|
factions.delegateFactionPoints(self, target, params);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleDelegateSui()
|
|
{
|
|
obj_id target = utils.getObjIdScriptVar(self, "delegate.target");
|
|
utils.removeScriptVarTree(self, "delegate");
|
|
if ( !isIdValid(target) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if ( bp == sui.BP_CANCEL )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int amt = sui.getTransferInputTo(params);
|
|
if ( amt < 1 )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
queueCommand(self, ##"delegateFactionPoints", target, Integer.toString(amt), COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleLeaveFactionSui()
|
|
{
|
|
LOG("gcw", "got mst");
|
|
obj_id player = sui.getPlayerId(params);
|
|
if ( !isIdValid(player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
string txt = sui.getInputBoxText(params);
|
|
if ( bp == sui.BP_CANCEL || txt == null || !toLower(txt).equals("yes") )
|
|
{
|
|
removeObjVar(player, factions.VAR_RESIGNING);
|
|
sendSystemMessage(player, SID_ABORT_RESIGNATION);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
if (hasSkill(player, "force_rank_light_novice") || hasSkill(player, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(player, new string_id("faction_recruiter", "jedi_cant_resign"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
sui.msgbox(player, utils.packStringId(SID_SUI_RESIG_COMPLETE_IN_5));
|
|
setObjVar(self, "intChangingFactionStatus", 1);
|
|
|
|
|
|
params.put("faction_id", pvpGetAlignedFaction(self));
|
|
messageTo(player, "msgResignFromFaction", params, factions.RESIGN_TIME, true);
|
|
CustomerServiceLog( "player_faction", "PLAYER-FACTION ALTERED|TIME:"+getGameTime()+"|PLAYER:"+player+"|PLAYER NAME:"+getName(player)+"|ZONE:"+getCurrentSceneName()+"|PLAYER CONFIRMED DESIRE TO LEAVE THEIR FACTION VIA RECRUITER. TOLD PLAYER OBJECT TO RESIGN FROM FACTION" );
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleGoCovert()
|
|
{
|
|
|
|
if(hasObjVar(self, "intChangingFactionStatus"))
|
|
{
|
|
LOG("gcw", "objvar");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
// you can't go covert using the sui if you're declared
|
|
if(pvpGetType(self)==PVPTYPE_DECLARED)
|
|
{
|
|
string_id strSpam = new string_id("gcw", "cannot_change_from_combatant_in_field");
|
|
sendSystemMessage(self, strSpam);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id player = sui.getPlayerId(params);
|
|
if ( !isIdValid(player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
string txt = sui.getInputBoxText(params);
|
|
if ( bp == sui.BP_CANCEL || txt == null || !toLower(txt).equals("yes") )
|
|
{
|
|
string_id strSpam = new string_id("gcw", "abort_field_change");
|
|
sendSystemMessage(self, strSpam);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
if (hasSkill(player, "force_rank_light_novice") || hasSkill(player, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(player, new string_id("faction_recruiter", "jedi_cant_go_covert"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
string_id strSpam = new string_id("gcw", "handle_go_covert");
|
|
CustomerServiceLog( "player_faction", "PLAYER-FACTION ALTERED|TIME:"+getGameTime()+"|PLAYER:"+self+"|PLAYER NAME:"+getName(self)+"|ZONE:"+getCurrentSceneName()+"|Player confirmed desire to change in-field faction status to covert. This will apply in 30 seconds");
|
|
sui.msgbox(player, utils.packStringId(strSpam));
|
|
setObjVar(self, "intChangingFactionStatus", 1);
|
|
factions.goCovertWithDelay(self, 30);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleGoOvert()
|
|
{
|
|
|
|
if(hasObjVar(self, "intChangingFactionStatus"))
|
|
{
|
|
LOG("gcw", "objvar");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id player = sui.getPlayerId(params);
|
|
if ( !isIdValid(player) )
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
string txt = sui.getInputBoxText(params);
|
|
if ( bp == sui.BP_CANCEL || txt == null || !toLower(txt).equals("yes") )
|
|
{
|
|
string_id strSpam = new string_id("gcw", "abort_field_change");
|
|
sendSystemMessage(self, strSpam);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
if (hasSkill(player, "force_rank_light_novice") || hasSkill(player, "force_rank_dark_novice"))
|
|
{
|
|
//sendSystemMessage(player, new string_id("faction_recruiter", "jedi_cant_go_covert"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
string_id strSpam = new string_id("gcw", "handle_go_covert");
|
|
CustomerServiceLog( "player_faction", "PLAYER-FACTION ALTERED|TIME:"+getGameTime()+"|PLAYER:"+self+"|PLAYER NAME:"+getName(self)+"|ZONE:"+getCurrentSceneName()+"|Player confirmed desire to change in-field faction status to overt. This will apply in 300 seconds.");
|
|
sui.msgbox(player, utils.packStringId(strSpam));
|
|
setObjVar(self, "intChangingFactionStatus", 1);
|
|
factions.goOvertWithDelay(self, 300);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler recievePvpRegionBonus()
|
|
{
|
|
if (!utils.hasScriptVar(self, gcw.PVP_REGION_ACTIVITY_PERFORMED))
|
|
return SCRIPT_CONTINUE;
|
|
else
|
|
utils.removeScriptVar(self, gcw.PVP_REGION_ACTIVITY_PERFORMED);
|
|
|
|
int points = params.getInt("points");
|
|
string information = params.getString("info");
|
|
gcw.grantModifiedGcwPoints(self, points, gcw.GCW_POINT_TYPE_GROUND_PVP_REGION, information);
|
|
//LOG("doLogging", "Recieved "+points+" from PvP region controller");
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
commandHandler cmdFactionalHelper()
|
|
{
|
|
factions.neutralMercenaryStatusMenu(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler handleFactionalHelperChoice()
|
|
{
|
|
if (!utils.hasScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_ID))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
int pid = utils.getIntScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_ID);
|
|
utils.removeScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_ID);
|
|
|
|
if (!utils.hasScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_CHOICES))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
string[] choices = utils.getStringArrayScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_CHOICES);
|
|
utils.removeScriptVar(self, factions.SCRIPTVAR_FACTIONAL_HELPER_SUI_CHOICES);
|
|
|
|
if (choices == null)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (pid != params.getInt("pageId"))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
// must be neutral to be mercenary
|
|
if (0 != pvpGetAlignedFaction(self))
|
|
{
|
|
sendSystemMessage(self, "You must be a Civilian to be a factional helper.", "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// cannot be in combat
|
|
if (ai_lib.isInCombat(self))
|
|
{
|
|
sendSystemMessage(self, "You cannot change your factional helper status while in combat.", "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
int rowSelected = sui.getListboxSelectedRow(params);
|
|
if ((rowSelected >= 0) && (rowSelected < choices.length))
|
|
{
|
|
if (choices[rowSelected].equals(factions.MERC_END_COVERT_IMPERIAL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_COMBATANT_END);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_END_OVERT_IMPERIAL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_SF_END);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_END_COVERT_REBEL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_COMBATANT_END);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_END_OVERT_REBEL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_SF_END);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_BEGIN_COVERT_IMPERIAL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_COMBATANT_BEGIN);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_BEGIN_OVERT_IMPERIAL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_SF_BEGIN);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_BEGIN_COVERT_REBEL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_COMBATANT_BEGIN);
|
|
}
|
|
else if (choices[rowSelected].equals(factions.MERC_BEGIN_OVERT_REBEL))
|
|
{
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_SF_BEGIN);
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
dictionary messageToParams = new dictionary();
|
|
messageToParams.put("mercenary_type", choices[rowSelected]);
|
|
|
|
if (isGod(self))
|
|
{
|
|
sendSystemMessage(self, "Reducing wait to 5 seconds ***BECAUSE YOU ARE IN GOD MODE***.", "");
|
|
messageTo(self, "executeFactionalHelperChoice", messageToParams, 5.0f, false);
|
|
}
|
|
else
|
|
{
|
|
messageTo(self, "executeFactionalHelperChoice", messageToParams, 60.0f, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler executeFactionalHelperChoice()
|
|
{
|
|
// must be neutral to be mercenary
|
|
if (0 != pvpGetAlignedFaction(self))
|
|
{
|
|
sendSystemMessage(self, "You must be a Civilian to be a factional helper.", "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// cannot be in combat
|
|
if (ai_lib.isInCombat(self))
|
|
{
|
|
sendSystemMessage(self, "You cannot change your factional helper status while in combat.", "");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
string mercenary_type = params.getString("mercenary_type");
|
|
if (mercenary_type == null)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if (mercenary_type.equals(factions.MERC_END_COVERT_IMPERIAL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, 0, false);
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_COMBATANT_TERMINATED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_END_OVERT_IMPERIAL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, 0, false);
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_SF_TERMINATED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_END_COVERT_REBEL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, 0, false);
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_COMBATANT_TERMINATED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_END_OVERT_REBEL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, 0, false);
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_SF_TERMINATED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_BEGIN_COVERT_IMPERIAL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, ##"imperial", false);
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_COMBATANT_GRANTED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_BEGIN_OVERT_IMPERIAL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, ##"imperial", true);
|
|
sendSystemMessage(self, factions.SID_MERC_IMPERIAL_SF_GRANTED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_BEGIN_COVERT_REBEL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, ##"rebel", false);
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_COMBATANT_GRANTED);
|
|
}
|
|
else if (mercenary_type.equals(factions.MERC_BEGIN_OVERT_REBEL))
|
|
{
|
|
pvpNeutralSetMercenaryFaction(self, ##"rebel", true);
|
|
sendSystemMessage(self, factions.SID_MERC_REBEL_SF_GRANTED);
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Command handler for the /battlefield command to show the battlefield sui.
|
|
commandHandler cmdGcwScore()
|
|
{
|
|
showGcwScoreboard(self);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
commandHandler cmdGcwSkirmishCityHelp()
|
|
{
|
|
gcw.gcwCityHelpText(self);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
messageHandler displayGcwScoreSui()
|
|
{
|
|
showGcwScoreboard(self);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
// Shows the scoreboard for the battle that is currently raging.
|
|
void showGcwScoreboard(obj_id self)
|
|
{
|
|
if(!isIdValid(self) || !exists(self))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(utils.hasScriptVar(self, "gcw.score.pid"))
|
|
{
|
|
int pid = utils.getIntScriptVar(self, "gcw.score.pid");
|
|
|
|
utils.removeScriptVar(self, "gcw.score.pid");
|
|
|
|
forceCloseSUIPage(pid);
|
|
}
|
|
|
|
string[][] scoreData = gcw_score.getAllGcwData();
|
|
|
|
if(scoreData == null || scoreData.length <= 0)
|
|
{
|
|
sendSystemMessage(self, new string_id("spam", "gcw_score_empty"));
|
|
return;
|
|
}
|
|
|
|
string [] table_titles = { "@guild:table_title_name", "@spam:table_title_faction", "@spam:table_title_profession", "@spam:table_title_level",
|
|
"@spam:table_title_gcw", "@spam:table_title_pvp_kills", "@spam:table_title_kills",
|
|
"@spam:table_title_assists", "@spam:table_title_crafted", "@spam:table_title_destroyed" };
|
|
|
|
string [] table_types = { "text", "text", "text", "integer", "integer", "integer", "integer", "integer", "integer", "integer" };
|
|
|
|
string statisticsTitle = "Invasion Statistics";
|
|
|
|
int phase = gcw_score.getGcwPhase();
|
|
int winner = gcw_score.getGcwWinner();
|
|
|
|
string invasionPhase = "";
|
|
string invasionWinner = "";
|
|
|
|
switch(phase)
|
|
{
|
|
case gcw.GCW_CITY_PHASE_UNKNOWN:
|
|
invasionPhase = "Invasion Over";
|
|
|
|
if(winner == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
invasionWinner = COLOR_REBELS + " Rebels won!";
|
|
}
|
|
else if(winner == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
invasionWinner = COLOR_IMPERIALS + " Imperials won!";
|
|
}
|
|
break;
|
|
case gcw.GCW_CITY_PHASE_CONSTRUCTION:
|
|
invasionPhase = "Construction Underway";
|
|
break;
|
|
case gcw.GCW_CITY_PHASE_COMBAT:
|
|
invasionPhase = "Invasion Underway";
|
|
break;
|
|
default:
|
|
invasionPhase = "Unknown";
|
|
break;
|
|
}
|
|
|
|
obj_id gcwObject = gcw.getInvasionSequencerNearby(self);
|
|
|
|
if(!isIdValid(gcwObject) || !exists(gcwObject))
|
|
{
|
|
return;
|
|
}
|
|
|
|
string phaseTime = "Time left: " + gcw.getFormattedInvasionTime(gcwObject, phase);
|
|
|
|
string statisticsInfoStr = "Invasion phase: " + invasionPhase + "\n" + phaseTime + "\n" + invasionWinner;
|
|
|
|
int pid = sui.tableRowMajor(self, self, sui.OK_CANCEL, statisticsTitle, "onGcwScore", statisticsInfoStr, table_titles, table_types, scoreData, true);
|
|
|
|
utils.setScriptVar(self, "gcw.score.pid", pid);
|
|
}
|