package script.library; import script.*; import script.base_class.*; import script.combat_engine.*; import java.util.Arrays; import java.util.Hashtable; import java.util.Vector; import script.base_script; import script.library.beast_lib; import script.library.utils; import script.library.colors; import script.library.space_dungeon; import script.library.stealth; import script.library.attrib; import script.library.prose; public class trial extends script.base_script { public trial() { } public static final String MESSAGE_SESSION = "messageTo.session"; public static final String WP_OBJECT = "object/tangible/ground_spawning/patrol_waypoint.iff"; public static final String PARENT = "parent"; public static final String ARRAY_CHILDREN = "parent.tempChildren"; public static final String TEMP_OBJECT = "tempObject"; public static final String WP_NAME = "wp_name"; public static final boolean LOGGING = false; public static final String UPLINK_WIN_SIGNAL = "mustafar_uplink_established"; public static final String DECREPIT_ENTER_SIGNAL = "mustafar_factory_found"; public static final String DECREPIT_WIN_SIGNAL = "mustafar_factory_fixed"; public static final String ARMY_WIN_SIGNAL = "mustafar_droidarmy_victory"; public static final String WORKING_ENTER_SIGNAL = "mustafar_droidfactory_final"; public static final String WORKING_WIN_SIGNAL = "mustafar_droidfactory_shutdown"; public static final String VOLCANO_ENTER_SIGNAL = "volcano_arena_pilot"; public static final String VOLCANO_WIN_SIGNAL = "volcano_arena_victory"; public static final String DECREPIT_STF = "mustafar/decrepit_droid_factory"; public static final string_id SID_NOT_LOCKED = new string_id(DECREPIT_STF, "decrepit_not_locked"); public static final string_id SID_ACCESS_GRANTED = new string_id(DECREPIT_STF, "access_granted"); public static final String DECREPIT_MAIN_HALL = "mainroom27"; public static final String DECREPIT_ONE_TWO_STAIR = "hall2"; public static final String DECREPIT_TWO_THREE_STAIR = "hall5"; public static final String DECREPIT_TRAP_ROOM = "smallroom4"; public static final String DECREPIT_PRE_TRAP_ROOM = "smallroom5"; public static final String DECREPIT_ENVIRONMENTAL = "smallroom12"; public static final String DECREPIT_FIRE_CELL_EXIT = "hall15"; public static final String DECREPIT_FINAL_ROOM = "centralroom28"; public static final String[] FIRE_CELLS = { "mediumroom10","smallroom11","smallroom12","hall13" }; public static final String SECOND_ACCESS_BASE = "second_floor_access"; public static final String ACCESS_CODE = SECOND_ACCESS_BASE+".code"; public static final String RESET_CODE = SECOND_ACCESS_BASE+".reset"; public static final int RESET_TIMER = 20; public static final int SENSOR_RESET_TIME = 4; public static final String TRAP_STATE = "trap_state"; public static final String SENSOR_STATE = "sensor_state"; public static final String FIRE_CELL_STATE = "fire_cell_state"; public static final String POWER_CORE_STATE = "power_core_state"; public static final String GUARDIAN_LOCK_STATE = "guardian_lock_state"; public static final String DECREPIT_VICTORY_STATE = "decrepit_victory_state"; public static final String WORKING_STF = "mustafar/working_droid_factory"; public static final string_id TWINS_RESPAWN = new string_id (WORKING_STF, "twin_respawn"); public static final string_id TWINS_DEFEATED = new string_id (WORKING_STF, "twin_defeated"); public static final string_id TWINS_LOCK_ACTIVE = new string_id (WORKING_STF, "access_denied"); public static final string_id TWINS_KILL_CLUE = new string_id (WORKING_STF, "twin_kill_clue"); public static final string_id WORKING_DEVISTATOR_DEFEATED = new string_id (WORKING_STF, "devistator_defeated"); public static final string_id WORKING_INHIBITOR_NOCHARGE = new string_id (WORKING_STF, "inhibitor_lost_charge"); public static final string_id WORKING_INHIBITOR_RECHARGE = new string_id (WORKING_STF, "inhibitor_recharging"); public static final string_id WORKING_INHIBITOR_INACTIVE = new string_id (WORKING_STF, "inhibitor_inactive"); public static final string_id WORKING_INHIBITOR_COLLECT = new string_id (WORKING_STF, "inhibitor_collect"); public static final string_id WORKING_INHIBITOR_TAKEN = new string_id (WORKING_STF, "inhibitor_taken"); public static final string_id WORKING_RRU_OP_CLUE = new string_id (WORKING_STF, "rru_clue"); public static final string_id WORKING_RRU_INACTIVE = new string_id (WORKING_STF, "rru_inactive"); public static final string_id WORKING_RRU_ACTIVE = new string_id (WORKING_STF, "rru_active"); public static final string_id WORKING_RRU_FALTER = new string_id (WORKING_STF, "rru_falter"); public static final string_id WORKING_RRU_RECHARGE = new string_id (WORKING_STF, "rru_recharge"); public static final string_id WORKING_MDE_DEFEATED = new string_id (WORKING_STF, "mde_defeated"); public static final string_id WORKING_MDE_TAUNT = new string_id (WORKING_STF, "mde_taunt"); public static final string_id WORKING_DOOM_DEFEATED = new string_id (WORKING_STF, "doom_defeated"); public static final string_id WORKING_DOOM_FAILURE = new string_id (WORKING_STF, "doom_failure"); public static final string_id WORKING_HK47_TAUNT = new string_id (WORKING_STF, "hk47_taunt"); public static final string_id WORKING_DUALITY_APPLY = new string_id (WORKING_STF, "duality_applied"); public static final string_id WORKING_IMBALANCE_APPLY = new string_id (WORKING_STF, "imbalance_applied"); public static final string_id WORKING_IMBALANCE_FADE = new string_id (WORKING_STF, "imbalance_fade"); public static final string_id WORKING_OBSERVER_DETONATE = new string_id (WORKING_STF, "observer_detonate"); public static final String WORKING_MAIN_HALL = "mainroom27"; public static final String WORKING_ONE_TWO_STAIR = "hall2"; public static final String WORKING_TWO_THREE_STAIR = "hall7"; public static final String WORKING_DE_HALL = "hall13"; public static final String WORKING_MASTER_CONTROL = "centralroom28"; public static final String WORKING_CLONER_EXIT = "mdeClonerExit"; public static final String OBJECT_INHIBITOR = "object/tangible/dungeon/mustafar/working_droid_factory/inhibitor_storage.iff"; public static final String OBJECT_REACTIVE_REPAIR = "object/tangible/dungeon/mustafar/working_droid_factory/reactive_repair_module.iff"; public static final String OBJECT_DE_CLONER = "object/tangible/dungeon/mustafar/working_droid_factory/rapid_assembly_station.iff"; public static final String OBJECT_DECTRUCT_PILE = "object/tangible/dungeon/mustafar/working_droid_factory/radioactive_pile.iff"; public static final String WORKING_AUREK_KILLED = "isAurekKilled"; public static final String WORKING_BESH_KILLED = "isBeshKilled"; public static final String WORKING_AUREK_BESH_ENGAGED = "isAurekBeckEngaged"; public static final String AUREK_HEALTH = "health.aurek"; public static final String BESH_HEALTH = "health.besh"; public static final String WORKING_DEVISTATOR_KILLED = "isDevistatorKilled"; public static final String WORKING_DEVISTATOR_ENGAGED = "isDevistatorEngaged"; public static final String WORKING_INHIBITOR_TRACKER = "currentInhibitorSession"; public static final String WORKING_RRU_STATE = "rapidRepairUnitState"; public static final String WORKING_MDE_KILLED = "isMasterDroidEngineerKilled"; public static final String WORKING_MDE_ENGAGED = "isMdeEngaged"; public static final String WORKING_MDE_MOB = "isMdeMob"; public static final String WORKING_ASSEMBLY_STAGE = "eventStage"; public static final String WORKING_MDE_REVIVED = "wasRevived"; public static final String WORKING_POWER_SHUT_DOWN = "isPowerCoreOff"; public static final String WORKING_DOOM_BRINGER_KILLED = "isDoomBringerKilled"; public static final String WORKING_ACTIVE_HOD = "doom.activeHandOfDoom"; public static final String WORKING_PRIMARY_HAND = "doom.primaryHand"; public static final String WORKING_HOD_TARGET = "doom.objectiveTarget"; public static final String WORKING_HK_SPAWNED = "hk.isSpawned"; public static final String WORKING_HK_BOMB = "hk.isDetonated"; public static final String WORKING_AUREKBESH_KILL_TIME = "aurekBeshKillTime"; public static final int WORKING_AUREKBESH_RESPAWN_DELAY = 15; public static final boolean WORKING_LOGGING = false; public static final boolean UPLINK_LOGGING = false; public static final String UPLINK_STF = "mustafar/uplink_cave"; public static final String UPLINK_VICTORY_STATE = "isUplinkEstablished"; public static final String UPLINK_DATA = "datatables/dungeon/mustafar_trials/link_establish/link_event_data.iff"; public static final String RELAY_OBJECT = "object/tangible/dungeon/mustafar/uplink_trial/relay_object.iff"; public static final String UPLINK_ESTABLISH_EFFECT = "blah.cef"; public static final String UPLINK_ROOM = "mainroom"; public static final String UPLINK_ACTIVE = "isUplinkTrialActive"; public static final string_id UPLINK_FOREMAN_SPAWN = new string_id(UPLINK_STF, "foreman_spawn"); public static final boolean VALLEY_LOGGING = false; public static final String VALLEY_DATA = "datatables/dungeon/mustafar_trials/valley_battlefield/valley_event_data.iff"; public static final String BATTLEFIELD_VICTORY_STATE = "armyDefeated"; public static final String BATTLEFIELD_DROID_ARMY = "isArmy"; public static final String BATTLEFIELD_MINER = "isMiner"; public static final String BATTLEFIELD_COMMANDER_KILLED = "isCommanderKilled"; public static final String BATTLEFIELD_GENERATOR_DESTROYED = "isGeneratorDestoryed"; public static final String BATTLEFIELD_COMMANDER_LOGIC = "assaultFinal"; public static final String BATTLEFIELD_DROID_CORPSE = "droidCorpse"; public static final String BATTLEFIELD_STF = "mustafar/valley_battlefield"; public static final string_id BATTLEFIELD_GENERATOR_DEAD = new string_id(BATTLEFIELD_STF, "generator_destroyed"); public static final string_id BATTLEFIELD_COMMANDER_DIED = new string_id(BATTLEFIELD_STF, "commander_killed"); public static final string_id BATTLEFIELD_CMNDR_INTRO = new string_id(BATTLEFIELD_STF, "commander_intro"); public static final string_id BATTLEFIELD_WIN_MESSAGE = new string_id(BATTLEFIELD_STF, "battlefield_win_message"); public static final string_id BATTLEFIELD_LOSE_MESSAGE = new string_id(BATTLEFIELD_STF, "battlefield_lose_message"); public static final string_id BATTLEFIELD_LOSE_1 = new string_id(BATTLEFIELD_STF, "about_to_lose_1"); public static final string_id BATTLEFIELD_LOSE_2 = new string_id(BATTLEFIELD_STF, "about_to_lose_2"); public static final string_id BATTLEFIELD_LOSE_3 = new string_id(BATTLEFIELD_STF, "about_to_lose_3"); public static final int BATTLEFIELD_WAVE_DELAY = 150; public static final int BATTLEFIELD_COMM_REZ_DELAY = 18; public static final boolean VOLCANO_LOGGING = false; public static final String VOLCANO_STF = "mustafar/volcano_battlefield"; public static final string_id VOLCANO_TASKMASTER_STRENGTHEN = new string_id(VOLCANO_STF, "taskmaster_strengthen"); public static final string_id VOLCANO_CYM_BEETLE_NOTIFY = new string_id(VOLCANO_STF, "four_summon_add"); public static final string_id VOLCANO_OPP_ADD_NOTIFY = new string_id(VOLCANO_STF, "five_summon_trio"); public static final string_id VOLCANO_OPP_MIDGUARD = new string_id(VOLCANO_STF, "five_summon_midguard"); public static final string_id VOLCANO_HK_SUMMON_AK = new string_id(VOLCANO_STF, "hk_summon_walker"); public static final string_id VOLCANO_HK_TAUNT = new string_id(VOLCANO_STF, "hk_prefight_taunt"); public static final String VOLCANO_THREE_IS_BOSS = "isCommander"; public static final String VOLCANO_THREE_IS_CORPSE = "isCorpse"; public static final String VOLCANO_FOUR_IS_BEETLE = "isKubazaBeetle"; public static final String VOLCANO_FINAL_IS_CORPSE = "isCorpse"; public static final boolean MONSTER_LOGGING = false; public static final String MONSTER_DATA = "datatables/dungeon/mustafar_trials/sher_kar/sher_kar_data"; public static final String MONSTER_STF = "mustafar/sher_kar"; public static final String MONSTER_AREA = "r1"; public static final String MONSTER_WP = "spawn_point"; public static final String MONSTER_SHER_KAR = "sherKar.id"; public static final String MONSTER_KARLING = "som_sherkar_karling"; public static final String MONSTER_PRAETORIAN = "som_sherkar_praetorian"; public static final String MONSTER_SYMBIOT = "som_sherkar_symbiot"; public static final string_id MONSTER_ENRAGE_WARNING = new string_id(MONSTER_STF, "enrage_warning"); public static final string_id MONSTER_SK_DEFEATED = new string_id(MONSTER_STF, "sk_defeated"); public static final String SND_POWERUP = "clienteffect/snd_forcefield_powerup.cef"; public static final String SND_POWERDOWN = "clienteffect/snd_forcefield_powerdown.cef"; public static final String PRT_CYM_DISEASE = "clienteffect/mus_cym_disease.cef"; public static final String PRT_CYM_POISON = "clienteffect/mus_cym_poison.cef"; public static final String PRT_DROID_HEAL = "clienteffect/mus_droid_heal.cef"; public static final String PRT_DROID_REVIVE = "clienteffect/mus_droid_revive.cef"; public static final String PRT_RELAY_ACTIVATE = "clienteffect/mus_relay_activate.cef"; public static final String PRT_RELAY_CREATE = "clienteffect/mus_relay_create.cef"; public static final String PRT_KUBAZA_EXPLODE = "clienteffect/exp_ap_landmine.cef"; public static final String PRT_KUBAZA_WARNING = "clienteffect/mus_kubaza_warning.cef"; public static final String PRT_INVULN_SHIELD = "appearance/pt_flash_shield.prt"; public static final String PRT_TRAP_STUN = "clienteffect/mus_relay_activate.cef"; public static final String PRT_WORKING_REPAIR_REZ = "clienteffect/mus_relay_create.cef"; public static final String PRT_WORKING_REPAIR_COMPILE = "clienteffect/mus_relay_create.cef"; public static final String PRT_WORKING_DUALITY_EXPLOSION = "appearance/pt_cmndo_shock_grenade5.prt"; public static final String PRT_WORKING_HK_BOOM_1 = "clienteffect/avatar_explosion_01.cef"; public static final String PRT_WORKING_HK_BOOM_2 = "clienteffect/avatar_explosion_02.cef"; public static final String PRT_WORKING_HK_BOOM_3 = "clienteffect/avatar_room_explosion.cef"; public static final String PRT_VOLCANO_WAVE_PRE = "appearance/pt_blast_wave_build_up.prt"; public static final String PRT_VOLCANO_WAVE_EXE = "appearance/pt_blast_wave.prt"; public static final String PRT_VOLCANO_AIR_PRE = "appearance/pt_rocket_barrage_wind_up.prt"; public static final String PRT_VOLCANO_AIR_EXE = "appearance/pt_rocket_barrage.prt"; public static final String PRT_VOLCANO_CONE_PRE = "appearance/pt_large_beam_warm_up.prt"; public static final String PRT_VOLCANO_CONE_EXE = "appearance/pt_large_beam.prt"; public static final String PRT_VOLCANO_YT_LANDING = "appearance/must_smoke_plume01.prt"; public static final String PRT_SHER_KAR_CAVE_IN = "clienteffect/cave_in_roof.cef"; public static final String MUS_BATTLEFIELD_DROID_ARMY_INTRO = "sound/mus_mustafar_droid_invasion_intro.snd"; public static final String MUS_VOLCANO_HK_INTRO = "sound/mus_mustafar_hk47_intro.snd"; public static final String MUS_MUST_QUEST_WIN = "sound/mus_mustafar_quest_success.snd"; public static final String MUS_MUST_QUEST_FAIL = "sound/mus_mustafar_quest_fail.snd"; public static final int HP_DECREPIT_COLONEL = 145000; public static final int HP_DECREPIT_GUARDIAN = 185250; public static final int HP_WORKING_AUREK_BESH = 448220; public static final int HP_WORKING_DEVISTATOR = 635425; public static final int HP_WORKING_MDE = 385225; public static final int HP_WORKING_FIXER_ONE = 855965; public static final int HP_WORKING_DOOM_HAND = 125000; public static final int HP_WORKING_DOOM_BRINGER = 705385; public static final int HP_DOOM_TARGET = 200000; public static final int HP_WORKING_ASSEMBLY = 50000; public static final int HP_BATTLEFIELD_GENERATOR = 65000; public static final int HP_VOLCANO_ONE_GUARD = 65000; public static final int HP_VOLCANO_ONE_BOSS = 545000; public static final int HP_VOLCANO_TWO_GUARD = 95250; public static final int HP_VOLCANO_TWO_BOSS = 655280; public static final int HP_VOLCANO_THREE_GUARD = 33500; public static final int HP_VOLCANO_THREE_RISEN = 60250; public static final int HP_VOLCANO_THREE_BOSS = 655250; public static final int HP_VOLCANO_FOUR_GUARD = 3000; public static final int HP_VOLCANO_FOUR_BOSS = 950485; public static final int HP_VOLCANO_FIVE_GUARD = 50000; public static final int HP_VOLCANO_FIVE_MIDGUARD = 100000; public static final int HP_VOLCANO_FIVE_BOSS = 220000; public static final int HP_VOLCANO_HK_SOLDIER = 14000; public static final int HP_VOLCANO_HK_SQUAD_LEADER = 20000; public static final int HP_VOLCANO_HK_RISEN_GUARD = 22525; public static final int HP_VOLCANO_HK_BEETLE = 9000; public static final int HP_VOLCANO_HK_SEPTIPOD = 75250; public static final int HP_VOLCANO_HK_CWW = 55855; public static final int HP_VOLCANO_HK47 = 545852; public static final int HP_SHER_KAR = 885000; public static final int HP_SHER_KAR_CONSORT = 225000; public static final int HP_SHER_KARLING = 65400; public static final int HP_SHER_KAR_PRAETORIAN = 120000; public static final int HP_SHER_KAR_LIFESAPPER = 95000; public static final int HP_AKXVA_NANDINA = 245440; public static final int HP_AXKVA_GORVO = 614525; public static final int HP_AXKVA_LILLI_HI = 599258; public static final int HP_AXKVA_KIMARU = 818125; public static final int HP_AXKVA_SUIN = 1012400; public static final int HP_AXKVA = 1305858; public static final int HP_EXAR_OPEN = 515325; public static final int HP_EXAR_MINDER = 623145; public static final int HP_EXAR_LURESH = 355245; public static final int HP_EXAR_VINRITH = 255454; public static final int HP_EXAR_CLOSED = 1485235; public static final int HP_UNCLE_JOE = 818125; public static final int HP_JOES_ADDS = 355325; public static final int TIME_UPLINK_WIN = 60*60*2; public static final int TIME_DECREPIT_ADD = 60*90*1; public static final int TIME_DECREPIT_WIN = 60*60*3; public static final int TIME_BATTLEFIELD_WIN = 60*60*3; public static final int TIME_WORKING_ADD = 60*60*2; public static final int TIME_WORKING_WIN = 60*60*6; public static final int TIME_VOLCANO_ADD = 60*60*2; public static final int TIME_VOLCANO_WIN = 60*60*12; public static final int TIME_MONSTER_WIN = 60*60*20; public static final String[] HEROIC_TOKENS = { "item_heroic_token_axkva_01_01", "item_heroic_token_tusken_01_01", "item_heroic_token_ig88_01_01", "item_heroic_token_black_sun_01_01", "item_heroic_token_exar_01_01", "item_heroic_token_echo_base_01_01", "item_battlefield_rebel_token_massassi_isle", "item_battlefield_imperial_token_massassi_isle", "item_battlefield_rebel_token_battlefield2", "item_battlefield_imperial_token_battlefield2", "item_battlefield_rebel_token_battlefield3", "item_battlefield_imperial_token_battlefield3", "item_battlefield_rebel_token_battlefield4", "item_battlefield_imperial_token_battlefield4", "item_pgc_token_01", "item_pgc_token_02", "item_pgc_token_03" }; public static final int NUM_HEROIC_TOKEN_TYPES = 17; public static final String KIMARU_HATE_LIST = "kimaru_hate_list"; public static final String WP_DATA = "nearPoint"; public static final String PROT_CHILD = "protected_data"; public static final String PROT_CHILD_ARRAY = "protected_data.child_array"; public static final String PROT_CHILD_KEY_LIST = "protected_data.key_list"; public static final String PATROL_PATH_FULL_DATA = "all_instance_patrol_path"; public static final String SEQUENCER_PATH_DATA = "sequencer_path_data"; public static void initializeBox(obj_id self) throws InterruptedException { int[] tokenTypes = new int[trial.NUM_HEROIC_TOKEN_TYPES]; for (int i = 0; i < trial.NUM_HEROIC_TOKEN_TYPES; i++) { testAbortScript(); tokenTypes[i] = 0; } setObjVar(self, "item.set.tokens_held", tokenTypes); return; } public static void verifyBox(obj_id self) throws InterruptedException { int[] tokenTypes = getIntArrayObjVar(self, "item.set.tokens_held"); if (tokenTypes == null) { initializeBox(self); } else if (tokenTypes.length < trial.NUM_HEROIC_TOKEN_TYPES) { int[] newTokenTypes = new int[trial.NUM_HEROIC_TOKEN_TYPES]; for (int i = 0; i < trial.NUM_HEROIC_TOKEN_TYPES; i++) { testAbortScript(); newTokenTypes[i] = 0; } for (int i = 0; i < tokenTypes.length; i++) { testAbortScript(); newTokenTypes[i] = tokenTypes[i]; } setObjVar(self, "item.set.tokens_held", newTokenTypes); } return; } public static String generateNewKeyCode(obj_id dungeon) throws InterruptedException { int code = rand(100000,999999); String stringCode = Integer.toString(code); int endTime = getGameTime() + RESET_TIMER; utils.setScriptVar(dungeon, ACCESS_CODE, stringCode); utils.setScriptVar(dungeon, RESET_CODE, endTime); messageTo(dungeon, "codeResetOccured", null, 0, false); return stringCode; } public static String initializeCode(obj_id dungeon) throws InterruptedException { int code = 0; String stringCode = Integer.toString(code); int endTime = 0; utils.setScriptVar(dungeon, ACCESS_CODE, stringCode); utils.setScriptVar(dungeon, RESET_CODE, endTime); return stringCode; } public static String getKeyCode(obj_id dungeon) throws InterruptedException { dungeon = getTop(dungeon); if (!utils.hasScriptVar(dungeon, ACCESS_CODE)) { return generateNewKeyCode(dungeon); } else { return utils.getStringScriptVar(dungeon, ACCESS_CODE); } } public static int getResetTime(obj_id dungeon) throws InterruptedException { dungeon = getTop(dungeon); if (!utils.hasScriptVar(dungeon, RESET_CODE)) { generateNewKeyCode(dungeon); return utils.getIntScriptVar(dungeon, RESET_CODE); } else { return utils.getIntScriptVar(dungeon, RESET_CODE); } } public static void doCountdownTimerFlyText(obj_id terminal, int timer) throws InterruptedException { dictionary dict = new dictionary(); switch (timer) { case 10: showFlyText( terminal, new string_id(DECREPIT_STF, "ten"), 1.0f, colors.GREEN ); dict.put("timer", 9); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 9: showFlyText( terminal, new string_id(DECREPIT_STF, "nine"), 1.0f, colors.GREEN ); dict.put("timer", 8); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 8: showFlyText( terminal, new string_id(DECREPIT_STF, "eight"), 1.0f, colors.GREEN ); dict.put("timer", 7); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 7: showFlyText( terminal, new string_id(DECREPIT_STF, "seven"), 1.0f, colors.GREEN ); dict.put("timer", 6); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 6: showFlyText( terminal, new string_id(DECREPIT_STF, "six"), 1.0f, colors.GREEN ); dict.put("timer", 5); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 5: showFlyText( terminal, new string_id(DECREPIT_STF, "five"), 1.0f, colors.GREEN ); dict.put("timer", 4); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 4: showFlyText( terminal, new string_id(DECREPIT_STF, "four"), 1.0f, colors.GREEN ); dict.put("timer", 3); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 3: showFlyText( terminal, new string_id(DECREPIT_STF, "three"), 1.0f, colors.GREEN ); dict.put("timer", 2); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 2: showFlyText( terminal, new string_id(DECREPIT_STF, "two"), 1.0f, colors.GREEN ); dict.put("timer", 1); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; case 1: showFlyText( terminal, new string_id(DECREPIT_STF, "one"), 1.0f, colors.GREEN ); dict.put("timer", 0); messageTo(terminal, "showStatusFlyText", dict, 1, false); return; } } public static boolean isTrapActive(obj_id dungeon) throws InterruptedException { dungeon = getTop(dungeon); boolean triggered = true; if (utils.hasScriptVar(dungeon, TRAP_STATE)) { return utils.getBooleanScriptVar(dungeon, TRAP_STATE); } else { return false; } } public static boolean isTrapPrimed(obj_id dungeon) throws InterruptedException { dungeon = getTop(dungeon); obj_id[] sensors = getObjectsInDungeonWithScript(dungeon, "theme_park.dungeon.mustafar_trials.decrepit_droid_factory.trap_terminal_scanner"); if (sensors == null || sensors.length == 0) { doLogging("isTrapPrimed", "Sensor list was null or empty"); return false; } boolean primed = false; for (int i=0; i 0) { for (int k=0; k 0) { return convertedArray; } else { return null; } } public static obj_id[] getValidTargetsInDungeon(obj_id dungeon) throws InterruptedException { obj_id[] players = getPlayersInDungeon(dungeon); obj_id[] pets = getObjectsInDungeonWithScript(dungeon, "ai.pet"); Vector validTargets = new Vector(); validTargets.setSize(0); if (players != null && players.length > 0) { for (int i=0; i 0) { for (int q=0; q 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int k=0; k 0) { for (int i=0; i 0) { for (int k=0; k -1; q--) { testAbortScript(); newPpl.add(ppl[q]); } for (int r=0; r 0) { dictionary path_data = utils.hasScriptVar(kitParent, trial.SEQUENCER_PATH_DATA) ? utils.getDictionaryScriptVar(kitParent, trial.SEQUENCER_PATH_DATA) : null; if (path_data != null && !path_data.isEmpty()) { utils.setScriptVar(npc, trial.SEQUENCER_PATH_DATA, utils.getDictionaryScriptVar(kitParent, trial.SEQUENCER_PATH_DATA)); } setObjVar(npc, "patrol_path", patrol); setHibernationDelay(npc, 3600.0f); removeObjVar(npc, gcw.GCW_ENTERTAINMENT_FLAG); aiEquipPrimaryWeapon(npc); } else { utils.setScriptVar(patrolPoint, gcw.GCW_NPC_SCRIPTVAR_FLAG, npc); } attachScript(npc, "systems.dungeon_sequencer.ai_controller"); return npc; } public static boolean addNonInstanceFactionParticipant(obj_id who, obj_id target) throws InterruptedException { if (!isIdValid(who) || !exists(who) || !isPlayer(who) || !isIdValid(target) || !exists(target)) { return false; } if (gcw.getGcwCityInvasionPhase(target) <= 0) { CustomerServiceLog("gcw_city_invasion", "trial.addNonInstanceFactionParticipant: Player: "+who+" could not be added as a participant because the parent object did not have vars for combat or construction phase."); return false; } obj_id parent = trial.getParent(target); if (!isIdValid(parent) || !exists(parent)) { return false; } obj_id lastParent = null; while (!hasScript(parent, "systems.dungeon_sequencer.sequence_controller") && parent != lastParent) { testAbortScript(); lastParent = parent; parent = trial.getParent(parent); if (!isIdValid(parent) || !exists(parent)) { return false; } } String participantScriptVar = ""; if (factions.isRebelorRebelHelper(who)) { participantScriptVar = "gcw.rebel.participants"; } else if (factions.isImperialorImperialHelper(who)) { participantScriptVar = "gcw.imperial.participants"; } if (participantScriptVar == null || participantScriptVar.length() < 1) { CustomerServiceLog("gcw_city_invasion", "trial.addNonInstanceFactionParticipant: Player: "+who+" did not have the faction affiliation needed to be added to a participant list."); return false; } Vector sideParticipants = new Vector(); sideParticipants.setSize(0); if (utils.hasScriptVar(parent, participantScriptVar)) { sideParticipants = utils.getResizeableObjIdArrayScriptVar(parent, participantScriptVar); if (sideParticipants != null && utils.isElementInArray(sideParticipants, who)) { CustomerServiceLog("gcw_city_invasion", "trial.addNonInstanceFactionParticipant: Player: "+who+" was already on the list as a paricipant so the operation was aborted."); return false; } } utils.addElement(sideParticipants, who); utils.setScriptVar(parent, participantScriptVar, sideParticipants); return true; } public static boolean removeNonInstanceFactionParticipant(obj_id who, obj_id target) throws InterruptedException { if (!isIdValid(who) || !exists(who) || !isPlayer(who) || !isIdValid(target) || !exists(target)) { return false; } obj_id parent = trial.getParent(target); if (!isIdValid(parent) || !exists(parent)) { return false; } obj_id lastParent = null; while (!hasScript(parent, "systems.dungeon_sequencer.sequence_controller") && parent != lastParent) { testAbortScript(); lastParent = parent; parent = trial.getParent(parent); if (!isIdValid(parent) || !exists(parent)) { return false; } } String participantScriptVar = ""; if (factions.isRebelorRebelHelper(who)) { participantScriptVar = "gcw.rebel.participants"; } else if (factions.isImperialorImperialHelper(who)) { participantScriptVar = "gcw.imperial.participants"; } if (participantScriptVar == null || participantScriptVar.length() < 1) { return false; } Vector sideParticipants = new Vector(); sideParticipants.setSize(0); if (utils.hasScriptVar(parent, participantScriptVar)) { sideParticipants = utils.getResizeableObjIdArrayScriptVar(parent, participantScriptVar); if (sideParticipants != null && !utils.isElementInArray(sideParticipants, who)) { return false; } } LOG("participant_credit", "removeNonInstanceFactionParticipant green light to remove from list: "+participantScriptVar); LOG("participant_credit", "removeNonInstanceFactionParticipant sideParticipants.length: "+sideParticipants.size()); utils.removeElement(sideParticipants, who); if (sideParticipants.size() == 0) { utils.removeScriptVar(parent, participantScriptVar); return true; } else if (utils.setScriptVar(parent, participantScriptVar, sideParticipants)) { LOG("participant_credit", "removeNonInstanceFactionParticipant this should have worked. sideParticipants.length: "+sideParticipants.size()); return true; } LOG("participant_credit", "removeNonInstanceFactionParticipant failed to set script var"); return false; } public static boolean isNonInstanceFactionParticipant(obj_id who, obj_id target) throws InterruptedException { LOG("participant_credit", "isNonInstanceFactionParticipant init for who: "+who); if (!isIdValid(who) || !exists(who) || !isPlayer(who) || !isIdValid(target) || !exists(target)) { return false; } obj_id parent = trial.getParent(target); if (!isIdValid(parent) || !exists(parent)) { return false; } LOG("participant_credit", "isNonInstanceFactionParticipant parent of: "+target+" is "+parent); obj_id lastParent = null; while (!hasScript(parent, "systems.dungeon_sequencer.sequence_controller") && parent != lastParent) { testAbortScript(); lastParent = parent; parent = trial.getParent(parent); if (!isIdValid(parent) || !exists(parent)) { return false; } } String participantScriptVar = ""; if (factions.isRebelorRebelHelper(who)) { participantScriptVar = "gcw.rebel.participants"; } else if (factions.isImperialorImperialHelper(who)) { participantScriptVar = "gcw.imperial.participants"; } LOG("participant_credit", "isNonInstanceFactionParticipant participantScriptVar: "+participantScriptVar); if (participantScriptVar == null || participantScriptVar.length() < 1) { return false; } Vector sideParticipants = new Vector(); sideParticipants.setSize(0); if (utils.hasScriptVar(parent, participantScriptVar)) { sideParticipants = utils.getResizeableObjIdArrayScriptVar(parent, participantScriptVar); if (sideParticipants != null && !utils.isElementInArray(sideParticipants, who)) { return false; } LOG("participant_credit", "isNonInstanceFactionParticipant sideParticipants.length: "+sideParticipants.size()); for (int i = 0; i < sideParticipants.size(); i++) { testAbortScript(); if (!isValidId(((obj_id)(sideParticipants.get(i))))) { LOG("participant_credit", "isNonInstanceFactionParticipant sideParticipant not valid: "+((obj_id)(sideParticipants.get(i)))); continue; } LOG("participant_credit", "isNonInstanceFactionParticipant valid sideParticipant: "+((obj_id)(sideParticipants.get(i)))); if (((obj_id)(sideParticipants.get(i))) != who) { LOG("participant_credit", "isNonInstanceFactionParticipant sideParticipant: "+((obj_id)(sideParticipants.get(i)))+" not equal to "+who); continue; } return true; } } return false; } public static Vector getNonInstanceFactionParticipants(obj_id sequencer, int faction) throws InterruptedException { if (!isIdValid(sequencer) || !exists(sequencer)) { CustomerServiceLog("gcw_city_invasion", "trial.getNonInstanceFactionParticipants: Sequencer was invalid. Returning NULL."); return null; } if (!hasScript(sequencer, "systems.dungeon_sequencer.sequence_controller")) { CustomerServiceLog("gcw_city_invasion", "trial.getNonInstanceFactionParticipants: Sequencer did not have the sequence controller script. Returning NULL."); return null; } String participantScriptVar = ""; if (factions.FACTION_FLAG_REBEL == faction) { participantScriptVar = "gcw.rebel.participants"; } else if (factions.FACTION_FLAG_IMPERIAL == faction) { participantScriptVar = "gcw.imperial.participants"; } if (participantScriptVar == null || participantScriptVar.length() <= 0) { CustomerServiceLog("gcw_city_invasion", "trial.getNonInstanceFactionParticipants: Participant list not found. Returning NULL."); return null; } if (utils.hasScriptVar(sequencer, participantScriptVar)) { return utils.getResizeableObjIdArrayScriptVar(sequencer, participantScriptVar); } return null; } public static void clearNonInstanceFactionParticipants(obj_id sequencer) throws InterruptedException { if (!isIdValid(sequencer) || !exists(sequencer)) { CustomerServiceLog("gcw_city_invasion", "trial.clearNonInstanceFactionParticipants: Sequencer invalid. Aborting."); return; } if (!hasScript(sequencer, "systems.dungeon_sequencer.sequence_controller")) { CustomerServiceLog("gcw_city_invasion", "trial.clearNonInstanceFactionParticipants: Sequencer did not have sequence controller script. Aborting."); return; } utils.removeScriptVar(sequencer, "gcw.rebel.participants"); utils.removeScriptVar(sequencer, "gcw.imperial.participants"); } }