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

363 lines
15 KiB
Java
Executable File

package script.space.quest_logic;
import script.dictionary;
import script.library.space_quest;
import script.library.space_transition;
import script.library.space_utils;
import script.library.utils;
import script.obj_id;
import script.string_id;
import java.util.StringTokenizer;
public class destroy extends script.base_script
{
public destroy()
{
}
public static final string_id SID_REMAINDER_UPDATE = new string_id("space/quest", "destroy_remainder_update");
public static final string_id SID_TARGET_WAYPOINTS = new string_id("space/quest", "destroy_target_waypoints");
public static final string_id SID_ABANDONED_DESTROY = new string_id("space/quest", "destroy_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 = utils.getContainingPlayer(self);
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[] ships = dataTableGetStringColumn(qTable, "shipList");
space_quest.cleanArray(self, "shipTypes", ships);
int killCount = questInfo.getInt("killCount");
int killVariance = questInfo.getInt("killVariance");
if (killVariance > 0)
{
if (rand() >= 0.5)
{
killCount += rand(1, killVariance);
}
else if (rand() < 0.5)
{
killCount -= rand(1, killVariance);
}
}
setObjVar(self, "killCount", killCount);
setObjVar(self, "maxCount", killCount);
questSetQuestTaskCounter(player, "spacequest/" + questType + "/" + questName, 1, "quest/groundquests:destroy_counter", 0, killCount);
String[] spawns = dataTableGetStringColumn(qTable, "validSpawns");
space_quest.cleanArray(self, "validSpawns", spawns);
int give_waypoint = questInfo.getInt("giveSpawnWaypoint");
setObjVar(self, "give_waypoint", give_waypoint);
int spawnsForWaypointsOnly = questInfo.getInt("spawnsForWaypointsOnly");
setObjVar(self, "spawnsForWaypointsOnly", spawnsForWaypointsOnly);
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
questActivateTask(questid, 0, player);
}
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);
}
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))
{
clearTargetWaypoints(self);
space_quest.showQuestUpdate(self, SID_ABANDONED_DESTROY);
space_quest.setQuestFailed(player, self, false);
}
return SCRIPT_CONTINUE;
}
obj_id questManager = getNamedObject(space_quest.QUEST_MANAGER);
if (questManager == null)
{
return SCRIPT_CONTINUE;
}
int give_waypoint = getIntObjVar(self, "give_waypoint");
String[] spawns = getStringArrayObjVar(self, "validSpawns");
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
questActivateTask(questid, 1, player);
if (questIsTaskActive(questid, 0, player))
{
questCompleteTask(questid, 0, player);
}
}
if (spawns == null)
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, "target_waypoints"))
{
return SCRIPT_CONTINUE;
}
int added = 0;
for (int i = 0; i < spawns.length; i++)
{
if (give_waypoint == 1)
{
java.util.StringTokenizer st = new java.util.StringTokenizer(spawns[i], ":");
String scene = st.nextToken();
String point = st.nextToken();
added++;
dictionary outparams = new dictionary();
outparams.put("spawner", point);
outparams.put("player", player);
outparams.put("name", "Possible Target Location");
outparams.put("quest", self);
outparams.put("taskId", i + 2);
outparams.put("questId", questid);
outparams.put("questName", "spacequest/" + questType + "/" + questName);
space_utils.notifyObject(questManager, "createWaypointToSpawner", outparams);
}
}
if (added > 0)
{
dictionary outparams = new dictionary();
outparams.put("added", added);
messageTo(self, "notifyTargetWaypoints", outparams, 1.0f, false);
}
return SCRIPT_CONTINUE;
}
public int notifyTargetWaypoints(obj_id self, dictionary params) throws InterruptedException
{
int added = params.getInt("added");
space_quest.showQuestUpdate(self, SID_TARGET_WAYPOINTS, added);
return SCRIPT_CONTINUE;
}
public int createdWaypointToSpawner(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
obj_id newpoint = params.getObjId("waypoint");
obj_id[] waypoints = getObjIdArrayObjVar(self, "target_waypoints");
if (waypoints == null)
{
waypoints = new obj_id[1];
waypoints[0] = newpoint;
setObjVar(self, "target_waypoints", waypoints);
}
else
{
obj_id[] newlist = new obj_id[waypoints.length + 1];
for (int i = 0; i < waypoints.length; i++)
{
newlist[i] = waypoints[i];
}
newlist[waypoints.length] = newpoint;
setObjVar(self, "target_waypoints", newlist);
}
return SCRIPT_CONTINUE;
}
public int handleShipDestroyed(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
String killType = params.getString("strShipType");
String[] shipTypes = getStringArrayObjVar(self, "shipTypes");
String spawnerName = params.getString("strSpawnerName");
obj_id destroyed = params.getObjId("ship");
obj_id player = utils.getContainingPlayer(self);
for (String shipType : shipTypes) {
if (shipType.equals(killType)) {
if (hasObjVar(self, "killTrack")) {
obj_id[] track = getObjIdArrayObjVar(self, "killTrack");
if (track != null) {
for (obj_id obj_id : track) {
if (obj_id == destroyed) {
return SCRIPT_CONTINUE;
}
}
}
}
int spawnsForWaypointsOnly = getIntObjVar(self, "spawnsForWaypointsOnly");
if ((spawnsForWaypointsOnly == 0) && hasObjVar(self, "validSpawns")) {
String[] spawns = getStringArrayObjVar(self, "validSpawns");
if (spawns != null) {
boolean match = false;
for (String spawn : spawns) {
StringTokenizer st = new StringTokenizer(spawn, ":");
String scene = st.nextToken();
String point = st.nextToken();
if ((spawnerName != null) && spawnerName.equals(point)) {
match = true;
break;
}
}
if (!match) {
return SCRIPT_CONTINUE;
}
} else {
return SCRIPT_CONTINUE;
}
}
obj_id[] killTrack = null;
if (hasObjVar(self, "killTrack")) {
killTrack = getObjIdArrayObjVar(self, "killTrack");
obj_id[] newKillTrack = new obj_id[killTrack.length + 1];
for (int i = 0; i < killTrack.length; i++) {
newKillTrack[i] = killTrack[i];
}
newKillTrack[killTrack.length] = destroyed;
setObjVar(self, "killTrack", newKillTrack);
} else {
killTrack = new obj_id[1];
killTrack[0] = destroyed;
setObjVar(self, "killTrack", killTrack);
}
space_quest._setQuestInProgress(self);
int killCount = getIntObjVar(self, "killCount");
int maxCount = getIntObjVar(self, "maxCount");
killCount--;
setObjVar(self, "killCount", killCount);
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
questSetQuestTaskCounter(player, "spacequest/" + questType + "/" + questName, 1, "quest/groundquests:destroy_counter", maxCount - killCount, maxCount);
if (checkSpecialEvent(self, player, killCount)) {
return SCRIPT_CONTINUE;
}
if (killCount <= 0) {
questCompleted(self);
} else {
space_quest.showQuestUpdate(self, SID_REMAINDER_UPDATE, killCount);
}
return SCRIPT_CONTINUE;
}
}
return SCRIPT_CONTINUE;
}
public void questCompleted(obj_id self) throws InterruptedException
{
String questName = getStringObjVar(self, space_quest.QUEST_NAME);
String questType = getStringObjVar(self, space_quest.QUEST_TYPE);
obj_id player = utils.getContainingPlayer(self);
int questid = questGetQuestId("spacequest/" + questType + "/" + questName);
if (questid != 0)
{
if (questIsTaskActive(questid, 1, player))
{
questCompleteTask(questid, 1, player);
}
}
clearTargetWaypoints(self);
space_quest.setQuestWon(player, self);
}
public int playerShipDestroyed(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, "in_progress"))
{
clearTargetWaypoints(self);
obj_id player = utils.getContainingPlayer(self);
space_quest.setQuestFailed(player, self);
}
return SCRIPT_CONTINUE;
}
public int abortMission(obj_id self, dictionary params) throws InterruptedException
{
if (hasObjVar(self, "noAbort"))
{
return SCRIPT_CONTINUE;
}
clearTargetWaypoints(self);
obj_id player = utils.getContainingPlayer(self);
space_quest.setQuestAborted(player, self);
return SCRIPT_CONTINUE;
}
public void clearTargetWaypoints(obj_id self) throws InterruptedException
{
obj_id player = utils.getContainingPlayer(self);
obj_id[] waypoints = getObjIdArrayObjVar(self, "target_waypoints");
if (waypoints != null)
{
for (obj_id waypoint : waypoints) {
if (isIdValid(waypoint)) {
destroyWaypointInDatapad(waypoint, player);
}
}
}
}
public int removeQuest(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = utils.getContainingPlayer(self);
clearTargetWaypoints(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 boolean checkSpecialEvent(obj_id self, obj_id player, int killCount) 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 != killCount)
{
return false;
}
dictionary params = new dictionary();
params.put("quest", self);
messageTo(player, "doSpecialEvent", params, triggerDelay, false);
return false;
}
}