diff --git a/ngengine_public.jar b/ngengine_public.jar index 8dbc2777..a78a6cba 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/scripts/buffs/set_bonus_bh_dps_1.py b/scripts/buffs/set_bonus_bh_dps_1.py deleted file mode 100644 index 6055bf9f..00000000 --- a/scripts/buffs/set_bonus_bh_dps_1.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_2.py b/scripts/buffs/set_bonus_bh_dps_2.py deleted file mode 100644 index 5f0aa83c..00000000 --- a/scripts/buffs/set_bonus_bh_dps_2.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_3.py b/scripts/buffs/set_bonus_bh_dps_3.py deleted file mode 100644 index 4d48df3e..00000000 --- a/scripts/buffs/set_bonus_bh_dps_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 10) - core.skillModService.addSkillMod(actor, 'expertise_action_line_dm_crit', 10) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_dm' , 10) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 10) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm_crit', 10) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_dm' , 10) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_1.py b/scripts/buffs/set_bonus_bh_utility_a_1.py deleted file mode 100644 index 3035fdd8..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_1.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_2.py b/scripts/buffs/set_bonus_bh_utility_a_2.py deleted file mode 100644 index 3035fdd8..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_2.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_3.py b/scripts/buffs/set_bonus_bh_utility_a_3.py deleted file mode 100644 index 6a3ed086..00000000 --- a/scripts/buffs/set_bonus_bh_utility_a_3.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) - return - \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_1.py b/scripts/buffs/set_bonus_bh_utility_b_1.py deleted file mode 100644 index 9115f6d4..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_1.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_2.py b/scripts/buffs/set_bonus_bh_utility_b_2.py deleted file mode 100644 index b641c6a6..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_2.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 10) - core.skillModService.addSkillMod(actor, 'bh_dire_root', 20) - core.skillModService.addSkillMod(actor, 'bh_dire_snare', 20) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 10) - core.skillModService.deductSkillMod(actor, 'bh_dire_root', 20) - core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 20) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_3.py b/scripts/buffs/set_bonus_bh_utility_b_3.py deleted file mode 100644 index b4b4154f..00000000 --- a/scripts/buffs/set_bonus_bh_utility_b_3.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 35) - core.skillModService.addSkillMod(actor, 'bh_dire_root', 45) - core.skillModService.addSkillMod(actor, 'bh_dire_snare', 45) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 35) - core.skillModService.deductSkillMod(actor, 'bh_dire_root', 45) - core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 45) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_1.py b/scripts/buffs/set_bonus_hero_1.py deleted file mode 100644 index c589b0f4..00000000 --- a/scripts/buffs/set_bonus_hero_1.py +++ /dev/null @@ -1,12 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 60) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 60) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_2.py b/scripts/buffs/set_bonus_hero_2.py deleted file mode 100644 index 630b0e30..00000000 --- a/scripts/buffs/set_bonus_hero_2.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 90) - core.skillModService.addSkillMod(actor, 'agility_modified', 90) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 90) - core.skillModService.deductSkillMod(actor, 'agility_modified', 90) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_3.py b/scripts/buffs/set_bonus_hero_3.py deleted file mode 100644 index d2755af3..00000000 --- a/scripts/buffs/set_bonus_hero_3.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'stamina_modified', 150) - core.skillModService.addSkillMod(actor, 'agility_modified', 150) - core.skillModService.addSkillMod(actor, 'constitution_modified', 150) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'stamina_modified', 150) - core.skillModService.deductSkillMod(actor, 'agility_modified', 150) - core.skillModService.deductSkillMod(actor, 'constitution_modified', 150) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_dps_1.py b/scripts/buffs/set_bonus_medic_dps_1.py deleted file mode 100644 index 178d4c76..00000000 --- a/scripts/buffs/set_bonus_medic_dps_1.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_dm', 5) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_burst', 5) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_smash', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_dm', 5) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_burst', 5) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_smash', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_dps_2.py b/scripts/buffs/set_bonus_medic_dps_2.py deleted file mode 100644 index 36833f96..00000000 --- a/scripts/buffs/set_bonus_medic_dps_2.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_dm', 10) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_burst', 10) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_smash', 10) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_dm', 5) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_me_enhance', 900) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_dm', 10) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_burst', 10) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_smash', 10) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_dm', 5) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_me_enhance', 900) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_dps_3.py b/scripts/buffs/set_bonus_medic_dps_3.py deleted file mode 100644 index f9082b73..00000000 --- a/scripts/buffs/set_bonus_medic_dps_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_dm', 15) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_burst', 20) - core.skillModService.addSkillMod(actor, 'expertise_action_line_me_smash', 20) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_dm', 15) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_me_enhance', 1800) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_dm', 15) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_burst', 20) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_me_smash', 20) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_dm', 15) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_me_enhance', 1800) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_a_1.py b/scripts/buffs/set_bonus_medic_utility_a_1.py deleted file mode 100644 index a04d1d33..00000000 --- a/scripts/buffs/set_bonus_medic_utility_a_1.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_freeshot_me_heal', 5) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_revive', 5) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_evasion', 10) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_me_heal', 5) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_revive', 5) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_evasion', 10) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_a_2.py b/scripts/buffs/set_bonus_medic_utility_a_2.py deleted file mode 100644 index 3fd9f063..00000000 --- a/scripts/buffs/set_bonus_medic_utility_a_2.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_heal', 5) - core.skillModService.addSkillMod(actor, 'expertise_freeshot_me_heal', 10) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_revive', 10) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_evasion', 20) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_heal', 5) - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_me_heal', 10) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_revive', 10) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_evasion', 20) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_a_3.py b/scripts/buffs/set_bonus_medic_utility_a_3.py deleted file mode 100644 index 11bad3ba..00000000 --- a/scripts/buffs/set_bonus_medic_utility_a_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_heal', 10) - core.skillModService.addSkillMod(actor, 'expertise_freeshot_me_heal', 15) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_revive', 15) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_evasion', 30) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_stasis_self', 2) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_heal', 10) - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_me_heal', 15) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_revive', 15) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_evasion', 30) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_stasis_self', 2) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_b_1.py b/scripts/buffs/set_bonus_medic_utility_b_1.py deleted file mode 100644 index 1ec0be40..00000000 --- a/scripts/buffs/set_bonus_medic_utility_b_1.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_dot', 10) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 1) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_debuff', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_dot', 10) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 1) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_debuff', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_b_2.py b/scripts/buffs/set_bonus_medic_utility_b_2.py deleted file mode 100644 index b6d95b63..00000000 --- a/scripts/buffs/set_bonus_medic_utility_b_2.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_dot', 20) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 3) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_debuff', 10) - core.skillModService.addSkillMod(actor, 'expertise_freeshot_me_debuff', 10) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_dot', 20) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 3) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_debuff', 10) - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_me_debuff', 10) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_medic_utility_b_3.py b/scripts/buffs/set_bonus_medic_utility_b_3.py deleted file mode 100644 index 4a5af114..00000000 --- a/scripts/buffs/set_bonus_medic_utility_b_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_me_dot', 30) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 5) - core.skillModService.addSkillMod(actor, 'fast_attack_line_me_debuff', 15) - core.skillModService.addSkillMod(actor, 'expertise_freeshot_me_debuff', 15) - core.skillModService.addSkillMod(actor, 'me_doom_chance', 20) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_me_dot', 30) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_me_debuff', 5) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_me_debuff', 15) - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_me_debuff', 15) - core.skillModService.deductSkillMod(actor, 'me_doom_chance', 20) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_dps_1.py b/scripts/buffs/set_bonus_spy_dps_1.py deleted file mode 100644 index a375544a..00000000 --- a/scripts/buffs/set_bonus_spy_dps_1.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_sp_dm', 10) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_dm', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_sp_dm', 10) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_dm', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_dps_2.py b/scripts/buffs/set_bonus_spy_dps_2.py deleted file mode 100644 index 25132b6d..00000000 --- a/scripts/buffs/set_bonus_spy_dps_2.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_sp_dm', 15) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_dm', 10) - core.skillModService.addSkillMod(actor, 'expertise_action_line_sp_dot', 15) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_sp_dm', 15) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_dm', 10) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_sp_dot', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_dps_3.py b/scripts/buffs/set_bonus_spy_dps_3.py deleted file mode 100644 index 9fdedc7e..00000000 --- a/scripts/buffs/set_bonus_spy_dps_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_action_line_sp_dm', 20) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_dm', 15) - core.skillModService.addSkillMod(actor, 'expertise_freeshot_sp_dm', 20) - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_sp_dm', 20) - core.skillModService.addSkillMod(actor, 'expertise_action_line_sp_dot', 25) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_action_line_sp_dm', 20) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_dm', 15) - core.skillModService.deductSkillMod(actor, 'expertise_freeshot_sp_dm', 20) - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_sp_dm', 20) - core.skillModService.deductSkillMod(actor, 'expertise_action_line_sp_dot', 25) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_a_1.py b/scripts/buffs/set_bonus_spy_utility_a_1.py deleted file mode 100644 index dab7ff64..00000000 --- a/scripts/buffs/set_bonus_spy_utility_a_1.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 20) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_smoke', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 20) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_smoke', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_a_2.py b/scripts/buffs/set_bonus_spy_utility_a_2.py deleted file mode 100644 index a1892f96..00000000 --- a/scripts/buffs/set_bonus_spy_utility_a_2.py +++ /dev/null @@ -1,16 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 40) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_sp_preparation', 5) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_smoke', 15) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 40) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_sp_preparation', 5) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_smoke', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_a_3.py b/scripts/buffs/set_bonus_spy_utility_a_3.py deleted file mode 100644 index 22e3a920..00000000 --- a/scripts/buffs/set_bonus_spy_utility_a_3.py +++ /dev/null @@ -1,18 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 60) - core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_sp_preparation', 10) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_smoke', 20) - core.skillModService.addSkillMod(actor, 'fast_attack_line_sp_perfect', 15) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_sp_preparation', 60) - core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_sp_preparation', 10) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_smoke', 20) - core.skillModService.deductSkillMod(actor, 'fast_attack_line_sp_perfect', 15) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_b_1.py b/scripts/buffs/set_bonus_spy_utility_b_1.py deleted file mode 100644 index 74851b44..00000000 --- a/scripts/buffs/set_bonus_spy_utility_b_1.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 1) - core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 1) - core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_b_2.py b/scripts/buffs/set_bonus_spy_utility_b_2.py deleted file mode 100644 index c2f90380..00000000 --- a/scripts/buffs/set_bonus_spy_utility_b_2.py +++ /dev/null @@ -1,14 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) - core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) - core.skillModService.deductSkillMod(actor, 'expertise_action_all', 10) - return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_spy_utility_b_3.py b/scripts/buffs/set_bonus_spy_utility_b_3.py deleted file mode 100644 index 41d58c47..00000000 --- a/scripts/buffs/set_bonus_spy_utility_b_3.py +++ /dev/null @@ -1,20 +0,0 @@ -import sys - -def setup(core, actor, buff): - return - -def add(core, actor, buff): - core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) - core.skillModService.addSkillMod(actor, 'expertise_action_all', 15) - core.skillModService.addSkillMod(actor, 'expertise_avoidance_overpower', 5) - core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) - core.skillModService.addSkillMod(actor, 'movement_resist_root', 100) - return - -def remove(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 3) - core.skillModService.deductSkillMod(actor, 'expertise_action_all', 15) - core.skillModService.deductSkillMod(actor, 'expertise_avoidance_overpower', 5) - core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) - core.skillModService.deductSkillMod(actor, 'movement_resist_root', 100) - return \ No newline at end of file diff --git a/scripts/buffs/sp_burst_shadows_py b/scripts/buffs/sp_burst_shadows.py similarity index 100% rename from scripts/buffs/sp_burst_shadows_py rename to scripts/buffs/sp_burst_shadows.py diff --git a/scripts/commands/forage.py b/scripts/commands/forage.py new file mode 100644 index 00000000..bce7443e --- /dev/null +++ b/scripts/commands/forage.py @@ -0,0 +1,74 @@ +import sys +import engine.resources.scene.Point3D +import resources.common.Forager +import time + + +def setup(): + return + +def run(core, actor, target, commandString): + + #if actor.getSkills('Foraging')==0: + #actor.sendSystemMessage('@skl_use:sys_forage_noskill'),0) + + #if actor.isForaging()==1: + #actor.sendSystemMessage('@skl_use:sys_forage_already',0) + #return + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + if actor.getPosture()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_cant',0) + return + + if core.terrainService.isWater(actor.getPlanet(), actor.getPosition().x, actor.getPosition().z): + actor.sendSystemMessage('You cannot forage while in water.',0) + return + + if actor.getContainer() != None: + actor.sendSystemMessage('@skl_use:sys_forage_inside',0) + return + + if actor.getAction() < 200: + actor.sendSystemMessage('@skl_use:sys_forage_attrib',0) + return + + somepoint = engine.resources.scene.Point3D(0,0,0) + if actor.getAttachment('PostForagePosition')==None: + actor.setAttachment('PostForagePosition', somepoint) + + oldposition = actor.getAttachment('PostForagePosition') + if actor.getPosition().getDistance2D(oldposition)<5: + + actor.sendSystemMessage("@skl_use:sys_forage_empty", 0); + return + + + actor.sendSystemMessage('@skl_use:sys_forage_start', 0) + + actor.setAttachment("PreForagePosition", actor.getPosition()) + actor.setCurrentAnimation('forage') + time.sleep(1) # does NOT stall other python scripts, tested + # Each command might be its own thread + + actor.setAttachment("PostForagePosition", actor.getPosition()) + + if actor.getCombatFlag()!=0: + actor.sendSystemMessage('@skl_use:sys_forage_combatfail',0) + return + + oldposition = actor.getAttachment("PreForagePosition") + if actor.getPosition().getDistance2D(oldposition)>2: + actor.sendSystemMessage('@skl_use:sys_forage_movefail',0) + return + + + + forager = resources.common.Forager() + forager.handleForageResults(actor) + + return + \ No newline at end of file diff --git a/scripts/commands/suspendtest.py b/scripts/commands/suspendtest.py new file mode 100644 index 00000000..61d95fd7 --- /dev/null +++ b/scripts/commands/suspendtest.py @@ -0,0 +1,30 @@ +import sys +import resources.common.Forager +import time + + +def setup(): + return + +def run(core, actor, target, commandString): + actor.sendSystemMessage('Test1', 1) + time.sleep(1) + actor.sendSystemMessage('Test2', 1) + time.sleep(1) + actor.sendSystemMessage('Test3', 1) + time.sleep(1) + actor.sendSystemMessage('Test4', 1) + time.sleep(1) + actor.sendSystemMessage('Test5', 1) + time.sleep(1) + actor.sendSystemMessage('Test6', 1) + time.sleep(1) + actor.sendSystemMessage('Test7', 1) + time.sleep(1) + actor.sendSystemMessage('Test8', 1) + time.sleep(1) + + + + return + \ No newline at end of file diff --git a/scripts/conversation/missions/deliver.py b/scripts/conversation/missions/deliver.py new file mode 100644 index 00000000..5caef3fa --- /dev/null +++ b/scripts/conversation/missions/deliver.py @@ -0,0 +1,70 @@ +from resources.common import OutOfBand +from resources.common import ProsePackage +from resources.objectives import DeliveryMissionObjective +import sys + +def startConversation(core, actor, npc): + missionId = npc.getAttachment('assignedMission') + + if missionId is None: + return + + mission = core.objectService.getObject(missionId) + + if mission is None: + return + + objective = mission.getObjective() + + if mission.getGrandparent().getObjectId() != actor.getObjectId() or objective is None: + core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') + return + + if objective.getObjectivePhase() == 0: + handlePickupStage(core, actor, npc, objective, mission) + return + + elif objective.getObjectivePhase() == 1: + handleDeliveryStage(core, actor, npc, objective, mission) + return + + elif objective.getObjectivePhase() == 2: + handleCompletionStage(core, actor, npc, objective, mission) + return + return + +def endConversation(core, actor, npc): + core.conversationService.sendStopConversation(actor, npc, 'mission/mission_generic', 'npc_job_request_no_job') + return + +def handlePickupStage(core, actor, npc, objective, mission): + + if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'p') + objective.createDeliveryItem() + objective.update() + return + +def handleDeliveryStage(core, actor, npc, objective, mission): + + if objective.getDropOffNpc().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 'r') + core.objectService.destroyObject(objective.getDeliveryObject()) + objective.update() + return + +def handleCompletionStage(core, actor, npc, objective, mission): + + if objective.getMissionGiver().getObjectId() != npc.getObjectId(): + endConversation(core, actor, npc) + return + + core.conversationService.sendStopConversation(actor, npc, mission.getMissionDescription(), 'm' + str(mission.getMissionId()) + 's') + objective.complete() + return \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_dps.py b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py index 61b48b47..4a18c18e 100644 --- a/scripts/equipment/bonus_sets/set_bonus_bh_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_bh_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_bh_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py index 609c2d28..6dd6bfb8 100644 --- a/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_bh_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_bh_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_bh_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_bh_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_co_dps.py b/scripts/equipment/bonus_sets/set_bonus_co_dps.py new file mode 100644 index 00000000..fa3533b2 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_dps") + + bonusSet.addRequiredItem("item_band_set_co_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_co_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py new file mode 100644 index 00000000..f70cd5c3 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_utility_a") + + bonusSet.addRequiredItem("item_band_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py new file mode 100644 index 00000000..cfd278af --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_co_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_co_utility_b") + + bonusSet.addRequiredItem("item_band_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_co_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_co_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_co_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_co_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_co_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_ent.py b/scripts/equipment/bonus_sets/set_bonus_ent.py new file mode 100644 index 00000000..b0f90f98 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_ent.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_ent") + + bonusSet.addRequiredItem("item_band_set_ent_01_01") + bonusSet.addRequiredItem("item_ring_set_ent_01_01") + bonusSet.addRequiredItem("item_necklace_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_ent_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_ent_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_ent_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_ent_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_ent_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py new file mode 100644 index 00000000..6b127317 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_dps") + + bonusSet.addRequiredItem("item_band_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py new file mode 100644 index 00000000..ec88e7bb --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_utility_a") + + bonusSet.addRequiredItem("item_band_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py new file mode 100644 index 00000000..c05cdde0 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_jedi_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_jedi_utility_b") + + bonusSet.addRequiredItem("item_band_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_jedi_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_jedi_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_jedi_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_jedi_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_jedi_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_dps.py b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py index f1966755..8d6c1346 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py index c21b2adb..6853e429 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py index cc02a043..a46fe246 100644 --- a/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py +++ b/scripts/equipment/bonus_sets/set_bonus_medic_utility_b.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_medic_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_medic_utility_b_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_medic_utility_b_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_dps.py b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py new file mode 100644 index 00000000..d990eae6 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_dps") + + bonusSet.addRequiredItem("item_band_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py new file mode 100644 index 00000000..16558a5c --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_utility_a") + + bonusSet.addRequiredItem("item_band_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py new file mode 100644 index 00000000..f5308740 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_officer_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_officer_utility_b") + + bonusSet.addRequiredItem("item_band_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_officer_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_officer_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_officer_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_officer_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_officer_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py new file mode 100644 index 00000000..d29d0981 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_dps.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_dps") + + bonusSet.addRequiredItem("item_band_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_dps_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_dps_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_dps_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_dps_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py new file mode 100644 index 00000000..94bec671 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_a.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_utility_a") + + bonusSet.addRequiredItem("item_band_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_utility_a_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_utility_a_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_a_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_a_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py new file mode 100644 index 00000000..58a33c69 --- /dev/null +++ b/scripts/equipment/bonus_sets/set_bonus_smuggler_utility_b.py @@ -0,0 +1,31 @@ +import sys +from services.equipment import BonusSetTemplate +from java.util import Vector + +def addBonusSet(core): + bonusSet = BonusSetTemplate("set_bonus_smuggler_utility_b") + + bonusSet.addRequiredItem("item_band_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_ring_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_necklace_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_r_set_smuggler_utility_b_01_01") + bonusSet.addRequiredItem("item_bracelet_l_set_smuggler_utility_b_01_01") + + core.equipmentService.addBonusSetTemplate(bonusSet) + +def handleChange(core, creature, set): + wornItems = set.getWornTemplateCount(creature) + + if wornItems == 3: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_1_sys', 0) + elif wornItems == 4: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_2_sys', 0) + elif wornItems == 5: + core.buffService.addBuffToCreature(creature, "set_bonus_smuggler_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_smuggler_utility_b_3_sys', 0) + else: + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_1") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_2") + core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_smuggler_utility_b_3") \ No newline at end of file diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_dps.py b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py index 0cd1747e..3da099f0 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_dps.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_dps.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_dps_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_dps_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_dps_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py index 7ecc68fa..629ce660 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_a.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_a_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_a_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_a_2") diff --git a/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py index 09536bd4..b60b1c8f 100644 --- a/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py +++ b/scripts/equipment/bonus_sets/set_bonus_spy_utility_b.py @@ -18,10 +18,13 @@ def handleChange(core, creature, set): if wornItems == 3: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_1", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_1_sys', 0) elif wornItems == 4: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_2", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_2_sys', 0) elif wornItems == 5: core.buffService.addBuffToCreature(creature, "set_bonus_spy_utility_b_3", creature) + creature.sendSystemMessage('@set_bonus:set_bonus_spy_utility_b_3_sys', 0) else: core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_1") core.buffService.removeBuffFromCreatureByName(creature, "set_bonus_spy_utility_b_2") diff --git a/scripts/houses/player_cityhall_corellia_style_01.py b/scripts/houses/player_cityhall_corellia_style_01.py new file mode 100644 index 00000000..7b9e070b --- /dev/null +++ b/scripts/houses/player_cityhall_corellia_style_01.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_corellia_deed.iff", "object/building/player/city/shared_cityhall_corellia.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_naboo_style_01.py b/scripts/houses/player_cityhall_naboo_style_01.py new file mode 100644 index 00000000..0e9a8335 --- /dev/null +++ b/scripts/houses/player_cityhall_naboo_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_naboo_deed.iff", "object/building/player/city/shared_cityhall_naboo.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_cityhall_tatooine_style_01.py b/scripts/houses/player_cityhall_tatooine_style_01.py new file mode 100644 index 00000000..da337900 --- /dev/null +++ b/scripts/houses/player_cityhall_tatooine_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", "object/building/player/city/shared_cityhall_tatooine.iff", 0) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_corellia_style_01.py b/scripts/houses/player_guildhall_corellia_style_01.py new file mode 100644 index 00000000..d48d14e0 --- /dev/null +++ b/scripts/houses/player_guildhall_corellia_style_01.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_corellia_guild_deed.iff", "object/building/player/shared_player_guildhall_corellia_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_generic_style_01.py b/scripts/houses/player_guildhall_generic_style_01.py new file mode 100644 index 00000000..a52507ea --- /dev/null +++ b/scripts/houses/player_guildhall_generic_style_01.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_generic_guild_deed.iff", "object/building/player/shared_player_guildhall_generic_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_naboo_style_01.py b/scripts/houses/player_guildhall_naboo_style_01.py new file mode 100644 index 00000000..61304374 --- /dev/null +++ b/scripts/houses/player_guildhall_naboo_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_naboo_guild_deed.iff", "object/building/player/shared_player_guildhall_naboo_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_01.py b/scripts/houses/player_guildhall_tatooine_style_01.py new file mode 100644 index 00000000..edae69a7 --- /dev/null +++ b/scripts/houses/player_guildhall_tatooine_style_01.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_01.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(18.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_guildhall_tatooine_style_02.py b/scripts/houses/player_guildhall_tatooine_style_02.py new file mode 100644 index 00000000..395b56d6 --- /dev/null +++ b/scripts/houses/player_guildhall_tatooine_style_02.py @@ -0,0 +1,15 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/guild_deed/shared_tatooine_guild_style_02_deed.iff", "object/building/player/shared_player_guildhall_tatooine_style_02.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(4), float(12.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(400) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_atat.py b/scripts/houses/player_house_atat.py new file mode 100644 index 00000000..3d0b04d2 --- /dev/null +++ b/scripts/houses/player_house_atat.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff", "object/building/player/shared_player_house_atat.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-3.8), float(5.86), float(15.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_01.py b/scripts/houses/player_house_corellia_large_style_01.py new file mode 100644 index 00000000..c47098c5 --- /dev/null +++ b/scripts/houses/player_house_corellia_large_style_01.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff", "object/building/player/shared_player_house_corellia_large_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_large_style_02.py b/scripts/houses/player_house_corellia_large_style_02.py new file mode 100644 index 00000000..6e005a55 --- /dev/null +++ b/scripts/houses/player_house_corellia_large_style_02.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_01.py b/scripts/houses/player_house_corellia_medium_style_01.py new file mode 100644 index 00000000..d8a293c7 --- /dev/null +++ b/scripts/houses/player_house_corellia_medium_style_01.py @@ -0,0 +1,12 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_medium_style_02.py b/scripts/houses/player_house_corellia_medium_style_02.py new file mode 100644 index 00000000..a0472e2e --- /dev/null +++ b/scripts/houses/player_house_corellia_medium_style_02.py @@ -0,0 +1,13 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_corellia_medium_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01.py b/scripts/houses/player_house_corellia_small_style_01.py new file mode 100644 index 00000000..acae7c15 --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_01.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py new file mode 100644 index 00000000..5781e8eb --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_01_floorplan_02.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_01_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02.py b/scripts/houses/player_house_corellia_small_style_02.py new file mode 100644 index 00000000..1e55a1ed --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_02.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py new file mode 100644 index 00000000..6e7feff8 --- /dev/null +++ b/scripts/houses/player_house_corellia_small_style_02_floorplan_02.py @@ -0,0 +1,14 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_corellia_small_style_02_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_01.py b/scripts/houses/player_house_generic_large_style_01.py new file mode 100644 index 00000000..645038ca --- /dev/null +++ b/scripts/houses/player_house_generic_large_style_01.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff", "object/building/player/shared_player_house_generic_large_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(6), float(3), float(13.4))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_style_02.py b/scripts/houses/player_house_generic_large_style_02.py new file mode 100644 index 00000000..6ee98363 --- /dev/null +++ b/scripts/houses/player_house_generic_large_style_02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_deed.iff", "object/building/player/shared_player_house_generic_large_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.4), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s01.py b/scripts/houses/player_house_generic_large_window_s01.py new file mode 100644 index 00000000..66c1b69a --- /dev/null +++ b/scripts/houses/player_house_generic_large_window_s01.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s01_deed.iff", "object/building/player/shared_player_house_generic_large_window_s01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-13.7), float(3), float(9.1))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_large_window_s02.py b/scripts/houses/player_house_generic_large_window_s02.py new file mode 100644 index 00000000..fba62f6c --- /dev/null +++ b/scripts/houses/player_house_generic_large_window_s02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_large_window_s02_deed.iff", "object/building/player/shared_player_house_generic_large_window_s02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(10.4), float(3), float(-11))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(500) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_01.py b/scripts/houses/player_house_generic_medium_style_01.py new file mode 100644 index 00000000..e8473868 --- /dev/null +++ b/scripts/houses/player_house_generic_medium_style_01.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_deed.iff", "object/building/player/shared_player_house_generic_medium_style_01.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3),float(2.26),float(7.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_style_02.py b/scripts/houses/player_house_generic_medium_style_02.py new file mode 100644 index 00000000..7bd2db7b --- /dev/null +++ b/scripts/houses/player_house_generic_medium_style_02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_style_02_deed.iff", "object/building/player/shared_player_house_generic_medium_style_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.3), float(2.26), float(7.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed.py b/scripts/houses/player_house_generic_medium_windowed.py new file mode 100644 index 00000000..e10c4b17 --- /dev/null +++ b/scripts/houses/player_house_generic_medium_windowed.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_medium_windowed_s02.py b/scripts/houses/player_house_generic_medium_windowed_s02.py new file mode 100644 index 00000000..9c69e156 --- /dev/null +++ b/scripts/houses/player_house_generic_medium_windowed_s02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_s02_deed.iff", "object/building/player/shared_player_house_generic_medium_windowed_s02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(5.5), float(2.26), float(7.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_01.py b/scripts/houses/player_house_generic_small_style_01.py index 3b1f0a4c..778d50da 100644 --- a/scripts/houses/player_house_generic_small_style_01.py +++ b/scripts/houses/player_house_generic_small_style_01.py @@ -5,7 +5,7 @@ from engine.resources.scene import Point3D def setup(core): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", "object/building/player/shared_player_house_generic_small_style_01.iff", 2) - houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) houseTemplate.addPlaceablePlanet("tatooine") houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("naboo") diff --git a/scripts/houses/player_house_generic_small_style_01_floorplan_02.py b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py new file mode 100644 index 00000000..e20ec536 --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_01_floorplan_02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_01_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_style_02.py b/scripts/houses/player_house_generic_small_style_02.py index 4df4319c..87121425 100644 --- a/scripts/houses/player_house_generic_small_style_02.py +++ b/scripts/houses/player_house_generic_small_style_02.py @@ -5,7 +5,7 @@ from engine.resources.scene import Point3D def setup(core): houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02.iff", 2) - houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(1, 2, 3)) + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) houseTemplate.addPlaceablePlanet("tatooine") houseTemplate.addPlaceablePlanet("corellia") houseTemplate.addPlaceablePlanet("naboo") diff --git a/scripts/houses/player_house_generic_small_style_02_floorplan_02.py b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py new file mode 100644 index 00000000..72ef35ac --- /dev/null +++ b/scripts/houses/player_house_generic_small_style_02_floorplan_02.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_floor_02_deed.iff", "object/building/player/shared_player_house_generic_small_style_02_floorplan_02.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-1.9), float(2.86), float(8.35))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_window_style_03.py b/scripts/houses/player_house_generic_small_window_style_03.py new file mode 100644 index 00000000..260c2476 --- /dev/null +++ b/scripts/houses/player_house_generic_small_window_style_03.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_style_03_deed.iff", "object/building/player/shared_player_house_generic_small_window_style_03.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-6.6), float(2.36), float(6.3))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_generic_small_windowed.py b/scripts/houses/player_house_generic_small_windowed.py new file mode 100644 index 00000000..4f2293ab --- /dev/null +++ b/scripts/houses/player_house_generic_small_windowed.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_generic_house_small_window_deed.iff", "object/building/player/shared_player_house_generic_small_windowed.iff", 2) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(-7.39), float(2.36), float(2))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_hangar.py b/scripts/houses/player_house_hangar.py new file mode 100644 index 00000000..f3eab890 --- /dev/null +++ b/scripts/houses/player_house_hangar.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/tcg/series5/shared_structure_deed_player_house_hangar.iff", "object/building/player/shared_player_house_hangar.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(9.2), float(2.86), float(0.8))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_jabbas_sail_barge.py b/scripts/houses/player_house_jabbas_sail_barge.py new file mode 100644 index 00000000..abc84451 --- /dev/null +++ b/scripts/houses/player_house_jabbas_sail_barge.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_jabbas_sail_barge_deed.iff", "object/building/player/shared_player_house_jabbas_sail_barge.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_jedi_meditation_room.py b/scripts/houses/player_house_jedi_meditation_room.py new file mode 100644 index 00000000..df257c29 --- /dev/null +++ b/scripts/houses/player_house_jedi_meditation_room.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff", "object/building/player/shared_player_house_jedi_meditation_room.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(0), float(2.86), float(-3.5))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_mustafar_lg.py b/scripts/houses/player_house_mustafar_lg.py new file mode 100644 index 00000000..8d04566e --- /dev/null +++ b/scripts/houses/player_house_mustafar_lg.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/deed/player_house_deed/shared_mustafar_house_lg.iff", "object/building/player/shared_player_house_mustafar_lg.iff", 5) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(1.5), float(2.86), float(13.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(200) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/houses/player_house_sith_meditation_room.py b/scripts/houses/player_house_sith_meditation_room.py new file mode 100644 index 00000000..6e75e875 --- /dev/null +++ b/scripts/houses/player_house_sith_meditation_room.py @@ -0,0 +1,19 @@ +import sys +from services.housing import HouseTemplate +from engine.resources.scene import Point3D + +def setup(core): + houseTemplate = HouseTemplate("object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff", "object/building/player/shared_player_house_sith_meditation_room.iff", 3) + + houseTemplate.addBuildingSign("object/tangible/sign/player/shared_house_address.iff", Point3D(float(3), float(2.86), float(5.7))) + houseTemplate.addPlaceablePlanet("tatooine") + houseTemplate.addPlaceablePlanet("corellia") + houseTemplate.addPlaceablePlanet("naboo") + houseTemplate.addPlaceablePlanet("talus") + houseTemplate.addPlaceablePlanet("rori") + houseTemplate.addPlaceablePlanet("dantooine") + houseTemplate.addPlaceablePlanet("lok") + houseTemplate.setDefaultItemLimit(350) + + core.housingService.addHousingTemplate(houseTemplate) + return \ No newline at end of file diff --git a/scripts/loot/lootItems/clothing/robes/apprentice_robe.py b/scripts/loot/lootItems/clothing/robes/apprentice_robe.py new file mode 100644 index 00000000..25d13f68 --- /dev/null +++ b/scripts/loot/lootItems/clothing/robes/apprentice_robe.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_01.iff'] + +def customItemName(): + + return 'Apprentice Robe' diff --git a/scripts/loot/lootItems/clothes/tusken_raider_bandolier.py b/scripts/loot/lootItems/clothing/tusken_raider_bandolier.py similarity index 100% rename from scripts/loot/lootItems/clothes/tusken_raider_bandolier.py rename to scripts/loot/lootItems/clothing/tusken_raider_bandolier.py diff --git a/scripts/loot/lootItems/clothes/tusken_raider_boots.py b/scripts/loot/lootItems/clothing/tusken_raider_boots.py similarity index 100% rename from scripts/loot/lootItems/clothes/tusken_raider_boots.py rename to scripts/loot/lootItems/clothing/tusken_raider_boots.py diff --git a/scripts/loot/lootItems/clothes/tusken_raider_dress.py b/scripts/loot/lootItems/clothing/tusken_raider_dress.py similarity index 100% rename from scripts/loot/lootItems/clothes/tusken_raider_dress.py rename to scripts/loot/lootItems/clothing/tusken_raider_dress.py diff --git a/scripts/loot/lootItems/clothes/tusken_raider_gloves.py b/scripts/loot/lootItems/clothing/tusken_raider_gloves.py similarity index 100% rename from scripts/loot/lootItems/clothes/tusken_raider_gloves.py rename to scripts/loot/lootItems/clothing/tusken_raider_gloves.py diff --git a/scripts/loot/lootItems/clothes/tusken_raider_helmet.py b/scripts/loot/lootItems/clothing/tusken_raider_helmet.py similarity index 100% rename from scripts/loot/lootItems/clothes/tusken_raider_helmet.py rename to scripts/loot/lootItems/clothing/tusken_raider_helmet.py diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py new file mode 100644 index 00000000..4b4c5f4a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_1_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_01.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 1/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py new file mode 100644 index 00000000..1f48a31a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_2_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_02.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 2/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py new file mode 100644 index 00000000..c356c65a --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_3_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_03.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 3/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py new file mode 100644 index 00000000..e9d35cb3 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_4_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_04.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 4/5' diff --git a/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py b/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py new file mode 100644 index 00000000..a6b896c5 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/jedi_holocron_5_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_jedi_holocron_05.iff'] + +def customItemName(): + + return 'Strange Jedi HoloCron 5/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py new file mode 100644 index 00000000..eba59f0f --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_1_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_01.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 1/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py new file mode 100644 index 00000000..d0a7caf2 --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_2_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_02.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 2/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py new file mode 100644 index 00000000..56a4a56e --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_3_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_03.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 3/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py new file mode 100644 index 00000000..281e947d --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_4_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_04.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 4/5' diff --git a/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py b/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py new file mode 100644 index 00000000..acc7671e --- /dev/null +++ b/scripts/loot/lootItems/holocrons/sith_holocron_5_5.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_sith_holocron_01.iff'] + +def customItemName(): + + return 'Strange Sith HoloCron 5/5' diff --git a/scripts/loot/lootItems/kraytpearl_ancient_flawless.py b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py new file mode 100644 index 00000000..89e55d04 --- /dev/null +++ b/scripts/loot/lootItems/kraytpearl_ancient_flawless.py @@ -0,0 +1,8 @@ + +def itemTemplate(): + + return ['object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff'] + +def customItemName(): + + return '' diff --git a/scripts/loot/lootItems/rarelootchest1.py b/scripts/loot/lootItems/rareloot/rarelootchest1.py similarity index 100% rename from scripts/loot/lootItems/rarelootchest1.py rename to scripts/loot/lootItems/rareloot/rarelootchest1.py diff --git a/scripts/loot/lootItems/rarelootchest2.py b/scripts/loot/lootItems/rareloot/rarelootchest2.py similarity index 100% rename from scripts/loot/lootItems/rarelootchest2.py rename to scripts/loot/lootItems/rareloot/rarelootchest2.py diff --git a/scripts/loot/lootItems/relics/jedi_relic_1.py b/scripts/loot/lootItems/relics/jedi_relic_1.py new file mode 100644 index 00000000..04e3b978 --- /dev/null +++ b/scripts/loot/lootItems/relics/jedi_relic_1.py @@ -0,0 +1,12 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_jedi_relic_01_generic.iff'] + +def customItemName(): + + return 'A Jedi Relic' + +def usedInCollection(): + + return 'One-Handed Fifth Generation Lightsaber' diff --git a/scripts/loot/lootItems/relics/jedi_relic_2.py b/scripts/loot/lootItems/relics/jedi_relic_2.py new file mode 100644 index 00000000..a7dccedc --- /dev/null +++ b/scripts/loot/lootItems/relics/jedi_relic_2.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_jedi_relic_01_generic.iff'] + +def customItemName(): + + return 'A Jedi Relic' + diff --git a/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py new file mode 100644 index 00000000..6df73bea --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/bracelet_of_Inspired_Status(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Bracelet of Inspired Status (Right)' + +def requiredProfession(): + + return 'Entertainer' + +def requiredCL(): + + return 80 + +def itemSkillMods(): + + mods = ['expertise_en_inspire_pulse_duration_increase','1'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py new file mode 100644 index 00000000..7f34bf48 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/counter-toxin_wristband_prototype_IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Adventurer Hiker & Hunter Counter-Toxin Wristband Prototype IV (right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['absorption_bleeding','8'] + mods += ['absorption_disease','8'] + mods += ['absorption_fire','8'] + mods += ['absorption_poison','8'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py new file mode 100644 index 00000000..aaf1e4d9 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/force_amplification_crystal.py @@ -0,0 +1,5 @@ + +def itemTemplate(): + + return ['object/tangible/loot/misc/shared_force_crystal.iff'] + diff --git a/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py new file mode 100644 index 00000000..3e748ccf --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgency_wrist_implantat-BLACK-(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s06_r.iff'] + +def customItemName(): + + return 'Corellidyne Personal Insurgency Wris Implantat -BLACK- (Right)' + +def requiredProfession(): + + return 'Spy' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['expertise_action_line_sp_dm','4'] + mods += ['expertise_critical_line_sp_dm','4'] + mods += ['expertise_damage_line_sp_dm','4'] + mods += ['expertise_freeshot_sp_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py new file mode 100644 index 00000000..3cb1d321 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/insurgent_scanner_wrist_module_(right).py @@ -0,0 +1,21 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Idellian Arrays PLFS-4000 Insurgent Scanner Wrist Module (Right)' + +def biolink(): + + return 1 + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['detect_hidden','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py new file mode 100644 index 00000000..9dfd3ca8 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knight_meditation_bracelet_(right).py @@ -0,0 +1,26 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s04_r.iff'] + +def customItemName(): + + return 'Jedi Knight Meditation Bracelet (right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 75 + +def biolink(): + + return 1 + +def itemSkillMods(): + + mods = ['jedi_saber_assembly','3'] + mods += ['jedi_saber_experimentation','10'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py new file mode 100644 index 00000000..ff605263 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_knights_wristguard_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + +def customItemName(): + + return 'Jedi Knight\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_fs_dm','4'] + mods += ['expertise_damage_line_fs_dm','4'] + mods += ['expertise_freeshot_fs_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py new file mode 100644 index 00000000..b8565ab8 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/jedi_wristguard(right).py @@ -0,0 +1,28 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s02_r.iff'] + +def customItemName(): + + return 'Jedi\'s Wristguard (Right)' + +def requiredProfession(): + + return 'Jedi' + +def biolink(): + + return 1 + +def requiredCL(): + + return 61 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','3'] + mods += ['expertise_critical_line_fs_dm','3'] + mods += ['expertise_damage_line_fs_dm','3'] + mods += ['expertise_freeshot_fs_dm','3'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py new file mode 100644 index 00000000..1817be94 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/manufacturing_verdicator_200a_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Saldalith Manufacturing Verdicator 200A (Right)' + +def requiredProfession(): + + return 'Medic' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_me_dm','4'] + mods += ['expertise_critical_line_me_dm','4'] + mods += ['expertise_damage_line_me_dm','4'] + mods += ['expertise_healing_all','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py new file mode 100644 index 00000000..e81a23df --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/mysterious_data_disk.py @@ -0,0 +1,9 @@ + +def itemTemplate(): + + return ['object/tangible/loot/generic_usable/shared_datadisk_generic.iff'] + +def customItemName(): + + return 'Mysterious Data Disk' + diff --git a/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py new file mode 100644 index 00000000..34d0cfca --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/personnel_comlink_wrist-P4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'SoroSuub Personnel Comlink Wrist-P4 (right)' + +def requiredProfession(): + + return 'Officer' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_of_sure','4'] + mods += ['expertise_critical_line_of_sure','4'] + mods += ['expertise_damage_line_of_sure','4'] + mods += ['expertise_freeshot_of_sure','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py new file mode 100644 index 00000000..2c2d2d49 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeter_ranging_wrist_assist_V4_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Merr-Sonn Targeter Ranging Wrist Assist V4 (right)' + +def requiredProfession(): + + return 'Smuggler' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['fast_attack_line_sm_dm','4'] + mods += ['expertise_critical_line_sm_dm','4'] + mods += ['expertise_damage_line_sm_dm','4'] + mods += ['expertise_freeshot_sm_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py new file mode 100644 index 00000000..adcac454 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/targeting_assist_wrist_implant_PTI-IV_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Traxes BioElectronic Targeting Assist Wrist Implant PTI-IV (Right)' + +def requiredProfession(): + + return 'Commando' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_co_dm','4'] + mods += ['expertise_critical_line_co_dm','4'] + mods += ['expertise_damage_line_co_dm','4'] + mods += ['expertise_freeshot_co_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py new file mode 100644 index 00000000..61695558 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_assault_booster_zulu_(right).py @@ -0,0 +1,24 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Blastech Wristek - Wrist Assault Booster Zulu (right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 85 + +def itemSkillMods(): + + mods = ['expertise_action_line_fs_dm','4'] + mods += ['expertise_critical_line_dm','4'] + mods += ['expertise_damage_line_dm','4'] + mods += ['expertise_freeshot_dm','4'] + return mods diff --git a/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py new file mode 100644 index 00000000..f43a5684 --- /dev/null +++ b/scripts/loot/lootItems/treasureloot/wrist_communications_scanner_SCNv4_(right).py @@ -0,0 +1,22 @@ + +def itemTemplate(): + + return ['object/tangible/wearables/bracelet/shared_bracelet_s03_r.iff'] + +def customItemName(): + + return 'Courier Wrist Communications Scanner SCNv4 (Right)' + +def requiredProfession(): + + return 'Bounty Hunter' + +def requiredCL(): + + return 75 + +def itemSkillMods(): + + mods = ['droid_find_speed','10'] + mods += ['expertise_critical_niche_pvp','2'] + return mods diff --git a/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py new file mode 100644 index 00000000..5559fc50 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_ankarres_sapphire.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Ankarres Sapphire' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py new file mode 100644 index 00000000..4b6c1544 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_corusca_gem.py @@ -0,0 +1,16 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Corusca Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 diff --git a/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py new file mode 100644 index 00000000..ccd74091 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_nova_crystal.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Nova Crystal' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_power_gem.py b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py new file mode 100644 index 00000000..f51777d3 --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_power_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Power Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py new file mode 100644 index 00000000..2795adff --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_rol_stone.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Rol Stone' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py new file mode 100644 index 00000000..17a9ec0b --- /dev/null +++ b/scripts/loot/lootItems/veryrareloot/rare_sasho_gem.py @@ -0,0 +1,17 @@ + +def itemTemplate(): + + return ['object/tangible/loot/creature_loot/collections/shared_purple_rnd_cut_gem_style1.iff'] + +def customItemName(): + + return 'Rare Sasho Gem' + +def biolink(): + + return 1 + +def requiredCL(): + + return 80 + diff --git a/scripts/loot/lootPools/advanced_stims_80.py b/scripts/loot/lootPools/advanced_stims_80.py new file mode 100644 index 00000000..ea905ef8 --- /dev/null +++ b/scripts/loot/lootPools/advanced_stims_80.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['adv_agility_stim_80','adv_power_stim_80'] + +def itemChances(): + + return [50,50] \ No newline at end of file diff --git a/scripts/loot/lootPools/bh_armor_for_mando.py b/scripts/loot/lootPools/bh_armor_for_mando.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/colorcrystals.py b/scripts/loot/lootPools/colorcrystals.py index d372b968..4c42a245 100644 --- a/scripts/loot/lootPools/colorcrystals.py +++ b/scripts/loot/lootPools/colorcrystals.py @@ -5,4 +5,4 @@ def itemNames(): def itemChances(): - return [70] \ No newline at end of file + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/consumable_buff_items.py b/scripts/loot/lootPools/consumable_buff_items.py new file mode 100644 index 00000000..66f6cfb3 --- /dev/null +++ b/scripts/loot/lootPools/consumable_buff_items.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['flask_of_elba_water ','flask_of_naris-bud_tea','small_flask_of_nerfmilk'] + +def itemChances(): + return [33,33,33] \ No newline at end of file diff --git a/scripts/loot/lootPools/gem_collection_items.py b/scripts/loot/lootPools/gem_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/house_furniture.py b/scripts/loot/lootPools/house_furniture.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/jedi_components_treasure.py b/scripts/loot/lootPools/jedi_components_treasure.py new file mode 100644 index 00000000..91c26020 --- /dev/null +++ b/scripts/loot/lootPools/jedi_components_treasure.py @@ -0,0 +1,14 @@ + +def itemNames(): + + components = ['jedi_relic_1','jedi_relic_2','colorcrystal'] + components += ['powercrystal_select','powercrystal_premium'] + components += ['kraytpearl_select','kraytpearl_premium','kraytpearl_flawless','kraytpearl_ancient_flawless'] + components += ['jedi_holocron_2_5','jedi_holocron_4_5','sith_holocron_4_5'] + return components + +def itemChances(): + + return [48,2,29,3,2,5,4,1,0.1,5.7,0.1,0.1] #11 + + \ No newline at end of file diff --git a/scripts/loot/lootPools/jedi_relic_1.py b/scripts/loot/lootPools/jedi_relic_1.py new file mode 100644 index 00000000..b18c248f --- /dev/null +++ b/scripts/loot/lootPools/jedi_relic_1.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['jedi_relic_1'] + +def itemChances(): + + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/jediholocrons.py b/scripts/loot/lootPools/jediholocrons.py index e69de29b..a227cbe8 100644 --- a/scripts/loot/lootPools/jediholocrons.py +++ b/scripts/loot/lootPools/jediholocrons.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['jedi_holocron_1_5','jedi_holocron_2_5','jedi_holocron_3_5','jedi_holocron_4_5','jedi_holocron_5_5'] + +def itemChances(): + + return [25,15,30,5,25] \ No newline at end of file diff --git a/scripts/loot/lootPools/loot_kits_adhesives.py b/scripts/loot/lootPools/loot_kits_adhesives.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/profession_bracelets_61.py b/scripts/loot/lootPools/profession_bracelets_61.py new file mode 100644 index 00000000..68043333 --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_61.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_wristguard(right)'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_75.py b/scripts/loot/lootPools/profession_bracelets_75.py new file mode 100644 index 00000000..1ac31b60 --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_75.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['jedi_knight_meditation_bracelet_(right)','wrist_communications_scanner_SCNv4_(right)'] + names += ['insurgent_scanner_wrist_module_(right)','counter-toxin_wristband_prototype_IV_(right)','insurgency_wrist_implantat-BLACK-(right)'] + return names + +def itemChances(): + return [20,20,20,20,20] \ No newline at end of file diff --git a/scripts/loot/lootPools/profession_bracelets_85.py b/scripts/loot/lootPools/profession_bracelets_85.py new file mode 100644 index 00000000..dbaba8db --- /dev/null +++ b/scripts/loot/lootPools/profession_bracelets_85.py @@ -0,0 +1,10 @@ + +def itemNames(): + names = ['jedi_knights_wristguard_(right)','wrist_assault_booster_zulu_(right)','targeting_assist_wrist_implant_PTI-IV_(right)'] + names += ['personnel_comlink_wrist-P4_(right)','manufacturing_verdicator_200a_(right)'] + names += ['targeter_ranging_wrist_assist_V4_(right)','bracelet_of_Inspired_Status(right)'] + + return names + +def itemChances(): + return [16,14,14,14,14,14,14] \ No newline at end of file diff --git a/scripts/loot/lootPools/rare_buff_items.py b/scripts/loot/lootPools/rare_buff_items.py new file mode 100644 index 00000000..b816eb79 --- /dev/null +++ b/scripts/loot/lootPools/rare_buff_items.py @@ -0,0 +1,8 @@ + +def itemTemplates(): + names = ['rare_nova_crystal','rare_rol_stone','rare_power_gem'] + names += ['rare_corusca_gem','rare_sasho_gem','rare_ankarres_sapphire'] + return names + +def itemChances(): + return [15,17,17,17,17,17] \ No newline at end of file diff --git a/scripts/loot/lootPools/sithholocrons.py b/scripts/loot/lootPools/sithholocrons.py index e69de29b..b264dabe 100644 --- a/scripts/loot/lootPools/sithholocrons.py +++ b/scripts/loot/lootPools/sithholocrons.py @@ -0,0 +1,8 @@ + +def itemNames(): + + return ['sith_holocron_1_5','sith_holocron_2_5','sith_holocron_3_5','sith_holocron_4_5','sith_holocron_5_5'] + +def itemChances(): + + return [25,15,30,5,25] \ No newline at end of file diff --git a/scripts/loot/lootPools/treasure_extra.py b/scripts/loot/lootPools/treasure_extra.py new file mode 100644 index 00000000..9c6b639d --- /dev/null +++ b/scripts/loot/lootPools/treasure_extra.py @@ -0,0 +1,8 @@ + +def itemNames(): + names = ['mysterious_data_disk'] + + return names + +def itemChances(): + return [100] \ No newline at end of file diff --git a/scripts/loot/lootPools/treasure_hunter_collection_items.py b/scripts/loot/lootPools/treasure_hunter_collection_items.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/various_schematics.py b/scripts/loot/lootPools/various_schematics.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/weaponsmith_components.py b/scripts/loot/lootPools/weaponsmith_components.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/loot/lootPools/wearable_backpacks.py b/scripts/loot/lootPools/wearable_backpacks.py new file mode 100644 index 00000000..ac7a299e --- /dev/null +++ b/scripts/loot/lootPools/wearable_backpacks.py @@ -0,0 +1,6 @@ + +def itemNames(): + return ['textiles_survival_backpack_(schematic)','textiles_survival_backpack_V2_(schematic)'] + +def itemChances(): + return [60,40] \ No newline at end of file diff --git a/scripts/mobiles/canon/storm_commando.py b/scripts/mobiles/canon/storm_commando.py new file mode 100644 index 00000000..b6bf6523 --- /dev/null +++ b/scripts/mobiles/canon/storm_commando.py @@ -0,0 +1,33 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('storm_commando') + mobileTemplate.setLevel(71) + mobileTemplate.setDifficulty(0) + mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(0.4) + mobileTemplate.setWeaponType(1) + + templates = Vector() + templates.add('object/mobile/shared_dressed_scout_trooper_black_black.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_scout_blaster.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dx2.iff', 0, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedShot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('storm_commando', mobileTemplate) + diff --git a/scripts/mobiles/corellia/durni.py b/scripts/mobiles/corellia/durni.py new file mode 100644 index 00000000..a0dcfeed --- /dev/null +++ b/scripts/mobiles/corellia/durni.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + templates = Vector() + templates.add('object/mobile/shared_durni.iff') + mobileTemplate.setCreatureName('durni') + mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(4) + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('durni', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/dathomir/nightsister_slave.py b/scripts/mobiles/dathomir/nightsister_slave.py new file mode 100644 index 00000000..7ce31682 --- /dev/null +++ b/scripts/mobiles/dathomir/nightsister_slave.py @@ -0,0 +1,23 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('nightsister_slave') + mobileTemplate.setLevel(86) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dathomir_nightsister_slave.iff') + mobileTemplate.setTemplates(templates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('meleehit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('nightsister_slave', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/dathomir/rancor.py b/scripts/mobiles/dathomir/rancor.py new file mode 100644 index 00000000..975e6869 --- /dev/null +++ b/scripts/mobiles/dathomir/rancor.py @@ -0,0 +1,22 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('rancor') + mobileTemplate.setLevel(50) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(5) + + templates = Vector() + templates.add('object/mobile/shared_rancor.iff') + mobileTemplate.setTemplates(templates) + + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('rancor', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/forage/goon.py b/scripts/mobiles/forage/goon.py new file mode 100644 index 00000000..3a288b78 --- /dev/null +++ b/scripts/mobiles/forage/goon.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_goon') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_criminal_assassin_human_female_01.iff') + templates.add('object/mobile/shared_dressed_criminal_assassin_human_male_01.iff') + templates.add('object/mobile/shared_twilek_male.iff') + templates.add('object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff') + templates.add('object/mobile/shared_dressed_borvos_thug.iff') + templates.add('object/mobile/shared_wookiee_male.iff') + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/ranged/carbine/shared_carbine_dh17.iff', 1, 0.6) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/pistol/shared_pistol_dl44.iff', 2, 0.4) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/ranged/rifle/shared_rifle_dlt20a.iff', 0, 0.8) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('rangedshot') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forage_goon', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/forage/treasure_guard.py b/scripts/mobiles/forage/treasure_guard.py new file mode 100644 index 00000000..4071449b --- /dev/null +++ b/scripts/mobiles/forage/treasure_guard.py @@ -0,0 +1,57 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('treasure_guard') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + + templates = Vector() + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_05.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_human_06.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_human_04.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_male_zab_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_twk_03.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_01.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_02.iff') + templates.add('object/mobile/shared_dressed_dark_jedi_female_zab_03.iff') + + + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff', 9, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + weapontemplate = WeaponTemplate('object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff', 11, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setDefaultAttack('fs_flurry_1') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('treasure_guard', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/forage/worm.py b/scripts/mobiles/forage/worm.py new file mode 100644 index 00000000..c8e96a8c --- /dev/null +++ b/scripts/mobiles/forage/worm.py @@ -0,0 +1,39 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('forage_worm') + mobileTemplate.setLevel(1) + mobileTemplate.setDifficulty(1) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + + templates = Vector() + templates.add('object/mobile/shared_col_forage_aggravated_worm.iff') + templates.add('object/mobile/shared_col_forage_angry_worm.iff') + templates.add('object/mobile/shared_col_forage_brutal_worm.iff') + templates.add('object/mobile/shared_col_forage_carnivorous_worm.iff') + templates.add('object/mobile/shared_col_forage_ferocious_worm.iff') + templates.add('object/mobile/shared_col_forage_fierce_worm.iff') + templates.add('object/mobile/shared_col_forage_hungry_worm.iff') + templates.add('object/mobile/shared_col_forage_oozing_worm.iff') + templates.add('object/mobile/shared_col_forage_savage_worm.iff') + templates.add('object/mobile/shared_col_forage_territorial_worm.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/unarmed/shared_unarmed_default.iff', 6, 1.0) + weaponTemplates.add(weapontemplate) + #mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('forage_worm', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/kashyyyk/general_grievous.py b/scripts/mobiles/kashyyyk/general_grievous.py new file mode 100644 index 00000000..c6b18095 --- /dev/null +++ b/scripts/mobiles/kashyyyk/general_grievous.py @@ -0,0 +1,30 @@ +import sys +from services.spawn import MobileTemplate +from services.spawn import WeaponTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + + mobileTemplate.setCreatureName('ep3_general_grievous') + mobileTemplate.setLevel(80) + mobileTemplate.setDifficulty(2) + mobileTemplate.setAttackRange(6) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(9) + + templates = Vector() + templates.add('object/mobile/ep3/shared_general_grievous.iff') + mobileTemplate.setTemplates(templates) + + weaponTemplates = Vector() + weapontemplate = WeaponTemplate('object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff', 10, 1.0) + weaponTemplates.add(weapontemplate) + mobileTemplate.setWeaponTemplateVector(weaponTemplates) + + attacks = Vector() + mobileTemplate.setDefaultAttack('saberHit') + mobileTemplate.setAttacks(attacks) + + core.spawnService.addMobileTemplate('general_grievous', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/naboo/fambaa.py b/scripts/mobiles/naboo/fambaa.py new file mode 100644 index 00000000..63011f10 --- /dev/null +++ b/scripts/mobiles/naboo/fambaa.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + templates = Vector() + templates.add('object/mobile/shared_fambaa.iff') + mobileTemplate.setCreatureName('fambaa') + mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(23) + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('fambaa', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/naboo/kaadu.py b/scripts/mobiles/naboo/kaadu.py new file mode 100644 index 00000000..d4e27c91 --- /dev/null +++ b/scripts/mobiles/naboo/kaadu.py @@ -0,0 +1,15 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + templates = Vector() + templates.add('object/mobile/shared_kaadu_hue.iff') + mobileTemplate.setCreatureName('kaadu') + mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(14) + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('kaadu', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/tatooine/bantha.py b/scripts/mobiles/tatooine/bantha.py new file mode 100644 index 00000000..4d5ee1e7 --- /dev/null +++ b/scripts/mobiles/tatooine/bantha.py @@ -0,0 +1,15 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + templates = Vector() + templates.add('object/mobile/shared_bantha_hue.iff') + mobileTemplate.setCreatureName('bantha') + mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(14) + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('bantha', mobileTemplate) \ No newline at end of file diff --git a/scripts/mobiles/tatooine/dewback.py b/scripts/mobiles/tatooine/dewback.py new file mode 100644 index 00000000..f2c2bb79 --- /dev/null +++ b/scripts/mobiles/tatooine/dewback.py @@ -0,0 +1,16 @@ +import sys +from services.spawn import MobileTemplate +from java.util import Vector + +def addTemplate(core): + mobileTemplate = MobileTemplate() + templates = Vector() + templates.add('object/mobile/shared_dewback.iff') + mobileTemplate.setCreatureName('dewback') + mobileTemplate.setTemplates(templates) + mobileTemplate.setLevel(17) + attacks = Vector() + mobileTemplate.setDefaultAttack('creatureMeleeAttack') + mobileTemplate.setAttacks(attacks) + core.spawnService.addMobileTemplate('dewback', mobileTemplate) + \ No newline at end of file diff --git a/scripts/mobiles/tatooine/kreetle.py b/scripts/mobiles/tatooine/kreetle.py index ec037bd4..376add57 100644 --- a/scripts/mobiles/tatooine/kreetle.py +++ b/scripts/mobiles/tatooine/kreetle.py @@ -8,6 +8,8 @@ def addTemplate(core): templates.add('object/mobile/shared_kreetle.iff') mobileTemplate.setCreatureName('kreetle') mobileTemplate.setTemplates(templates) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(5) mobileTemplate.setLevel(5) attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') diff --git a/scripts/mobiles/tatooine/tusken_raider.py b/scripts/mobiles/tatooine/tusken_raider.py index 41542293..f3a3e867 100644 --- a/scripts/mobiles/tatooine/tusken_raider.py +++ b/scripts/mobiles/tatooine/tusken_raider.py @@ -10,6 +10,7 @@ def addTemplate(core): mobileTemplate.setLevel(10) mobileTemplate.setDifficulty(1) mobileTemplate.setAttackRange(24) + mobileTemplate.setAttackSpeed(1.0) templates = Vector() templates.add('object/mobile/shared_tusken_raider.iff') diff --git a/scripts/mobiles/tatooine/womprat.py b/scripts/mobiles/tatooine/womprat.py index 836d9922..f4277933 100644 --- a/scripts/mobiles/tatooine/womprat.py +++ b/scripts/mobiles/tatooine/womprat.py @@ -8,7 +8,13 @@ def addTemplate(core): templates.add('object/mobile/shared_womp_rat.iff') mobileTemplate.setCreatureName('womprat') mobileTemplate.setTemplates(templates) + mobileTemplate.setAttackRange(5) + mobileTemplate.setAttackSpeed(5) mobileTemplate.setLevel(5) + mobileTemplate.setAttackRange(3) + mobileTemplate.setAttackSpeed(1.0) + mobileTemplate.setWeaponType(6) + attacks = Vector() mobileTemplate.setDefaultAttack('creatureMeleeAttack') mobileTemplate.setAttacks(attacks) diff --git a/scripts/object/building/player/city/cityhall_corellia.py b/scripts/object/building/player/city/cityhall_corellia.py index ccad8904..161f75e3 100644 --- a/scripts/object/building/player/city/cityhall_corellia.py +++ b/scripts/object/building/player/city/cityhall_corellia.py @@ -1,4 +1,20 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(-12.2), float(1.5), float(-4.2)), Quaternion(float(0), float(0), float(0), float(0)),4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/cityhall_naboo.py b/scripts/object/building/player/city/cityhall_naboo.py index ccad8904..161f75e3 100644 --- a/scripts/object/building/player/city/cityhall_naboo.py +++ b/scripts/object/building/player/city/cityhall_naboo.py @@ -1,4 +1,20 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(-12.2), float(1.5), float(-4.2)), Quaternion(float(0), float(0), float(0), float(0)),4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/city/cityhall_tatooine.py b/scripts/object/building/player/city/cityhall_tatooine.py index ccad8904..161f75e3 100644 --- a/scripts/object/building/player/city/cityhall_tatooine.py +++ b/scripts/object/building/player/city/cityhall_tatooine.py @@ -1,4 +1,20 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(-12.2), float(1.5), float(-4.2)), Quaternion(float(0), float(0), float(0), float(0)),4) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) + + cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(16), float(2), float(-9)), Quaternion(float(1), float(1), float(1), float(0)),5) + #cityterminal.setAttachment('housing_parentstruct', object) + + city_vote_terminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city_vote.iff', Point3D(float(0), float(1.85), float(-8.5)), Quaternion(float(1), float(1), float(1), float(0)),3) + #cityterminal.setAttachment('housing_parentstruct', object) + return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_corellia_style_01.py b/scripts/object/building/player/player_guildhall_corellia_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_corellia_style_01.py +++ b/scripts/object/building/player/player_guildhall_corellia_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_generic_style_01.py b/scripts/object/building/player/player_guildhall_generic_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_generic_style_01.py +++ b/scripts/object/building/player/player_guildhall_generic_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_naboo_style_01.py b/scripts/object/building/player/player_guildhall_naboo_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_naboo_style_01.py +++ b/scripts/object/building/player/player_guildhall_naboo_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_tatooine_style_01.py b/scripts/object/building/player/player_guildhall_tatooine_style_01.py index ccad8904..8e623ae0 100644 --- a/scripts/object/building/player/player_guildhall_tatooine_style_01.py +++ b/scripts/object/building/player/player_guildhall_tatooine_style_01.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6,3, 18.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(18.9), float(2.5), float(10)), Quaternion(float(1), float(1), float(1), float(0)),7) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_guildhall_tatooine_style_02.py b/scripts/object/building/player/player_guildhall_tatooine_style_02.py index ccad8904..53903ad4 100644 --- a/scripts/object/building/player/player_guildhall_tatooine_style_02.py +++ b/scripts/object/building/player/player_guildhall_tatooine_style_02.py @@ -1,4 +1,13 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5,4, 12.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(4.0), float(2.2), float(9)), Quaternion(float(0), float(0), float(0), float(0)),1) + #structureterminal.setAttachment('radial_filename', 'structure/structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_atat.py b/scripts/object/building/player/player_house_atat.py index ccad8904..030485f9 100644 --- a/scripts/object/building/player/player_house_atat.py +++ b/scripts/object/building/player/player_house_atat.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -3.8, 5.86, 15.1, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 4.4, 18.5, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_large_style_01.py b/scripts/object/building/player/player_house_corellia_large_style_01.py index ccad8904..128a3e4b 100644 --- a/scripts/object/building/player/player_house_corellia_large_style_01.py +++ b/scripts/object/building/player/player_house_corellia_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6, 3, 13.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 14.9, 4.5, 3.5, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_large_style_02.py b/scripts/object/building/player/player_house_corellia_large_style_02.py index ccad8904..257e2444 100644 --- a/scripts/object/building/player/player_house_corellia_large_style_02.py +++ b/scripts/object/building/player/player_house_corellia_large_style_02.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_medium_style_01.py b/scripts/object/building/player/player_house_corellia_medium_style_01.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_corellia_medium_style_01.py +++ b/scripts/object/building/player/player_house_corellia_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_medium_style_02.py b/scripts/object/building/player/player_house_corellia_medium_style_02.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_corellia_medium_style_02.py +++ b/scripts/object/building/player/player_house_corellia_medium_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_01.py b/scripts/object/building/player/player_house_corellia_small_style_01.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_01.py +++ b/scripts/object/building/player/player_house_corellia_small_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py b/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_01_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_02.py b/scripts/object/building/player/player_house_corellia_small_style_02.py index ccad8904..d301f713 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py b/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py index ccad8904..faba7813 100644 --- a/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py +++ b/scripts/object/building/player/player_house_corellia_small_style_02_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_style_01.py b/scripts/object/building/player/player_house_generic_large_style_01.py index ccad8904..128a3e4b 100644 --- a/scripts/object/building/player/player_house_generic_large_style_01.py +++ b/scripts/object/building/player/player_house_generic_large_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 6, 3, 13.4, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 14.9, 4.5, 3.5, 0.707108, -0.707108, 3) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_style_02.py b/scripts/object/building/player/player_house_generic_large_style_02.py index ccad8904..257e2444 100644 --- a/scripts/object/building/player/player_house_generic_large_style_02.py +++ b/scripts/object/building/player/player_house_generic_large_style_02.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_window_s01.py b/scripts/object/building/player/player_house_generic_large_window_s01.py index ccad8904..cda43b48 100644 --- a/scripts/object/building/player/player_house_generic_large_window_s01.py +++ b/scripts/object/building/player/player_house_generic_large_window_s01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -13.7, 3, 9.1, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -10.5, 0.7, 4.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_large_window_s02.py b/scripts/object/building/player/player_house_generic_large_window_s02.py index ccad8904..fb7db369 100644 --- a/scripts/object/building/player/player_house_generic_large_window_s02.py +++ b/scripts/object/building/player/player_house_generic_large_window_s02.py @@ -1,4 +1,14 @@ import sys +from engine.resources.scene import Point3D +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', Point3D(float(10.4), float(3), float(-11)), Quaternion(float(0), float(0), float(0), float(0)), -1) + print(sign) + object.setAttachment("structureSign", sign) + + #structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -8.5, 0.7, 8.5, 0.707108, -0.707108, 1) + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', Point3D(float(8.6), float(0.5), float(2.5)), Quaternion(float(0), float(0), float(1), float(0)),1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal'). + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_style_01.py b/scripts/object/building/player/player_house_generic_medium_style_01.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_generic_medium_style_01.py +++ b/scripts/object/building/player/player_house_generic_medium_style_01.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_style_02.py b/scripts/object/building/player/player_house_generic_medium_style_02.py index ccad8904..26bf70af 100644 --- a/scripts/object/building/player/player_house_generic_medium_style_02.py +++ b/scripts/object/building/player/player_house_generic_medium_style_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.3, 2.26, 7.7, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.6, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_windowed.py b/scripts/object/building/player/player_house_generic_medium_windowed.py index ccad8904..175f5b8e 100644 --- a/scripts/object/building/player/player_house_generic_medium_windowed.py +++ b/scripts/object/building/player/player_house_generic_medium_windowed.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5, 2.26, 7.8, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.7, 0.5, 3.5, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_medium_windowed_s02.py b/scripts/object/building/player/player_house_generic_medium_windowed_s02.py index ccad8904..35ddb590 100644 --- a/scripts/object/building/player/player_house_generic_medium_windowed_s02.py +++ b/scripts/object/building/player/player_house_generic_medium_windowed_s02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 5.5, 2.26, 7.8, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 10.7, 0.5, 2.8, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_01.py b/scripts/object/building/player/player_house_generic_small_style_01.py index aa9723bd..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_style_01.py +++ b/scripts/object/building/player/player_house_generic_small_style_01.py @@ -6,6 +6,6 @@ def setup(core, object): object.setAttachment("structureSign", sign) structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) - #structureterminal.setAttachment('radial_filename', 'structure/structure_management_terminal') + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py b/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py +++ b/scripts/object/building/player/player_house_generic_small_style_01_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py b/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py index ccad8904..faba7813 100644 --- a/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py +++ b/scripts/object/building/player/player_house_generic_small_style_02_floorplan_02.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -1.9, 2.86, 8.35, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 6.5, 0.5, -3.8, 0.707108, -0.707108, 2) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_window_style_03.py b/scripts/object/building/player/player_house_generic_small_window_style_03.py index ccad8904..06b43e10 100644 --- a/scripts/object/building/player/player_house_generic_small_window_style_03.py +++ b/scripts/object/building/player/player_house_generic_small_window_style_03.py @@ -1,4 +1,12 @@ import sys + def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -6.6, 2.36, 6.3, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 7, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_generic_small_windowed.py b/scripts/object/building/player/player_house_generic_small_windowed.py index ccad8904..6e0ae61d 100644 --- a/scripts/object/building/player/player_house_generic_small_windowed.py +++ b/scripts/object/building/player/player_house_generic_small_windowed.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -5, 0.74, -1.81, 0.707107, -0.707107, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_hangar.py b/scripts/object/building/player/player_house_hangar.py index ccad8904..a3c2e750 100644 --- a/scripts/object/building/player/player_house_hangar.py +++ b/scripts/object/building/player/player_house_hangar.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -9.2, 2.86, 0.8, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9.0, 0.7, -2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_jabbas_sail_barge.py b/scripts/object/building/player/player_house_jabbas_sail_barge.py index ccad8904..354beadc 100644 --- a/scripts/object/building/player/player_house_jabbas_sail_barge.py +++ b/scripts/object/building/player/player_house_jabbas_sail_barge.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 0, 2.86, -3.5, 0, 1, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 9.0, 0.7, -2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_jedi_meditation_room.py b/scripts/object/building/player/player_house_jedi_meditation_room.py index ccad8904..b15dd1a4 100644 --- a/scripts/object/building/player/player_house_jedi_meditation_room.py +++ b/scripts/object/building/player/player_house_jedi_meditation_room.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 3, 2.86, 5.7, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 8.2, 0.7, -1.0, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_mustafar_lg.py b/scripts/object/building/player/player_house_mustafar_lg.py index ccad8904..c768c102 100644 --- a/scripts/object/building/player/player_house_mustafar_lg.py +++ b/scripts/object/building/player/player_house_mustafar_lg.py @@ -1,4 +1,11 @@ import sys def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 1.5, 2.86, 13.0, -1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', -4.1, 0.55, 6.6, 0.714 ,0.714, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/building/player/player_house_sith_meditation_room.py b/scripts/object/building/player/player_house_sith_meditation_room.py index ccad8904..fc3b32ac 100644 --- a/scripts/object/building/player/player_house_sith_meditation_room.py +++ b/scripts/object/building/player/player_house_sith_meditation_room.py @@ -1,4 +1,12 @@ import sys +from engine.resources.scene import Quaternion def setup(core, object): + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', 3, 2.86, 5.7, 1, 0, -1) + print(sign) + object.setAttachment("structureSign", sign) + + structureterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_player_structure.iff', 4.2, 0.7, 2, 0.707108, -0.707108, 1) + #structureterminal.setAttachment('radial_filename', 'structure_management_terminal') + structureterminal.setAttachment('housing_parentstruct', object) return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_01.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_twk_02.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_01.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_female_zab_02.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_01.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_02.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_03.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_04.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_05.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py index 58245dfb..9e598690 100644 --- a/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py +++ b/scripts/object/mobile/dressed_dark_jedi_master_male_human_06.py @@ -7,9 +7,16 @@ def setup(core, object): lootGroupChance_1 = 65 object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) - lootPoolNames_2 = ['powercrystals_hiq'] + lootPoolNames_2 = ['jedi_relic_1'] lootPoolChances_2 = [100] lootGroupChance_2 = 85 object.addToLootGroups(lootPoolNames_2,lootPoolChances_2,lootGroupChance_2) + lootPoolNames_3 = ['powercrystals_hiq'] + lootPoolChances_3 = [100] + lootGroupChance_3 = 12 + object.addToLootGroups(lootPoolNames_3,lootPoolChances_3,lootGroupChance_3) + + + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_dathomir_nightsister_slave.py b/scripts/object/mobile/dressed_dathomir_nightsister_slave.py index ccad8904..32ec3471 100644 --- a/scripts/object/mobile/dressed_dathomir_nightsister_slave.py +++ b/scripts/object/mobile/dressed_dathomir_nightsister_slave.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + lootPoolNames_1 = ['rareloot'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 5 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + return \ No newline at end of file diff --git a/scripts/object/mobile/dressed_scout_trooper_black_black.py b/scripts/object/mobile/dressed_scout_trooper_black_black.py index ccad8904..7334127c 100644 --- a/scripts/object/mobile/dressed_scout_trooper_black_black.py +++ b/scripts/object/mobile/dressed_scout_trooper_black_black.py @@ -1,4 +1,10 @@ import sys def setup(core, object): - return \ No newline at end of file + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + + return diff --git a/scripts/object/mobile/rancor.py b/scripts/object/mobile/rancor.py index ccad8904..8d5d1819 100644 --- a/scripts/object/mobile/rancor.py +++ b/scripts/object/mobile/rancor.py @@ -1,4 +1,10 @@ import sys def setup(core, object): + + lootPoolNames_1 = ['Junk'] + lootPoolChances_1 = [100] + lootGroupChance_1 = 90 + object.addToLootGroups(lootPoolNames_1,lootPoolChances_1,lootGroupChance_1) + return \ No newline at end of file diff --git a/scripts/object/mobile/vehicle/landspeeder_av21.py b/scripts/object/mobile/vehicle/landspeeder_av21.py index ccad8904..0f6896cd 100644 --- a/scripts/object/mobile/vehicle/landspeeder_av21.py +++ b/scripts/object/mobile/vehicle/landspeeder_av21.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'creature/vehicle') + object.setAttachment('passengers', 0) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py index ccad8904..d76c4b31 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_corellia_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') + object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_corellia_deed.iff') + #object.setLotRequirement(5) + object.setBMR(308) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py index ccad8904..51249c92 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_naboo_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') + object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_naboo_deed.iff') + #object.setLotRequirement(5) + object.setBMR(308) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py index ccad8904..d0afdb68 100644 --- a/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py +++ b/scripts/object/tangible/deed/city_deed/cityhall_tatooine_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/shared_construction_structure.iff') + object.setStructureTemplate('object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff') + #object.setLotRequirement(5) + object.setBMR(308) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py index ccad8904..4551ea56 100644 --- a/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/corellia_guild_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_corellia_style_01.iff') + object.setStructureTemplate('object/tangible/deed/guild_deed/shared_corellia_guild_deed.iff') + object.setLotRequirement(5) + object.setBMR(100) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py index ccad8904..e7bc0a46 100644 --- a/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/generic_guild_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_corellia_style_01.iff') + object.setStructureTemplate('object/tangible/deed/guild_deed/shared_generic_guild_deed.iff') + object.setLotRequirement(5) + object.setBMR(100) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py index ccad8904..773614bf 100644 --- a/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/naboo_guild_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_naboo_style_01.iff') + object.setStructureTemplate('object/tangible/deed/guild_deed/shared_naboo_guild_deed.iff') + object.setLotRequirement(5) + object.setBMR(100) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py index ccad8904..fe254f2c 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_tatooine_style_01.iff') + object.setStructureTemplate('object/tangible/deed/guild_deed/shared_tatooine_guild_deed.iff') + object.setLotRequirement(5) + object.setBMR(100) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py index ccad8904..8560e4bb 100644 --- a/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py +++ b/scripts/object/tangible/deed/guild_deed/tatooine_guild_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_guildhall_tatooine_style_02.iff') + object.setStructureTemplate('object/tangible/deed/guild_deed/shared_tatooine_guild_style_02_deed.iff') + object.setLotRequirement(5) + object.setBMR(100) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py index ccad8904..7110ddc2 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_large_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_large_deed.iff') + object.setLotRequirement(5) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py index ccad8904..fd316e06 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_large_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_large_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_large_style_02_deed.iff') + object.setLotRequirement(5) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py index ccad8904..0794bf6a 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_player_house_corellia_medium_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_medium_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py index ccad8904..ff561136 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_medium_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_player_house_corellia_medium_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_medium_style_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py index ccad8904..412cb41f 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py index ccad8904..d7c943c8 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_floor_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_floor_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py index ccad8904..5d4d2b6a 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py index ccad8904..af5a8c82 100644 --- a/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/corellia_house_small_style_02_floor_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_corellia_house_small_style_02_floor_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py index ccad8904..8762d716 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_deed.iff') + object.setLotRequirement(5) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py index ccad8904..33ac2fb5 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_style_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py index ccad8904..5c5fe535 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s01_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_window_s01_deed.iff') + object.setLotRequirement(2) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py index ccad8904..8ad15d4e 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_large_window_s02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_large_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_large_window_s02_deed.iff') + object.setLotRequirement(2) + object.setBMR(26) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py index ccad8904..98fbe311 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py index ccad8904..f8941dc1 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_style_02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_style_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py index ccad8904..28949069 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py index ccad8904..b784b441 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_medium_windowed_s02_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_medium_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_medium_windowed_s02_deed.iff') + object.setLotRequirement(2) + object.setBMR(18) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py index f59934aa..15cdd156 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_deed.py @@ -2,10 +2,10 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'deeds/structureDeed') - object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_corellia_small_style_01.iff') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff') object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff') - object.setLotRequirement(1) - object.setBMR(15) + object.setLotRequirement(2) + object.setBMR(8) return def use(core, actor, object): diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py index ccad8904..830af4dc 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_floor_02_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_floor_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py index ccad8904..54ae2ecb 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py index ccad8904..4ca8c73e 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_style_02_floor_02_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_floor_02_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py index ccad8904..5bad5b8e 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_01.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_window_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py index ccad8904..3666b630 100644 --- a/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/generic_house_small_window_style_03_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_generic_small_style_02.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_generic_house_small_window_style_03_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py index ccad8904..515f876b 100644 --- a/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py +++ b/scripts/object/tangible/deed/player_house_deed/jabbas_sail_barge_deed.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_jabbas_sail_barge.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_jabbas_sail_barge_deed.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py index ccad8904..9232137e 100644 --- a/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py +++ b/scripts/object/tangible/deed/player_house_deed/mustafar_house_lg.py @@ -1,4 +1,12 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_structure.iff') + object.setStructureTemplate('object/tangible/deed/player_house_deed/shared_mustafar_house_lg.iff') + object.setLotRequirement(2) + object.setBMR(8) + return + +def use(core, actor, object): return \ No newline at end of file diff --git a/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py b/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py index ccad8904..a5677b55 100644 --- a/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py +++ b/scripts/object/tangible/deed/vehicle_deed/landspeeder_av21_deed.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'deeds/vehicleDeed') + return + +def use(core, actor, object): + core.mountService.generateVehicle(actor, object, 'object/mobile/vehicle/shared_landspeeder_av21.iff', 'object/intangible/vehicle/shared_landspeeder_av21_pcd.iff') return \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py index ccad8904..3abde0fa 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_jedi_meditation_room_deed.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_jedi_meditation_room.iff') + object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff') + object.setLotRequirement(3) + object.setBMR(8) + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py index ccad8904..d069e412 100644 --- a/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py +++ b/scripts/object/tangible/tcg/series3/structure_deed_sith_meditation_room_deed.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_sith_meditation_room.iff') + object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_sith_meditation_room_deed.iff') + object.setLotRequirement(3) + object.setBMR(8) + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py b/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py index ccad8904..af249f3e 100644 --- a/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py +++ b/scripts/object/tangible/tcg/series5/structure_deed_player_house_atat.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_house_atat.iff') + object.setStructureTemplate('object/tangible/tcg/series5/shared_structure_deed_player_house_atat.iff') + object.setLotRequirement(3) + object.setBMR(8) + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py index ccad8904..3abde0fa 100644 --- a/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py +++ b/scripts/object/tangible/tcg/series5/structure_deed_player_house_hangar.py @@ -1,4 +1,14 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'deeds/structureDeed') + object.setConstructorTemplate('object/building/player/construction/shared_construction_player_jedi_meditation_room.iff') + object.setStructureTemplate('object/tangible/tcg/series3/shared_structure_deed_jedi_meditation_room_deed.iff') + object.setLotRequirement(3) + object.setBMR(8) + return + +def use(core, actor, object): + return + + \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_city.py b/scripts/object/tangible/terminal/terminal_city.py index ccad8904..f7302163 100644 --- a/scripts/object/tangible/terminal/terminal_city.py +++ b/scripts/object/tangible/terminal/terminal_city.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/city_maintenance_terminal') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py new file mode 100644 index 00000000..343e99a4 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..71fae11c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_bh_utility_a_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py index ddd2ac6f..e8f8a7f1 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_bh_utility_b_01_01.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'ring/unity') - object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bracelet_l_set_bh_utility_b_01_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py new file mode 100644 index 00000000..865e7b8c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..ea92c4c0 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..e08558c2 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py new file mode 100644 index 00000000..e52b43b6 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py index 3326feb5..1a728832 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_hero_01_01.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'ring/unity') - object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bracelet_l_set_hero_01_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py new file mode 100644 index 00000000..924df8fa --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..96000158 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..62f71073 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py new file mode 100644 index 00000000..829a3a86 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..6407d2b8 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..6e87fa2f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py new file mode 100644 index 00000000..aefea5a2 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..9240fd5d --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..a958daba --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..dec2691f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..f02cc54d --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..610fc4df --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py new file mode 100644 index 00000000..3a21b24f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..cf9b8380 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..145ca895 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_l_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_l_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_l_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py new file mode 100644 index 00000000..08a7a2d6 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..b44a772a --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_bh_utility_a_01_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py index 1d0aa2c9..9ea3acf4 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_bh_utility_b_01_01.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'ring/unity') - object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bracelet_r_set_bh_utility_b_01_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py new file mode 100644 index 00000000..7d8383e4 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..73afd03f --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..8a69bb24 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py new file mode 100644 index 00000000..11b9a215 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py index 81be4417..5a370ad7 100644 --- a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_hero_01_01.py @@ -1,8 +1,6 @@ import sys def setup(core, object): - object.setAttachment('radial_filename', 'ring/unity') - object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bracelet_r_set_hero_01_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py new file mode 100644 index 00000000..8cae3f65 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..9dda97ca --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..db66599a --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py new file mode 100644 index 00000000..7a77ab9b --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..9b293184 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..40149c33 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py new file mode 100644 index 00000000..21e5d96b --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..7b95ebd9 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..bb55fb6c --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..d2e2ca9e --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..17f32009 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..e07a84d5 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py new file mode 100644 index 00000000..a1400617 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..490bfeab --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..1f08b3c0 --- /dev/null +++ b/scripts/object/tangible/wearables/bracelet/item_bracelet_r_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_bracelet_r_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_bracelet_r_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py new file mode 100644 index 00000000..32a45e54 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..dbadc7c6 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_bh_utility_a_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py new file mode 100644 index 00000000..1b0ddc6b --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_dps_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..4ceb7c9d --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..e66ace6b --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_commando_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py new file mode 100644 index 00000000..bac4ae58 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_ent_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py new file mode 100644 index 00000000..c4633a07 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..5f3dedba --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..70b69a4a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_jedi_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py new file mode 100644 index 00000000..3a68cd61 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..95b05680 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..ca854c4a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_medic_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py new file mode 100644 index 00000000..dfc931a7 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..90c155f0 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..b75eac31 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_officer_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..fdfb2c15 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_dps_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..2e7a85d0 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..bda69a67 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_smuggler_utility_b_01_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py new file mode 100644 index 00000000..2cda8727 --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..af9be68a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_a_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..8345b02a --- /dev/null +++ b/scripts/object/tangible/wearables/necklace/item_necklace_set_spy_utility_b_01_01.py @@ -0,0 +1,17 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_necklace_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_necklace_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py new file mode 100644 index 00000000..90d0db77 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_bh_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..ff5fc10c --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_bh_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py new file mode 100644 index 00000000..e0b35da0 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..b43926e7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..5620019d --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_commando_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py new file mode 100644 index 00000000..0aa88bec --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_ent_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py new file mode 100644 index 00000000..1986def1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..295383ef --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..9aae6cd1 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_jedi_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py new file mode 100644 index 00000000..6323b57e --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..1dcbdafa --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..26be442a --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_medic_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py new file mode 100644 index 00000000..a622cec9 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..05e7c4a5 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_a_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..d7c050b7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_officer_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..03ad7556 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..62fbde63 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..6a9fc806 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_smuggler_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py new file mode 100644 index 00000000..7bb6861f --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..aa7306d4 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..e37dc6cf --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_band_set_spy_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_band_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_band_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py new file mode 100644 index 00000000..9bb5bc01 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_bh_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_bh_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_dm_crit', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_bh_return_fire', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_dps_3) + object.setAttachment('setBonus', 'set_bonus_bh_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py new file mode 100644 index 00000000..7c69c061 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_a_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_bh_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_bh_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 50) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_bh_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_bh_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_bh_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_bh_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py index 0d16a24a..4f1511b9 100644 --- a/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py +++ b/scripts/object/tangible/wearables/ring/item_ring_set_bh_utility_b_01_01.py @@ -1,6 +1,8 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') object.setAttachment('radial_filename', 'ring/unity') object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py new file mode 100644 index 00000000..cffd2d14 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_dps_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_co_grenade', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_co_grenade', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_co_grenade', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_dps_3) + object.setAttachment('setBonus', 'set_bonus_commando_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py new file mode 100644 index 00000000..26d83059 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 20) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_block_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:combat_block_value', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py new file mode 100644 index 00000000..82e3a076 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_commando_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_commando_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_commando_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 10) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 15) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_devastation_bonus', 5) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_commando_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_commando_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_commando_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_commando_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py new file mode 100644 index 00000000..723903a0 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_ent_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_ent_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_ent_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Entertainer') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 30) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_ent_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_ent_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_ent_3') + object.setAttachment('setBonus', 'set_bonus_ent') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py new file mode 100644 index 00000000..4bf14f5f --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_dps_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_sweep', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_dm', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_sweep', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_jedi_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_jedi_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_jedi_dps_3') + object.setAttachment('setBonus', 'set_bonus_jedi_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py new file mode 100644 index 00000000..651141da --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_utility_a_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_cc_crit', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_fs_ae_dm_cc', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_cc_crit', 3) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_fs_ae_dm_cc', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_a_3') + object.setAttachment('setBonus', 'set_jedi_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py new file mode 100644 index 00000000..a6b3d8ec --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_jedi_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_jedi_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_jedi_utility_b_01_01') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_glancing_blow_all', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_critical_hit_reduction', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_jedi_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_jedi_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_jedi_utility_b_3') + object.setAttachment('setBonus', 'set_jedi_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py new file mode 100644 index 00000000..1209fcee --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_dps_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_burst', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_me_smash', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_buff_duration_line_me_enhance', 360) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_dm', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_medic_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_medic_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_medic_dps_3') + object.setAttachment('setBonus', 'set_bonus_medic_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py new file mode 100644 index 00000000..bd270056 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_utility_a_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_evasion', 6) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_heal', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_heal', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_revive', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_a_3') + object.setAttachment('setBonus', 'set_medic_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py new file mode 100644 index 00000000..339a68b4 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_medic_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_medic_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_medic_utility_b_01_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_me_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_me_debuff', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_me_debuff', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_medic_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_medic_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_medic_utility_b_3') + object.setAttachment('setBonus', 'set_medic_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py new file mode 100644 index 00000000..2355f9cf --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_dps_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_paint', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_paint', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_sure', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_sure', 1) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_dps_3') + object.setAttachment('setBonus', 'set_bonus_officer_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py new file mode 100644 index 00000000..79fbeff8 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_a_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_utility_a_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:cooldown_percent_of_group_buff', 4) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_of_heal', 1) + # object.setIntAttribute('cat_skill_mod_bonus.@stat_n:XXX', 1) Rallypoint Duration Increase / couldnt find the effect yet + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_group_buff', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_of_purge', 3) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py new file mode 100644 index 00000000..4e8ee197 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_officer_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_officer_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_officer_utility_b_01_01') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_of_aoe', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_of_aoe', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_officer_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_officer_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_officer_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_officer_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py new file mode 100644 index 00000000..90e4dd89 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_dps_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_dps_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sm_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_smuggler_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_smuggler_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_smuggler_dps_3') + object.setAttachment('setBonus', 'set_bonus_smuggler_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py new file mode 100644 index 00000000..6b961659 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_a_01_01.py @@ -0,0 +1,20 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_utility_a_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:bh_dire_snare', 7) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_dm_cc', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sm_dm_cc', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_a_3') + object.setAttachment('setBonus', 'set_smuggler_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py new file mode 100644 index 00000000..6b74bc35 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_smuggler_utility_b_01_01.py @@ -0,0 +1,18 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_smuggler_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_smuggler_utility_b_01_01') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 85) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sm_false_hope', 2) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 30) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_smuggler_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_smuggler_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_smuggler_utility_b_3') + object.setAttachment('setBonus', 'set_smuggler_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py new file mode 100644 index 00000000..3563aed7 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_dps_01_01.py @@ -0,0 +1,21 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_dps_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_dps_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dm', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_line_sp_dot', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_cooldown_line_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_freeshot_sp_dm', 1) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:fast_attack_line_sp_dm', 2) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_dps_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_dps_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_dps_3') + object.setAttachment('setBonus', 'set_bonus_spy_dps') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py new file mode 100644 index 00000000..e57da3f8 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_a_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_utility_a_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_utility_a_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_a_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_a_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_a_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_a') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py new file mode 100644 index 00000000..3903a677 --- /dev/null +++ b/scripts/object/tangible/wearables/ring/item_ring_set_spy_utility_b_01_01.py @@ -0,0 +1,19 @@ +import sys + +def setup(core, object): + object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') + object.setStfFilename('static_item_n') + object.setStfName('item_ring_set_spy_utility_b_01_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_ring_set_spy_utility_b_01_01') + object.setIntAttribute('required_combat_level', 85) + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_strikethrough_chance', 2) + object.setIntAttribute('cat_skill_mod_bonus.@stat_n:expertise_action_all', 1) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 50) + object.setStringAttribute('@set_bonus:piece_bonus_count_3', '@set_bonus:set_bonus_spy_utility_b_1') + object.setStringAttribute('@set_bonus:piece_bonus_count_4', '@set_bonus:set_bonus_spy_utility_b_2') + object.setStringAttribute('@set_bonus:piece_bonus_count_5', '@set_bonus:set_bonus_spy_utility_b_3') + object.setAttachment('setBonus', 'set_bonus_spy_utility_b') + return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py index f4e46790..80081dce 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s05.py @@ -1,31 +1,22 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_04_05') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_04_05') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 20) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 250) + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_dark_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 250) - core.skillModService.addSkillMod(actor, 'precision_modified', 250) - core.skillModService.addSkillMod(actor, 'luck_modified', 250) - - Buff = actor.getBuffByName('proc_old_dark_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - - if actor: - core.buffService.addBuffToCreature(actor, 'proc_old_dark_jedi_gift') - return - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) - core.skillModService.deductSkillMod(actor, 'precision_modified', 250) - core.skillModService.deductSkillMod(actor, 'luck_modified', 250) - - Buff = actor.getBuffByName('proc_old_dark_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - return - diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py index 9c60f170..0b850eec 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s05.py @@ -1,34 +1,26 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_04_05') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_04_05') + + object.setStringAttribute('protection_level', 'Radiant') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 20) + + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 250) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 250) + + + object.setStringAttribute('proc_name', '@ui_buff:proc_old_light_jedi_gift') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + + object.setAttachment('type', 'jedi_robe') + object.setAttachment('setBonus', 'set_bonus_jedi_robe') + return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'agility_modified', 250) - core.skillModService.addSkillMod(actor, 'constitution_modified', 250) - core.skillModService.addSkillMod(actor, 'strength_modified', 250) - - Buff = actor.getBuffByName('proc_old_light_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - - if actor: - core.buffService.addBuffToCreature(actor, 'proc_old_light_jedi_gift') - return - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'agility_modified', 250) - core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) - core.skillModService.deductSkillMod(actor, 'strength_modified', 250) - - Buff = actor.getBuffByName('proc_old_light_jedi_gift') - if actor.getBuffList().contains(Buff): - core.buffService.removeBuffFromCreature(actor, Buff) - return - return - import sys -def setup(core, object): - return \ No newline at end of file + diff --git a/scripts/radial/creature/vehicle.py b/scripts/radial/creature/vehicle.py index 5935709d..5106c8ee 100644 --- a/scripts/radial/creature/vehicle.py +++ b/scripts/radial/creature/vehicle.py @@ -6,8 +6,7 @@ def createRadial(core, owner, target, radials): radials.add(RadialOptions(0, 7, 1, '')) if core.mountService.canMount(owner, target): - radials.add(RadialOptions(1, 40, 3, '@pet/pet_menu:menu_enter_exit')) - radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 40, 3, '@pet/pet_menu:menu_enter_exit')) if target.getOwnerId() == owner.getObjectID(): radials.add(RadialOptions(0, 60, 3, '@pet/pet_menu:menu_store')) if core.mountService.canRepair(owner, target): @@ -18,11 +17,11 @@ def handleSelection(core, owner, target, option): mntSvc = core.mountService if target: - if option == 21: + if option == 40: if mntSvc.isMounted(owner): - mntSvc.mount(owner, target) + mntSvc.dismount(owner, target) else: - mntSvc.unmount(owner, target) + mntSvc.mount(owner, target) elif option == 60: mntSvc.store(owner, target) elif option == 114: diff --git a/scripts/radial/object/conversation.py b/scripts/radial/object/conversation.py index ee774b7d..0603ecb1 100644 --- a/scripts/radial/object/conversation.py +++ b/scripts/radial/object/conversation.py @@ -9,7 +9,6 @@ def createRadial(core, owner, target, radials): def handleSelection(core, owner, target, option): if option == 26 and target: - print 'test' core.conversationService.handleStartConversation(owner, target) return \ No newline at end of file diff --git a/scripts/radial/object/treasureContainer.py b/scripts/radial/object/treasureContainer.py new file mode 100644 index 00000000..2a3ff12d --- /dev/null +++ b/scripts/radial/object/treasureContainer.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.clear() + radials.add(RadialOptions(0, 21, 1, 'Open')) + radials.add(RadialOptions(0, 7, 1, 'Examine')) + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + + if target.getAttachment('TreasureExtractorID')!=owner.getObjectID(): + owner.sendSystemMessage('@treasure_map/treasure_map:wrong_player',0); + return + + forager = resources.common.Forager() + if forager.countAliveGuards(target)>0: + owner.sendSystemMessage('@treasure_map/treasure_map:kill_guards_message',0); + return + + core.simulationService.openContainer(owner, target); + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremap.py b/scripts/radial/object/treasuremap.py new file mode 100644 index 00000000..fe5f7c72 --- /dev/null +++ b/scripts/radial/object/treasuremap.py @@ -0,0 +1,71 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:use')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + + mapPlanet = target.getAttachment('MapPlanet') + planet = core.terrainService.getPlanetByID(mapPlanet) + if planet==None: + owner.sendSystemMessage('The treasure map disk is faulty, no Planet',0) + return + + planetName = planet.getName() + #if owner.getPlanetId()!=mapPlanet: + #owner.sendSystemMessage('The treasure is buried on ' + planetName,0) + #return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0) + window.setProperty('bg.caption.lblTitle:Text', '@treasure_map/treasure_map:title_'+target.getAttachment('MapSTFName')) + window.setProperty('Prompt.lblPrompt:Text', '@treasure_map/treasure_map:text_'+target.getAttachment('MapSTFName')) + + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:Text', '@treasure_map/treasure_map:close') + window.setProperty('btnOk:Text', '@treasure_map/treasure_map:store_waypoint') + returnList = Vector() + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, storeWaypoint) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, close) + + owner.setAttachment('LastReadMap',target) + + core.suiService.openSUIWindow(window); + + return + +def storeWaypoint(owner, window, eventType, returnList): + planetCenter = engine.resources.scene.Point3D(0,0,0) + #treasureLocation = resources.common.SpawnPoint.getRandomPosition(planetCenter, 2000, 6000, owner.getPlanetId()); + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 50, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Treasure Map') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapRead'); + readMap.setAttachment('MapAreaLocation', treasureLocation); + return + + +def close(owner, window, eventType, returnList): + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapExtract.py b/scripts/radial/object/treasuremapExtract.py new file mode 100644 index 00000000..7277620e --- /dev/null +++ b/scripts/radial/object/treasuremapExtract.py @@ -0,0 +1,35 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +import resources.common.Forager +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:extract_treasure')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target and owner: + exactLoc = target.getAttachment('MapExactLocation') + + #if owner.getPosition().getDistance2D(owner.getPosition())<20: + if owner.getPosition().getDistance2D(exactLoc)<20: + + target.setAttachment('radial_filename', 'object/usable') + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_here',0) + #spawn guards + forager = resources.common.Forager() + forager.handleGuardSpawn(owner,target) + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_dist_near',0) + + + return + \ No newline at end of file diff --git a/scripts/radial/object/treasuremapRead.py b/scripts/radial/object/treasuremapRead.py new file mode 100644 index 00000000..bc3e0735 --- /dev/null +++ b/scripts/radial/object/treasuremapRead.py @@ -0,0 +1,57 @@ +from resources.common import RadialOptions +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import resources.common.SpawnPoint +import engine.resources.scene.Point3D +import main.NGECore +from resources.objects.waypoint import WaypointObject +from engine.resources.common import CRC +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '@treasure_map/treasure_map:search_area')) + radials.add(RadialOptions(0, 7, 1, '')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + + planetID = target.getAttachment('MapPlanet') + if planetID!=owner.getPlanetId(): + owner.sendSystemMessage('@treasure_map/treasure_map:wrong_planet',0) + + if owner.getCombatFlag()!=0: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_combat',0) + return + + if owner.getPosture()==10: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_no_mount',0) + return + + + areaLoc = target.getAttachment('MapAreaLocation'); + owner.sendSystemMessage('owner.getPosition().getDistance2D(areaLoc) %s' % owner.getPosition().getDistance2D(areaLoc),0) + + if owner.getPosition().getDistance2D(areaLoc)<20: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_success',0) + + treasureLocation = resources.common.SpawnPoint.getRandomPosition(owner.getPosition(), 1, 100, owner.getPlanetId()); + waypoint = main.NGECore.getInstance().objectService.createObject('object/waypoint/shared_waypoint.iff', owner.getPlanet(), treasureLocation.x, treasureLocation.z, treasureLocation.y) + waypoint.setName('Exact Location of the Treasure') + waypoint.setActive(True) + waypoint.setColor(WaypointObject.YELLOW) + waypoint.setPlanetCRC(CRC.StringtoCRC(owner.getPlanet().name)) + waypoint.setStringAttribute('', '') + ghost = owner.getSlottedObject('ghost') + ghost.waypointAdd(waypoint) + owner.sendSystemMessage('@treasure_map/treasure_map:sys_store_waypoint', 0) + readMap = owner.getAttachment('LastReadMap') + readMap.setAttachment('radial_filename', 'object/treasuremapExtract'); + readMap.setAttachment('MapExactLocation', treasureLocation); + else: + owner.sendSystemMessage('@treasure_map/treasure_map:sys_cant_pinpoint',0) + + + return + \ No newline at end of file diff --git a/scripts/radial/terminal/city_maintenance_terminal.py b/scripts/radial/terminal/city_maintenance_terminal.py new file mode 100644 index 00000000..ef951426 --- /dev/null +++ b/scripts/radial/terminal/city_maintenance_terminal.py @@ -0,0 +1,685 @@ +from resources.common import RadialOptions +from protocol.swg import ResourceListForSurveyMessage +from services.sui.SUIService import MessageBoxType +from services.sui.SUIWindow import Trigger +from java.util import Vector +import main.NGECore +import sys + +def createRadial(core, owner, target, radials): + #(byte parentId, short optionId, byte optionType, String description) + radials.clear() + radials.add(RadialOptions(0, 7, 0, 'Examine')) + radials.add(RadialOptions(0, 216, 0, '@city/city:city_management')) + radials.add(RadialOptions(0, 226, 0, '@city/city:city_info')) + radials.add(RadialOptions(0, 227, 0, '@city/city:remove_trainers')) + radials.add(RadialOptions(2, 217, 0, '@city/city:city_name_new_t')) + radials.add(RadialOptions(2, 222, 0, '@city/city:city_register')) + radials.add(RadialOptions(2, 224, 0, '@city/city:unzone')) + radials.add(RadialOptions(2, 218, 0, '@city/city:city_militia')) + radials.add(RadialOptions(2, 219, 0, '@city/city:treasury_taxes')) + radials.add(RadialOptions(2, 221, 0, '@city/city:treasury_withdraw')) + radials.add(RadialOptions(2, 225, 0, '@city/city:city_specializations')) + radials.add(RadialOptions(2, 228, 0, '@city/city:align')) + radials.add(RadialOptions(3, 121, 0, '@city/city:non_citizen_city_status')) + radials.add(RadialOptions(3, 122, 0, '@city/city:rank_info_t')) + radials.add(RadialOptions(3, 123, 0, '@city/city:citizen_list_t')) + + return + +def handleSelection(core, owner, target, option): + playerCity = core.playerCityService.getPlayerCity(owner) + if playerCity==None: + return + + if option == 217: + if owner is not None: + handleSetCityName(core, owner, target, option) + return + if option == 124: + if owner is not None: + core.housingService.createStatusSUIPage(owner,target) + return + if option == 129: + if owner is not None: + core.housingService.createPayMaintenanceSUIPage(owner,target) + return + if option == 50: + if owner is not None: + core.housingService.createRenameSUIPage(owner,target) + return + if option == 222: + if owner is not None: + handleRegisterMap(core, owner, target, option) + return + if option == 171: + if owner is not None: + core.housingService.handleListAllItems(owner,target) + return + if option == 219: + if owner is not None: + handleAdjustTaxes(core, owner, target, option) + return + if option == 225: + if owner is not None: + handleSpecialization(core, owner, target, option) + return + if option == 221: + if owner is not None: + handleWithdrawal(core, owner, target, option) + return + if option == 121: + if owner is not None: + handleCityRankInfo(core, owner, target, option) + return + if option == 122: + if owner is not None: + handleCityRankInfo(core, owner, target, option) + return + if option == 123: + if owner is not None: + handleCitizenList(core, owner, target, option) + return + +def handleSetCityName(core, owner, target, option): + window = core.suiService.createInputBox(2,'@city/city:city_name_new_t','@city/city:city_name_new_d', owner, target, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setnameCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setnameCallBack) + core.suiService.openSUIWindow(window); + return + +def setnameCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + + +def handleAdjustTaxes(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<2: + owner.sendSystemMessage('@city/city:no_rank_taxes', 0) + return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:adjust_taxes_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:adjust_taxes_d') + + window.addListBoxMenuItem('@city/city:set_tax_t_income',0) + window.addListBoxMenuItem('@city/city:set_tax_t_property',1) + window.addListBoxMenuItem('@city/city:set_tax_t_sales',2) + window.addListBoxMenuItem('@city/city:set_tax_t_travel',3) + window.addListBoxMenuItem('@city/city:set_tax_t_garage',4) + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setAdjustTaxesCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + core.suiService.openSUIWindow(window); + return + +def setAdjustTaxesCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + handleSetIncomeTax(owner) + return + if returnList.get(0)=='1': + handleSetPropertyTax(owner) + return + if returnList.get(0)=='2': + handleSetSalesTax(owner) + return + if returnList.get(0)=='3': + handleSetTravelTax(owner) + return + if returnList.get(0)=='4': + handleSetGarageTax(owner) + return + + return + +def handleSetIncomeTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_income','@city/city:set_tax_d_income \n \n @city/city:income_tax_prompt : %s' % playerCity.getIncomeTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetIncomeTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetIncomeTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>2000 or int(returnList.get(0))<0: + owner.sendSystemMessage('Income tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_income_tax', 0) + return + +def handleSetSalesTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_sales','@city/city:set_tax_d_sales \n \n @city/city:sales_tax_prompt : %s' % playerCity.getSalesTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetSalesTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetSalesTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>20 or int(returnList.get(0))<0: + owner.sendSystemMessage('Sales tax value is out of range of accepteable values.', 0) + handleSetSalesTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_sales_tax', 0) + return + +def handleSetPropertyTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_property','@city/city:set_tax_d_property \n \n @city/city:property_tax_prompt : %s' % playerCity.getPropertyTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetPropertyTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetPropertyTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>50 or int(returnList.get(0))<0: + owner.sendSystemMessage('Property tax value is out of range of accepteable values.', 0) + handleSetPropertyTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setIncomeTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_property_tax', 0) + return + +def handleSetTravelTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.hasShuttlePort()==0: + owner.sendSystemMessage('@city/city:no_shuttleport', 0) + return + + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_travel','@city/city:set_tax_d_travel \n \n @city/city:travel_tax_prompt : %s' % playerCity.getTravelTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetTravelTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetTravelTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>500 or int(returnList.get(0))<1: + owner.sendSystemMessage('Travel tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setTravelTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_travel_fee', 0) + return + +def handleSetGarageTax(owner): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = main.NGECore.getInstance().suiService.createInputBox(2,'@city/city:set_tax_t_garage','@city/city:set_tax_d_garage \n\n @city/city:garage_tax : %s' % playerCity.getGarageTax(), owner, owner, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSetGarageTaxCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSetGarageTaxCallBack(owner, window, eventType, returnList): + if int(returnList.get(0))>500 or int(returnList.get(0))<1: + owner.sendSystemMessage('Garage tax value is out of range of accepteable values.', 0) + handleSetIncomeTax(owner) + return + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setGarageTax(int(returnList.get(0))) + owner.sendSystemMessage('@city/city:set_garage_tax', 0) + return + +def handleWithdrawal(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10) + + window.setProperty("bg.caption.lblTitle:Text", "@city/city:treasury_withdraw_subject") + window.setProperty("Prompt.lblPrompt:Text", "@city/city:treasury_withdraw_prompt" + "\n \n @city/city:treasury_status : %s" % playerCity.getCityTreasury()) + + window.setProperty("msgPayMaintenance", "transaction.txtInputFrom"); + + window.setProperty("transaction.lblFrom:Text", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo:Text", "@city/city:treasury_withdraw"); + window.setProperty("transaction.lblFrom", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo", "@city/city:treasury_withdraw"); + + window.setProperty("transaction.lblStartingFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.lblStartingTo:Text", '0'); + + window.setProperty("transaction:InputFrom", "555555"); + window.setProperty("transaction:InputTo", "666666"); + + window.setProperty("transaction:txtInputFrom", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction:txtInputTo", "1"); + window.setProperty("transaction.txtInputFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + + window.setProperty("transaction.ConversionRatioFrom", "1"); + window.setProperty("transaction.ConversionRatioTo", "0"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + returnList = Vector() + returnList.add('transaction.txtInputFrom:Text') + returnList.add('ransaction.txtInputTo:Text') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setWithdrawalCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setWithdrawalCallBack) + core.suiService.openSUIWindow(window); + return + +def setWithdrawalCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleCitizenList(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:citizen_list_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:citizen_list_prompt') + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + index = 1; + for citizen in playerCity.getCitizens(): + citizenObject = core.objectService.getObject(citizen) + window.addListBoxMenuItem(citizenObject.getCustomName(),index) + index += 1 + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setCitizenListCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setCitizenListCallBack) + core.suiService.openSUIWindow(window); + return + +def setCitizenListCallBack(owner, window, eventType, returnList): + #handle waypoint creation to citizen's house + return + +def handleCityRankInfo(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:rank_info_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:rank_info_d') + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + + window.addListBoxMenuItem('City : ' + playerCity.getCityName(),0) + window.addListBoxMenuItem('@city/city:radius_prompt : %s' % playerCity.getCityRadius(),1) + window.addListBoxMenuItem('@city/city:city_rank_prompt : @city/city:rank' + str(playerCity.getRank()),2) + window.addListBoxMenuItem('@city/city:reg_citizen_prompt : %s' % len(playerCity.getCitizens()),3) + if playerCity.getRank()>=3 and playerCity.getSpecialization()>-1: + window.addListBoxMenuItem('@city/city:specialization_prompt : @city/city:' + playerCity.getSpecializationSTFNamesAsList().get(playerCity.getSpecialization()),4) + + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + window.setProperty('btnCancel:Text', '@cancel') + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setCityInfoCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setCitizenListCallBack) + core.suiService.openSUIWindow(window); + return + +def setCityInfoCallBack(owner, window, eventType, returnList): + #handle waypoint creation to citizen's house + return + +def handleRegisterMap(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<3: + owner.sendSystemMessage('@city/city:cant_register_rank', 0) + return + + if owner.getObjectId()!=playerCity.getMayorID(): + owner.sendSystemMessage('@city/city:cant_register', 0) + return + + # now register it somehow + + return + +def setRegisterMapCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleSpecialization(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getRank()<3: + owner.sendSystemMessage('@city/city:no_rank_spec', 0) + return + + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_specs_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_specs_d') + + window.addListBoxMenuItem('@city/city:city_spec_cloning',0) + window.addListBoxMenuItem('@city/city:city_spec_bm_incubator',1) + window.addListBoxMenuItem('@city/city:city_spec_storyteller',2) + window.addListBoxMenuItem('@city/city:city_spec_entertainer',3) + window.addListBoxMenuItem('@city/city:city_spec_missions',4) + window.addListBoxMenuItem('@city/city:city_spec_industry',5) + window.addListBoxMenuItem('@city/city:city_spec_doctor',6) + window.addListBoxMenuItem('@city/city:city_spec_research',7) + window.addListBoxMenuItem('@city/city:city_spec_sample_rich',8) + window.addListBoxMenuItem('@city/city:city_spec_master_manufacturing',9) + window.addListBoxMenuItem('@city/city:city_spec_master_healing',10) + window.addListBoxMenuItem('@city/city:city_spec_stronghold',11) + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setSpecializationCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + core.suiService.openSUIWindow(window); + return + +def setSpecializationCancelCallBack(owner, window, eventType, returnList): + return + +def setSpecializationCallBack(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + showCloning(owner) + return + if returnList.get(0)=='1': + showDNA(owner) + return + if returnList.get(0)=='2': + showEncore(owner) + return + if returnList.get(0)=='3': + showEntertainment(owner) + return + if returnList.get(0)=='4': + showImproved(owner) + return + if returnList.get(0)=='5': + showManufacturing(owner) + return + if returnList.get(0)=='6': + showMedical(owner) + return + if returnList.get(0)=='7': + showResearch(owner) + return + if returnList.get(0)=='8': + showSample(owner) + return + + return + +def showCloning(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_cloning') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_cloning_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleCloningCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleCloningCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',1) + showSpecConfirmWindow(owner) + return + +def showDNA(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_bm_incubator') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_bm_incubator_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleDNACallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleDNACallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',2) + showSpecConfirmWindow(owner) + return + +def showEncore(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_storyteller') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_storyteller_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEncoreCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEncoreCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',3) + showSpecConfirmWindow(owner) + return + + +def showEntertainment(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_entertainer') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_entertainer_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEntertainmentCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEntertainmentCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',4) + showSpecConfirmWindow(owner) + return + +def showImproved(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_missions') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_missions_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleImprovedCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleImprovedCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',5) + showSpecConfirmWindow(owner) + return + +def showManufacturing(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_industry') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_industry_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleManufacturingCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleManufacturingCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',6) + showSpecConfirmWindow(owner) + return + +def showMedical(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_doctor') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_doctor_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleMedicalCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleMedicalCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',7) + showSpecConfirmWindow(owner) + return + +def showResearch(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_research') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_research_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleResearchCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleResearchCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',8) + showSpecConfirmWindow(owner) + return + +def showSample(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_sample_rich') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_sample_rich_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSampleCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCancelCallBack) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSampleCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',9) + showSpecConfirmWindow(owner) + return + +def showSpecConfirmWindow(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:confirm_spec_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:confirm_spec_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Yes") + window.setProperty("btnCancel:Text", "No") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSpecConfirmCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSpecConfirmCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSpecConfirmCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + chosenSpec = owner.getAttachment('ChosenCitySpec') + playerCity.setSpecialisation(chosenSpec) + return \ No newline at end of file diff --git a/scripts/static_spawns/tatooine.py b/scripts/static_spawns/tatooine.py index c059c589..b376cf1f 100644 --- a/scripts/static_spawns/tatooine.py +++ b/scripts/static_spawns/tatooine.py @@ -15,7 +15,7 @@ def addPlanetSpawns(core, planet): junkdealer = stcSvc.spawnObject('object/mobile/shared_junk_dealer_m_01.iff', 'tatooine', long(0), float(3525), float(4), float(-4804), float(0.70), float(0.71)) junkdealer.setOptionsBitmask(264) junkdealer.setCustomName('a Junk Dealer') - junkdealer.setAttachment('radial_filename', 'conversation'); + junkdealer.setAttachment('radial_filename', 'object/conversation'); junkdealer.setAttachment('conversationFile','junk_dealer') return diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 88784bcf..e51fd562 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -61,7 +61,6 @@ import services.housing.HousingService; import services.InstanceService; import services.LoginService; import services.LootService; -import services.MissionService; import services.PlayerService; import services.ScriptService; import services.SimulationService; @@ -83,9 +82,11 @@ import services.gcw.GCWService; import services.guild.GuildService; import services.LoginService; import services.map.MapService; +import services.mission.MissionService; import services.object.ObjectService; import services.object.UpdateService; import services.pet.MountService; +import services.playercities.PlayerCityService; import services.resources.HarvesterService; import services.resources.ResourceService; import services.retro.RetroService; @@ -172,7 +173,7 @@ public class NGECore { public WeatherService weatherService; public SpawnService spawnService; public AIService aiService; - //public MissionService missionService; + public MissionService missionService; public InstanceService instanceService; public DevService devService; public SurveyService surveyService; @@ -183,6 +184,7 @@ public class NGECore { public LootService lootService; public HarvesterService harvesterService; public MountService mountService; + public PlayerCityService playerCityService; // Login Server @@ -305,6 +307,7 @@ public class NGECore { lootService = new LootService(this); harvesterService = new HarvesterService(this); mountService = new MountService(this); + playerCityService = new PlayerCityService(this); if (config.keyExists("JYTHONCONSOLE.PORT")) { int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); @@ -319,7 +322,7 @@ public class NGECore { } spawnService = new SpawnService(this); aiService = new AIService(this); - //missionService = new MissionService(this); + missionService = new MissionService(this); if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { surveyService = new SurveyService(this); @@ -356,10 +359,11 @@ public class NGECore { zoneDispatch.addService(playerService); zoneDispatch.addService(buffService); zoneDispatch.addService(entertainmentService); - //zoneDispatch.addService(missionService); + zoneDispatch.addService(missionService); zoneDispatch.addService(bazaarService); zoneDispatch.addService(lootService); zoneDispatch.addService(mountService); + zoneDispatch.addService(playerCityService); if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) { zoneDispatch.addService(surveyService); diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index a9f541b8..cb1ff04b 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -74,6 +74,8 @@ public class ObjControllerMessage extends SWGMessage { public static final int NEXT_CRAFTING_STAGE_RESULT = 0x01BE; public static final int DRAFT_SLOTS_QUERY_RESPONSE = 0x01BF; public static final int RESOURCE_WEIGHTS = 0x0207; + public static final int MISSION_ACCEPT_RESPONSE = 0x00FA; + public static final int MISSION_ABORT_RESPONSE = 0x0142; public ObjControllerMessage() { diff --git a/src/protocol/swg/objectControllerObjects/CombatSpam.java b/src/protocol/swg/objectControllerObjects/CombatSpam.java index fbf836de..26d64b9a 100644 --- a/src/protocol/swg/objectControllerObjects/CombatSpam.java +++ b/src/protocol/swg/objectControllerObjects/CombatSpam.java @@ -26,7 +26,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import services.combat.CombatService.HitType; +import resources.datatables.HitType; public class CombatSpam extends ObjControllerObject{ diff --git a/src/protocol/swg/objectControllerObjects/MissionAbort.java b/src/protocol/swg/objectControllerObjects/MissionAbort.java new file mode 100644 index 00000000..2195c511 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAbort.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class MissionAbort extends ObjControllerObject { + private long characterId; + private long missionId; + + public MissionAbort() { } + + @Override + public void deserialize(IoBuffer data) { + setCharacterId(data.getLong()); + data.getInt(); + setMissionId(data.getLong()); + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(32).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.MISSION_ABORT_RESPONSE); + buffer.putLong(characterId); + buffer.putInt(0); + buffer.putLong(missionId); + return null; + } + + public long getMissionId() { return missionId; } + + public void setMissionId(long missionId) { this.missionId = missionId; } + + public long getCharacterId() { return characterId; } + + public void setCharacterId(long characterId) { this.characterId = characterId; } +} diff --git a/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java b/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java new file mode 100644 index 00000000..403861d3 --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAcceptRequest.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import org.apache.mina.core.buffer.IoBuffer; + +public class MissionAcceptRequest extends ObjControllerObject { + + private long missionObjId; + private long terminalObjId; + private byte terminalType; + + public MissionAcceptRequest() { } + + @Override + public void deserialize(IoBuffer data) { + data.getLong(); + data.getInt(); + setMissionObjId(data.getLong()); + setTerminalObjId(data.getLong()); + setTerminalType(data.get()); + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getMissionObjId() { + return missionObjId; + } + + public void setMissionObjId(long misssionObjId) { + this.missionObjId = misssionObjId; + } + + public long getTerminalObjId() { + return terminalObjId; + } + + public void setTerminalObjId(long terminalObjId) { + this.terminalObjId = terminalObjId; + } + + public void setTerminalType(byte terminalType) { + this.terminalType = terminalType; + } + + public byte getTerminalType() { + return terminalType; + } +} diff --git a/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java b/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java new file mode 100644 index 00000000..faad427b --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/MissionAcceptResponse.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; + +public class MissionAcceptResponse extends ObjControllerObject { + + private long objectId; + private long missionObjId; + private byte terminalType; + private byte flag; + + public MissionAcceptResponse(long objectId, long missionObjId, byte terminalType, byte flag) { + this.objectId = objectId; + this.missionObjId = missionObjId; + this.terminalType = terminalType; + this.flag = flag; + } + + @Override + public void deserialize(IoBuffer data) { + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer = IoBuffer.allocate(27).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(ObjControllerMessage.MISSION_ACCEPT_RESPONSE); + buffer.putLong(objectId); + buffer.putInt(0); + + buffer.putLong(missionObjId); + buffer.put(flag); + buffer.put(terminalType); + + return buffer.flip(); + } + +} diff --git a/src/protocol/swg/objectControllerObjects/MissionListRequest.java b/src/protocol/swg/objectControllerObjects/MissionListRequest.java index aacf1bd0..5e7aa208 100644 --- a/src/protocol/swg/objectControllerObjects/MissionListRequest.java +++ b/src/protocol/swg/objectControllerObjects/MissionListRequest.java @@ -34,7 +34,7 @@ public class MissionListRequest extends ObjControllerObject { @Override public void deserialize(IoBuffer data) { - Console.println("MissionListRequest: " + StringUtilities.bytesToHex(data.array())); + //Console.println("MissionListRequest: " + StringUtilities.bytesToHex(data.array())); setObjectId(data.getLong()); data.getInt(); // unk data.get(); // unk byte diff --git a/src/resources/common/Forager.java b/src/resources/common/Forager.java new file mode 100644 index 00000000..e0445f29 --- /dev/null +++ b/src/resources/common/Forager.java @@ -0,0 +1,520 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.common; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.Vector; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.scene.Quaternion; +import main.NGECore; +import resources.datatables.Options; +import resources.objects.cell.CellObject; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; +import resources.objects.loot.LootGroup; +import resources.objects.tangible.TangibleObject; +import services.ai.AIActor; + +/** + * @author Charon + */ + +public class Forager { + + public static final int LYASE_ENZYME = 0; + public static final int RARE_COMPONENT = 1; + public static final int INSECT_BAIT = 2; + public static final int GRUB_BAIT = 3; + public static final int WORM_BAIT = 4; + public static final int MYSTERIOUS_DATA_DISC = 5; + + private int[] mapPlanetIDs = new int[]{6,7,8}; + + // consider foraged food food/foraged + // tangible/item/treasure_map/shared_relic_buff_s01.iff + + public Forager(){ + + } + + public boolean handleForageResults(CreatureObject forager){ + // determine foraged object + SWGObject foragerInventory = forager.getSlottedObject("inventory"); + + + // you can use Kommerken Steak food which increases your + // foraging chance by 12% and gives you a + // 5% bonus chance of finding a treasure map. + + int randomForageRoll = new Random().nextInt(100); + int randomForageObjectRoll = new Random().nextInt(100); + int remainder = 0; + int forageResultChance = 100; + int kommerkenBonus = 0; + + int[] forageChances = new int[]{10,10,25,25,25,5}; + int[] forageChances2 = new int[]{12,10,21,23,24,10}; // Kommerken Steak + int[] forageChances3 = new int[]{20,9,22,22,22,5}; // if you got the pig + + + int chosenObject = 0; + +// if (forager.hasChuckedIn(KommerkenSteak)){ +// kommerkenBonus = 12; +// forageChances = forageChances2; +// } + +// if (forager.gotThePig(pig)){ +// forageChances = forageChances3; +//} + //forager.sendSystemMessage("randomForageRoll " + randomForageRoll,(byte) 0); + if (randomForageRoll=80){ + chosenObject = 6; + forager.sendSystemMessage("@skl_use:sys_forage_noroom",(byte) 0); + } + + // chosenObject = 5; // To test TMs + if(forager.getClient().isGM()) // Always yield a TM for testing + chosenObject = 5; + + //forager.sendSystemMessage("chosenObject " + chosenObject,(byte) 0); + switch (chosenObject) { + + case LYASE_ENZYME: String template = "object/tangible/loot/beast/shared_enzyme_2.iff"; + TangibleObject foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + // determine color here + foragedObject.setCustomizationVariable("/private/index_color_1", (byte) new Random().nextInt(10)); // edb_vial.pal + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case RARE_COMPONENT: template = "object/tangible/loot/beast/shared_enzyme_1.iff"; // for now, must find temp + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case INSECT_BAIT: template = "object/tangible/fishing/bait/shared_bait_insect.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case GRUB_BAIT: template = "object/tangible/fishing/bait/shared_bait_grub.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case WORM_BAIT: template = "object/tangible/fishing/bait/shared_bait_worm.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + case MYSTERIOUS_DATA_DISC: template = "object/tangible/loot/generic_usable/shared_datadisk_generic.iff"; + foragedObject = (TangibleObject) NGECore.getInstance().objectService.createObject(template, forager.getPlanet()); + foragedObject.setCustomName(getLevelDependentMapName(forager.getLevel())); + foragedObject.setAttachment("MapLevel", forager.getLevel()); + foragedObject.setAttachment("MapSTFName", getLevelDependentSTFName(forager.getLevel())); + int mapPlanetID = new Random().nextInt(mapPlanetIDs.length-1); + foragedObject.setAttachment("MapPlanet", mapPlanetIDs[mapPlanetID]); + //System.out.println("mapPlanetID " + mapPlanetIDs[mapPlanetID]); + foragedObject.setAttachment("radial_filename", "object/treasuremap"); + //foragedObject.setAttachment("radial_filename", "object/treasuremapExtract"); + foragerInventory.add(foragedObject); + forager.sendSystemMessage("",(byte) 0); + break; + + default: break; + ///object/tangible/treasure_map/shared_treasure_map_base.iff shared_treasure_map_quest.iff + } + + if (chosenObject<6) + forager.sendSystemMessage("@skl_use:sys_forage_success",(byte) 0); + + // spawn adversaries + int adversaryRoll = new Random().nextInt(100); + // A new buff is imaginable that would decrease the chance of running into adversaries here, just an idea + + if (chosenObject>6) + adversaryRoll=999; + + // adversaryRoll=999; // To test TMs + + if (adversaryRoll<14) { // 14 100 // To test TMs + int adversaryTypeRoll = new Random().nextInt(100); + if (adversaryTypeRoll<50){ + // wormie + spawnWormie(forager); + } else { + // goon + spawnGoon(forager); + } + } + + } else { + forager.sendSystemMessage("@skl_use:sys_forage_fail",(byte) 0); + + } + + return true; + } + + private String getLevelDependentMapName(int level){ + if (level>=1 && level<=10) + return "Mysterious Data Disk (Adventurer's Treasure)"; + if (level>=11 && level<=20) + return "Mysterious Data Disk (Villager's Hidden Savings)"; + if (level>=21 && level<=30) + return "A map to a Trader's Hidden Treasure"; + if (level>=31 && level<=40) + return "A map to a Bounty Hunter's Hidden Stash"; + if (level>=41 && level<=50) + return "A droid's data disk with map coordinates"; + if (level>=51 && level<=60) + return "A map to a Jedi Knight's body"; + if (level>=61 && level<=70) + return "A map to Jedi Artifacts"; + if (level>=71 && level<=80) + return "A map to a cursed item"; + if (level>=81 && level<=90) + return "Mysterious Data Disk (Mysterious Container) "; + return ""; + } + + private String getLevelDependentSTFName(int level){ + if (level>=1 && level<=10) + return "treasure_guard_adventurer"; + if (level>=11 && level<=20) + return "treasure_guard_villager"; + if (level>=21 && level<=30) + return "treasure_guard_trader"; + if (level>=31 && level<=40) + return "treasure_guard_bounty_hunter"; + if (level>=41 && level<=50) + return "treasure_guard_droid"; + if (level>=51 && level<=60) + return "treasure_guard_padawan"; + if (level>=61 && level<=70) + return "treasure_guard_jedi"; + if (level>=71 && level<=80) + return "treasure_guard_jedi_elder"; + if (level>=81 && level<=90) + return "treasure_guard_jedi_elite"; + return ""; + } + + + + + + + public void spawnWormie(CreatureObject forager){ + int level = forager.getLevel(); + String name = ""; + Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); + CreatureObject wormie = NGECore.getInstance().spawnService.spawnCreature("forage_worm", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + switch (wormie.getTemplate()) { + + case "object/mobile/shared_col_forage_aggravated_worm.iff": + name = "An Aggravated Worm"; + break; + + case "object/mobile/shared_col_forage_angry_worm.iff": + name = "An Angry Worm"; + break; + + case "object/mobile/shared_col_forage_brutal_worm.iff": + name = "A Brutal Worm"; + break; + + case "object/mobile/shared_col_forage_carnivorous_worm.iff": + name = "A Carnivorous Worm"; + break; + + case "object/mobile/shared_col_forage_ferocious_worm.iff": + name = "A Ferocious Worm"; + break; + + case "object/mobile/shared_col_forage_fierce_worm.iff": + name = "A Fierce Worm"; + break; + + case "object/mobile/shared_col_forage_hungry_worm.iff": + name = "A Hungry Worm"; + break; + + case "object/mobile/shared_col_forage_oozing_worm.iff": + name = "An Oozing Worm"; + break; + + case "object/mobile/shared_col_forage_savage_worm.iff": + name = "A Savage Worm"; + break; + + case "object/mobile/shared_col_forage_territorial_worm.iff": + name = "A Territorial Worm"; + break; + } + wormie.setCustomName(name); + wormie.setCustomName2(name); + wormie.setLevel(forager.getLevel()); + wormie.setOptions(Options.AGGRESSIVE, true); + wormie.setOptions(Options.ATTACKABLE, true); + AIActor actor = (AIActor) wormie.getAttachment("AI"); + actor.addDefender(forager); + } + + public void spawnGoon(CreatureObject forager){ + System.out.println("GOON"); + int level = forager.getLevel(); + String name = ""; + Point3D wormiePosition = SpawnPoint.getRandomPosition(forager.getPosition(), 1, 6, forager.getPlanetId()); + CreatureObject goon = NGECore.getInstance().spawnService.spawnCreature("forage_goon", forager.getPlanet().getName(), 0L, wormiePosition.x, wormiePosition.y, wormiePosition.z, (short)level); + // thief wookie criminal scavenger @forage_enemy:bark_thief + String barkString = ""; + + switch (goon.getTemplate()) { + + case "object/mobile/shared_dressed_criminal_assassin_human_female_01.iff": + name = "A criminal"; + barkString = "bark_criminal"; + break; + + case "object/mobile/shared_dressed_criminal_assassin_human_male_01.iff": + name = "A Scavenger"; + barkString = "bark_scavenger"; + break; + + case "object/mobile/shared_twilek_male.iff": + name = "A Thief"; + barkString = "bark_thief"; + break; + + case "object/mobile/shared_dressed_binayre_pirate_zabrak_male_01.iff": + name = "A Pirate"; + barkString = "bark_thief"; + break; + + case "object/mobile/shared_dressed_borvos_thug.iff": + name = "A Thug"; + barkString = "bark_criminal"; + break; + + case "object/mobile/shared_wookiee_male.iff": + name = "A Thug"; + barkString = "bark_wookiee"; + break; + + } + + goon.addObserver(forager); + goon.setCustomName(name); + goon.setCustomName2(name); + goon.setLevel(forager.getLevel()); + goon.setOptions(Options.AGGRESSIVE, true); + goon.setOptions(Options.ATTACKABLE, true); + AIActor actor = (AIActor) goon.getAttachment("AI"); + actor.addDefender(forager); + forager.sendSystemMessage("@foraging/forage_enemy:" + barkString,(byte) 0); + //OutOfBand oob = new OutOfBand(new ProsePackage("@foraging/forage_enemy",barkString)); + OutOfBand oob = new OutOfBand(new ProsePackage("@jawa_trader","cant_understand")); + forager.sendSystemMessage("@jawa_trader:cant_understand",(byte) 0); + NGECore.getInstance().chatService.spatialChat(goon, forager, "", (short)0x0, (short)0x0, 1, oob); + } + + public void handleGuardSpawn(CreatureObject owner, TangibleObject map){ + System.err.println("handleGuardSpawn"); + short spawnLevel = (short) map.getAttachment("MapLevel"); + //Point3D exactTreasureLocation = (Point3D) map.getAttachment("MapExactLocation"); + Point3D exactTreasureLocation = owner.getPosition(); + + GroupObject extractorGroup = null; + if (owner.getGroupId()!=0) + extractorGroup = (GroupObject) NGECore.getInstance().objectService.getObject(owner.getGroupId()); + + int extractorGroupSize = 1; + if (extractorGroup!=null) + extractorGroupSize = extractorGroup.getMemberList().size(); + + int guardSpawnNumber = 2 + extractorGroupSize; + Vector guardList = new Vector(); + for (int i=0;i guardList = (Vector) treasureContainer.getAttachment("TreasureGuards"); + int aliveCount = 0; + for (CreatureObject guard:guardList){ + if (guard.getPosture()!=14 && guard.getPosture()!=15) + aliveCount++; + } + return aliveCount; + } + + + + public void configureTreasureLoot(TangibleObject treasureContainer, CreatureObject owner, short spawnLevel){ + List lootgroups = new ArrayList(); + + String levelRange = "61"; + + if (spawnLevel>60 && spawnLevel<=70){ + levelRange = "61"; + } + if (spawnLevel>70 && spawnLevel<=80){ + levelRange = "75"; + } + if (spawnLevel>80 && spawnLevel<=90){ + levelRange = "85"; + } + + + // PROFESSION BRACELETS HOUSE FURNITURE WEARABLE BACKPACKS +// String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange,"house_furniture","wearable_backpacks"}; +// double[] lootPoolChances = new double[]{60,30,10}; + String[] lootPoolNames = new String[]{"profession_bracelets_"+levelRange}; + double[] lootPoolChances = new double[]{100}; + double lootGroupChance = 80; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // WEAPONSMITH COMPONENTS JEDI COMPONENTS GEM COLLECTION ITEMS TREASURE HUNTER COLLECTION ITEMS + //lootPoolNames = new String[]{"weaponsmith_components","jedi_components","gem_collection_items","treasure_hunter_collection_items"}; + //lootPoolChances = new double[]{15,25,30,30}; + lootPoolNames = new String[]{"jedi_components_treasure"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 80; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // COMMON LOOTS: +// Looted non-wearable Bounty Hunter armor pieces (Used to make Mandalorian armor at the Death Watch Bunker) +// Looted clothing (usually 20+) +// Looted armors (usually 20+) +// Looted weapons (700-800 DPS(Sometimes less, now includes the Nak'tra Crystal Rifle)) +// Advanced Agility Stim (CL80) +// Advanced Power Stim (CL80) +// Loot kits adhesives +// Various Schematics +// lootPoolNames = new String[]{"bh_armor_for_mando","advanced_stims_80","loot_kits_adhesives","various_schematics"}; +// lootPoolChances = new double[]{15,25,30,30}; +// lootGroupChance = 80; +// treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); +// + + //GEM COLLECTION ITEMS CONSUMABLE BUFF ITEMS + + // VERY RARE BUFF ITEMS + lootPoolNames = new String[]{"rare_buff_items"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 0.1; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + // EXTRA + lootPoolNames = new String[]{"treasure_extra"}; + lootPoolChances = new double[]{100}; + lootGroupChance = 50; + treasureContainer.addToLootGroups(lootPoolNames, lootPoolChances, lootGroupChance); + + } + +} diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 8cc142fd..c38a6071 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -34,6 +34,8 @@ public class ObjControllerOpcodes { public static final int BUFF_BUILDER_CHANGE = 0x5A020000; public static final int BUFF_BUILDER_END = 0x5B020000; public static final int MISSION_LIST_REQUEST = 0xF5000000; + public static final int MISSION_GENERIC_REQUEST = 0xF9000000; + public static final int MISSION_ABORT = 0x42010000; public static final int ChangeRoleIconChoice = 0x4D040000; public static final int IMAGE_DESIGN_CHANGE = 0x38020000; public static final int IMAGE_DESIGN_END = 0x39020000; diff --git a/src/resources/common/TerminalType.java b/src/resources/datatables/HitType.java similarity index 71% rename from src/resources/common/TerminalType.java rename to src/resources/datatables/HitType.java index 375d1e61..a0736a2e 100644 --- a/src/resources/common/TerminalType.java +++ b/src/resources/datatables/HitType.java @@ -19,12 +19,17 @@ * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. ******************************************************************************/ -package resources.common; +package resources.datatables; -public class TerminalType { - public static int MISSION_GENERIC = 1; - public static int MISSION_BOUNTYHUNTER = 2; - public static int MISSION_ENTERTAINER = 3; - public static int MISSION_ARTISAN = 4; - public static int MISSION_EXPLORER = 5; +public class HitType { + public static final byte MISS = 0; + public static final byte DODGE = 1; + public static final byte PARRY = 2; + public static final byte STRIKETHROUGH = 3; + public static final byte CRITICAL = 4; + public static final byte PUNISHING = 5; + public static final byte HIT = 6; + public static final byte BLOCK = 7; + public static final byte EVASION = 8; + public static final byte GLANCE = 9; } diff --git a/src/resources/datatables/Posture.java b/src/resources/datatables/Posture.java index f319ea46..d64cba45 100644 --- a/src/resources/datatables/Posture.java +++ b/src/resources/datatables/Posture.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package resources.datatables; public class Posture { diff --git a/src/resources/objectives/DeliveryMissionObjective.java b/src/resources/objectives/DeliveryMissionObjective.java new file mode 100644 index 00000000..b5802390 --- /dev/null +++ b/src/resources/objectives/DeliveryMissionObjective.java @@ -0,0 +1,191 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import main.NGECore; +import resources.common.OutOfBand; +import resources.common.ProsePackage; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import services.mission.MissionObjective; + +public class DeliveryMissionObjective extends MissionObjective { + + private TangibleObject deliveryObject; + private CreatureObject missionGiver; + private CreatureObject dropOffNpc; + private NGECore core = NGECore.getInstance(); + + public DeliveryMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate() { + + if (isActivated()) + return; + + String template = "object/mobile/shared_dressed_commoner_tatooine_sullustan_male_06.iff"; + + Point3D startLoc = parent.getStartLocation(); + Point3D destination = parent.getDestination(); + + // TODO: Randomize this process. + CreatureObject missionGiver = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, startLoc.x, startLoc.y, startLoc.z, 0, 1); + if (missionGiver == null) + return; + + missionGiver.setCustomName("a commoner"); + missionGiver.setAttachment("conversationFile", "missions/deliver"); + missionGiver.setAttachment("radial_filename", "object/conversation"); + missionGiver.setAttachment("assignedMission", getMissionObject().getObjectId()); + missionGiver.setOptionsBitmask(264); + setMissionGiver(missionGiver); + + CreatureObject dropOffNpc = (CreatureObject) core.staticService.spawnObject(template, parent.getPlanet().name, 0, destination.x, destination.y, destination.z, 0, 1); + if (dropOffNpc == null) + return; + + dropOffNpc.setCustomName("a commoner"); + dropOffNpc.setAttachment("conversationFile", "missions/deliver"); + dropOffNpc.setAttachment("radial_filename", "object/conversation"); + dropOffNpc.setAttachment("assignedMission", getMissionObject().getObjectId()); + dropOffNpc.setOptionsBitmask(264); + setDropOffNpc(dropOffNpc); + + if (getObjectivePhase() == 0) { + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(startLoc); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setAttachedWaypoint(waypoint); + } else if (getObjectivePhase() == 1) { + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(parent.getDestination()); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setAttachedWaypoint(waypoint); + } + + setActive(true); + } + + @Override + public void complete() { + CreatureObject completer = (CreatureObject) getMissionObject().getGrandparent(); + + if (completer == null) + return; + + int reward = getMissionObject().getCreditReward(); + + completer.addBankCredits(reward); + + completer.sendSystemMessage(new OutOfBand(new ProsePackage("@mission/mission_generic:success_w_amount", reward)), (byte) 0); + + abort(); + + core.objectService.destroyObject(getMissionObject()); + } + + @Override + public void abort() { + if (deliveryObject != null) + core.objectService.destroyObject(deliveryObject.getObjectId()); + + if (missionGiver != null) + core.objectService.destroyObject(missionGiver, 360); + + if (dropOffNpc != null) + core.objectService.destroyObject(dropOffNpc, 360); + } + + @Override + public void update() { + + setObjectivePhase(getObjectivePhase() + 1); + + switch(getObjectivePhase()) { + case 1: + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + waypoint.setPosition(parent.getDestination()); + waypoint.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + waypoint.setColor(WaypointObject.ORANGE); + waypoint.setActive(true); + getMissionObject().setMissionTargetName("Dropoff Location"); + getMissionObject().setAttachedWaypoint(waypoint); + System.out.println("Waypoint set to " + parent.getDestination().x + " and " + parent.getDestination().z); + break; + case 2: + WaypointObject returnWp = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", parent.getPlanet()); + returnWp.setPosition(parent.getStartLocation()); + returnWp.setName("@mission/" + parent.getMissionTitle() + ":" + "m" + parent.getMissionId() + "t"); + returnWp.setColor(WaypointObject.ORANGE); + returnWp.setActive(true); + getMissionObject().setMissionTargetName("Return"); + getMissionObject().setAttachedWaypoint(returnWp); + break; + } + } + + public boolean createDeliveryItem() { + + SWGObject player = getMissionObject().getGrandparent(); + + if (player == null) + return false; + + TangibleObject inventory = (TangibleObject) player.getSlottedObject("inventory"); + + if (inventory == null) + return false; + + TangibleObject deliveryObject = (TangibleObject) core.objectService.createObject("object/tangible/mission/shared_mission_datadisk.iff", getMissionObject().getGrandparent().getPlanet()); + + if (deliveryObject != null && inventory.add(deliveryObject)) { + setDeliveryObject(deliveryObject); + return true; + } + else + return false; + } + + public TangibleObject getDeliveryObject() { return deliveryObject; } + + public void setDeliveryObject(TangibleObject object) { this.deliveryObject = object; } + + public CreatureObject getMissionGiver() { return missionGiver; } + + public void setMissionGiver(CreatureObject missionGiver) { this.missionGiver = missionGiver; } + + public CreatureObject getDropOffNpc() { return dropOffNpc; } + + public void setDropOffNpc(CreatureObject dropOffNpc) { this.dropOffNpc = dropOffNpc; } + +} diff --git a/src/resources/objectives/DestroyMissionObjective.java b/src/resources/objectives/DestroyMissionObjective.java new file mode 100644 index 00000000..e4832756 --- /dev/null +++ b/src/resources/objectives/DestroyMissionObjective.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package resources.objectives; + +import resources.objects.mission.MissionObject; +import services.mission.MissionObjective; + +public class DestroyMissionObjective extends MissionObjective { + + public DestroyMissionObjective(MissionObject parent) { + super(parent); + } + + @Override + public void activate() { + // TODO Auto-generated method stub + + } + + @Override + public void complete() { + // TODO Auto-generated method stub + + } + + @Override + public void abort() { + // TODO Auto-generated method stub + + } + + @Override + public void update() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/resources/objects/building/BuildingObject.java b/src/resources/objects/building/BuildingObject.java index 36486462..6b4fd8fa 100644 --- a/src/resources/objects/building/BuildingObject.java +++ b/src/resources/objects/building/BuildingObject.java @@ -151,7 +151,9 @@ public class BuildingObject extends TangibleObject implements IPersistent { public Vector getItemsList() { Vector items = new Vector(); getCells().forEach(c -> c.viewChildren(c, true, false, (item) -> { - if(!(item instanceof CreatureObject) && item.getTemplate() != "object/tangible/terminal/shared_terminal_player_structure.iff") + if(!(item instanceof CreatureObject) && item.getTemplate() != "object/tangible/terminal/shared_terminal_player_structure.iff" + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city.iff" + && item.getTemplate() != "object/tangible/terminal/shared_terminal_city_vote.iff") items.add((TangibleObject) item); })); return items; diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 092266d4..1255acb9 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -23,8 +23,6 @@ package resources.objects.creature; import java.nio.ByteOrder; - - import java.util.Map.Entry; import org.apache.mina.core.buffer.IoBuffer; @@ -98,6 +96,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } buffer.putShort((short) 19); // Object Count + + // BaseObject buffer.putFloat(1); buffer.put(getAsciiString(creature.getStfFilename())); buffer.putInt(0); @@ -106,6 +106,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.put(getUnicodeString(creature.getCustomName())); // buffer.putInt(0x000F4240); // volume buffer.putInt(1); + + // TangibleObject buffer.putInt(CRC.StringtoCRC(creature.getFaction())); buffer.putInt(creature.getFactionStatus()); @@ -128,6 +130,8 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0x3A98); buffer.put((byte) 1); + + // CreatureObject buffer.put((byte) creature.getPosture()); buffer.put((byte) 0); @@ -218,20 +222,21 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x23); + + // BaseObject buffer.putInt(0x43); // serverId buffer.putShort((short) 0); // detaiLStfFilename buffer.putInt(0); // detailStfSpacer buffer.putShort((short) 0); // detailStfName - // TANO 6 lists TODO: research - + // TangibleObject buffer.put(creature.getCombatFlag()); - buffer.putLong(0); //List possibly defenders list + buffer.putLong(0); //Set cloakViewers (set of objectIds of who can see a cloaked spy) buffer.putInt(0); //Int buffer.putLong(0); //List - buffer.putLong(0); //List + buffer.putLong(0); //List buffer.putLong(0); //List buffer.putShort(creature.getLevel()); diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 7a09e2f8..20e460e4 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -251,12 +251,30 @@ public class CreatureObject extends TangibleObject implements IPersistent { getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); } } + + public void addBankCredits(int amountToAdd) { + synchronized(objectMutex) { + this.bankCredits += amountToAdd; + } + if(getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildBankCreditsDelta(bankCredits)); + } + } public int getCashCredits() { synchronized(objectMutex) { return cashCredits; } } + + public void addCashCredits(int amountToAdd) { + synchronized(objectMutex) { + this.cashCredits += amountToAdd; + } + if(getClient() != null && getClient().getSession() != null) { + getClient().getSession().write(messageBuilder.buildCashCreditsDelta(cashCredits)); + } + } public void setCashCredits(int cashCredits) { synchronized(objectMutex) { diff --git a/src/resources/objects/loot/LootGroup.java b/src/resources/objects/loot/LootGroup.java index e349eaac..1c626c05 100644 --- a/src/resources/objects/loot/LootGroup.java +++ b/src/resources/objects/loot/LootGroup.java @@ -31,20 +31,20 @@ import com.sleepycat.persist.model.Persistent; public class LootGroup { private String[] lootPoolNames; - private int[] lootPoolChances; - private int lootGroupChance; + private double[] lootPoolChances; + private double lootGroupChance; public LootGroup(){ } - public LootGroup(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){ + public LootGroup(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ this.lootPoolNames = lootPoolNames; this.lootPoolChances = lootPoolChances; this.lootGroupChance = lootGroupChance; } - public void addLootData(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){ + public void addLootData(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance){ this.lootPoolNames = lootPoolNames; this.lootPoolChances = lootPoolChances; this.lootGroupChance = lootGroupChance; @@ -54,11 +54,11 @@ public class LootGroup { return lootPoolNames; } - public int[] getLootPoolChances() { + public double[] getLootPoolChances() { return lootPoolChances; } - public int getLootGroupChance() { + public double getLootGroupChance() { return lootGroupChance; } } diff --git a/src/resources/objects/mission/MissionMessageBuilder.java b/src/resources/objects/mission/MissionMessageBuilder.java index 190773ad..24c9aa07 100644 --- a/src/resources/objects/mission/MissionMessageBuilder.java +++ b/src/resources/objects/mission/MissionMessageBuilder.java @@ -26,6 +26,7 @@ import java.nio.ByteOrder; import org.apache.mina.core.buffer.IoBuffer; import engine.resources.common.CRC; +import engine.resources.scene.Point3D; import resources.common.Console; import resources.common.StringUtilities; import resources.objects.ObjectMessageBuilder; @@ -42,109 +43,123 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = IoBuffer.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); - buffer.putShort((short) 17); + buffer.putShort((short) 16); - buffer.putFloat(1); // mission complexity ?? - buffer.put(getAsciiString(mission.getStfFilename())); + buffer.putFloat(object.getComplexity()); // mission complexity ?? + + buffer.put(getAsciiString(object.getStfFilename())); buffer.putInt(0); - buffer.put(getAsciiString(mission.getStfName())); - - if (mission.getCustomName() == null) { buffer.put(getUnicodeString("")); } + buffer.put(getAsciiString(object.getStfName())); + + if (mission.getCustomName() == null) { buffer.putInt(0); } else { buffer.put(getUnicodeString(mission.getCustomName())); } - buffer.putInt(0); // volume + buffer.putInt(object.getVolume()); // volume + buffer.putInt(0); // unused + buffer.putInt(mission.getMissionLevel()); - buffer.putFloat(mission.getMissionStartX()); - buffer.putFloat(0); // missionStartZ - buffer.putFloat(mission.getMissionStartY()); - - buffer.putLong(0); // ?? - - if (mission.getMissionStartPlanet() == null) { - buffer.putInt(0); + if (mission.getStartLocation() != null) { + buffer.putFloat(mission.getStartLocation().x); + buffer.putFloat(0); + buffer.putFloat(mission.getStartLocation().z); } else { + buffer.putFloat(0); + buffer.putFloat(0); + buffer.putFloat(0); + } + buffer.putLong(0); // Start Object ID + if (mission.getMissionStartPlanet() == null) + buffer.putInt(0); + else buffer.putInt(CRC.StringtoCRC(mission.getMissionStartPlanet())); - } - - buffer.put(getUnicodeString(mission.getMissionCreator())); - buffer.putInt(mission.getMissionCredits()); - buffer.putFloat(mission.getMissionDestinationX()); - buffer.putFloat(0); // missionDestinationZ - buffer.putFloat(mission.getMissionDestinationY()); - - buffer.putLong(0); // ?? - - if (mission.getMissionDestinationPlanet() == null) { + if (mission.getCreator() != null) + buffer.put(getUnicodeString(mission.getCreator())); + else buffer.putInt(0); + + buffer.putInt(mission.getCreditReward()); + + if (mission.getDestination() != null) { + buffer.putFloat(mission.getDestination().x); + buffer.putFloat(0); + buffer.putFloat(mission.getDestination().z); } else { + buffer.putFloat(0); + buffer.putFloat(0); + buffer.putFloat(0); + } + buffer.putLong(0); // Destination Object ID + if (mission.getMissionDestinationPlanet() == null) + buffer.putInt(0); + else buffer.putInt(CRC.StringtoCRC(mission.getMissionDestinationPlanet())); - } - if (mission.getTargetTemplateObject() == null) { - buffer.putInt(0); - } else { - buffer.putInt(CRC.StringtoCRC(mission.getTargetTemplateObject())); - } + buffer.putInt(mission.getMissionTemplateObject()); buffer.put(getAsciiString(mission.getMissionDescription())); buffer.putInt(0); - buffer.put(getAsciiString(mission.getMissionDescId())); + buffer.put(getAsciiString("m" + mission.getMissionId() + "d")); buffer.put(getAsciiString(mission.getMissionTitle())); buffer.putInt(0); - buffer.put(getAsciiString(mission.getMissionTitleId())); + buffer.put(getAsciiString("m" + mission.getMissionId() + "t")); buffer.putInt(0); // refresh counter - if(mission.getMissionType() == null) { + if(mission.getMissionType() == null) buffer.putInt(0); - } else { + else buffer.putInt(CRC.StringtoCRC(mission.getMissionType())); - } buffer.put(getAsciiString(mission.getMissionTargetName())); - WaypointObject wp = mission.getMissionAttachedWaypoint(); + WaypointObject wp = mission.getAttachedWaypoint(); if (wp == null) { - buffer.putInt(0); + buffer.putInt(0); // cell buffer.putFloat(0); // x buffer.putFloat(0); // z buffer.putFloat(0); // y buffer.putLong(0); // target id buffer.putInt(0); // planet crc - buffer.put(getUnicodeString("")); + buffer.putInt(0); // name buffer.putLong(0); // waypoint id buffer.put((byte) 0); // color buffer.put((byte) 0x01); //active } else { buffer.putInt(wp.getCellId()); buffer.putFloat(wp.getPosition().x); - buffer.putFloat(wp.getPosition().z); buffer.putFloat(wp.getPosition().y); + buffer.putFloat(wp.getPosition().z); buffer.putLong(0); buffer.putInt(CRC.StringtoCRC(wp.getPlanet().name)); - buffer.put((byte) 0); - buffer.put((byte) 0x01); + buffer.put(getUnicodeString(wp.getName())); + buffer.putLong(wp.getObjectId()); + buffer.put(wp.getColor()); + buffer.put((byte) (wp.isActive() ? 1 : 0)); } + int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); buffer.flip(); buffer = createBaseline("MISO", (byte) 3, buffer, size); - Console.println("Bytes: " + StringUtilities.bytesToHex(buffer.array())); + //Console.println("MISO3 Bytes: " + StringUtilities.bytesToHex(buffer.array())); return buffer; } public IoBuffer buildBaseline6() { - IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(18, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(121); // unk + buffer.putShort((short) 3); + buffer.putInt(76); // server id + buffer.putLong(0); // detail stf + buffer.putInt(0xFFFFFFFF); // unknown int size = buffer.position(); buffer.flip(); @@ -153,6 +168,30 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } + public IoBuffer buildBaseline8() { + IoBuffer buffer = IoBuffer.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 0); // unknown + + int size = buffer.position(); + buffer.flip(); + buffer = createBaseline("MISO", (byte) 8, buffer, size); + + return buffer; + } + + public IoBuffer buildBaseline9() { + IoBuffer buffer = IoBuffer.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 0); // unknown + + int size = buffer.position(); + buffer.flip(); + buffer = createBaseline("MISO", (byte) 9, buffer, size); + + return buffer; + } + public IoBuffer buildStfDelta(String stfFile, String stfName) { IoBuffer buffer = IoBuffer.allocate(4 + stfFile.length() + stfName.length(), false).order(ByteOrder.LITTLE_ENDIAN); @@ -181,18 +220,21 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildStartLocationDelta(float x, float z, float y, String planet) { + public IoBuffer buildStartLocationDelta(Point3D startLocation, String planet) { IoBuffer buffer = IoBuffer.allocate(24, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(x); - buffer.putFloat(z); - buffer.putFloat(y); + buffer.putFloat(startLocation.x); + buffer.putFloat(0); + buffer.putFloat(startLocation.z); buffer.putLong(0); - buffer.putInt(CRC.StringtoCRC(planet)); - + if (planet == null) { + buffer.putInt(CRC.StringtoCRC(object.getPlanet().name)); + } else { + buffer.putInt(CRC.StringtoCRC(planet)); + } int size = buffer.position(); buffer.flip(); buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x06, buffer, size + 4); @@ -202,9 +244,9 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { public IoBuffer buildCreatorNameDelta(String creator) { - IoBuffer buffer = IoBuffer.allocate(4 + creator.length(), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(4 + (creator.length() * 2), false).order(ByteOrder.LITTLE_ENDIAN); - buffer.put(getAsciiString(creator)); + buffer.put(getUnicodeString(creator)); int size = buffer.position(); buffer.flip(); @@ -226,17 +268,21 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildDestinationDelta(float x, float z, float y, String planet) { + public IoBuffer buildDestinationDelta(Point3D destination, String planet) { IoBuffer buffer = IoBuffer.allocate(24, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putFloat(x); - buffer.putFloat(z); - buffer.putFloat(y); + buffer.putFloat(destination.x); + buffer.putFloat(0); + buffer.putFloat(destination.z); buffer.putLong(0); // Destination Object ID - buffer.putInt(CRC.StringtoCRC(planet)); + if (planet == null) { + buffer.putInt(CRC.StringtoCRC(object.getPlanet().name)); + } else { + buffer.putInt(CRC.StringtoCRC(planet)); + } int size = buffer.position(); buffer.flip(); @@ -245,11 +291,11 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildTargetObjectIffDelta(String template) { + public IoBuffer buildTargetObjectIffDelta(int template) { IoBuffer buffer = IoBuffer.allocate(4, false).order(ByteOrder.LITTLE_ENDIAN); - buffer.putInt(CRC.StringtoCRC(template)); + buffer.putInt(template); int size = buffer.position(); buffer.flip(); @@ -258,13 +304,13 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildMissionDescriptionDelta(String desc, String id) { + public IoBuffer buildMissionDescriptionDelta(String desc, int id) { - IoBuffer buffer = IoBuffer.allocate(8 + desc.length() + id.length(), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(12 + desc.length(), false).order(ByteOrder.LITTLE_ENDIAN); buffer.put(getAsciiString(desc)); buffer.putInt(0); - buffer.put(getAsciiString(id)); + buffer.put(getAsciiString("m" + id + "d")); int size = buffer.position(); buffer.flip(); @@ -273,13 +319,13 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } - public IoBuffer buildMissionTitleDelta(String title, String id) { + public IoBuffer buildMissionTitleDelta(String title, int id) { - IoBuffer buffer = IoBuffer.allocate(8 + title.length() + id.length(), false).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer = IoBuffer.allocate(12 + title.length(), false).order(ByteOrder.LITTLE_ENDIAN); buffer.put(getAsciiString(title)); buffer.putInt(0); - buffer.put(getAsciiString(id)); + buffer.put(getAsciiString("m" + id + "t")); int size = buffer.position(); buffer.flip(); @@ -326,6 +372,28 @@ public class MissionMessageBuilder extends ObjectMessageBuilder { return buffer; } + + public IoBuffer buildWaypointDelta(WaypointObject wp) { + + IoBuffer buffer = IoBuffer.allocate(44 + (2 * wp.getName().length()), false).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(wp.getCellId()); + buffer.putFloat(wp.getPosition().x); + buffer.putFloat(wp.getPosition().y); + buffer.putFloat(wp.getPosition().z); + buffer.putLong(0); + buffer.putInt(CRC.StringtoCRC(wp.getPlanet().name)); + buffer.put(getUnicodeString(wp.getName())); + buffer.putLong(wp.getObjectId()); + buffer.put(wp.getColor()); + buffer.put((byte) (wp.isActive() ? 1 : 0)); + + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("MISO", (byte) 3, (short) 1, (short) 0x10, buffer, size + 4); + + return buffer; + } @Override public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { diff --git a/src/resources/objects/mission/MissionObject.java b/src/resources/objects/mission/MissionObject.java index 69562ef6..12ed3fa8 100644 --- a/src/resources/objects/mission/MissionObject.java +++ b/src/resources/objects/mission/MissionObject.java @@ -28,36 +28,32 @@ import com.sleepycat.persist.model.Persistent; import resources.objects.intangible.IntangibleObject; import resources.objects.waypoint.WaypointObject; +import services.mission.MissionObjective; import engine.clients.Client; import engine.resources.objects.IPersistent; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=0) +@Persistent(version=1) public class MissionObject extends IntangibleObject implements IPersistent { - private float missionDestinationX; - private float missionDestinationY; - private float missionDestinationZ; - private float missionStartX; - private float missionStartY; - private float missionStartZ; - private String missionStartPlanet; - private int missionLevel; // Difficulty level displayed in details - private String missionDestinationPlanet; - private int missionRepeatCounter; // increases for each player using the mission; used for redisplaying on mission term too - private int missionCredits; - private String missionCreator = ""; - private String missionDescription = ""; - private String missionTitle = ""; + private Point3D destination; + private Point3D startLocation; + private String startPlanet = ""; + private int difficultyLevel = 0; // Difficulty level displayed in details + private String destinationPlanet = ""; + private int repeatCount = 0; // increases for each player using the mission; used for redisplaying on mission term too + private int reward = 0; + private String creator = ""; + private String description = ""; + private String title = ""; private String missionTargetName = ""; // Target object I guess? - private String missionDescId = ""; - private String missionTitleId = ""; - private String missionType; - private WaypointObject missionAttachedWaypoint; - - private String missionTemplateObject; + private int missionId = 0; + private String type = ""; + private int missionTemplateObject = 0; + private WaypointObject attachedWaypoint; + private MissionObjective objective; @NotPersistent MissionMessageBuilder messageBuilder = new MissionMessageBuilder(this); @@ -73,150 +69,106 @@ public class MissionObject extends IntangibleObject implements IPersistent { super(objectID, planet, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), template); } - public float getMissionStartX() { - synchronized(objectMutex) { - return missionStartX; - } - } - - public float getMissionStartY() { - synchronized(objectMutex) { - return missionStartY; - } - } - - public float getMissionStartZ() { - synchronized(objectMutex) { - return missionStartZ; - } - } - - public void setMissionStart(float x, float y, float z, String planet) { - synchronized(objectMutex) { - this.missionStartZ = z; - this.missionStartX = x; - this.missionStartY = y; - this.missionStartPlanet = planet; - } - - notifyObservers(messageBuilder.buildStartLocationDelta(x, z, y, planet), false); - } - - public float getMissionDestinationX() { - synchronized(objectMutex) { - return missionDestinationX; - } - } - - public float getMissionDestinationY() { - synchronized(objectMutex) { - return missionDestinationY; - } - } - - public float getMissionDestinationZ() { - synchronized(objectMutex) { - return missionDestinationZ; - } - } - - public void setMissionDestination(float x, float y, float z, String planet) { - synchronized(objectMutex) { - this.missionDestinationZ = z; - this.missionDestinationY = y; - this.missionDestinationZ = z; - this.missionDestinationPlanet = planet; - } - } - public String getMissionDestinationPlanet() { synchronized(objectMutex) { - return missionDestinationPlanet; + return destinationPlanet; } } public int getMissionLevel() { synchronized(objectMutex) { - return missionLevel; + return difficultyLevel; } } public void setMissionLevel(int missionLevel) { synchronized(objectMutex) { - this.missionLevel = missionLevel; + this.difficultyLevel = missionLevel; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDifficultyLevelDelta(missionLevel)); } } public String getMissionStartPlanet() { synchronized(objectMutex) { - return missionStartPlanet; + return startPlanet; } } public int getMissionRepeatCounter() { synchronized(objectMutex) { - return missionRepeatCounter; + return repeatCount; } } - public void setMissionRepeatCounter(int missionRepeatCounter) { + public void setRepeatCount(int missionRepeatCounter) { synchronized(objectMutex) { - this.missionRepeatCounter = missionRepeatCounter; + this.repeatCount = missionRepeatCounter; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildRepeatCounterDelta(missionRepeatCounter)); } } - public int getMissionCredits() { + public int getCreditReward() { synchronized(objectMutex) { - return missionCredits; + return reward; } } - public void setMissionCredits(int missionCredits) { + public void setCreditReward(int missionCredits) { synchronized(objectMutex) { - this.missionCredits = missionCredits; + this.reward = missionCredits; } - notifyObservers(messageBuilder.buildCreditsRewardDelta(missionCredits), false); - } - - public String getMissionCreator() { - synchronized(objectMutex) { - return missionCreator; + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreditsRewardDelta(missionCredits)); } } - public void setMissionCreator(String missionCreator) { + public String getCreator() { synchronized(objectMutex) { - this.missionCreator = missionCreator; + return creator; + } + } + + public void setCreator(String missionCreator) { + synchronized(objectMutex) { + this.creator = missionCreator; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildCreatorNameDelta(missionCreator)); } - notifyObservers(messageBuilder.buildCreatorNameDelta(missionCreator), false); } public String getMissionDescription() { synchronized(objectMutex) { - return missionDescription; + return description; } } - public void setMissionDescription(String missionDescription, String id) { + public void setMissionDescription(String missionDescription) { synchronized(objectMutex) { - this.missionDescription = missionDescription; - this.missionDescId = id; + this.description = missionDescription; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionDescriptionDelta(missionDescription, missionId)); } - notifyObservers(messageBuilder.buildMissionDescriptionDelta(missionDescription, id), false); } public String getMissionTitle() { synchronized(objectMutex) { - return missionTitle; + return title; } } - public void setMissionTitle(String missionTitle, String id) { + public void setMissionTitle(String missionTitle) { synchronized(objectMutex) { - this.missionTitle = missionTitle; - this.missionTitleId = id; + this.title = missionTitle; + } + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTitleDelta(missionTitle, missionId)); } - notifyObservers(messageBuilder.buildMissionTitleDelta(missionTitle, id), false); } public String getMissionTargetName() { @@ -229,57 +181,109 @@ public class MissionObject extends IntangibleObject implements IPersistent { synchronized(objectMutex) { this.missionTargetName = missionTargetName; } - notifyObservers(messageBuilder.buildTargetNameDelta(missionTargetName), false); - } - - public WaypointObject getMissionAttachedWaypoint() { - synchronized(objectMutex) { - return missionAttachedWaypoint; + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetNameDelta(missionTargetName)); } } - public void setMissionAttachedWaypoint(WaypointObject missionAttachedWaypoint) { + public WaypointObject getAttachedWaypoint() { synchronized(objectMutex) { - this.missionAttachedWaypoint = missionAttachedWaypoint; + return attachedWaypoint; } } - public String getTargetTemplateObject() { + public void setAttachedWaypoint(WaypointObject waypoint) { + synchronized(objectMutex) { + this.attachedWaypoint = waypoint; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildWaypointDelta(waypoint)); + } + } + + public int getMissionTemplateObject() { synchronized(objectMutex) { return missionTemplateObject; } } - public void setTargetTemplateObject(String missionTemplateObject) { + public void setMissionTemplateObject(int missionTemplateObject) { synchronized(objectMutex) { this.missionTemplateObject = missionTemplateObject; } - notifyObservers(messageBuilder.buildTargetObjectIffDelta(missionTemplateObject), false); - } - - public String getMissionDescId() { - synchronized(objectMutex) { - return missionDescId; - } - } - - public String getMissionTitleId() { - synchronized(objectMutex) { - return missionTitleId; + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildTargetObjectIffDelta(missionTemplateObject)); } } public String getMissionType() { synchronized(objectMutex) { - return missionType; + return type; } } public void setMissionType(String missionType) { synchronized(objectMutex) { - this.missionType = missionType; + this.type = missionType; } - notifyObservers(messageBuilder.buildMissionTypeDelta(missionType), false); + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildMissionTypeDelta(missionType)); + } + } + + public MissionObjective getObjective() { + synchronized(objectMutex) { + return objective; + } + } + + public void setObjective(MissionObjective objective) { + synchronized(objectMutex) { + this.objective = objective; + } + } + + public Point3D getStartLocation() { + synchronized(objectMutex) { + return startLocation; + } + } + + public Point3D getDestination() { + synchronized(objectMutex) { + return destination; + } + } + + public void setStartLocation(Point3D startLocation, String planet) { + synchronized(objectMutex) { + this.startLocation = startLocation; + this.startPlanet = planet; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildStartLocationDelta(startLocation, planet)); + } + } + + public void setDestination(Point3D destination, String planet) { + synchronized(objectMutex) { + this.destination = destination; + this.destinationPlanet = planet; + } + + if (getGrandparent() != null && getGrandparent().getClient() != null && getGrandparent().getClient().getSession() != null) { + getGrandparent().getClient().getSession().write(messageBuilder.buildDestinationDelta(destination, planet)); + } + } + + public int getMissionId() { + return missionId; + } + + public void setMissionId(int missionId) { + this.missionId = missionId; } public Transaction getTransaction() { @@ -300,6 +304,8 @@ public class MissionObject extends IntangibleObject implements IPersistent { destination.getSession().write(messageBuilder.buildBaseline3()); destination.getSession().write(messageBuilder.buildBaseline6()); + destination.getSession().write(messageBuilder.buildBaseline8()); + destination.getSession().write(messageBuilder.buildBaseline9()); } } diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 4efc2c4c..4a5f11c3 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -54,7 +54,7 @@ import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Persistent(version=11) +@Persistent(version=12) public class TangibleObject extends SWGObject { // TODO: Thread safety @@ -495,7 +495,7 @@ public class TangibleObject extends SWGObject { return lootGroups; } - public void addToLootGroups(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance) { + public void addToLootGroups(String[] lootPoolNames, double[] lootPoolChances, double lootGroupChance) { System.out.println("lootPoolNames[0] " + lootPoolNames[0]); LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance); this.lootGroups.add(lootGroup); diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 67c67f51..b11bd350 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -310,12 +310,11 @@ public class CharacterService implements INetworkDispatch { object._add(bank); object._add(missionBag); - /*for(int missionsAdded = 0; missionsAdded < 12; missionsAdded++) { + for(int missionsAdded = 1; missionsAdded <= 10; missionsAdded++) { MissionObject mission = (MissionObject) core.objectService.createObject("object/mission/shared_mission_object.iff", object.getPlanet()); missionBag._add(mission); - Console.println("Added empty mission " + missionsAdded); - }*/ + } // TODO: Race abilities if (client.isGM()) diff --git a/src/services/DevService.java b/src/services/DevService.java index bae0eb8f..8a3ce949 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1211,11 +1211,10 @@ public class DevService implements INetworkDispatch { deed1.setBER(15); deed1.setAttributes(); inventory.add(deed1); - - break; + return; case 112: core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000); - break; + return; case 120: // SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet); // inventory.add(houseDeed); @@ -1224,14 +1223,16 @@ public class DevService implements INetworkDispatch { Player_House_Deed deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); deed.setBMR(15); deed.setAttributes(); - inventory.add(deed); - - templateString="object/tangible/deed/player_house_deed/shared_generic_house_small_style_02_deed.iff"; + inventory.add(deed); + + templateString="object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"; deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); deed.setBMR(15); deed.setAttributes(); - inventory.add(deed); - + inventory.add(deed); + + return; + case 125: TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); genericCraftingTool.setCustomName("Generic Crafting Tool"); @@ -1239,7 +1240,9 @@ public class DevService implements INetworkDispatch { return; case 130: TangibleObject swoopDeed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_speederbike_swoop_deed.iff", planet); + TangibleObject av21deed = (TangibleObject) core.objectService.createObject("object/tangible/deed/vehicle_deed/shared_landspeeder_av21_deed.iff", planet); inventory.add(swoopDeed); + inventory.add(av21deed); return; } } diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 4a2fdc69..00f9d17c 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -82,8 +82,19 @@ public class EquipmentService implements INetworkDispatch { } if (item.getStringAttribute("class_required") != null) { + String classRequired = item.getStringAttribute("class_required"); String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); - if (item.getStringAttribute("class_required").contentEquals(core.playerService.getFormalProfessionName(profession)) || item.getStringAttribute("class_required").contentEquals("None")) + + if (classRequired.contains(",")) { + String[] classes = classRequired.split(","); + + for (int i = 0; i < classes.length; i++) { + if (classes[i].contains(core.playerService.getFormalProfessionName(profession))) { + return true; + } + } + } + if (classRequired.contentEquals(core.playerService.getFormalProfessionName(profession)) || classRequired.contentEquals("None")) result = true; else return false; diff --git a/src/services/LootService.java b/src/services/LootService.java index c9157d18..1105e13c 100644 --- a/src/services/LootService.java +++ b/src/services/LootService.java @@ -101,7 +101,15 @@ public class LootService implements INetworkDispatch { public void DropLoot(CreatureObject requester, TangibleObject lootedObject) { - GroupObject group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + if (requester==null || lootedObject==null) + return; //QA + + GroupObject group = null; + if(requester.getGroupId()!=0) + group = (GroupObject) core.objectService.getObject(requester.getGroupId()); + + if (lootedObject.getKiller()==null) + lootedObject.setKiller(requester); if (lootedObject.isLooted() || lootedObject.isLootLock() || (group == null && !lootedObject.getKiller().equals(requester)) || (group != null && !group.getMemberList().contains(lootedObject.getKiller()))) return; @@ -114,18 +122,18 @@ public class LootService implements INetworkDispatch { lootSituationAssessment(requester,lootedObject,lootRollSession); - CreatureObject lootedCreature = (CreatureObject) lootedObject; + //CreatureObject lootedCreature = (CreatureObject) lootedObject; //TreeSet> lootSpec = lootedObject.getLootSpecification(); - List lootGroups = lootedCreature.getLootGroups(); + List lootGroups = lootedObject.getLootGroups(); Iterator iterator = lootGroups.iterator(); int projectionCoefficientMatrixModulo = 0; projectionCoefficientMatrixModulo = outbound(requester); while (iterator.hasNext()){ LootGroup lootGroup = iterator.next(); - int groupChance = lootGroup.getLootGroupChance(); - int lootGroupRoll = new Random().nextInt(100); + double groupChance = lootGroup.getLootGroupChance(); + double lootGroupRoll = new Random().nextDouble()*100; if (projectionCoefficientMatrixModulo!=0) lootGroupRoll=groupChance+1; if (lootGroupRoll <= groupChance){ @@ -146,14 +154,17 @@ public class LootService implements INetworkDispatch { } // set info above corpse - float y = 0.5F; // 1.3356977F - float qz= 1.06535322E9F; - Point3D effectorPosition = new Point3D(0,y,0); - Quaternion effectorOrientation = new Quaternion(0,0,0,qz); - PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("appearance/pt_loot_disc.prt",lootedObject.getObjectID(),"lootMe",effectorPosition,effectorOrientation); - requester.getClient().getSession().write(lmsg.serialize()); - tools.CharonPacketUtils.printAnalysis(lmsg.serialize()); - + + if (lootedObject instanceof CreatureObject){ + float y = 0.5F; // 1.3356977F + float qz= 1.06535322E9F; + Point3D effectorPosition = new Point3D(0,y,0); + Quaternion effectorOrientation = new Quaternion(0,0,0,qz); + PlayClientEffectObjectTransformMessage lmsg = new PlayClientEffectObjectTransformMessage("appearance/pt_loot_disc.prt",lootedObject.getObjectID(),"lootMe",effectorPosition,effectorOrientation); + requester.getClient().getSession().write(lmsg.serialize()); + tools.CharonPacketUtils.printAnalysis(lmsg.serialize()); + } + // handle errors if (lootRollSession.getErrorMessages().size()>0){ for (String msg : lootRollSession.getErrorMessages()){ @@ -165,7 +176,9 @@ public class LootService implements INetworkDispatch { } SWGObject lootedObjectInventory = lootedObject.getSlottedObject("inventory"); - System.out.println("lootedObjectInventory " + lootedObjectInventory.getTemplate()); + if (lootedObjectInventory==null || lootedObject.getTemplate().startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) + lootedObjectInventory = lootedObject; // In case we don't know what we are dealing with + // For autoloot //SWGObject requesterInventory = requester.getSlottedObject("inventory"); @@ -190,7 +203,7 @@ public class LootService implements INetworkDispatch { private void handleLootGroup(LootGroup lootGroup,LootRollSession lootRollSession){ - int[] lootPoolChances = lootGroup.getLootPoolChances(); + double[] lootPoolChances = lootGroup.getLootPoolChances(); String[] lootPoolNames = lootGroup.getLootPoolNames(); if (lootPoolChances==null || lootPoolNames==null){ System.err.println("Lootpools are null!"); @@ -201,8 +214,8 @@ public class LootService implements INetworkDispatch { return; } - int randomItemFromGroup = new Random().nextInt(100); - int remainder = 0; // [10,20,30,34,5,1] + double randomItemFromGroup = new Random().nextDouble()*100; + double remainder = 0; // [10,20,30,34,5,1] for(int i=0;i itemNames = (Vector)core.scriptService.fetchStringVector(path,"itemNames"); - Vector itemChances = (Vector)core.scriptService.fetchIntegerVector(path,"itemChances"); + Vector itemChances = (Vector)core.scriptService.fetchDoubleVector(path,"itemChances"); - int randomItemFromPool = new Random().nextInt(100); + double randomItemFromPool = new Random().nextDouble()*100; int remainder = 0; // [10,20,30,34,5,1] for (int i=0;i customizationAttributes = null; Vector customizationValues = null; Vector itemStats = null; + Vector itemSkillMods = null; if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){ String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue."; @@ -319,6 +334,9 @@ public class LootService implements INetworkDispatch { if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) itemStats = (Vector)core.scriptService.fetchStringVector(itemPath,"itemStats"); + if(core.scriptService.getMethod(itemPath,"","itemStats")!=null) + itemSkillMods = (Vector)core.scriptService.fetchStringVector(itemPath,"itemSkillMods"); + if(core.scriptService.getMethod(itemPath,"","biolink")!=null) biolink = (Integer)core.scriptService.fetchInteger(itemPath,"biolink"); @@ -373,6 +391,13 @@ public class LootService implements INetworkDispatch { } handleStats(droppedItem, itemStats); } + + if (itemSkillMods!=null){ + handleSkillMods(droppedItem, itemSkillMods); + } + + + // if (customizationValues!=null) // setCustomization(droppedItem, itemName); @@ -385,7 +410,7 @@ public class LootService implements INetworkDispatch { } if (requiredProfession.length()>0){ - droppedItem.setStringAttribute("required_profession", requiredProfession); + droppedItem.setStringAttribute("class_required", requiredProfession); } if (requiredFaction.length()>0){ @@ -529,6 +554,14 @@ public class LootService implements INetworkDispatch { } } + private void handleSkillMods(TangibleObject droppedItem, Vector skillMods) { + for (int i=0;i - * - * This File is part of NGECore2. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - * - * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. - * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. - ******************************************************************************/ -package services; - -import java.nio.ByteOrder; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.atomic.AtomicInteger; - -import main.NGECore; - -import org.apache.mina.core.buffer.IoBuffer; -import org.apache.mina.core.session.IoSession; - -import protocol.swg.objectControllerObjects.MissionListRequest; -import resources.common.Console; -import resources.common.TerminalType; -import resources.common.ObjControllerOpcodes; -import resources.objects.creature.CreatureObject; -import resources.objects.mission.MissionObject; -import resources.objects.tangible.TangibleObject; -import engine.clientdata.ClientFileManager; -import engine.clientdata.visitors.DatatableVisitor; -import engine.clients.Client; -import engine.resources.container.Traverser; -import engine.resources.objects.SWGObject; -import engine.resources.service.INetworkDispatch; -import engine.resources.service.INetworkRemoteEvent; - -public class MissionService implements INetworkDispatch { - - private NGECore core; - - public MissionService(NGECore core) { - this.core = core; - } - - @Override - public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { - objControllerOpcodes.put(ObjControllerOpcodes.MISSION_LIST_REQUEST, new INetworkRemoteEvent() { - - @Override - public void handlePacket(IoSession session, IoBuffer data) throws Exception { - data.order(ByteOrder.LITTLE_ENDIAN); - - MissionListRequest request = new MissionListRequest(); - request.deserialize(data); - - Client client = core.getClient(session); - - if(client == null || client.getSession() == null) - return; - - SWGObject object = client.getParent(); - - if(object == null) - return; - - SWGObject terminal = core.objectService.getObject(request.getTerminalId()); - - int terminalType = (int) terminal.getAttachment("terminalType"); - - if (terminalType == TerminalType.MISSION_GENERIC) { - populateMissions(core.objectService.getObject(request.getObjectId()), TerminalType.MISSION_GENERIC); - } else if (terminalType == TerminalType.MISSION_BOUNTYHUNTER) { - - } else if (terminalType == TerminalType.MISSION_ENTERTAINER) { - - } else if (terminalType == TerminalType.MISSION_ARTISAN) { - - } else { - Console.println("ERROR: Unsupported terminal " + terminal.getObjectId()); - } - } - - }); - } - - private void populateMissions(final SWGObject player, int type) { - CreatureObject creature = (CreatureObject) player; - TangibleObject missionBag = (TangibleObject) creature.getSlottedObject("mission_bag"); - - final AtomicInteger deliveryCount = new AtomicInteger(); - final AtomicInteger destroyCount = new AtomicInteger(); - - final int deliveryEntries = 30; - - final Random ran = new Random(); - - final int bagSize = core.objectService.objsInContainer(creature, missionBag); - Console.println("Delivery Entries: " + deliveryEntries); - if (bagSize != 12) { - for(int missionsAdded = 0; missionsAdded < 12; missionsAdded++) { - MissionObject mission = (MissionObject) core.objectService.createObject("object/mission/shared_mission_object.iff", creature.getPlanet()); - - int textId = ran.nextInt(deliveryEntries); - - Console.println("Random Int Value: " + textId); - Console.println("Now the value is: " + textId); - - mission.setMissionLevel(5); - - mission.setMissionStart(0, 0, 0, player.getPlanet().name); - - mission.setMissionCreator("Waverunner"); - mission.setMissionCredits(9000); - - // TODO: Base this off of textId + f - mission.setTargetTemplateObject("object/tangible/mission/shared_mission_datadisk.iff"); - // TODO: Base this off of textId + l - mission.setMissionTargetName("Osskscosco"); - - mission.setMissionDescription("mission/mission_deliver_neutral_easy", "m" + textId + "d"); - mission.setMissionTitle("mission/mission_deliver_neutral_easy", "m" + textId + "t"); - - mission.setMissionType("deliver"); - - mission.setMissionDestination(-5962, 0, -6259, player.getPlanet().name); - deliveryCount.getAndIncrement(); - - - missionBag._add(mission); - Console.println("Added mission " + missionsAdded); - } - return; - } - - missionBag.viewChildren(player, false, false, new Traverser() { - - @Override - public void process(SWGObject child) { - if (deliveryCount.get() == 6) - return; - - MissionObject mission = (MissionObject) child; - int textId = ran.nextInt(deliveryEntries); - - Console.println("Random Int Value: " + textId); - Console.println("Now the value is: " + textId); - - mission.setMissionLevel(5); - - mission.setMissionStart(0, 0, 0, player.getPlanet().name); - - mission.setMissionCreator("Waverunner"); - mission.setMissionCredits(9000); - - // TODO: Base this off of textId + f - mission.setTargetTemplateObject("object/tangible/mission/shared_mission_datadisk.iff"); - // TODO: Base this off of textId + l - mission.setMissionTargetName("Osskscosco"); - - mission.setMissionDescription("mission/mission_deliver_neutral_easy", "m" + textId + "d"); - mission.setMissionTitle("mission/mission_deliver_neutral_easy", "m" + textId + "t"); - - mission.setMissionType("deliver"); - - mission.setMissionDestination(-5962, 0, -6259, player.getPlanet().name); - deliveryCount.getAndIncrement(); - } - - }); - - Console.println("Outside of the traverser now!"); - } - - // May want to create a map for the server with needed info - public int getNumberOfEntries(String stf) { - try { - DatatableVisitor stfFile = ClientFileManager.loadFile(stf, DatatableVisitor.class); - - for (int s = 0; s < stfFile.getRowCount(); s++) { - String name = ((String) stfFile.getObject(s, 3)); - Console.println("Name: " + name); - if (name.equals("number_of_entries")) { - int entryCount = ((int) stfFile.getObject(s, 4)); - Console.println("Entry Count: " + entryCount); - return entryCount; - } - } - } - catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - - return 0; - } - - @Override - public void shutdown() { - - } - -} diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index c7bac81d..dab378b5 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -140,4 +140,14 @@ public class ScriptService { return vector; } + public Vector fetchDoubleVector(String path, String method) { + Vector vector = new Vector(); + PyObject result = core.scriptService.callScript(path, "", method); + Iterable comp = (Iterable)result.asIterable(); + for (Iterator temp = comp.iterator(); temp.hasNext();){ + vector.add(temp.next().asDouble()); + } + return vector; + } + } diff --git a/src/services/TreasureService.java b/src/services/TreasureService.java new file mode 100644 index 00000000..4684d045 --- /dev/null +++ b/src/services/TreasureService.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services; + +import java.util.Collections; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class TreasureService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector allRequesters = new Vector(); + + public TreasureService(NGECore core) { + this.core = core; + + scheduleTreasureService(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + } + + public void scheduleTreasureService(){ + + final ScheduledFuture task = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + ServiceProcessing(); + } + + }, 10, 5000, TimeUnit.MILLISECONDS); + } + + + public void ServiceProcessing(){ + synchronized(allRequesters){ + for (SWGObject requester : allRequesters){ + if (requester!=null) + handleRequester(requester); + } + allRequesters.removeAll(Collections.singleton(null)); + } + + } + + public void handleRequester(SWGObject requester){ + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index cc620d77..be4cbb43 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -125,11 +125,15 @@ public class ChatService implements INetworkDispatch { Client speakerClient = speaker.getClient(); - if (speakerClient == null || speakerClient.getSession() == null) { - return; +// if (speakerClient == null || speakerClient.getSession() == null) { +// return; +// } + + if (speakerClient != null) { + if (speakerClient.getSession() != null) + speakerClient.getSession().write(objControllerMessage.serialize()); } - speakerClient.getSession().write(objControllerMessage.serialize()); if (speaker.getObservers().isEmpty()) { return; @@ -150,6 +154,7 @@ public class ChatService implements INetworkDispatch { SpatialChat spatialChat = new SpatialChat(client.getParent().getObjectId(), speaker.getObjectID(), targetId, message, chatType, moodId, languageId, outOfBand); objControllerMessage = new ObjControllerMessage(0x0B, spatialChat); client.getSession().write(objControllerMessage.serialize()); + tools.CharonPacketUtils.printAnalysis(objControllerMessage.serialize()); } } } diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index 8e85c53e..1a265c8c 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -65,6 +65,7 @@ import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; +import resources.datatables.HitType; public class CombatService implements INetworkDispatch { @@ -750,6 +751,12 @@ public class CombatService implements INetworkDispatch { float glanceChance = (float) target.getSkillModBase("display_only_glancing_blow") / 10000; + if(weapon.isRanged()) + glanceChance += target.getSkillModBase("expertise_glancing_blow_ranged"); + + if(weapon.isMelee()) + glanceChance += target.getSkillModBase("expertise_glancing_blow_melee"); + r = random.nextFloat(); if(r <= glanceChance) return HitType.GLANCE; @@ -1359,33 +1366,5 @@ public class CombatService implements INetworkDispatch { defenderList.stream().forEach(attacker -> defender.removeDefender(attacker)); } } - - public enum HitType{; - - public static final byte MISS = 0; - public static final byte DODGE = 1; - public static final byte PARRY = 2; - public static final byte STRIKETHROUGH = 3; - public static final byte CRITICAL = 4; - public static final byte PUNISHING = 5; - public static final byte HIT = 6; - public static final byte BLOCK = 7; - public static final byte EVASION = 8; - public static final byte GLANCE = 9; - - } - - public enum ElementalType {; - - public static final int KINETIC = 1; - public static final int ENERGY = 2; - public static final int BLAST = 4; - public static final int STUN = 8; - public static final int HEAT = 32; - public static final int COLD = 64; - public static final int ACID = 128; - public static final int ELECTRICITY = 256; - - } } diff --git a/src/services/command/CommandService.java b/src/services/command/CommandService.java index 36db0db7..cf14b35a 100644 --- a/src/services/command/CommandService.java +++ b/src/services/command/CommandService.java @@ -295,7 +295,16 @@ public class CommandService implements INetworkDispatch { } } - processCommand(actor, target, command, actionCounter, commandArgs); + if(command instanceof CombatCommand) { + try { + processCommand(actor, target, (BaseSWGCommand) command.clone(), actionCounter, commandArgs); + } catch (CloneNotSupportedException e) { + e.printStackTrace(); + } + } + else + processCommand(actor, target, command, actionCounter, commandArgs); + return true; } diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 1c6611d8..ff85019e 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -42,6 +42,7 @@ import resources.objects.creature.CreatureObject; import resources.objects.deed.Player_House_Deed; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; +import services.playercities.PlayerCity; import services.sui.SUIWindow; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; @@ -118,7 +119,9 @@ public class HousingService implements INetworkDispatch { // Name the sign TangibleObject sign = (TangibleObject) building.getAttachment("structureSign"); String playerFirstName = actor.getCustomName().split(" ")[0]; - sign.setCustomName2(playerFirstName + "'s House"); + + if (sign !=null) + sign.setCustomName2(playerFirstName + "'s House"); //building.add(sign); core.objectService.destroyObject(deed); @@ -133,6 +136,27 @@ public class HousingService implements INetworkDispatch { building.setBMR(playerHourseDeed.getBMR()); building.setConditionDamage(100); + if (structureTemplate.contains("cityhall")){ + PlayerCity newCity = core.playerCityService.addNewPlayerCity(actor); + building.setAttachment("structureCity", newCity.getCityID()); + actor.setAttachment("residentCity", newCity.getCityID()); + } + + // Check for city founders joining a new city + PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(actor); + + actor.setAttachment("Has24HZoningFor",cityActorIsIn.getCityID()); // for testing + + int cityActorHasZoning = (int)actor.getAttachment("Has24HZoningFor"); + if (cityActorIsIn!=null && cityActorHasZoning==cityActorIsIn.getCityID()){ + if (! cityActorIsIn.getCitizens().contains(actor.getObjectID())){ + building.setAttachment("structureCity", cityActorIsIn.getCityID()); + // actor.setAttachment("residentCity", cityActorIsIn.getCityID()); He must do it manually + cityActorIsIn.addCitizen(actor.getObjectID()); + cityActorIsIn.addNewStructure(building.getObjectID()); + } + } + // Save structure to DB //building.createTransaction(core.getBuildingODB().getEnvironment()); //core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); @@ -428,6 +452,8 @@ public class HousingService implements INetworkDispatch { public void declareResidency(SWGObject owner, TangibleObject target) { final BuildingObject building = (BuildingObject) target.getAttachment("housing_parentstruct"); building.setResidency((CreatureObject)owner); + PlayerCity cityActorIsIn = core.playerCityService.getCityObjectIsIn(owner); + owner.setAttachment("residentCity", cityActorIsIn.getCityID()); //owner.setResidence(); } diff --git a/src/services/mission/MissionObjective.java b/src/services/mission/MissionObjective.java new file mode 100644 index 00000000..c81fcc0a --- /dev/null +++ b/src/services/mission/MissionObjective.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.mission; + +import com.sleepycat.persist.model.Persistent; + +import resources.objects.mission.MissionObject; + +@Persistent(version=0) +public abstract class MissionObjective { + + protected long startTime; + protected boolean activated; + protected MissionObject parent; + private int objectivePhase; + + public MissionObjective() { } + + public MissionObjective(MissionObject parent) { + this.startTime = System.currentTimeMillis(); + this.activated = false; + this.parent = parent; + this.objectivePhase = 0; + } + + public abstract void activate(); + public abstract void complete(); + public abstract void abort(); + public abstract void update(); + + public long getStartTime() { return startTime; } + + public boolean isActivated() { return activated; } + public void setActive(boolean isActive) { this.activated = isActive; } + + public MissionObject getMissionObject() { return parent; } + + public int getObjectivePhase() { return objectivePhase; } + public void setObjectivePhase(int phase) { this.objectivePhase = phase; } +} diff --git a/src/services/mission/MissionService.java b/src/services/mission/MissionService.java new file mode 100644 index 00000000..40b5abf0 --- /dev/null +++ b/src/services/mission/MissionService.java @@ -0,0 +1,419 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.mission; + +import java.io.File; +import java.io.IOException; +import java.nio.ByteOrder; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ObjControllerMessage; +import protocol.swg.objectControllerObjects.MissionAbort; +import protocol.swg.objectControllerObjects.MissionAcceptRequest; +import protocol.swg.objectControllerObjects.MissionAcceptResponse; +import protocol.swg.objectControllerObjects.MissionListRequest; +import resources.common.SpawnPoint; +import resources.common.ObjControllerOpcodes; +import resources.objectives.DeliveryMissionObjective; +import resources.objectives.DestroyMissionObjective; +import resources.objects.creature.CreatureObject; +import resources.objects.mission.MissionObject; +import resources.objects.tangible.TangibleObject; +import resources.objects.waypoint.WaypointObject; +import engine.clientdata.StfTable; +import engine.clients.Client; +import engine.resources.common.CRC; +import engine.resources.common.NameGen; +import engine.resources.container.Traverser; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class MissionService implements INetworkDispatch { + + private NGECore core; + private NameGen nameGenerator; + // Use a HashMap for obtaining number of entries so we aren't using a visitor all the time. + private ConcurrentHashMap entryCounts = new ConcurrentHashMap(); + private Random ran = new Random(); + + public MissionService(NGECore core) { + this.core = core; + + try { nameGenerator = new NameGen("names.txt"); } + catch (IOException e) { e.printStackTrace(); } + + loadMissionEntryCounts(); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_ABORT, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + CreatureObject creature = (CreatureObject) client.getParent(); + + if(creature == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + MissionAbort abort = new MissionAbort(); + abort.deserialize(data); + + MissionObject mission = (MissionObject) core.objectService.getObject(abort.getMissionId()); + + if (mission == null) + return; + + if (mission.getGrandparent().getObjectId() != creature.getObjectId()) + return; + + handleMissionAbort(creature, mission); + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_LIST_REQUEST, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + SWGObject object = client.getParent(); + + if(object == null) + return; + + data.order(ByteOrder.LITTLE_ENDIAN); + + MissionListRequest request = new MissionListRequest(); + request.deserialize(data); + + SWGObject terminal = core.objectService.getObject(request.getTerminalId()); + + if (terminal.getAttachment("terminalType") == null) + return; + + int terminalType = (int) terminal.getAttachment("terminalType"); + + if (terminalType == TerminalType.GENERIC) { + handleMissionListRequest(core.objectService.getObject(request.getObjectId()), request.getTickCount(), TerminalType.GENERIC); + } else if (terminalType == TerminalType.BOUNTYHUNTER) { + + } else if (terminalType == TerminalType.ENTERTAINER) { + + } else if (terminalType == TerminalType.ARTISAN) { + + } else { + //Console.println("ERROR: Unsupported terminal " + terminal.getObjectId()); + } + } + + }); + + objControllerOpcodes.put(ObjControllerOpcodes.MISSION_GENERIC_REQUEST, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + Client client = core.getClient(session); + + if(client == null || client.getSession() == null) + return; + + SWGObject object = client.getParent(); + + if(object == null) + return; + + CreatureObject creature = (CreatureObject) object; + + data.order(ByteOrder.LITTLE_ENDIAN); + + MissionAcceptRequest request = new MissionAcceptRequest(); + request.deserialize(data); + + MissionObject mission = (MissionObject) core.objectService.getObject(request.getMissionObjId()); + + if (mission == null) + return; + + if (handleMissionAccept(creature, mission)) { + MissionAcceptResponse response = new MissionAcceptResponse(object.getObjectId(), mission.getObjectId(), request.getTerminalType(), (byte) 1); + object.getClient().getSession().write(new ObjControllerMessage(0x0B, response).serialize()); + } else { + MissionAcceptResponse response = new MissionAcceptResponse(object.getObjectId(), mission.getObjectId(), request.getTerminalType(), (byte) 0); + object.getClient().getSession().write(new ObjControllerMessage(0x0B, response).serialize()); + } + } + }); + } + + public void handleMissionAbort(CreatureObject creature, MissionObject mission) { + MissionObjective objective = mission.getObjective(); + + if (objective != null) + objective.abort(); + + core.objectService.destroyObject(mission.getObjectId()); + } + + private void loadMissionEntryCounts() { + File missionFolder = new File("./clientdata/string/en/mission"); + File[] missionFiles = missionFolder.listFiles(); + + int missionStrings = 0; + for (int i = 0; i < missionFiles.length; i++) { + if (missionFiles[i].getName().contains("_easy") || missionFiles[i].getName().contains("_medium") || missionFiles[i].getName().contains("_hard")) { + + String missionStf = "clientdata" + missionFiles[i].getAbsolutePath().split("clientdata")[1].replace("\\", "/"); + try { + StfTable stf = new StfTable(missionStf); + boolean gotCount = false; + + for (int s = 1; s < stf.getRowCount(); s++) { + + if (stf.getStringById(s).getKey() != null && stf.getStringById(s).getKey().equals("number_of_entries")) { + String finalStr = missionStf.split("clientdata/string/en/")[1].replace(".stf", ""); + entryCounts.put(finalStr, Integer.parseInt(stf.getStringById(s).getValue())); + gotCount = true; + } + } + if (gotCount == false) { + //System.out.println("!NO ENTRY COUNT FOR " + missionStf); + continue; + } + } catch (Exception e) { e.printStackTrace(); } + missionStrings++; + } + } + System.out.println("Loaded " + missionStrings + " mission entry counts."); + } + + + private int getRandomStringEntry(String missionStf) { + int ranEntryNum = 1; + + if (entryCounts.get(missionStf) != null) { ranEntryNum = ran.nextInt(entryCounts.get(missionStf)); } + //else { System.out.println(missionStf + " was not found in entryCount and is using entry #1"); } + + if (ranEntryNum == 0) + return 1; + else + return ranEntryNum; + } + + private void handleMissionListRequest(final SWGObject player, int requestCounter, int type) { + CreatureObject creature = (CreatureObject) player; + + TangibleObject missionBag = (TangibleObject) creature.getSlottedObject("mission_bag"); + + if (missionBag == null || creature == null) + return; + + final AtomicInteger typeOneCount = new AtomicInteger(); + final AtomicInteger typeTwoCount = new AtomicInteger(); + + missionBag.viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + + if (obj instanceof MissionObject == false) + return; + + MissionObject mission = (MissionObject) obj; + + if (typeOneCount.get() < 4) { + + if (type == TerminalType.GENERIC) + randomDeliveryMission(player, mission); + + else if (type == TerminalType.BOUNTYHUNTER) + randomBountyMission(player, mission); + + else if (type == TerminalType.ARTISAN) + return; + + else + return; + + mission.setRepeatCount(requestCounter); + typeOneCount.incrementAndGet(); + + } else if (typeTwoCount.get() < 4) { + + if (type == TerminalType.GENERIC) + randomDestroyMission(player, mission); + + else if (type == TerminalType.BOUNTYHUNTER) + return; + + else if (type == TerminalType.ARTISAN) + return; + + else + return; + + mission.setRepeatCount(requestCounter); + typeTwoCount.incrementAndGet(); + } + } + }); + } + + private boolean handleMissionAccept(CreatureObject creature, MissionObject mission) { + SWGObject missionBag = creature.getSlottedObject("mission_bag"); + + if (mission.getContainer() != missionBag) + return false; + + TangibleObject datapad = (TangibleObject) creature.getSlottedObject("datapad"); + + if (datapad == null) + return false; + + AtomicInteger missionCount = new AtomicInteger(); + AtomicBoolean hasBountyMission = new AtomicBoolean(false); + datapad.viewChildren(creature, true, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj instanceof MissionObject) { + missionCount.incrementAndGet(); + + if (((MissionObject) obj).getMissionType().equals("bounty")) + hasBountyMission.set(true); + } + } + }); + + if (hasBountyMission.get() && mission.getMissionType().equals("bounty")) // Can only have 1 bounty mission + return false; + + if (missionCount.get() == 2) { + creature.sendSystemMessage("@mission/mission_generic:too_many_missions", (byte) 0); + return false; + } + missionBag.transferTo(creature, datapad, mission); + createMissionObjective(creature, mission); + return true; + } + + private void createMissionObjective(CreatureObject creature, MissionObject mission) { + switch(mission.getMissionType()) { + + case "deliver": + DeliveryMissionObjective deliveryObjective = new DeliveryMissionObjective(mission); + + mission.setObjective(deliveryObjective); + + deliveryObjective.activate(); + break; + + case "destroy": + DestroyMissionObjective destroyObjective = new DestroyMissionObjective(mission); + + mission.setObjective(destroyObjective); + + destroyObjective.activate(); + break; + default: + break; + } + } + + private void randomDeliveryMission(SWGObject player, MissionObject mission) { + mission.setMissionType("deliver"); + + String[] difficulties = { "easy", "medium", "hard" }; + + String missionStf = "mission/mission_deliver_neutral_" + difficulties[ran.nextInt(difficulties.length)]; + + mission.setMissionId(getRandomStringEntry(missionStf)); + mission.setMissionDescription(missionStf); + mission.setMissionTitle(missionStf); + + mission.setCreator(nameGenerator.compose(2) + " " + nameGenerator.compose(3)); + + mission.setMissionLevel(5); + + // TODO: Use pre-defined commoner locations + Point3D startLocation = SpawnPoint.getRandomPosition(player.getPosition(), (float) 50, (float) 300, player.getPlanetId()); + Point3D destination = SpawnPoint.getRandomPosition(startLocation, (float) 50, (float) 500, player.getPlanetId()); + + mission.setStartLocation(startLocation, player.getPlanet().name); + mission.setDestination(destination, player.getPlanet().name); + + mission.setCreditReward((int) (50 + ((startLocation.getDistance2D(destination) / 10)))); + + mission.setMissionTemplateObject(CRC.StringtoCRC("object/tangible/mission/shared_mission_datadisk.iff")); + mission.setMissionTargetName("Datadisk"); + + WaypointObject waypoint = (WaypointObject) core.objectService.createObject("object/waypoint/shared_waypoint.iff", player.getPlanet()); + if (waypoint == null) + return; + + waypoint.setColor(WaypointObject.ORANGE); + + } + + private void randomDestroyMission(SWGObject player, MissionObject mission) { + + } + + private void randomBountyMission(SWGObject player, MissionObject mission) { + + } + + public enum TerminalType {; + public static final int GENERIC = 1; + public static final int BOUNTYHUNTER = 2; + public static final int ENTERTAINER = 3; + public static final int ARTISAN = 4; + public static final int EXPLORER = 5; + } + + @Override + public void shutdown() { + + } +} diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index c571bd5d..3de95fd7 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -334,11 +334,17 @@ public class ObjectService implements INetworkDispatch { object = new Harvester_Deed(objectID, planet, Template, position, orientation); - } else if(Template.startsWith("object/tangible/deed/player_house_deed")) { + } else if(Template.startsWith("object/tangible/deed/player_house_deed") || Template.startsWith("object/tangible/deed/guild_deed") || Template.startsWith("object/tangible/deed/city_deed") || Template.startsWith("object/tangible/tcg")) { object = new Player_House_Deed(objectID, planet, Template, position, orientation); - } else if(Template.startsWith("object/tangible")) { + } +// else if(Template.startsWith("object/tangible/container/drum/shared_treasure_drum.iff")) { +// +// object = new CreatureObject(objectID, planet, position, orientation, Template); +// +// } + else if(Template.startsWith("object/tangible")) { object = new TangibleObject(objectID, planet, Template, position, orientation); diff --git a/src/services/pet/MountService.java b/src/services/pet/MountService.java index b8f09734..a8094945 100644 --- a/src/services/pet/MountService.java +++ b/src/services/pet/MountService.java @@ -32,10 +32,13 @@ import resources.common.OutOfBand; import resources.datatables.DisplayType; import resources.datatables.Options; import resources.datatables.Posture; +import resources.datatables.State; import resources.datatables.StateStatus; import resources.objects.building.BuildingObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; import engine.resources.container.Traverser; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; @@ -177,6 +180,8 @@ public class MountService implements INetworkDispatch { return; } + mount.setAttachment("pcdAppearanceFilename", pcd.getTemplateData().getAttribute("appearanceFilename")); + mount.setFaction(actor.getFaction()); mount.setFactionStatus(actor.getFactionStatus()); @@ -388,6 +393,8 @@ public class MountService implements INetworkDispatch { } public void mount(CreatureObject rider, CreatureObject mount) { + // Check if mount may be mounted // This is already checked in canMount + if (rider == null) { return; } @@ -396,23 +403,12 @@ public class MountService implements INetworkDispatch { return; } - // FIXME like above, movement skillmod should be used instead of creo4 vars and never be 0, otherwise it thinks we are always rooted - //if (rider.getSkillModBase("movement") == 0) { - //rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_rooted"), DisplayType.Broadcast); - //return; - //} - - if (mount.getOption(Options.DISABLED)) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); - return; - } - if (!mount.getOption(Options.MOUNT)) { return; } - if (!canMount(rider, mount)) { - rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast); + if (mount.getOption(Options.DISABLED)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount_veh_disabled"), DisplayType.Broadcast); return; } @@ -421,17 +417,25 @@ public class MountService implements INetworkDispatch { return; } - rider.setStateBitmask(rider.getStateBitmask() | 0x8000000); - rider.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); - - synchronized(mount.getMutex()) { - mount._add(rider); + if (!canMount(rider, mount)) { + rider.sendSystemMessage(OutOfBand.ProsePackage("@pet_menu:cant_mount"), DisplayType.Broadcast); + return; } - mount.setStateBitmask(mount.getStateBitmask() | 0x10000000); - //mount.setState(State.MountedCreature, true); + // Put rider into mount + mount._add(rider); + + // Set mount states and stuff + mount.setStateBitmask(mount.getStateBitmask() | State.MountedCreature); + mount.setState(State.MountedCreature, true); + rider.setPosture((mount.getTemplate().contains("vehicle")) ? Posture.DrivingVehicle : Posture.RidingCreature); + + // Set rider states and stuff + rider.setStateBitmask(rider.getStateBitmask() | State.RidingMount); + rider.setState(State.RidingMount, true); + + // Notify observers and update quadtree mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), mount.getObjectID(), 4), true); - //rider.setState(State.RidingMount, true); core.simulationService.remove(rider, rider.getWorldPosition().x, rider.getWorldPosition().z, false); } @@ -514,10 +518,6 @@ public class MountService implements INetworkDispatch { return false; } - if (mount.getSlottedObject("rider") != rider) { - return false; - } - return true; } @@ -549,23 +549,28 @@ public class MountService implements INetworkDispatch { return false; } - int passengers = 0; + // Check if there are any passenger slots left - if (mount.getAttachment("passengers") != null){ - passengers = (Integer) mount.getAttachment("passengers"); - } + LongAdder adder = new LongAdder(); - int passengerSlot = 0; + mount.getSlottedObject("inventory").viewChildren(mount, false, false, (obj) -> adder.increment()); - for (int i = 1; i <= passengers; i++) { - if (mount.getSlottedObject("rider" + i) == null) { - passengerSlot = i; - break; + int passengers = adder.intValue(); + + try { + DatatableVisitor visitor = ClientFileManager.loadFile("datatables/mount/saddle_appearance_map.iff", DatatableVisitor.class); + + for (int i = 0; i < visitor.getRowCount(); i++) { + if (visitor.getObject(i, 2).equals(mount.getAttachment("pcdAppearanceFilename"))) { // saddle_appearance_filename + if (passengers >= (int) visitor.getObject(i, 1)) { // saddle_capacity + return false; + } + + break; + } } - } - - if (passengerSlot == 0) { - return false; + } catch (Exception e) { + e.printStackTrace(); } CreatureObject owner = (CreatureObject) NGECore.getInstance().objectService.getObject(mount.getOwnerId()); @@ -586,6 +591,8 @@ public class MountService implements INetworkDispatch { } public void dismount(CreatureObject rider, CreatureObject mount) { + // Check if mount is currently mounted // Not necessary since nobody'll be dismounted if so + if (rider == null || mount == null) { return; } @@ -598,39 +605,39 @@ public class MountService implements INetworkDispatch { return; } + // Dismount all passengers if (rider.getObjectID() == mount.getOwnerId()) { CreatureObject owner = rider; mount.viewChildren(owner, false, false, new Traverser() { public void process(SWGObject passenger) { - if (passenger != owner) { - mount._remove(passenger); - mount.notifyObservers(new UpdateContainmentMessage(passenger.getObjectID(), 0, -1), false); - - if (passenger instanceof CreatureObject) { - ((CreatureObject) passenger).setState(StateStatus.RidingMount, false); - ((CreatureObject) passenger).setPosture(Posture.Upright); - } - - core.simulationService.add(passenger, mount.getWorldPosition().x, mount.getWorldPosition().z, false); - core.simulationService.teleport(passenger, mount.getWorldPosition(), mount.getOrientation(), 0); - } + if (passenger != owner) dismount(rider, mount); } }); } + // Remove rider from mount mount._remove(rider); - mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), false); - + + // Set mount states and stuff if (rider.getObjectID() == mount.getOwnerId()) { - mount.setState(StateStatus.MountedCreature, false); + mount.setStateBitmask(mount.getOptionsBitmask() & ~State.MountedCreature); + mount.setState(State.MountedCreature, false); } - core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + // Set rider states and stuff + rider.setStateBitmask(rider.getOptionsBitmask() & ~State.RidingMount); + rider.setState(State.RidingMount, false); + rider.setPosture(Posture.Upright); + + // Update observers and quadtree + mount.notifyObservers(new UpdateContainmentMessage(rider.getObjectID(), 0, -1), true); core.simulationService.teleport(rider, mount.getWorldPosition(), mount.getOrientation(), 0); + core.simulationService.add(rider, mount.getWorldPosition().x, mount.getWorldPosition().z, false); + // Store mount if it's a creature if (!mount.getTemplate().contains("vehicle") && rider.getObjectID() == mount.getOwnerId()) { store(rider, mount); } diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java new file mode 100644 index 00000000..34afeef9 --- /dev/null +++ b/src/services/playercities/PlayerCity.java @@ -0,0 +1,699 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.playercities; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Vector; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.waypoint.WaypointObject; +import services.chat.Mail; +import services.chat.WaypointAttachment; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; + +/** + * @author Charon + */ + +public class PlayerCity { + + public static final int DESERTED = 0; + public static final int OUTPOST = 1; + public static final int VILLAGE = 2; + public static final int TOWNSHIP = 3; + public static final int CITY = 4; + public static final int METROPOLIS = 5; + + public static final int CLONE_LAB = 1; + public static final int DNA_LABORATORY = 2; + public static final int ENCORE_PERFORMANCE = 3; + public static final int ENTERTAINMENT_DISTRICT = 4; + public static final int IMPROVED_JOB_MARKET = 5; + public static final int MANUFACTURING_CENTER = 6; + public static final int MEDICAL_CENTER = 7; + public static final int RESEARCH_CENTER = 8; + public static final int SAMPLE_RICH = 9; + public static final int INDUSTRIAL_SOCIETY = 10; + public static final int SCIENTIFIC_SOCIETY = 11; + public static final int STRONGHOLD = 12; + + public static final String[] specialisationSTFNames = new String[]{"city_spec_cloning", + "city_spec_bm_incubator", + "city_spec_storyteller", + "city_spec_entertainer", + "city_spec_missions", + "city_spec_industry", + "city_spec_doctor", + "city_spec_research", + "city_spec_sample_rich", + "city_spec_master_manufacturing", + "city_spec_master_healing", + "city_spec_stronghold"}; + + public static final int BANK = 1; + public static final int CLONING_FACILITY = 2; + public static final int GARAGE = 3; + public static final int MEDIUM_GARDEN = 4; + public static final int LARGE_GARDEN = 5; + public static final int SHUTTLEPORT = 6; + + + private String cityName = ""; + private int cityID = -1; + private Point3D cityCenterPosition = new Point3D(0,0,0); + private int cityRadius = 0; + private int cityRank = 0; + private int specialization = -1; + private long mayorID = 0L; + private int cityTreasury = 0; + private int maintenanceFee = 0; + private int GCW_Alignment = 0; + private long nextElectionDate = 0L; + private long nextCityUpdate = 0L; + private long foundationTime = 0L; + private int incomeTax = 0; + private int propertyTax = 0; + private int salesTax = 0; + private int travelTax = 0; + private int garageTax = 0; + private boolean founded = false; + private boolean shuttlePort = false; + private boolean registered = false; + private boolean zoningEnabled = false; + + private final long cityUpdateSpan = 7*86400*1000; + private final long legislationPeriod = 21*86400*1000; + + private Vector placedStructures = new Vector(); + private Vector citizens = new Vector(); + private Vector electionCandidates = new Vector(); + private Vector electionVotes = new Vector(); + private Vector cityBanList = new Vector(); + private Vector militiaList = new Vector(); + private Vector foundersList = new Vector(); + + public PlayerCity(){} + + public PlayerCity(CreatureObject founder, int cityID){ + + setCityCenterPosition(founder.getPosition()); + setCityRadius(150); + setFoundationTime(System.currentTimeMillis()); + setMaintenanceFee(1); + setNextCityUpdate(foundationTime+cityUpdateSpan); + setNextElectionDate(foundationTime+legislationPeriod); + citizens.add(founder.getObjectID()); + this.cityID = cityID; + } + + public void handleGrantZoning() { + + } + + public void handleBuildRequest() { + + } + + public void checkPlacementPermission() { + + } + + public void processElection() { + // ToDo: handle everything + long winnerID = mayorID; + mayorID = winnerID; + electionVotes.clear(); + electionCandidates.clear(); + electionCandidates.add(mayorID); + setNextElectionDate(System.currentTimeMillis()+legislationPeriod); + } + + public void processCityUpdate() { + // has something changed? + System.out.println("processCityUpdate"); + int censusResult = citizens.size(); + // ToDo: Consider 1 rank per update changes + if (censusResult<5){ + setRank(DESERTED); // City is technically not a city anymore + setCityRadius(0); + } + + if (censusResult>=5 && censusResult<10){ + setRank(OUTPOST); + setCityRadius(150); + } + + if (censusResult>=10 && censusResult<15){ + setRank(VILLAGE); + setCityRadius(200); + } + + if (censusResult>=15 && censusResult<30){ + setRank(TOWNSHIP); + setCityRadius(300); + } + + if (censusResult>=30 && censusResult<40){ + setRank(CITY); + setCityRadius(400); + } + + if (censusResult>=40){ + setRank(METROPOLIS); + setCityRadius(450); + } + + // collect taxes + for (long citizen : citizens){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + + // ToDo: Handle tax evaders etc. + int incomeTax = getIncomeTax(); + citizenObject.setBankCredits(citizenObject.getBankCredits()-incomeTax); + cityTreasury += incomeTax; + + int propertyTaxRate = getPropertyTax()/100; + Vector allStructuresOfCitizen = new Vector(); // Collect the structures + int cumulatedPropertyTax = 0; + for (BuildingObject structure : allStructuresOfCitizen){ + cumulatedPropertyTax += propertyTaxRate*structure.getBMR(); + } + + citizenObject.setBankCredits(citizenObject.getBankCredits()-cumulatedPropertyTax); + cityTreasury += cumulatedPropertyTax; + } + + demolishHighRankStructures(); + setNextCityUpdate(System.currentTimeMillis()+cityUpdateSpan); + } + + public void demolishHighRankStructures() { + // Check if there are any structures in the city + // that require a higher rank than the current one + synchronized(placedStructures){ + Vector wreckingBall = new Vector(); + for (long structureID : placedStructures){ + SWGObject structure = NGECore.getInstance().objectService.getObject(structureID); + int structureCode = (int) structure.getAttachment("CityStructureCode"); + + if (structureCode==BANK && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==CLONING_FACILITY && cityRank<3){ + wreckingBall.add(structure); + } + + if (structureCode==GARAGE && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==MEDIUM_GARDEN && cityRank<2){ + wreckingBall.add(structure); + } + + if (structureCode==LARGE_GARDEN && cityRank<3){ + wreckingBall.add(structure); + } + + if (structureCode==SHUTTLEPORT && cityRank<4){ + wreckingBall.add(structure); + } + } + + for (SWGObject wreck : wreckingBall){ + placedStructures.remove(wreck.getObjectID()); + NGECore.getInstance().objectService.destroyObject(wreck.getObjectID()); + } + } + } + + public boolean checkFoundationSuccess() { + + Vector founders = getFoundersList(); + Vector citizenList = getCitizens(); + int founderCitizenCount = 0; + for (long founderId : founders){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(founderId); + if (citizenList.contains(founderId) && (long)citizenObject.getAttachment("residentCity")==this.getCityID()) + founderCitizenCount++; + } + if (founderCitizenCount==founders.size()) + return true; // All founders are citizens now + + return false; + } + + public void calculateMaintenance() { + + } + + public void handleBanRequest() { + + } + + public void handlePardonRequest() { + + } + + public int getRank() { + return cityRank; + } + + public void setRank(int cityRank) { + this.cityRank = cityRank; + } + + public int getSpecialization() { + return specialization; + } + + public void setSpecialization(int specialization) { + this.specialization = specialization; + sendSpecUpdateMail(specialization); + } + + public long getMayorID() { + return mayorID; + } + + public void setMayorID(long mayorID) { + this.mayorID = mayorID; + } + + public int getCityTreasury() { + return cityTreasury; + } + + public void setCityTreasury(int cityTreasury) { + this.cityTreasury = cityTreasury; + } + + public int getMaintenanceFee() { + return maintenanceFee; + } + + public void setMaintenanceFee(int maintenanceFee) { + this.maintenanceFee = maintenanceFee; + } + + public int getGCW_Alignment() { + return GCW_Alignment; + } + + public void setGCW_Alignment(int gCW_Alignment) { + GCW_Alignment = gCW_Alignment; + } + + public Vector getPlacedStructures() { + synchronized(placedStructures){ + return placedStructures; + } + } + + public void setPlacedStructures(Vector placedStructures) { + synchronized(placedStructures){ + this.placedStructures = placedStructures; + } + } + + public void addNewStructure(long newStructure) { + synchronized(placedStructures){ + this.placedStructures.add(newStructure); + } + } + + public Vector getCitizens() { + synchronized(citizens){ + return citizens; + } + } + + public void setCitizens(Vector citizens) { + synchronized(citizens){ + this.citizens = citizens; + } + } + + public void addCitizen(long citizen) { + synchronized(citizens){ + this.citizens.add(citizen); + } + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + sendNewCitizenMailAll(citizenObject); + sendNewCitizenMail(citizenObject); + } + + public void removeCitizen(long citizen) { + synchronized(citizens){ + this.citizens.remove(citizen); + } + } + + public long getNextElectionDate() { + return nextElectionDate; + } + + public void setNextElectionDate(long nextElectionDate) { + this.nextElectionDate = nextElectionDate; + } + + public Vector getElectionCandidates() { + return electionCandidates; + } + + public void setElectionCandidates(Vector electionCandidates) { + this.electionCandidates = electionCandidates; + } + + public long getNextCityUpdate() { + return nextCityUpdate; + } + + public void setNextCityUpdate(long nextCityUpdate) { + this.nextCityUpdate = nextCityUpdate; + } + + public Vector getCityBanList() { + return cityBanList; + } + + public void setCityBanList(Vector cityBanList) { + this.cityBanList = cityBanList; + } + + public Vector getElectionVotes() { + return electionVotes; + } + + public void addToElectionVotes(byte vote) { + electionVotes.add(vote); + } + + // Stalinesque method :D + public void setElectionVotes(Vector electionVotes) { + this.electionVotes = electionVotes; + } + + public Point3D getCityCenterPosition() { + return cityCenterPosition; + } + + public void setCityCenterPosition(Point3D cityCenterPosition) { + this.cityCenterPosition = cityCenterPosition; + } + + public int getCityRadius() { + return cityRadius; + } + + public void setCityRadius(int cityRadius) { + this.cityRadius = cityRadius; + } + + public Vector getMilitiaList() { + return militiaList; + } + + public void setMilitiaList(Vector militiaList) { + this.militiaList = militiaList; + } + + public Vector getFoundersList() { + return foundersList; + } + + public void setFoundersList(Vector foundersList) { + this.foundersList = foundersList; + } + + public long getFoundationTime() { + return foundationTime; + } + + public void setFoundationTime(long foundationTime) { + this.foundationTime = foundationTime; + } + + public boolean isFounded() { + return founded; + } + + public void setFounded(boolean founded) { + this.founded = founded; + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + sendNameChangeMail(cityName); + } + + public int getCityID() { + return cityID; + } + + public void setCityID(int cityID) { + this.cityID = cityID; + } + + public int getIncomeTax() { + return incomeTax; + } + + public void setIncomeTax(int incomeTax) { + this.incomeTax = incomeTax; + } + + public int getPropertyTax() { + return propertyTax; + } + + public void setPropertyTax(int propertyTax) { + this.propertyTax = propertyTax; + } + + public int getSalesTax() { + return salesTax; + } + + public void setSalesTax(int salesTax) { + this.salesTax = salesTax; + } + + public int getTravelTax() { + return travelTax; + } + + public void setTravelTax(int travelTax) { + this.travelTax = travelTax; + } + + public int getGarageTax() { + return garageTax; + } + + public void setGarageTax(int garageTax) { + this.garageTax = garageTax; + } + + public boolean hasShuttlePort() { + return shuttlePort; + } + + public void setShuttlePort(boolean shuttlePort) { + this.shuttlePort = shuttlePort; + } + + public boolean isRegistered() { + return registered; + } + + public void setRegistered(boolean registered) { + this.registered = registered; + } + + public boolean isZoningEnabled() { + return zoningEnabled; + } + + public void setZoningEnabled(boolean zoningEnabled) { + this.zoningEnabled = zoningEnabled; + } + + public static String[] getSpecialisationSTFNames() { + return specialisationSTFNames; + } + + public List getSpecializationSTFNamesAsList() { + return Arrays.asList(specialisationSTFNames); + } + + public void sendSpecUpdateMail(int cityID) { + // city_version_update_subject_4 + // city_version_update_body_4 + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:city_version_update_body_4"); + actorMail.setSubject("@city/city:city_version_update_subject_4"); + actorMail.setSenderName("City " + this.cityName); + +// List attachments = new ArrayList(); +// WaypointAttachment attachment = new WaypointAttachment(); +// attachment.active = false; +// attachments.add(attachment); +// attachment.cellID = constructionWaypoint.getCellId(); +// attachment.color = (byte)1; +// attachment.name = "City"; +// attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); +// attachment.positionX = object.getPosition().x; +// attachment.positionY = 0; +// attachment.positionZ = object.getPosition().z; +// actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); +// if (newCitizen.getClient()!=null) +// NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + + public void sendNameChangeMail(String name) { + + } + + public void sendNewCitizenMailAll(CreatureObject newCitizen) { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:new_city_citizen_body"); + actorMail.setSubject("@city/city:new_city_citizen_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (newCitizen.getClient()!=null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + + public void sendNewCitizenMail(CreatureObject citizen) { + + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen.getObjectID()); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:new_city_citizen_other_body"); + actorMail.setSubject("@city/city:new_city_citizen_other_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizen.getPlanet(), citizen.getPosition().x, 0 ,citizen.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizen.getPlanet().getName()); + attachment.positionX = citizen.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizen.getPosition().z; + attachments.add(attachment); + actorMail.setAttachments(attachments); + + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + NGECore.getInstance().chatService.sendPersistentMessageHeader(citizen.getClient(), actorMail); + } + + public void sendCitizenLeftMailAll(CreatureObject newCitizen) { + + Vector citizenList = getCitizens(); + for (long citizen : citizenList){ + CreatureObject citizenObject = (CreatureObject) NGECore.getInstance().objectService.getObject(citizen); + Mail actorMail = new Mail(); + actorMail.setMailId(NGECore.getInstance().chatService.generateMailId()); + actorMail.setRecieverId(citizen); + actorMail.setStatus(Mail.NEW); + actorMail.setTimeStamp((int) (new Date().getTime() / 1000)); + actorMail.setMessage("@city/city:lost_citizen_body"); + actorMail.setSubject("@city/city:lost_citizen_subject"); + actorMail.setSenderName("City " + this.cityName); + + List attachments = new ArrayList(); + WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", citizenObject.getPlanet(), citizenObject.getPosition().x, 0 ,citizenObject.getPosition().z); + WaypointAttachment attachment = new WaypointAttachment(); + attachment.active = false; + attachment.cellID = constructionWaypoint.getCellId(); + attachment.color = (byte)1; + attachment.name = "City"; + attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(citizenObject.getPlanet().getName()); + attachment.positionX = citizenObject.getPosition().x; + attachment.positionY = 0; + attachment.positionZ = citizenObject.getPosition().z; + attachments.add(attachment); + actorMail.setAttachments(attachments); + + NGECore.getInstance().chatService.storePersistentMessage(actorMail); + if (newCitizen.getClient()!=null) + NGECore.getInstance().chatService.sendPersistentMessageHeader(newCitizen.getClient(), actorMail); + + } + } + +} diff --git a/src/services/playercities/PlayerCityService.java b/src/services/playercities/PlayerCityService.java new file mode 100644 index 00000000..349a3c40 --- /dev/null +++ b/src/services/playercities/PlayerCityService.java @@ -0,0 +1,151 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package services.playercities; + +import java.util.Collections; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import resources.common.OutOfBand; +import resources.common.RGB; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import main.NGECore; + +public class PlayerCityService implements INetworkDispatch { + + private NGECore core; + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + private Vector playerCities = new Vector(); + private int cityID = 0; // This must be persisted or handled via objectservice somehow + + public PlayerCityService(NGECore core) { + this.core = core; + + scheduler.scheduleAtFixedRate(() -> { + administratePlayerCities(); + }, 0, 1, TimeUnit.MINUTES); + } + + public void administratePlayerCities() { + synchronized(playerCities){ + Vector unfoundedCities = new Vector(); + for (PlayerCity city : playerCities){ + + if (city.getNextCityUpdate()<=System.currentTimeMillis()) + city.processCityUpdate(); + + if (city.getNextElectionDate()<=System.currentTimeMillis()) + city.processElection(); + + if (! city.isFounded() && city.getFoundationTime()<=System.currentTimeMillis()-(60*60*24*1000)){ + if (! city.checkFoundationSuccess()) + unfoundedCities.add(city); + } + } + + if (unfoundedCities.size()>0){ + playerCities.removeAll(unfoundedCities); + } + playerCities.removeAll(Collections.singleton(null)); + } + } + + public PlayerCity addNewPlayerCity(CreatureObject founder) { + PlayerCity newCity = null; + synchronized(playerCities){ + newCity = new PlayerCity(founder,cityID++); + playerCities.add(newCity); + } + newCitySUI1(founder,newCity); + return newCity; + } + + public PlayerCity getCityObjectIsIn(SWGObject object) { + PlayerCity foundCity = null; + synchronized(playerCities){ + for (PlayerCity city : playerCities){ + int radius = city.getCityRadius(); + if (object.getPosition().getDistance2D(city.getCityCenterPosition()) returnList = new Vector(); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } + + @Override + public void insertOpcodes(Map arg0, + Map arg1) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } +} diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index f404adce..546fc3d2 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -100,7 +100,7 @@ public class SUIService implements INetworkDispatch { if (! admins.contains(owner.getCustomName()) && hoppers.contains(owner.getCustomName())){ // authorized for hopper // change radialOptions to hopper access - core.scriptService.callScript("scripts/radial/", "harvesterHopper", "createRadial", core, owner, target, request.getRadialOptions()); + core.scriptService.callScript("scripts/radial/", "structure/harvesterHopper", "createRadial", core, owner, target, request.getRadialOptions()); sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; } @@ -124,9 +124,9 @@ public class SUIService implements INetworkDispatch { if(target.getGrandparent() != null && target.getGrandparent().getAttachment("structureAdmins") != null) { - if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure_management_terminal")) + if(core.housingService.getPermissions(owner, target.getContainer()) && !getRadialFilename(target).equals("structure/structure_management_terminal")) { - core.scriptService.callScript("scripts/radial/", "moveable", "createRadial", core, owner, target, request.getRadialOptions()); + core.scriptService.callScript("scripts/radial/", "structure/moveable", "createRadial", core, owner, target, request.getRadialOptions()); sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; } diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index a6929851..addfbfe1 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -320,7 +320,7 @@ public class TravelService implements INetworkDispatch { public void doTransport(SWGObject actor, TravelPoint tp) { Planet planet = core.terrainService.getPlanetByName(tp.getPlanetName()); - Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 5, 20, actor.getPlanetId()); + Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getLocation(), 5, 20, actor.getPlanetId()); core.simulationService.transferToPlanet(actor, planet, spawnLocation, new Quaternion(0, 0, 0, 0), null); }