Files
dsrc/sku.0/sys.server/compiled/game/script/space/quest_logic/patrol.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

394 lines
16 KiB
Java
Executable File

package script.space.quest_logic;
import script.*;
import script.library.prose;
import script.library.space_quest;
import script.library.space_transition;
public class patrol extends script.base_script
{
public patrol()
{
}
public static final string_id SID_NEW_WAYPOINT = new string_id("space/quest", "patrol_new_waypoint");
public static final string_id SID_WAYPOINT_ARRIVED = new string_id("space/quest", "patrol_waypoint_arrived");
public static final string_id SID_CIRCUIT_COMPLETE = new string_id("space/quest", "patrol_circuit_complete");
public static final string_id SID_TARGET_ELIMINATED = new string_id("space/quest", "patrol_target_eliminated");
public static final string_id SID_ABANDONED_PATROL = new string_id("space/quest", "patrol_abandoned");
public int OnAttach(obj_id self) throws InterruptedException
{
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
if ((questName == null) || (questType == null))
{
return SCRIPT_CONTINUE;
}
String qTable = "datatables/spacequest/" + questType + "/" + questName + ".iff";
dictionary questInfo = dataTableGetRow(qTable, 0);
if (questInfo == null)
{
sendSystemMessageTestingOnly(player, "Debug: Failed to open quest table " + qTable);
return SCRIPT_CONTINUE;
}
String[] navPoints = dataTableGetStringColumn(qTable, "navPoints");
space_quest.cleanArray(self, "navPoints", navPoints);
setObjVar(self, "currentNavPoint", 0);
setObjVar(self, "laps", questInfo.getInt("laps"));
setObjVar(self, "currentLap", 1);
String specTarget = questInfo.getString("specialTarget");
if ((specTarget != null) && !specTarget.equals("none") && !specTarget.equals(""))
{
setObjVar(self, "specialTarget", specTarget);
}
if (questInfo.containsKey("navRadius"))
{
setObjVar(self, "navRadius", questInfo.getInt("navRadius"));
}
String questZone = getStringObjVar(self, space_quest.QUEST_ZONE);
if ((getCurrentSceneName()).startsWith(questZone))
{
dictionary outparams = new dictionary();
outparams.put("player", player);
messageTo(self, "initializedQuestPlayer", outparams, 1.0f, false);
}
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
questActivateTask(questid, 0, player);
}
return SCRIPT_CONTINUE;
}
public int initializedQuestPlayer(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
String questZone = getStringObjVar(self, space_quest.QUEST_ZONE);
obj_id player = params.getObjId("player");
obj_id containing_ship = space_transition.getContainingShip(player);
if (isIdValid(containing_ship))
{
String strChassisType = getShipChassisType(containing_ship);
if ((strChassisType != null) && strChassisType.equals("player_sorosuub_space_yacht"))
{
return SCRIPT_CONTINUE;
}
}
if (!(getCurrentSceneName()).startsWith(questZone))
{
if (space_quest.isQuestInProgress(self))
{
clearPatrolWaypoints(self);
space_quest.showQuestUpdate(self, SID_ABANDONED_PATROL);
space_quest.setQuestFailed(player, self, false);
}
return SCRIPT_CONTINUE;
}
String[] navPoints = getStringArrayObjVar(self, "navPoints");
if (navPoints == null)
{
return SCRIPT_CONTINUE;
}
int currentNav = getIntObjVar(self, "currentNavPoint");
String destNav = navPoints[currentNav];
java.util.StringTokenizer st = new java.util.StringTokenizer(destNav, ":");
String scene = st.nextToken();
destNav = st.nextToken();
if ((getCurrentSceneName()).startsWith(scene))
{
registerPatrolWaypoint(self, player, destNav);
}
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
if (hasObjVar(self, "specialTarget"))
{
questActivateTask(questid, 1, player);
}
questActivateTask(questid, 2, player);
if (questIsTaskActive(questid, 0, player))
{
questCompleteTask(questid, 0, player);
}
}
return SCRIPT_CONTINUE;
}
public void registerPatrolWaypoint(obj_id self, obj_id player, String destNav) throws InterruptedException
{
obj_id navPoint = space_quest.findQuestLocation(self, player, destNav, "nav");
if (isIdValid(navPoint))
{
location loc = getLocation(navPoint);
obj_id waypoint = getObjIdObjVar(self, "patrol_waypoint");
if (!isIdValid(waypoint))
{
waypoint = createWaypointInDatapad(player, loc);
}
if (isIdValid(waypoint))
{
setWaypointVisible(waypoint, true);
setWaypointActive(waypoint, true);
setWaypointLocation(waypoint, loc);
setWaypointName(waypoint, "Patrol Waypoint");
setWaypointColor(waypoint, "space");
setObjVar(self, "patrol_waypoint", waypoint);
}
int currentNav = getIntObjVar(self, "currentNavPoint");
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
questSetQuestTaskLocation(player, "spacequest/" + questType + "/" + questName, 2 + currentNav, loc);
space_quest.showQuestUpdate(self, SID_NEW_WAYPOINT);
setObjVar(self, "loc", destNav);
if (hasObjVar(self, "navRadius"))
{
addLocationTarget3d(player, destNav, loc, getIntObjVar(self, "navRadius"));
}
else
{
addLocationTarget3d(player, destNav, loc, space_quest.PATROL_NAV_RADIUS);
}
}
}
public int arrivedAtLocation(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
String name = params.getString("name");
obj_id player = params.getObjId("player");
String[] navPoints = getStringArrayObjVar(self, "navPoints");
int currentNav = getIntObjVar(self, "currentNavPoint");
String destNav = navPoints[currentNav];
java.util.StringTokenizer st = new java.util.StringTokenizer(destNav, ":");
String scene = st.nextToken();
destNav = st.nextToken();
st = new java.util.StringTokenizer(navPoints[0], ":");
scene = st.nextToken();
String navzero = st.nextToken();
if (destNav.equals(name))
{
space_quest.showQuestUpdate(self, SID_WAYPOINT_ARRIVED);
space_quest._setQuestInProgress(self, true);
currentNav++;
setObjVar(self, "currentNavPoint", currentNav);
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
if (questIsTaskActive(questid, 1 + currentNav, player))
{
questCompleteTask(questid, 1 + currentNav, player);
}
}
checkSpecialEvent(self, player, currentNav);
if (currentNav == navPoints.length)
{
int laps = getIntObjVar(self, "laps");
int curLap = getIntObjVar(self, "currentLap");
if (curLap >= laps)
{
if (hasObjVar(self, "specialTarget"))
{
if (!hasObjVar(self, "specialTargetDestroyed"))
{
setObjVar(self, "patrolComplete", 1);
setObjVar(self, "currentNavPoint", 0);
registerPatrolWaypoint(self, player, navzero);
return SCRIPT_CONTINUE;
}
}
if (!hasPendingSplit(self))
{
questCompleted(self);
}
else
{
messageTo(self, "handleDelayedQuestComplete", null, 10, false);
}
return SCRIPT_CONTINUE;
}
else
{
prose_package pp = prose.getPackage(SID_CIRCUIT_COMPLETE, (laps - curLap));
space_quest.sendQuestMessage(player, pp);
setObjVar(self, "currentNavPoint", 0);
registerPatrolWaypoint(self, player, navzero);
setObjVar(self, "currentLap", (curLap + 1));
}
}
else
{
st = new java.util.StringTokenizer(navPoints[currentNav], ":");
scene = st.nextToken();
destNav = st.nextToken();
registerPatrolWaypoint(self, player, destNav);
}
if (questid != 0)
{
questActivateTask(questid, 2 + currentNav, player);
}
}
return SCRIPT_CONTINUE;
}
public boolean hasPendingSplit(obj_id self) throws InterruptedException
{
if (hasObjVar(self, "pendingSplit"))
{
return getBooleanObjVar(self, "pendingSplit");
}
setObjVar(self, "pendingSplit", false);
return false;
}
public void setPendingSplit(obj_id self, boolean state) throws InterruptedException
{
setObjVar(self, "pendingSplit", state);
}
public int handleDelayedQuestComplete(obj_id self, dictionary params) throws InterruptedException
{
if (hasPendingSplit(self))
{
messageTo(self, "handleDelayedQuestComplete", null, 10, false);
}
else
{
questCompleted(self);
}
return SCRIPT_CONTINUE;
}
public void questCompleted(obj_id self) throws InterruptedException
{
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
clearPatrolWaypoints(self);
space_quest.setQuestWon(player, self);
}
public int handleShipDestroyed(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
if (!hasObjVar(self, "specialTarget"))
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, "specialTargetDestroyed"))
{
return SCRIPT_CONTINUE;
}
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
String killType = params.getString("strShipType");
String specTarget = getStringObjVar(self, "specialTarget");
if (specTarget.equals(killType))
{
setObjVar(self, "specialTargetDestroyed", 1);
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
if (questIsTaskActive(questid, 1, player))
{
questCompleteTask(questid, 1, player);
}
}
if (!hasObjVar(self, "patrolComplete"))
{
space_quest.showQuestUpdate(self, SID_TARGET_ELIMINATED);
}
else
{
questCompleted(self);
}
}
return SCRIPT_CONTINUE;
}
public int abortMission(obj_id self, dictionary params) throws InterruptedException
{
if (hasObjVar(self, "noAbort"))
{
return SCRIPT_CONTINUE;
}
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
clearPatrolWaypoints(self);
space_quest.setQuestAborted(player, self);
return SCRIPT_CONTINUE;
}
public int playerShipDestroyed(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, "in_progress"))
{
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
clearPatrolWaypoints(self);
space_quest.setQuestFailed(player, self);
}
return SCRIPT_CONTINUE;
}
public int removeQuest(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
clearPatrolWaypoints(self);
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if ((questid != 0) && questIsQuestActive(questid, player))
{
questCompleteQuest(questid, player);
}
space_quest._removeQuest(player, self);
return SCRIPT_CONTINUE;
}
public void clearPatrolWaypoints(obj_id self) throws InterruptedException
{
obj_id player = getObjIdObjVar(self, space_quest.QUEST_OWNER);
obj_id waypoint = getObjIdObjVar(self, "patrol_waypoint");
if (isIdValid(waypoint))
{
destroyWaypointInDatapad(waypoint, player);
}
dictionary params = new dictionary();
String loc = getStringObjVar(self, "loc");
if (loc != null)
{
removeLocationTarget(player, loc);
}
}
public boolean checkSpecialEvent(obj_id self, obj_id player, int currentNav) throws InterruptedException
{
if (!hasObjVar(self, space_quest.QUEST_TRIGGER_EVENT))
{
return false;
}
int triggerEvent = getIntObjVar(self, space_quest.QUEST_TRIGGER_EVENT);
int triggerSC = getIntObjVar(self, space_quest.QUEST_TRIGGER_SC);
int triggerOn = getIntObjVar(self, space_quest.QUEST_TRIGGER_ON);
int triggerDelay = getIntObjVar(self, space_quest.QUEST_TRIGGER_DELAY);
if (triggerEvent == 0)
{
return false;
}
if (triggerSC != 0)
{
return false;
}
if (triggerOn != currentNav)
{
return false;
}
setPendingSplit(self, true);
dictionary params = new dictionary();
params.put("quest", self);
messageTo(player, "doSpecialEvent", params, triggerDelay, false);
return false;
}
}