From 194ffc57f702a53e61b0b752f5bfd241dbae3571 Mon Sep 17 00:00:00 2001 From: AconiteX <63141077+AconiteX@users.noreply.github.com> Date: Fri, 16 Jul 2021 11:50:06 -0400 Subject: [PATCH] WoD Mutant Rancor Lair/Boss Refactor --- .../specific_npc/mutant_rancor_boss.tab | 22 ++ .../loot/loot_types/creature/rancor_loot.tab | 50 ++-- .../loot/loot_types/theme_park/wod.tab | 3 + .../game/datatables/mob/creatures.tab | 78 +++--- .../spawning/theme_park/wod_rancor_cave.tab | 83 ++++--- .../game/script/conversation/wod_kyrisa.java | 167 ++++++++++--- .../compiled/game/script/library/combat.java | 19 ++ .../theme_park/dungeon/generic_spawner.java | 25 ++ .../wod/corrupted_rancor_cage_controller.java | 102 ++++++++ .../wod/corrupted_rancor_mutation_npc.java | 235 ++++++++++++++++++ .../theme_park/wod/mutant_rancor_npc.java | 44 ++++ .../wod/wod_mutant_rancor_combat.java | 229 ----------------- 12 files changed, 685 insertions(+), 372 deletions(-) create mode 100644 sku.0/sys.server/compiled/game/datatables/loot/loot_items/specific_npc/mutant_rancor_boss.tab create mode 100644 sku.0/sys.server/compiled/game/datatables/loot/loot_types/theme_park/wod.tab create mode 100644 sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_cage_controller.java create mode 100644 sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_mutation_npc.java create mode 100644 sku.0/sys.server/compiled/game/script/theme_park/wod/mutant_rancor_npc.java delete mode 100644 sku.0/sys.server/compiled/game/script/theme_park/wod/wod_mutant_rancor_combat.java diff --git a/sku.0/sys.server/compiled/game/datatables/loot/loot_items/specific_npc/mutant_rancor_boss.tab b/sku.0/sys.server/compiled/game/datatables/loot/loot_items/specific_npc/mutant_rancor_boss.tab new file mode 100644 index 000000000..cfd510dfb --- /dev/null +++ b/sku.0/sys.server/compiled/game/datatables/loot/loot_items/specific_npc/mutant_rancor_boss.tab @@ -0,0 +1,22 @@ +strItemType +s +item_wod_bossloot_ns_bracer +item_wod_bossloot_smc_bicep_l +item_wod_bossloot_smc_bicep_l +item_wod_bossloot_smc_bicep_l +item_wod_bossloot_smc_bicep_l +item_wod_bossloot_smc_bicep_r +item_wod_bossloot_smc_bicep_r +item_wod_bossloot_smc_bicep_r +item_wod_bossloot_smc_bicep_r +item_wod_bossloot_smc_bracer_l +item_wod_bossloot_smc_bracer_l +item_wod_bossloot_smc_bracer_r +item_wod_bossloot_smc_bracer_r +item_treasure_map_81_90 +item_treasure_map_81_90 +object/tangible/component/weapon/vibro_unit_nightsister.iff +dynamic_armor_boss +dynamic_armor_boss +dynamic_clothing_boss +dynamic_clothing_boss diff --git a/sku.0/sys.server/compiled/game/datatables/loot/loot_types/creature/rancor_loot.tab b/sku.0/sys.server/compiled/game/datatables/loot/loot_types/creature/rancor_loot.tab index 0f10a9949..a287c21f0 100755 --- a/sku.0/sys.server/compiled/game/datatables/loot/loot_types/creature/rancor_loot.tab +++ b/sku.0/sys.server/compiled/game/datatables/loot/loot_types/creature/rancor_loot.tab @@ -1,25 +1,25 @@ -rancor_81_90 bull_rancor_81_90 rancor_monstrous_brute_81_90 enraged_rancor_81_90 enraged_bull_rancor_81_90 -s s s s s -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss -cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss -cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard -cash_loot/creature_cash_loot_81_90 crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal -cash_loot/creature_cash_loot_81_90 wearables/jedi_robes_high wearables/jedi_robes_high wearables/jedi_robes_high wearables/jedi_robes_high -cash_loot/creature_cash_loot_81_90 -cash_loot/creature_cash_loot_81_90 -consumables/simple_consumables_81_90 -consumables/simple_consumables_81_90 -consumables/simple_consumables_81_90 -weapons/ranged_81_90 -weapons/melee_81_90 +rancor_81_90 bull_rancor_81_90 rancor_monstrous_brute_81_90 enraged_rancor_81_90 enraged_bull_rancor_81_90 mutant_rancor_81_90 +s s s s s s +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard wearables/dynamic_clothing_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard wearables/dynamic_armor_standard +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss wearables/dynamic_armor_boss +cash_loot/creature_cash_loot_81_90 wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss wearables/dynamic_clothing_boss +cash_loot/creature_cash_loot_81_90 wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard wearables/dynamic_armor_jedi_standard +cash_loot/creature_cash_loot_81_90 crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal crafting_loot/saber_crystals_medium:power_crystal +cash_loot/creature_cash_loot_81_90 wearables/jedi_robes_high wearables/jedi_robes_high wearables/jedi_robes_high wearables/jedi_robes_high wearables/jedi_robes_high +cash_loot/creature_cash_loot_81_90 cash_loot/creature_cash_loot_81_90 +cash_loot/creature_cash_loot_81_90 cash_loot/creature_cash_loot_81_90 +consumables/simple_consumables_81_90 crafting_loot/weapon_components:wp_comp_81_90 +consumables/simple_consumables_81_90 crafting_loot/weapon_components:wp_comp_81_90 +consumables/simple_consumables_81_90 crafting_loot/saber_crystals_high:power_crystal +weapons/ranged_81_90 +weapons/melee_81_90 diff --git a/sku.0/sys.server/compiled/game/datatables/loot/loot_types/theme_park/wod.tab b/sku.0/sys.server/compiled/game/datatables/loot/loot_types/theme_park/wod.tab new file mode 100644 index 000000000..3bf8b8b97 --- /dev/null +++ b/sku.0/sys.server/compiled/game/datatables/loot/loot_types/theme_park/wod.tab @@ -0,0 +1,3 @@ +mutant_rancor_boss spider_queen_consort spider_queen_guard spider_queen_boss +s s s s +specific_npc/mutant_rancor_boss diff --git a/sku.0/sys.server/compiled/game/datatables/mob/creatures.tab b/sku.0/sys.server/compiled/game/datatables/mob/creatures.tab index 2e134cb8e..2cc18933b 100755 --- a/sku.0/sys.server/compiled/game/datatables/mob/creatures.tab +++ b/sku.0/sys.server/compiled/game/datatables/mob/creatures.tab @@ -3495,7 +3495,7 @@ mutant_bark_mite_queen 30 5 1 0 0 NORMAL rori mutant_bark_mite bark_mite_hue mutant_bark_mite_soldier 20 4 2 0 0 NORMAL rori mutant_bark_mite bark_mite_hue.iff 5.7 6 3 30 30 -1 20 20 -1 -1 -1 2 1 25 meat_insect 20 hide_bristley defaultProfile creature/insect_11_20 generic_creature_2 18 bark_mite carnivore object/weapon/ranged/creature/creature_spit_large_toxicgreen.iff object/weapon/ranged/creature/creature_spit_large_toxicgreen.iff roach_2 roach_2 6 6 1 yes mutant_bark_mite_worker 8 2 4 0 -2 NORMAL rori mutant_bark_mite bark_mite_hue.iff 3.5 4 3 5 5 0 0 0 0 0 -1 2 1 15 meat_insect 10 hide_bristley defaultProfile creature/insect_1_10 generic_creature_1 18 bark_mite carnivore roach_1 roach_1 4 4 1 yes mutant_baz_nitch 63 0 0 0 0 NORMAL dathomir baz_nitch baz_nitch_hue.iff 1 1.5 1 0 0 0 0 0 0 0 0 2 1 5 meat_wild 3 hide_leathery 3 bone_mammal defaultProfile creature/creature_61_70 generic_creature_7 housing_improvement_04,col_story_count_dooku_set_1,col_story_count_dooku_set_2,col_glass_shelving_02 0.1 highAttackDamageAvg herbivore turkey_4 turkey_4 12 12 instant -mutant_rancor 89 0 0 0 0 ELITE dathomir rancor beast_master/bm_mutated_rancor.iff 1.3 1.4 1 45 60 0 100 100 100 0 0 2 1 1020 meat_carnivore 901 hide_leathery 851 bone_mammal defaultProfile 1 80 npc/elite_npc:elite_npc_81_90 elite_creature_9 col_rancor_parts,housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_dejarik_holomonster,col_dejarik_table,col_shattered_shard_02 carnivore root_defense=100,snare_defense=100 gorilla_5 gorilla_5 5 5 1 +mutant_rancor 89 0 0 0 0 ELITE dathomir rancor beast_master/bm_mutated_rancor.iff 1.3 1.4 1 45 60 0 100 100 100 0 0 2 1 1020 meat_carnivore 901 hide_leathery 851 bone_mammal defaultProfile 2 80 creature/rancor_loot:mutant_rancor_81_90 elite_creature_8 col_rancor_parts,housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_dejarik_holomonster,col_dejarik_table,col_shattered_shard_02 carnivore root_defense=100,snare_defense=100 theme_park.wod.mutant_rancor_npc gorilla_5 gorilla_5 5 5 1 mutant_womprat 12 0 -1 0 -4 NORMAL Tatooine - to be sorted tatooine womprat womp_rat_hue.iff 1.2 1.6 2 10 15 0 0 0 0 15 -1 2 1 6 meat_wild 5 hide_leathery 4 bone_mammal defaultProfile creature/creature_11_20 generic_creature_2 18 womprat 0.15 lowAttackAbilityWeak carnivore rat_1 rat_1 6 2 mutated_borgax_mount 1 0 0 0 0 NORMAL tatooine bioengineer beast_master/bm_mutated_borgax.iff 1 1 4 0 0 0 0 0 0 0 0 2 defaultProfile creature/creature_1_10 herbivore 0 2 mutated_cu_pa_mount 1 0 0 0 0 NORMAL tatooine bioengineer beast_master/bm_mutated_cu_pa.iff 1.25 1.25 4 0 0 0 0 0 0 0 0 2 defaultProfile creature/creature_1_10 herbivore 0 2 @@ -6701,9 +6701,9 @@ vendor_bm_0 100 0 0 0 0 ELITE anywhere jabba vendor_bm_0.iff 1 1 0 0 0 0 vendor_bm_1 100 0 0 0 0 ELITE anywhere jabba vendor_bm_1.iff 1 1 0 0 0 0 0 0 0 0 -1 2 0 0 npc 1 string:item.vendor.vendor_table=bm_vendor_1,int:ai.noClap=1 npc.vendor.vendor,conversation.bm_vendor 0 0 vendor_bm_2 100 0 0 0 0 ELITE anywhere jabba vendor_bm_2.iff 1 1 0 0 0 0 0 0 0 0 -1 2 0 0 npc 1 string:item.vendor.vendor_table=bm_vendor_2,int:ai.noClap=1 npc.vendor.vendor,conversation.bm_vendor vendor_bm_3 100 0 0 0 0 ELITE anywhere jabba vendor_bm_3.iff 1 1 0 0 0 0 0 0 0 0 -1 2 0 0 npc 1 string:item.vendor.vendor_table=bm_vendor_3,int:ai.noClap=1 npc.vendor.vendor,conversation.bm_vendor -wod_spider_queen_guard 91 0 0 0 5 BOSS dathomir spider_nightsister spider_nightsister razor_angler_hue.iff 2.8 2.8 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 3 100 npc/boss_npc:boss_npc_81_90 boss_npc_9 col_shattered_shard_02 18 nightsister carnivore int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_razor_angler_dna -wod_spider_queen_consort 92 0 0 0 5 ELITE dathomir spider_nightsister spider_nightsister spider_queen_consort.iff 2.9 2.9 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 3 100 npc/boss_npc:boss_npc_81_90 boss_npc_9 col_shattered_shard_02 18 nightsister carnivore int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_spiderclan_consort_dna -wod_spider_queen_boss 96 5 5 0 5 BOSS dathomir spider_nightsister spider_nightsister angler_queen.iff 4.2 4.5 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 3 100 npc/boss_npc:boss_npc_81_90 boss_npc_9 col_shattered_shard_02 18 nightsister carnivore 100 100 100 100 expertise_glancing_blow_reduction=100,expertise_glancing_blow_ranged=100 int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_spiderclan_queen_dna +wod_spider_queen_guard 91 0 0 0 5 BOSS dathomir spider_nightsister spider_nightsister razor_angler_hue.iff 2.8 2.8 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 1 100 theme_park/wod:spider_queen_guard col_shattered_shard_02 18 nightsister carnivore int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_razor_angler_dna +wod_spider_queen_consort 92 0 0 0 5 ELITE dathomir spider_nightsister spider_nightsister spider_queen_consort.iff 2.9 2.9 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 1 100 theme_park/wod:spider_queen_consort col_shattered_shard_02 18 nightsister carnivore int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_spiderclan_consort_dna +wod_spider_queen_boss 96 5 5 0 5 BOSS dathomir spider_nightsister spider_nightsister angler_queen.iff 4.2 4.5 3 0 60 0 100 100 100 0 0 2 1 1100 meat_carnivore 1000 hide_leathery 950 bone_mammal defaultProfile 3 100 theme_park/wod:spider_queen_boss col_shattered_shard_02 18 nightsister carnivore 100 100 100 100 expertise_glancing_blow_reduction=100,expertise_glancing_blow_ranged=100 int:bm_doNotShowExamineInfo=1 generic_creature_special_6 generic_creature_special_6 12 12 instant 15.0 item_spiderclan_queen_dna binjinphant_forest_small 64 0 0 0 0 NORMAL endor binjinphant beast_master/bm_binjinphant.iff 0.3 0.6 1 0 0 0 0 0 0 0 -1 2 1 meat_reptilian hide_scaley bone_mammal defaultProfile 1 100 creature/creature_61_70 generic_creature_7 housing_improvement_04,col_story_count_dooku_set_1,col_story_count_dooku_set_2,col_glass_shelving_02 medAttackUtilityAvg carnivore object/weapon/ranged/creature/creature_spit_large_green.iff object/weapon/ranged/creature/creature_spit_large_green.iff mantis_4 mantis_4 12 12 yes binjinphant_forest_medium 66 0 0 0 0 NORMAL endor binjinphant beast_master/bm_binjinphant.iff 0.9 1.1 1 0 0 0 0 0 0 0 -1 2 1 meat_reptilian hide_scaley bone_mammal defaultProfile 1 100 creature/creature_61_70 generic_creature_7 housing_improvement_04,col_story_count_dooku_set_1,col_story_count_dooku_set_2,col_glass_shelving_02 medAttackUtilityAvg carnivore object/weapon/ranged/creature/creature_spit_large_green.iff object/weapon/ranged/creature/creature_spit_large_green.iff mantis_4 mantis_4 12 12 yes binjinphant_forest_large 68 0 0 0 0 NORMAL endor binjinphant beast_master/bm_binjinphant.iff 1.3 1.6 1 0 0 0 0 0 0 0 -1 2 1 meat_reptilian hide_scaley bone_mammal defaultProfile 1 100 creature/creature_61_70 generic_creature_7 housing_improvement_04,col_story_count_dooku_set_1,col_story_count_dooku_set_2,col_glass_shelving_02 medAttackUtilityAvg carnivore object/weapon/ranged/creature/creature_spit_large_green.iff object/weapon/ranged/creature/creature_spit_large_green.iff mantis_4 mantis_4 12 12 yes @@ -6711,41 +6711,41 @@ binjinphant_mount 1 0 0 0 0 NORMAL global binjinphant_mount beast_master/bm_ reptilian_flier_mount 1 0 0 0 0 NORMAL mount tatooine bioengineer beast_master/bm_reptilian_flier_mount.iff 1 1 0 0 0 0 0 0 0 0 0 2 defaultProfile creature/creature_1_10 herbivore 0 2 yes whisper_bird_mount 1 0 0 0 0 NORMAL mount tatooine bioengineer beast_master/bm_whisper_bird_mount.iff 1 1 0 0 0 0 0 0 0 0 0 2 defaultProfile creature/creature_1_10 herbivore 0 2 yes snorbal_mount 1 0 0 0 0 NORMAL mount tatooine bioengineer beast_master/bm_snorbal_mount.iff 1 1 0 0 0 0 0 0 0 0 0 2 defaultProfile creature/creature_1_10 herbivore 0 2 yes -wod_omogg_rep 90 0 0 0 0 NORMAL global wod dressed_wod_omogg_rep.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_omogg_rep 0 0 -wod_rubina 90 0 0 0 0 NORMAL global wod dressed_wod_rubina.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_rubina 0 0 -wod_outcast_1 90 0 0 0 0 NORMAL global wod wod_outcast_1.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast1 0 0 -wod_outcast_2 90 0 0 0 0 NORMAL global wod wod_outcast_2.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast2 0 0 -wod_outcast_3 90 0 0 0 0 NORMAL global wod wod_outcast_3.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast3 0 0 -wod_outcast_4 90 0 0 0 0 NORMAL global wod wod_outcast_4.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast4 0 0 -wod_outcast_5 90 0 0 0 0 NORMAL global wod wod_outcast_5.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast5 0 0 -wod_outcast_6 90 0 0 0 0 NORMAL global wod wod_outcast_6.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast6 0 0 -wod_outcast_7 90 0 0 0 0 NORMAL global wod wod_outcast_7.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast7 0 0 -wod_gatekeeper_saik 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_guardian.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_guide 0 0 -wod_spellweaver_leandra 90 0 0 0 0 NORMAL global wod dressed_herald_dathomir_nsister_cave_leandra.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_leandra 0 0 -wod_satra_herbalist 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_herbalist.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_witch_herbs 0 0 -wod_ns_vendor 90 0 0 0 0 NORMAL global wod npc_dressed_wod_ns_vendor.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 string:item.vendor.vendor_table=wod_ns_vendor,int:ai.noClap=1 npc.vendor.vendor,conversation.wod_ns_vendor 0 0 -wod_culinarian_kais 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_obfuscatrix.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_witch_food 0 0 -wod_rancor_fath 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_rancor_tamer.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_rancor_mistress 0 0 -wod_tamer_diax 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_spellweaver.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_rancor_tamer_diax 0 0 -wod_sage_num 90 0 0 0 0 NORMAL global wod dressed_dathomir_nightsister_sage.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_sage 0 0 -wod_ghost_witch 90 0 0 0 0 NORMAL global wod dressed_wod_ghost_clan_mother.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ghost_witch 0 0 -wod_sm_food_vhaunda 90 0 0 0 0 NORMAL global wod dressed_vhaunda.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_witch_food 0 0 -wod_sm_azzenaj 90 0 0 0 0 NORMAL global wod dressed_herald_dathomir_nsister_cave_azzenaj.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_azzenaj 0 0 -wod_sm_herbalist_telo 90 0 0 0 0 NORMAL global wod dressed_dathomir_sing_mt_clan_herbalist.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_witch_herbs 0 0 -wod_sm_vurlene 90 0 0 0 0 NORMAL global wod dressed_vurlene.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_guide 0 0 -wod_sm_rancor_handler_izaryx 90 0 0 0 0 NORMAL global wod dressed_izaryx.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_rancor_handler_izaryx 0 0 -wod_sm_rancor_tamer_zideera 90 0 0 0 0 NORMAL global wod wod_sm_rancor_handler.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_rancor_tamer_zideera 0 0 -wod_sm_sage_ha'zel 90 0 0 0 0 NORMAL global wod dressed_dathomir_sing_mt_clan_sage.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_sage 0 0 -wod_sm_klee 90 0 0 0 0 NORMAL global wod dressed_aujante_klee.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_klee 0 0 -wod_sm_vendor 90 0 0 0 0 NORMAL global wod dressed_wod_sm_vendor.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 string:item.vendor.vendor_table=wod_sm_vendor,int:ai.noClap=1 npc.vendor.vendor,conversation.wod_sm_vendor 0 0 +wod_omogg_rep 90 0 0 0 0 NORMAL dathomir wod dressed_wod_omogg_rep.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_omogg_rep 0 0 +wod_rubina 90 0 0 0 0 NORMAL dathomir wod dressed_wod_rubina.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_rubina 0 0 +wod_outcast_1 90 0 0 0 0 NORMAL dathomir wod wod_outcast_1.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast1 0 0 +wod_outcast_2 90 0 0 0 0 NORMAL dathomir wod wod_outcast_2.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast2 0 0 +wod_outcast_3 90 0 0 0 0 NORMAL dathomir wod wod_outcast_3.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast3 0 0 +wod_outcast_4 90 0 0 0 0 NORMAL dathomir wod wod_outcast_4.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast4 0 0 +wod_outcast_5 90 0 0 0 0 NORMAL dathomir wod wod_outcast_5.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast5 0 0 +wod_outcast_6 90 0 0 0 0 NORMAL dathomir wod wod_outcast_6.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast6 0 0 +wod_outcast_7 90 0 0 0 0 NORMAL dathomir wod wod_outcast_7.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_outcast7 0 0 +wod_gatekeeper_saik 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_guardian.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_guide 0 0 +wod_spellweaver_leandra 90 0 0 0 0 NORMAL dathomir wod dressed_herald_dathomir_nsister_cave_leandra.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_leandra 0 0 +wod_satra_herbalist 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_herbalist.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_witch_herbs 0 0 +wod_ns_vendor 90 0 0 0 0 NORMAL dathomir wod npc_dressed_wod_ns_vendor.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 string:item.vendor.vendor_table=wod_ns_vendor,int:ai.noClap=1 npc.vendor.vendor,conversation.wod_ns_vendor 0 0 +wod_culinarian_kais 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_obfuscatrix.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_witch_food 0 0 +wod_rancor_fath 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_rancor_tamer.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_rancor_mistress 0 0 +wod_tamer_diax 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_spellweaver.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_rancor_tamer_diax 0 0 +wod_sage_num 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_nightsister_sage.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ns_sage 0 0 +wod_ghost_witch 90 0 0 0 0 NORMAL dathomir wod dressed_wod_ghost_clan_mother.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_ghost_witch 0 0 +wod_sm_food_vhaunda 90 0 0 0 0 NORMAL dathomir wod dressed_vhaunda.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_witch_food 0 0 +wod_sm_azzenaj 90 0 0 0 0 NORMAL dathomir wod dressed_herald_dathomir_nsister_cave_azzenaj.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_azzenaj 0 0 +wod_sm_herbalist_telo 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_sing_mt_clan_herbalist.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_witch_herbs 0 0 +wod_sm_vurlene 90 0 0 0 0 NORMAL dathomir wod dressed_vurlene.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_guide 0 0 +wod_sm_rancor_handler_izaryx 90 0 0 0 0 NORMAL dathomir wod dressed_izaryx.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_rancor_handler_izaryx 0 0 +wod_sm_rancor_tamer_zideera 90 0 0 0 0 NORMAL dathomir wod wod_sm_rancor_handler.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_rancor_tamer_zideera 0 0 +wod_sm_sage_ha'zel 90 0 0 0 0 NORMAL dathomir wod dressed_dathomir_sing_mt_clan_sage.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_sm_sage 0 0 +wod_sm_klee 90 0 0 0 0 NORMAL dathomir wod dressed_aujante_klee.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_klee 0 0 +wod_sm_vendor 90 0 0 0 0 NORMAL dathomir wod dressed_wod_sm_vendor.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 string:item.vendor.vendor_table=wod_sm_vendor,int:ai.noClap=1 npc.vendor.vendor,conversation.wod_sm_vendor 0 0 spider_nightsister_obfuscatrix 88 5 5 0 -2 ELITE dathomir spider_nightsister spider_nightsister dressed_dathomir_spider_nightsister_spellweaver.iff 0 35 85 100 50 100 100 50 100 2 1 80 npc/elite_npc:elite_force_light_npc_71_80 elite_npc_8 4 col_jedi_holocron,col_dejarik_holomonster,col_dejarik_table,col_shattered_shard_03 18 dath_spider npc root_defense=100,snare_defense=100 force_sword force_sword_ranged jedi_no_saber_6 jedi_no_saber_6 9 3 instant -wod_rescue_initiate 90 0 0 0 0 NORMAL global wod dressed_wod_gray_outcast_01.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_rescue_initiate 0 0 -wod_spiderclan_matron 90 0 0 0 0 NORMAL global spider_nightsister spider_nightsister dressed_dathomir_spider_nightsister_matron.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_queen_mother 0 0 -wod_first_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_first_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_first_sister 0 0 -wod_second_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_second_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_second_sister 0 0 -wod_third_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_third_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_third_sister 0 0 -giant_whuffa_worm 91 0 0 0 0 ELITE dathomir wod whuffa_worm.iff 3 3 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 0 0 +wod_rescue_initiate 90 0 0 0 0 NORMAL dathomir wod dressed_wod_gray_outcast_01.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_rescue_initiate 0 0 +wod_spiderclan_matron 90 0 0 0 0 NORMAL dathomir spider_nightsister spider_nightsister dressed_dathomir_spider_nightsister_matron.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_queen_mother 0 0 +wod_first_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_first_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/elite_npc:elite_npc_81_90 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_first_sister 0 0 +wod_second_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_second_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/elite_npc:elite_npc_81_90 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_second_sister 0 0 +wod_third_sister_aggro 91 0 0 0 0 ELITE dathomir wod wod_third_sister.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/elite_npc:elite_npc_81_90 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_third_sister 0 0 +giant_whuffa_worm 91 0 0 0 0 ELITE dathomir wod whuffa_worm.iff 3 3 0 0 0 0 0 0 0 0 0 2 creature/elite_creature:elite_creature_81_90 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 0 0 wod_reanimated_slave 90 0 0 0 0 NORMAL dathomir wod wod_reanimated_slave_all 0 0 100 0 100 100 100 100 100 2 1 80 npc/elite_npc:elite_force_dark_npc_81_90 elite_npc_9 col_nightsister_valuables,col_sith_holocron,col_dejarik_holomonster,col_dejarik_table,col_shattered_shard_02 18 nightsister npc root_defense=100,snare_defense=100 force_sword force_sword_ranged jedi_no_saber_6 jedi_no_saber_6 8 8 1 instant wod_reanimated_witch 90 0 0 0 0 NORMAL dathomir wod wod_reanimated_witch_all 0 0 100 0 100 100 100 100 100 2 1 80 npc/elite_npc:elite_force_dark_npc_81_90 elite_npc_9 col_nightsister_valuables,col_sith_holocron,col_dejarik_holomonster,col_dejarik_table,col_shattered_shard_02 18 nightsister npc root_defense=100,snare_defense=100 force_sword force_sword_ranged jedi_no_saber_6 jedi_no_saber_6 8 8 1 instant -wod_kyrisa 90 0 0 0 0 NORMAL global wod kyrisa.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_kyrisa 0 0 -wod_mutant_rancor_boss 95 4 0 0 0 BOSS dathomir wod beast_master/bm_mutated_rancor.iff 1.5 1.5 16 50 65 0 100 100 100 0 0 2 0 defaultProfile 3 90 creature/worldboss:generic_boss 50 wod_mutant_rancor_boss carnivore 100 100 100 100 expertise_glancing_blow_reduction=100,expertise_glancing_blow_ranged=100 int:bm_doNotShowExamineInfo=1 theme_park.wod.wod_mutant_rancor_combat wod_mutant_rancor_boss wod_mutant_rancor_boss 18 9 instant +wod_kyrisa 90 0 0 0 0 NORMAL dathomir wod kyrisa.iff 1 1 0 0 0 0 0 0 0 0 0 2 npc/npc_81_90 generic_npc_9 housing_improvement_01,housing_improvement_02,housing_improvement_03,housing_improvement_04,housing_improvement_05,col_story_count_dooku_set_3,col_aurebesh_tiles npc 1 conversation.wod_kyrisa 0 0 +wod_mutant_rancor_boss 95 4 0 0 0 BOSS dathomir rancor wod_mutant_rancor_boss.iff 1.4 1.4 16 50 65 0 100 100 100 0 0 2 0 25000 50000 2 100 theme_park/wod:mutant_rancor_boss carnivore 100 100 100 100 expertise_glancing_blow_reduction=100,expertise_glancing_blow_ranged=100 int:bm_doNotShowExamineInfo=1 wod_mutant_rancor_boss wod_mutant_rancor_boss 18 9 instant diff --git a/sku.0/sys.server/compiled/game/datatables/spawning/theme_park/wod_rancor_cave.tab b/sku.0/sys.server/compiled/game/datatables/spawning/theme_park/wod_rancor_cave.tab index 653a1ad97..da087dc54 100644 --- a/sku.0/sys.server/compiled/game/datatables/spawning/theme_park/wod_rancor_cave.tab +++ b/sku.0/sys.server/compiled/game/datatables/spawning/theme_park/wod_rancor_cave.tab @@ -1,42 +1,45 @@ spawns room loc_x loc_y loc_z yaw script respawn_time spawn_objvar mood animation_mood special_room special_room_script room_objvar room_objvar_name room_objvar_value name s s f f f f s i s s s s s s s s s -bull_rancor r2 -8.601428 -30.804699 -30.050392 168.0609 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -bull_rancor r3 -8.773282 -40.377964 -74.00169 -2.7895324 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -bull_rancor r3 10.08469 -40.407578 -77.78322 -46.77785 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r4 30.987892 -45.1194 -52.411663 -124.901 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r4 44.557434 -46.09163 -96.00456 -52.613297 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r4 31.869045 -45.31506 -99.373474 64.39554 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r5 -7.775675 -45.58035 -146.06969 27.483908 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r5 -10.2257185 -44.64295 -135.90567 123.38395 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -bull_rancor r5 65.13616 -46.42392 -125.28311 -135.56181 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r5 53.660378 -56.415306 -178.17778 -31.897173 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r5 62.111526 -57.66139 -171.04495 -68.80876 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r5 45.043747 -56.41123 -162.11993 152.33679 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r5 29.787474 -60.09413 -182.19386 23.757977 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r7 -3.5947478 -64.07635 -235.09232 -13.363343 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r7 -23.20766 -63.702675 -255.92416 12.677673 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r7 -12.271714 -65.06 -204.91145 -0.4544657 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -bull_rancor r8 -56.259617 -69.90387 -195.56255 32.800625 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r8 -57.19804 -68.82134 -166.29263 141.7156 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -bull_rancor r8 -94.99297 -73.69129 -170.22879 95.26433 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r8 -109.13508 -69.475555 -120.326744 165.84955 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -bull_rancor r8 -98.12561 -70.41599 -118.50827 177.53352 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r8 -88.87012 -70.0929 -120.475296 -157.7134 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -58.175285 -70.141174 -83.921486 -151.09483 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -43.538574 -69.98428 -85.21597 -143.86855 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -65.71178 -68.32511 -106.71527 -48.704987 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -53.527008 -68.605965 -96.753746 -92.26262 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -14.307875 -68.92318 -96.35253 -94.83764 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r9 -43.056736 -69.45824 -110.93021 -72.1382 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r10 -19.982327 -79.477455 -143.03452 -56.011623 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r10 -27.313997 -79.95101 -148.0918 -38.419476 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -ancient_bull_rancor r10 -28.62353 -79.03438 -135.11885 161.72774 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r8 -98.52564 -69.492615 -96.1891 167.71294 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -mutant_rancor r8 -117.66265 -68.93914 -169.87744 97.14466 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -bull_rancor r8 -107.45582 -69.02593 -204.6095 89.402794 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -ancient_bull_rancor r5 24.986141 -51.253506 -141.47128 -21.8647 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -mutant_rancor r5 37.71992 -49.632626 -134.91286 -54.08176 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -bull_rancor r5 22.482597 -45.857426 -125.806305 48.529182 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -ancient_bull_rancor r4 40.524883 -45.925945 -64.20013 -46.749447 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 -wod_kyrisa r11 -88.33893 -101.26351 -108.22034 167.01736 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=1 -object/tangible/quest/wod/wod_rancor_cage.iff r11 -95.22308 -100.6459 -92.409775 169.82025 quest.task.ground.wave_event_controller_npc 900 int:event_wave_controller=1 +bull_rancor r3 -8.773282 -40.377964 -74.00169 -2.7895324 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r3 10.08469 -40.407578 -77.78322 -46.77785 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r4 30.987892 -45.1194 -52.411663 -124.901 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r4 44.557434 -46.09163 -96.00456 -52.613297 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +rancor_monstrous_brute r4 31.869045 -45.31506 -99.373474 64.39554 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 -7.775675 -45.58035 -146.06969 27.483908 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 -10.2257185 -44.64295 -135.90567 123.38395 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r5 65.13616 -46.42392 -125.28311 -135.56181 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 53.660378 -56.415306 -178.17778 -31.897173 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 62.111526 -57.66139 -171.04495 -68.80876 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 45.043747 -56.41123 -162.11993 152.33679 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +rancor_monstrous_brute r5 29.787474 -60.09413 -182.19386 23.757977 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r7 -3.5947478 -64.07635 -235.09232 -13.363343 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r7 -23.20766 -63.702675 -255.92416 12.677673 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r7 -12.271714 -65.06 -204.91145 -0.4544657 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r8 -56.259617 -69.90387 -195.56255 32.800625 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r8 -57.19804 -68.82134 -166.29263 141.7156 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r8 -94.99297 -73.69129 -170.22879 95.26433 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r8 -109.13508 -69.475555 -120.326744 165.84955 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r8 -98.12561 -70.41599 -118.50827 177.53352 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r9 -58.175285 -70.141174 -83.921486 -151.09483 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r9 -65.71178 -68.32511 -106.71527 -48.704987 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +rancor_monstrous_brute r9 -53.527008 -68.605965 -96.753746 -92.26262 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r9 -43.056736 -69.45824 -110.93021 -72.1382 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r10 -19.982327 -79.477455 -143.03452 -56.011623 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r10 -27.313997 -79.95101 -148.0918 -38.419476 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +ancient_bull_rancor r10 -28.62353 -79.03438 -135.11885 161.72774 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 +mutant_rancor r8 -98.52564 -69.492615 -96.1891 167.71294 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +mutant_rancor r8 -117.66265 -68.93914 -169.87744 97.14466 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r8 -107.45582 -69.02593 -204.6095 89.402794 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +ancient_bull_rancor r5 24.986141 -51.253506 -141.47128 -21.8647 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 +mutant_rancor r5 37.71992 -49.632626 -134.91286 -54.08176 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +bull_rancor r5 22.482597 -45.857426 -125.806305 48.529182 theme_park.dungeon.generic_death 600 int:ai.defaultCalmBehavior=2 +ancient_bull_rancor r4 40.524883 -45.925945 -64.20013 -46.749447 theme_park.dungeon.generic_death 900 int:ai.defaultCalmBehavior=2 +wod_kyrisa r11 -102.3 -99.2 -113.1 129 theme_park.dungeon.generic_death 1 string:wod.kyrisa=1 +object/tangible/quest/wod/wod_rancor_cage.iff r11 -95.22308 -100.6459 -92.409775 169.82025 1 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -96.1 -100.9 -98.2 0 0 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -85.7 -100.2 -96.9 0 0 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -104.9 -98.7 -119.8 0 0 string:wod.effect_middle_left=1 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -77.3 -99.3 -112.6 0 0 string:wod.effect_middle_right=1 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -90 -103.2 -126.9 0 0 string:wod.effect_center=1 +object/tangible/ground_spawning/patrol_waypoint.iff r8 -91.1 -99.9 -153.4 0 0 string:wod.effect_far=1 +object/tangible/ground_spawning/patrol_waypoint.iff r11 -90.8537 -100.0102 -91.8525 -156.1289 theme_park.wod.corrupted_rancor_cage_controller 0 diff --git a/sku.0/sys.server/compiled/game/script/conversation/wod_kyrisa.java b/sku.0/sys.server/compiled/game/script/conversation/wod_kyrisa.java index 6a1a3d6f9..dcba5f17f 100644 --- a/sku.0/sys.server/compiled/game/script/conversation/wod_kyrisa.java +++ b/sku.0/sys.server/compiled/game/script/conversation/wod_kyrisa.java @@ -8,18 +8,15 @@ import java.util.Hashtable; import java.util.Vector; import script.base_script; -import script.library.ai_lib; -import script.library.chat; -import script.library.conversation; -import script.library.groundquests; -import script.library.trial; -import script.library.utils; +import script.library.*; public class wod_kyrisa extends script.base_script { public wod_kyrisa() { } + public static final string_id BOSS_BEGIN = new string_id("theme_park/outbreak/outbreak", "boss_begin"); + public static final string_id BOSS_LEAVING = new string_id("theme_park/outbreak/outbreak", "boss_leaving"); public static String c_stringFile = "conversation/wod_kyrisa"; public boolean wod_kyrisa_condition__defaultCondition(obj_id player, obj_id npc) throws InterruptedException { @@ -35,21 +32,45 @@ public class wod_kyrisa extends script.base_script } public boolean wod_kyrisa_condition_bossCurrentlyBusy(obj_id player, obj_id npc) throws InterruptedException { - obj_id[] objects = trial.getObjectsInDungeonWithObjVar(npc, "event_wave_controller"); - if (objects.length < 1) - { - return true; - } - int wave = utils.getIntScriptVar(objects[0], "waveEventCurrentWave"); - return wave > 0; + return utils.getBooleanScriptVar(npc, "wod.busyNow") || !utils.getBooleanScriptVar(utils.getObjIdScriptVar(npc, "wod.cage_controller"), "wod.ready"); } public boolean wod_kyrisa_condition_playerHasNoGroup(obj_id player, obj_id npc) throws InterruptedException { - obj_id groupid = getGroupObject(player); - if (isValidId(groupid)) + if(isGod(player) || isIdValid(player)) { + sendSystemMessageTestingOnly(player, "God Mode: You are bypassing the group requirement because you are in God Mode."); return false; } + final obj_id groupId = getGroupObject(player); + if (isValidId(groupId)) + { + // The player must be grouped, there must be at least 2 players in the group, + // the 2 minimum players must be within 30m, and all players within 30m must be active + final obj_id[] members = getGroupMemberIds(groupId); + int playerCount = 0; + for (obj_id member : members) + { + if(isPlayer(member) && getDistance(player, npc) < 30f) + { + if(!isPlayerActive(member)) + { + sendSystemMessageTestingOnly(player, "All members of your group present to participate must be active and at the keyboard."); + return true; + } + playerCount++; + } + } + if(playerCount < 2) + { + sendSystemMessageTestingOnly(player, "You must have at least 2 players in your group who are in the vicinity to participate."); + return true; + } + else + { + return false; + } + } + sendSystemMessageTestingOnly(player, "You must have a group of at least 2 players to participate."); return true; } public boolean wod_kyrisa_condition_hasQuestAndGroup(obj_id player, obj_id npc) throws InterruptedException @@ -71,36 +92,46 @@ public class wod_kyrisa extends script.base_script } public void wod_kyrisa_action_sendReturnedSignalKyrisaChallenged(obj_id player, obj_id npc) throws InterruptedException { - obj_id[] objects = trial.getObjectsInDungeonWithObjVar(npc, "event_wave_controller"); - if (objects.length < 1) + dictionary d = new dictionary(); + if(isIdValid(player) || (isGod(player) && !isIdValid(getGroupObject(player)))) { - return; - } - faceTo(npc, player); - groundquests.sendSignal(player, "challengedKyrisa"); - obj_id myGroup = getGroupObject(player); - if (isValidId(myGroup)) - { - obj_id[] members = getGroupMemberIds(myGroup); - for (int i = 0; i < members.length; i++) + d.put("groupId", obj_id.NULL_ID); + d.put("groupMembers", new obj_id[]{player}); + utils.setScriptVar(npc, "wod.groupInProgress", obj_id.NULL_ID); + utils.setScriptVar(npc, "wod.groupInProgressMembers", new obj_id[]{player}); + if (groundquests.isTaskActive(player, "wod_kyrisa_boss_fight", "challengeKyrisa") || groundquests.isTaskActive(player, "wod_kyrisa_boss_fight_ns", "challengeKyrisa")) { - if (!isIdValid(members[i]) || !exists(members[i])) + groundquests.sendSignal(player, "challengedKyrisa"); + } + sendSystemMessage(player, BOSS_BEGIN); + } + else + { + final obj_id groupId = getGroupObject(player); + final obj_id[] groupMembers = getGroupMemberIds(groupId); + d.put("groupId", groupId); + d.put("groupMembers", groupMembers); + utils.setScriptVar(npc, "wod.groupInProgress", groupId); + utils.setScriptVar(npc, "wod.groupInProgressMembers", groupMembers); + for(obj_id member : groupMembers) + { + if(getDistance(npc, member) < 30f) { - continue; - } - if (getDistance(members[i], npc) > 200) - { - continue; - } - if (groundquests.isTaskActive(members[i], "wod_kyrisa_boss_fight", "challengeKyrisa") || groundquests.isTaskActive(members[i], "wod_kyrisa_boss_fight_ns", "challengeKyrisa")) - { - groundquests.sendSignal(members[i], "challengedKyrisa"); + if (groundquests.isTaskActive(member, "wod_kyrisa_boss_fight", "challengeKyrisa") || groundquests.isTaskActive(member, "wod_kyrisa_boss_fight_ns", "challengeKyrisa")) + { + groundquests.sendSignal(member, "challengedKyrisa"); + } } + sendSystemMessage(member, BOSS_BEGIN); } } - dictionary dict = new dictionary(); - dict.put("player", player); - messageTo(objects[0], "waveEventControllerNPCStart", dict, 0, false); + final obj_id rancor = utils.getObjIdScriptVar(npc, "wod.corrupted_rancor_mutation"); + faceTo(npc, rancor); + utils.setScriptVar(npc, "wod.busyNow", true); + doAnimationAction(npc, anims.PLAYER_FORCE_LIGHTNING); + doCombatResults("force_weaken_1_particle_level_1_medium", combat.makeDummyAttackerResults(npc, getDefaultWeapon(npc)), combat.makeDummyDefenderResults(rancor)); + messageTo(rancor, "startBossAttack", d, 1f, false); + messageTo(utils.getObjIdScriptVar(npc, "wod.cage_controller"), "destroyCage", null, 2f, false); } public int wod_kyrisa_handleBranch1(obj_id player, obj_id npc, string_id response) throws InterruptedException { @@ -305,11 +336,13 @@ public class wod_kyrisa extends script.base_script detachScript(self, "conversation.wod_kyrisa"); } setCondition(self, CONDITION_CONVERSABLE); + setCondition(self, CONDITION_INTERESTING); return SCRIPT_CONTINUE; } public int OnAttach(obj_id self) throws InterruptedException { setCondition(self, CONDITION_CONVERSABLE); + setCondition(self, CONDITION_INTERESTING); return SCRIPT_CONTINUE; } public int OnObjectMenuRequest(obj_id self, obj_id player, menu_info menuInfo) throws InterruptedException @@ -442,4 +475,60 @@ public class wod_kyrisa extends script.base_script utils.removeScriptVar(player, "conversation.wod_kyrisa.branchId"); return SCRIPT_CONTINUE; } + + public int OnHearSpeech(obj_id self, obj_id objSpeaker, String strText) throws InterruptedException + { + if(isGod(objSpeaker)) { + if (strText.equalsIgnoreCase("start")) + { + wod_kyrisa_action_sendReturnedSignalKyrisaChallenged(objSpeaker, self); + } + } + return SCRIPT_CONTINUE; + } + + public int endFightNoDefeat(obj_id self, dictionary params) throws InterruptedException + { + dictionary d = new dictionary(); + d.put("wasDefeat", false); + messageTo(utils.getObjIdScriptVar(self, "wod.cage_controller"), "resetCage", d, 0f, false); + string_id[] taunts = new string_id[] { + new string_id("npc_reaction/fancy", "gloat_9"), + new string_id("npc_reaction/fancy", "gloat_10"), + new string_id("npc_reaction/fancy", "gloat_14"), + new string_id("npc_reaction/fancy", "gloat_15") + }; + prose_package pp = new prose_package(); + pp.stringId = taunts[rand(0, taunts.length-1)]; + final obj_id[] members = utils.getObjIdArrayScriptVar(self, "wod.groupInProgressMembers"); + commPlayers(self, members, pp); + for(obj_id player : members) + { + sendSystemMessage(player, BOSS_LEAVING); + if(groundquests.isTaskActive(player, "wod_kyrisa_boss_fight", "defeatRancor")) + { + groundquests.sendSignal(player, "playerFailedBoss"); + } + if(groundquests.isTaskActive(player, "wod_kyrisa_boss_fight_ns", "defeatRancor")) + { + groundquests.sendSignal(player, "playerFailedBoss"); + } + } + utils.removeScriptVar(self, "wod.groupInProgress"); + utils.removeScriptVar(self, "wod.groupInProgressMembers"); + utils.setScriptVar(self, "wod.busyNow", false); + return SCRIPT_CONTINUE; + } + + public int endFightWithDefeat(obj_id self, dictionary params) throws InterruptedException + { + dictionary d = new dictionary(); + d.put("wasDefeat", true); + utils.removeScriptVar(self, "wod.groupInProgress"); + utils.removeScriptVar(self, "wod.groupInProgressMembers"); + utils.setScriptVar(self, "wod.busyNow", false); + messageTo(utils.getObjIdScriptVar(self, "wod.cage_controller"), "resetCage", d, 0f, false); + return SCRIPT_CONTINUE; + } + } diff --git a/sku.0/sys.server/compiled/game/script/library/combat.java b/sku.0/sys.server/compiled/game/script/library/combat.java index fd030b0a5..9381abd6e 100755 --- a/sku.0/sys.server/compiled/game/script/library/combat.java +++ b/sku.0/sys.server/compiled/game/script/library/combat.java @@ -3909,4 +3909,23 @@ public class combat extends script.base_script } return false; } + public static attacker_results makeDummyAttackerResults(obj_id objAttacker, obj_id weapon) throws InterruptedException + { + attacker_results cbtAttackerResults = new attacker_results(); + cbtAttackerResults.id = objAttacker; + cbtAttackerResults.weapon = weapon; + cbtAttackerResults.endPosture = getPosture(objAttacker); + return cbtAttackerResults; + } + public static defender_results[] makeDummyDefenderResults(obj_id objDefender) throws InterruptedException + { + defender_results[] cbtDefenderResults = new defender_results[1]; + cbtDefenderResults[0] = new defender_results(); + cbtDefenderResults[0].id = objDefender; + cbtDefenderResults[0].endPosture = 0; + cbtDefenderResults[0].result = COMBAT_RESULT_HIT; + cbtDefenderResults[0].damageAmount = 0; + cbtDefenderResults[0].hitLocation = 0; + return cbtDefenderResults; + } } diff --git a/sku.0/sys.server/compiled/game/script/theme_park/dungeon/generic_spawner.java b/sku.0/sys.server/compiled/game/script/theme_park/dungeon/generic_spawner.java index 1fe620a44..c5c55c8fb 100755 --- a/sku.0/sys.server/compiled/game/script/theme_park/dungeon/generic_spawner.java +++ b/sku.0/sys.server/compiled/game/script/theme_park/dungeon/generic_spawner.java @@ -421,4 +421,29 @@ public class generic_spawner extends script.base_script } return level; } + + public int OnHearSpeech(obj_id self, obj_id objSpeaker, String strText) throws InterruptedException + { + if(isGod(objSpeaker)) + { + if(strText.equalsIgnoreCase("clean")) + { + messageTo(self, "dungeonCleanup", null, 0f, false); + sendSystemMessageTestingOnly(objSpeaker, "God Mode: Starting cleanup of dungeon "+self+"..."); + } + if(strText.equalsIgnoreCase("spawn")) + { + if (!hasObjVar(self, "space_dungeon.name") && !hasScript(self, "systems.instance.instance_manager")) + { + messageTo(self, "beginSpawn", null, 0f, false); + sendSystemMessageTestingOnly(objSpeaker, "God Mode: Starting spawn of dungeon "+self+"..."); + } + else + { + sendSystemMessageTestingOnly(objSpeaker, "Error: You can't use that here."); + } + } + } + return SCRIPT_CONTINUE; + } } diff --git a/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_cage_controller.java b/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_cage_controller.java new file mode 100644 index 000000000..73e975770 --- /dev/null +++ b/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_cage_controller.java @@ -0,0 +1,102 @@ +package script.theme_park.wod; + +import script.dictionary; +import script.library.create; +import script.library.pet_lib; +import script.library.utils; +import script.location; +import script.obj_id; + +public class corrupted_rancor_cage_controller extends script.base_script { + + public corrupted_rancor_cage_controller() + { + } + + public int OnAttach(obj_id self) throws InterruptedException + { + createTriggerVolume("cageInterior", 7f, true); + messageTo(self, "resetCage", null, 3f, false); + utils.setScriptVar(self, "wod.cageEffectPoints", + getAllObjectsWithTemplate(getLocation(self), 8f, "object/tangible/ground_spawning/patrol_waypoint.iff")); + obj_id[] creatures = getAllObjectsWithObjVar(getLocation(self), 30f, "wod.kyrisa"); + if(creatures != null && creatures.length > 0) + { + utils.setScriptVar(self, "wod.kyrisa", creatures[0]); + utils.setScriptVar(creatures[0], "wod.cage_controller", self); + } + return SCRIPT_CONTINUE; + } + + public int resetCage(obj_id self, dictionary params) throws InterruptedException + { + final obj_id[] contents = getTriggerVolumeContents(self, "cageInterior"); + final location loc = getLocation(self); + final obj_id cell = getContainedBy(self); + final obj_id wall = createObject("object/static/item/item_stone_cage_wall.iff", + new location(-90.9413f, -100.8f, -96.9441f, loc.area, cell)); + setYaw(wall, -7f); + utils.setScriptVar(self, "wod.wall", wall); + for(obj_id o : contents) + { + if(isPlayer(o) || pet_lib.isPet(o) || isDead(o)) + { + setLocation(o, new location(-90f, -103.2f, -126.9f, loc.area, cell)); + } + } + if(params.getBoolean("wasDefeat")) + { + utils.setScriptVar(self, "wod.ready", false); + messageTo(self, "doSpawnEvent", null, 900f, false); + } + else + { + messageTo(self, "doSpawnEvent", null, 0f, false); + } + return SCRIPT_CONTINUE; + } + + public int destroyCage(obj_id self, dictionary params) throws InterruptedException + { + utils.setScriptVar(self, "wod.ready", false); + final obj_id[] players = getPlayerCreaturesInRange(self, 40f); + for(obj_id e : utils.getObjIdArrayScriptVar(self, "wod.cageEffectPoints")) + { + playClientEffectLoc(players, "clienteffect/lair_damage_heavy_shake.cef", getLocation(e), 0f); + } + for(obj_id e : getAllObjectsWithTemplate(getLocation(self), 40f, "object/tangible/ground_spawning/patrol_waypoint.iff")) + { + playClientEffectLoc(players, "appearance/pt_miasma_of_fog_greenish.prt", getLocation(e), 0f); + } + destroyObject(utils.getObjIdScriptVar(self, "wod.wall")); + return SCRIPT_CONTINUE; + } + + public int doSpawnEvent(obj_id self, dictionary params) throws InterruptedException + { + final obj_id creature = create.createCreature("wod_mutant_rancor_boss", + new location(-90.8537f, -100.0102f, -91.8525f, getLocation(self).area, getContainedBy(self)), true); + attachScript(creature, "theme_park.wod.corrupted_rancor_mutation_npc"); + utils.setScriptVar(self, "wod.ready", true); + return SCRIPT_CONTINUE; + } + + public int OnHearSpeech(obj_id self, obj_id objSpeaker, String strText) throws InterruptedException + { + if(isGod(objSpeaker)) + { + if(strText.equalsIgnoreCase("resetCage")) + { + messageTo(self, "resetCage", null, 0f, false); + sendSystemMessageTestingOnly(objSpeaker, "Resetting cage..."); + } + if(strText.equalsIgnoreCase("destroyCage")) + { + messageTo(self, "destroyCage", null, 0f, false); + sendSystemMessageTestingOnly(objSpeaker, "Destroying cage..."); + } + } + return SCRIPT_CONTINUE; + } + +} diff --git a/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_mutation_npc.java b/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_mutation_npc.java new file mode 100644 index 000000000..7039dbc83 --- /dev/null +++ b/sku.0/sys.server/compiled/game/script/theme_park/wod/corrupted_rancor_mutation_npc.java @@ -0,0 +1,235 @@ +package script.theme_park.wod; + +import script.dictionary; +import script.library.*; +import script.obj_id; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.IntStream; + +public class corrupted_rancor_mutation_npc extends script.base_script +{ + public corrupted_rancor_mutation_npc() + { + } + + public static final String BUFF_RANCOR_ARMOR = "wod_rancor_mutation"; + public static final String BUFF_RANCOR_DAMAGE = "wod_rancor_super_strength"; + public static final String BUFF_RANCOR_BYPASS_ARMOR = "wod_rancor_razor_claws"; + public static final String DEBUFF_FINAL_ACID = "wod_decompose"; + public static final String[] RANDOM_DEBUFFS = { + "obfuscation", + "confusion", + "wod_agony", + "wavering", + "corrosion" + }; + public static final String NS_BICEP_SCHEMATIC = "item_wod_bossloot_ns_bracer"; + public static final String SMC_BICEP_SCHEMATIC = "item_wod_bossloot_smc_bicep_"; + public static final String SMC_BRACER_SCHEMATIC = "item_wod_bossloot_smc_bracer_"; + public static final int REPEAT_TIME = 45; + public static final int OFFSET_TIME = 15; + public static int buffStartTime = 0; + + public int OnAttach(obj_id self) throws InterruptedException + { + setInvulnerable(self, true); + setYaw(self, -156.1289f); + ai_lib.setDefaultCalmBehavior(self, ai_lib.BEHAVIOR_SENTINEL); + recurringMessageTo(self, "runGlowAppearanceLoop", null, 10f); + handleBuffValidation(self); + handleControllerSetup(self); + utils.setScriptVar(self, "home", getTopMostContainer(self)); + return SCRIPT_CONTINUE; + } + + public int OnEnteredCombat(obj_id self) throws InterruptedException + { + handleBuffValidation(self); + recurringMessageTo(self, "runRandomPlayerDebuffLoop", null, rand(35f, 55f)); + recurringMessageTo(self, "handleLocationValidation", null, 5f); + recurringMessageTo(self, "handleRandomCombatTarget", null, rand(25f, 35f)); + return SCRIPT_CONTINUE; + } + + public int OnExitedCombat(obj_id self) throws InterruptedException + { + if(!isDead(self)) + { + final obj_id kyrisa = utils.getObjIdScriptVar(self, "wod.kyrisa"); + messageTo(kyrisa, "endFightNoDefeat", null, 5f, false); + setInvulnerable(self, true); + cancelRecurringMessageTo(self, "runRandomPlayerDebuffLoop"); + cancelRecurringMessageTo(self, "handleLocationValidation"); + cancelRecurringMessageTo(self, "handleRandomCombatTarget"); + playClientEffectLoc(self, "appearance/pt_fog_barrier.prt", getLocation(self), 0f); + playClientEffectLoc(self, "appearance/pt_acidfield_explode.prt", getLocation(self), 0.0f); + setCreatureCoverVisibility(self, false); + destroyObject(self); + } + return SCRIPT_CONTINUE; + } + + public int OnDeath(obj_id self, obj_id killer, obj_id corpseId) throws InterruptedException + { + for (obj_id attacker : utils.getObjIdArrayScriptVar(self, "groupMembers")) + { + if(getDistance(self, attacker) < 40f) + { + if(!luck.isLucky(attacker)) + { + playClientEffectLoc(attacker, "appearance/pt_acidfield_explode.prt", getLocation(attacker), 0.0f); + buff.applyBuff(attacker, DEBUFF_FINAL_ACID); + } + if(groundquests.isTaskActive(attacker, "wod_kyrisa_boss_fight", "defeatRancor")) + { + groundquests.completeTask(attacker, "wod_kyrisa_boss_fight", "defeatRancor"); + } + else if(groundquests.isTaskActive(attacker, "wod_kyrisa_boss_fight_ns", "defeatRancor")) + { + groundquests.completeTask(attacker, "wod_kyrisa_boss_fight_ns", "defeatRancor"); + } + if(badge.hasBadge(attacker, "bdge_wod_rancor_boss")) + { + badge.grantBadge(attacker, "bdge_wod_rancor_boss"); + } + } + } + messageTo(utils.getObjIdScriptVar(self, "wod.kyrisa"), "endFightWithDefeat", null, 0f, false); + return SCRIPT_CONTINUE; + } + + public int OnCreatureDamaged(obj_id self, obj_id attacker, obj_id weapon, int[] damage) throws InterruptedException + { + final obj_id[] groupMembers = utils.getObjIdArrayScriptVar(self, "groupMembers"); + if(!Arrays.asList(groupMembers).contains(attacker)) + { + sendSystemMessageTestingOnly(self, "You are not a group participant in this attack so your combat damage does not harm the creature."); + addToHealth(self, IntStream.of(damage).sum()); + } + return SCRIPT_CONTINUE; + } + + public int OnDestroy(obj_id self) throws InterruptedException + { + cancelRecurringMessageTo(self, "runGlowAppearanceLoop"); + return SCRIPT_CONTINUE; + } + + public int startBossAttack(obj_id self, dictionary params) throws InterruptedException + { + doAnimationAction(self, "threaten"); + setInvulnerable(self, false); + final obj_id[] group = params.getObjIdArray("groupMembers"); + utils.setScriptVar(self, "groupMembers", group); + if(group != null && group.length > 0) + { + for (obj_id player : group) { + setHate(self, player, 10000f); + startCombat(self, player); + } + } + messageTo(self, "endCombatTimerExpired", null, 600f, false); + return SCRIPT_CONTINUE; + } + + public int endCombatTimerExpired(obj_id self, dictionary params) throws InterruptedException + { + if(exists(self) && !isDead(self)) + { + stopCombat(self); + } + return SCRIPT_CONTINUE; + } + + public static void handleBuffValidation(obj_id self) throws InterruptedException + { + buff.applyBuffWithStackCount(self, BUFF_RANCOR_ARMOR, 10); + buff.applyBuffWithStackCount(self, BUFF_RANCOR_DAMAGE, 1); + buff.applyBuffWithStackCount(self, BUFF_RANCOR_BYPASS_ARMOR, 1); + } + + public static void handleControllerSetup(obj_id self) throws InterruptedException + { + // find Kyrisa (there will only ever be 1, so we can take a shortcut here) + obj_id[] creatures = getAllObjectsWithObjVar(getLocation(self), 30f, "wod.kyrisa"); + if(creatures != null && creatures.length > 0) + { + utils.setScriptVar(self, "wod.kyrisa", creatures[0]); + utils.setScriptVar(creatures[0], "wod.corrupted_rancor_mutation", self); + } + // find Effect controllers + utils.setScriptVar(self, "wod.effect_randoms", + getAllObjectsWithTemplate(getLocation(self), 40f, "object/tangible/ground_spawning/patrol_waypoint.iff")); + } + + public int runGlowAppearanceLoop(obj_id self, dictionary params) throws InterruptedException + { + playClientEffectObj(self, "appearance/pt_light_indoor_glow_blue.prt", self, "muzzle"); + playClientEffectObj(self, "appearance/pt_light_indoor_glow_blue.prt", self, "l_arm"); + playClientEffectObj(self, "appearance/pt_light_indoor_glow_blue.prt", self, "r_arm"); + playClientEffectObj(self, "appearance/pt_light_indoor_glow_blue.prt", self, "l_thigh"); + playClientEffectObj(self, "appearance/pt_light_indoor_glow_blue.prt", self, "r_thigh"); + return SCRIPT_CONTINUE; + } + + public int handleLocationValidation(obj_id self, dictionary params) throws InterruptedException + { + final obj_id home = utils.getObjIdScriptVar(self, "home"); + final obj_id container = getContainedBy(self); + if(container != getCellId(home, "r11") && container != getCellId(home, "r8")) + { + stopCombat(self); + } + return SCRIPT_CONTINUE; + } + + public int runRandomPlayerDebuffLoop(obj_id self, dictionary params) throws InterruptedException + { + final obj_id[] players = getPlayerCreaturesInRange(self, 45f); + final List potentialTargets = new ArrayList<>(); + for (obj_id player : players) + { + if(getHate(self, player) >= 1) + { + if(!luck.isLucky(player)) + { + potentialTargets.add(player); + } + } + } + if(potentialTargets.size() > 0) + { + final obj_id target = potentialTargets.get(rand(0, potentialTargets.size()-1)); + utils.setScriptVar(self, "wod_mutant_rancor.lastRandomDebuffPlayer", target); + playClientEffectLoc(target, "appearance/pt_acidfield_explode.prt", getLocation(target), 0.0f); + playClientEffectLoc(target, "appearance/pt_acidfield_medium.prt", getLocation(target), 0.0f); + buff.applyBuff(target, RANDOM_DEBUFFS[rand(0, RANDOM_DEBUFFS.length-1)]); + } + return SCRIPT_CONTINUE; + } + + public int handleRandomCombatTarget(obj_id self, dictionary params) throws InterruptedException + { + final obj_id[] group = params.getObjIdArray("groupMembers"); + final List potentialTargets = new ArrayList<>(); + if(group != null && group.length > 1) + { + for(obj_id player : group) + { + if(utils.getDistance2D(self, player) < 30) + { + potentialTargets.add(player); + } + } + } + if(potentialTargets.size() > 0) + { + startCombat(self, potentialTargets.get(rand(0, potentialTargets.size()-1))); + } + return SCRIPT_CONTINUE; + } + +} diff --git a/sku.0/sys.server/compiled/game/script/theme_park/wod/mutant_rancor_npc.java b/sku.0/sys.server/compiled/game/script/theme_park/wod/mutant_rancor_npc.java new file mode 100644 index 000000000..3c532722e --- /dev/null +++ b/sku.0/sys.server/compiled/game/script/theme_park/wod/mutant_rancor_npc.java @@ -0,0 +1,44 @@ +package script.theme_park.wod; + +import script.dictionary; +import script.library.buff; +import script.obj_id; + +public class mutant_rancor_npc extends script.base_script { + + public mutant_rancor_npc() + { + } + + public static final String[] BUFFS = { + "wod_rancor_mutation", + "wod_rancor_super_strength", + "wod_rancor_razor_claws" + }; + + public int OnAttach(obj_id self) throws InterruptedException + { + messageTo(self, "doBuffs", null, 3f, false); + return SCRIPT_CONTINUE; + } + + public int OnExitedCombat(obj_id self) throws InterruptedException + { + if(!isDead(self)) + { + buff.removeAllBuffs(self); + messageTo(self, "doBuffs", null, 3f, false); + } + return SCRIPT_CONTINUE; + } + + public int doBuffs(obj_id self, dictionary params) throws InterruptedException + { + buff.applyBuffWithStackCount(self, BUFFS[0], rand(1,3)); + buff.applyBuffWithStackCount(self, + BUFFS[rand(1, BUFFS.length-1)], + rand(1,2) + ); + return SCRIPT_CONTINUE; + } +} diff --git a/sku.0/sys.server/compiled/game/script/theme_park/wod/wod_mutant_rancor_combat.java b/sku.0/sys.server/compiled/game/script/theme_park/wod/wod_mutant_rancor_combat.java deleted file mode 100644 index 2932b59b2..000000000 --- a/sku.0/sys.server/compiled/game/script/theme_park/wod/wod_mutant_rancor_combat.java +++ /dev/null @@ -1,229 +0,0 @@ -package script.theme_park.wod; - -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.ai_lib; -import script.library.beast_lib; -import script.library.buff; -import script.library.chat; -import script.library.combat; -import script.library.create; -import script.library.group; -import script.library.prose; -import script.library.static_item; -import script.library.trial; -import script.library.utils; - -public class wod_mutant_rancor_combat extends script.base_script -{ - public wod_mutant_rancor_combat() - { - } - public static final String NS_BICEP_SCHEMATIC = "item_wod_bossloot_ns_bracer"; - public static final String SMC_BICEP_SCHEMATIC = "item_wod_bossloot_smc_bicep_"; - public static final String SMC_BRACER_SCHEMATIC = "item_wod_bossloot_smc_bracer_"; - public static final int MAX_DISTANCE = 104; - public static final int REPEAT_TIME = 45; - public static final int OFFSET_TIME = 15; - public static final int HP_WOD_RANCOR = 618125; - public static int buffStartTime = 0; - public int OnAttach(obj_id self) throws InterruptedException - { - trial.setHp(self, HP_WOD_RANCOR); - applySkillStatisticModifier(self, "expertise_glancing_blow_reduction", 100); - return SCRIPT_CONTINUE; - } - public int OnEnteredCombat(obj_id self) throws InterruptedException - { - buff.applyBuff(self, "open_balance_buff", -1.0f); - obj_id[] players = getPlayerCreaturesInRange(self, 250.0f); - if (players != null && players.length > 0) - { - for (int i = 0; i < players.length; i++) - { - obj_id player = players[i]; - if (isIdValid(player) && exists(player) && !isIncapacitated(player) && !isDead(player)) - { - addHate(self, player, 1000.0f); - startCombat(self, player); - } - } - } - messageTo(self, "checkCombatStatus", null, REPEAT_TIME + ((rand(0, OFFSET_TIME) + OFFSET_TIME) - OFFSET_TIME), false); - return SCRIPT_CONTINUE; - } - public int OnCreatureDamaged(obj_id self, obj_id attacker, obj_id wpn, int[] damage) throws InterruptedException - { - if (hasObjVar(self, "buffStartTime")) - { - buffStartTime = getIntObjVar(self, "buffStartTime"); - } - int buffTime = getGameTime() - buffStartTime; - int randomTime = REPEAT_TIME + ((rand(0, OFFSET_TIME) + OFFSET_TIME) - OFFSET_TIME); - float healthPercent = (float)getAttrib(self, HEALTH) / (float)getMaxAttrib(self, HEALTH); - if (healthPercent <= 0.67f && healthPercent > 0.20f) - { - int randBuff = rand(1, 4); - if (!hasObjVar(self, "scaleOne")) - { - float mutationScaleOne = (float)(getScale(self) * 1.4); - setScale(self, mutationScaleOne); - setYaw(self, rand(0.0f, 360.0f)); - setObjVar(self, "scaleOne", true); - } - if (randBuff == 1 && buffTime > randomTime) - { - buff.applyBuff(self, "kun_twin_ranged_shield", 45.0f); - setObjVar(self, "buffStartTime", getGameTime()); - buff.removeBuff(self, "hoth_atat_shield"); - buff.removeBuff(self, "sher_kar_rage"); - buff.removeBuff(self, "kun_twin_bonus"); - } - if (randBuff == 2 && buffTime > randomTime) - { - buff.applyBuff(self, "hoth_atat_shield", 45.0f); - setObjVar(self, "buffStartTime", getGameTime()); - buff.removeBuff(self, "kun_twin_ranged_shield"); - buff.removeBuff(self, "sher_kar_rage"); - buff.removeBuff(self, "kun_twin_bonus"); - } - if (randBuff == 3 && buffTime > randomTime) - { - buff.applyBuff(self, "sher_kar_rage", 45.0f); - setObjVar(self, "buffStartTime", getGameTime()); - buff.removeBuff(self, "kun_twin_ranged_shield"); - buff.removeBuff(self, "hoth_atat_shield"); - buff.removeBuff(self, "kun_twin_bonus"); - } - if (randBuff == 4 && buffTime > randomTime) - { - buff.applyBuff(self, "kun_twin_bonus", 45.0f); - setObjVar(self, "buffStartTime", getGameTime()); - buff.removeBuff(self, "kun_twin_ranged_shield"); - buff.removeBuff(self, "hoth_atat_shield"); - buff.removeBuff(self, "sher_kar_rage"); - } - } - if (healthPercent <= 0.20f) - { - if (buffTime > randomTime) - { - buff.applyBuff(self, "open_balance_buff", 30.0f); - setObjVar(self, "buffStartTime", getGameTime()); - } - if (!hasObjVar(self, "scaleTwo")) - { - float mutationScaleTwo = (float)(getScale(self) * 1.9); - setScale(self, mutationScaleTwo); - setYaw(self, rand(0.0f, 360.0f)); - setObjVar(self, "scaleTwo", true); - } - } - return SCRIPT_CONTINUE; - } - public int checkCombatStatus(obj_id self, dictionary params) throws InterruptedException - { - if (!isValidId(self) || !exists(self)) - { - return SCRIPT_CONTINUE; - } - if (ai_lib.isDead(self)) - { - return SCRIPT_CONTINUE; - } - if (ai_lib.isInCombat(self)) - { - CustomerServiceLog("wod_themepark", "wod_mutant_rancor_combat.checkCombatStatus(): Boss Mob: " + self + " is already in combat."); - return SCRIPT_CONTINUE; - } - obj_id parent = getObjIdObjVar(self, "parent"); - if (isIdValid(parent)) - { - if (getRandomCombatTarget(self, parent)) - { - return SCRIPT_CONTINUE; - } - dictionary webster = trial.getSessionDict(parent); - messageTo(parent, "defaultEventReset", webster, 2, false); - } - messageTo(self, "checkCombatStatus", null, REPEAT_TIME + (rand(0, OFFSET_TIME + OFFSET_TIME) - OFFSET_TIME), false); - return SCRIPT_CONTINUE; - } - public boolean getRandomCombatTarget(obj_id self, obj_id parent) throws InterruptedException - { - if (!isIdValid(self) || !exists(self)) - { - CustomerServiceLog("wod_themepark", "wod_mutant_rancor_combat.getRandomCombatTarget() FAILED to find self."); - return false; - } - obj_id[] targets = trial.getValidTargetsInRadiusIgnoreLOS(self, MAX_DISTANCE); - if (targets == null || targets.length == 0) - { - CustomerServiceLog("wod_themepark", "wod_mutant_rancor_combat.getRandomCombatTarget() no targets for boss (" + self + ") is: " + MAX_DISTANCE); - dictionary webster = trial.getSessionDict(parent); - messageTo(parent, "defaultEventReset", webster, 2, false); - return false; - } - obj_id playerEnemy = utils.getObjIdScriptVar(self, "waveEventPlayer"); - if (!isIdValid(playerEnemy) || !exists(playerEnemy)) - { - CustomerServiceLog("wod_themepark", "wod_mutant_rancor_combat.getRandomCombatTarget() Mob found player but player was not part of owners group."); - return false; - } - for (int i = 0; i < targets.length; i++) - { - if (!isIdValid(targets[i])) - { - continue; - } - if (!group.inSameGroup(targets[i], playerEnemy)) - { - CustomerServiceLog("wod_themepark", "boss_fight_functionality.getRandomCombatTarget(): Player " + targets[i] + " was found as an invalid target."); - continue; - } - startCombat(self, targets[i]); - CustomerServiceLog("wod_themepark", "boss_fight_functionality.getRandomCombatTarget(): Player " + targets[i] + " was found as a valid target. Boss Mob: " + self + " attacking player."); - return true; - } - CustomerServiceLog("wod_themepark", "boss_fight_functionality.OnIncapacitateTarget(): Boss Mob: " + self + " failed to find a player to attack from player: " + playerEnemy + " group."); - dictionary webster = trial.getSessionDict(parent); - messageTo(parent, "defaultEventReset", webster, 2, false); - return false; - } - public int aiCorpsePrepared(obj_id self, dictionary params) throws InterruptedException - { - obj_id inv = utils.getInventoryContainer(self); - int lootChance = rand(1, 100); - if (lootChance <= 5) - { - static_item.createNewItemFunction(NS_BICEP_SCHEMATIC, inv); - } - if (lootChance > 5 && lootChance <= 20) - { - int leftOrRight = rand(0, 1); - String toAppend = "l"; - if (leftOrRight == 1) - { - toAppend = "r"; - } - static_item.createNewItemFunction(SMC_BICEP_SCHEMATIC + toAppend, inv); - } - if (lootChance > 20 && lootChance <= 35) - { - int leftOrRight = rand(0, 1); - String toAppend = "l"; - if (leftOrRight == 1) - { - toAppend = "r"; - } - static_item.createNewItemFunction(SMC_BRACER_SCHEMATIC + toAppend, inv); - } - return SCRIPT_CONTINUE; - } -}