diff --git a/ngengine_public.jar b/ngengine_public.jar index 0d2614d2..326b2a85 100644 Binary files a/ngengine_public.jar and b/ngengine_public.jar differ diff --git a/scripts/buffs/fs_ae_dm_cc_0.py b/scripts/buffs/fs_ae_dm_cc_0.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_0.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_1.py b/scripts/buffs/fs_ae_dm_cc_1.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_2.py b/scripts/buffs/fs_ae_dm_cc_2.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_3.py b/scripts/buffs/fs_ae_dm_cc_3.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_4.py b/scripts/buffs/fs_ae_dm_cc_4.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_4.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_5.py b/scripts/buffs/fs_ae_dm_cc_5.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_5.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_6.py b/scripts/buffs/fs_ae_dm_cc_6.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_ae_dm_cc_6.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_1.py b/scripts/buffs/fs_dm_cc_crit_1.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_dm_cc_crit_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_2.py b/scripts/buffs/fs_dm_cc_crit_2.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_dm_cc_crit_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_3.py b/scripts/buffs/fs_dm_cc_crit_3.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_dm_cc_crit_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_4.py b/scripts/buffs/fs_dm_cc_crit_4.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_dm_cc_crit_4.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/fs_dm_cc_crit_5.py b/scripts/buffs/fs_dm_cc_crit_5.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/buffs/fs_dm_cc_crit_5.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_1.py b/scripts/buffs/of_adv_paint_debuff_1.py new file mode 100644 index 00000000..7f6894de --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 3) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 3) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_2.py b/scripts/buffs/of_adv_paint_debuff_2.py new file mode 100644 index 00000000..92f239c0 --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 4) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 4) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_3.py b/scripts/buffs/of_adv_paint_debuff_3.py new file mode 100644 index 00000000..58fe704f --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 5) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_4.py b/scripts/buffs/of_adv_paint_debuff_4.py new file mode 100644 index 00000000..f41ae124 --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_4.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 6) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 6) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_5.py b/scripts/buffs/of_adv_paint_debuff_5.py new file mode 100644 index 00000000..d31be060 --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_5.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 7) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 7) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_6.py b/scripts/buffs/of_adv_paint_debuff_6.py new file mode 100644 index 00000000..84ffe9ed --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_6.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 8) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 8) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_7.py b/scripts/buffs/of_adv_paint_debuff_7.py new file mode 100644 index 00000000..231f4a1b --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_7.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 9) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 9) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_debuff_8.py b/scripts/buffs/of_adv_paint_debuff_8.py new file mode 100644 index 00000000..65e1c826 --- /dev/null +++ b/scripts/buffs/of_adv_paint_debuff_8.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_damage_vulnerability', 10) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_1.py b/scripts/buffs/of_adv_paint_expose_1.py new file mode 100644 index 00000000..e3583535 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_1.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 15) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 15) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 3) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 3) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_2.py b/scripts/buffs/of_adv_paint_expose_2.py new file mode 100644 index 00000000..07ed0966 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_2.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 20) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 20) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 4) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 4) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_3.py b/scripts/buffs/of_adv_paint_expose_3.py new file mode 100644 index 00000000..4ab6e431 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_3.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 25) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 25) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 5) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 5) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_4.py b/scripts/buffs/of_adv_paint_expose_4.py new file mode 100644 index 00000000..df8fae5c --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_4.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 30) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 30) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 6) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 6) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_5.py b/scripts/buffs/of_adv_paint_expose_5.py new file mode 100644 index 00000000..d22f46f0 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_5.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 35) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 35) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 7) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 7) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_6.py b/scripts/buffs/of_adv_paint_expose_6.py new file mode 100644 index 00000000..4e3af368 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_6.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 40) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 40) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 8) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 8) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_7.py b/scripts/buffs/of_adv_paint_expose_7.py new file mode 100644 index 00000000..46e42ba4 --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_7.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 45) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 45) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 9) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 9) + return + \ No newline at end of file diff --git a/scripts/buffs/of_adv_paint_expose_8.py b/scripts/buffs/of_adv_paint_expose_8.py new file mode 100644 index 00000000..ff43fe6c --- /dev/null +++ b/scripts/buffs/of_adv_paint_expose_8.py @@ -0,0 +1,14 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'stealth_divisor', 50) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) + core.skillModService.addSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'stealth_divisor', 50) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_buff_def', 10) + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_vulnerability_of_dm', 10) + return + \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_1.py b/scripts/buffs/of_ae_dm_cc_1.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_ae_dm_cc_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_2.py b/scripts/buffs/of_ae_dm_cc_2.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_ae_dm_cc_2.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_ae_dm_cc_3.py b/scripts/buffs/of_ae_dm_cc_3.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_ae_dm_cc_3.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_1.py b/scripts/buffs/of_buff_def_1.py new file mode 100644 index 00000000..dd15adaf --- /dev/null +++ b/scripts/buffs/of_buff_def_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 1) + core.skillModService.addSkillMod(actor, 'constitution_modified', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 1) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_2.py b/scripts/buffs/of_buff_def_2.py new file mode 100644 index 00000000..d819404b --- /dev/null +++ b/scripts/buffs/of_buff_def_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.addSkillMod(actor, 'constitution_modified', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 10) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_3.py b/scripts/buffs/of_buff_def_3.py new file mode 100644 index 00000000..d18a3633 --- /dev/null +++ b/scripts/buffs/of_buff_def_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.addSkillMod(actor, 'constitution_modified', 20) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_4.py b/scripts/buffs/of_buff_def_4.py new file mode 100644 index 00000000..b115ce6b --- /dev/null +++ b/scripts/buffs/of_buff_def_4.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.addSkillMod(actor, 'constitution_modified', 20) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 2) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 20) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_5.py b/scripts/buffs/of_buff_def_5.py new file mode 100644 index 00000000..5c6ff8eb --- /dev/null +++ b/scripts/buffs/of_buff_def_5.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) + core.skillModService.addSkillMod(actor, 'constitution_modified', 25) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 6) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 25) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 6) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_6.py b/scripts/buffs/of_buff_def_6.py new file mode 100644 index 00000000..b8a4b168 --- /dev/null +++ b/scripts/buffs/of_buff_def_6.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 3) + core.skillModService.addSkillMod(actor, 'constitution_modified', 35) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 7) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 3) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 7) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_7.py b/scripts/buffs/of_buff_def_7.py new file mode 100644 index 00000000..77bdd6b4 --- /dev/null +++ b/scripts/buffs/of_buff_def_7.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) + core.skillModService.addSkillMod(actor, 'constitution_modified', 50) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 8) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 50) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 8) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_8.py b/scripts/buffs/of_buff_def_8.py new file mode 100644 index 00000000..e4b5ba0c --- /dev/null +++ b/scripts/buffs/of_buff_def_8.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 4) + core.skillModService.addSkillMod(actor, 'constitution_modified', 60) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 9) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 4) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 60) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 9) + return \ No newline at end of file diff --git a/scripts/buffs/of_buff_def_9.py b/scripts/buffs/of_buff_def_9.py new file mode 100644 index 00000000..6f5e35e7 --- /dev/null +++ b/scripts/buffs/of_buff_def_9.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', 5) + core.skillModService.addSkillMod(actor, 'constitution_modified', 70) + core.skillModService.addSkillMod(actor, 'combat_critical_hit_reduction', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 5) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 70) + core.skillModService.deductSkillMod(actor, 'combat_critical_hit_reduction', 10) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_1.py b/scripts/buffs/of_cc_melee_1.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_2.py b/scripts/buffs/of_cc_melee_2.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_2.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_3.py b/scripts/buffs/of_cc_melee_3.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_3.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_4.py b/scripts/buffs/of_cc_melee_4.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_4.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_5.py b/scripts/buffs/of_cc_melee_5.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_5.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_6.py b/scripts/buffs/of_cc_melee_6.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_6.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_cc_melee_7.py b/scripts/buffs/of_cc_melee_7.py new file mode 100644 index 00000000..5452db94 --- /dev/null +++ b/scripts/buffs/of_cc_melee_7.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0.5) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_charge_1.py b/scripts/buffs/of_charge_1.py new file mode 100644 index 00000000..98327ebc --- /dev/null +++ b/scripts/buffs/of_charge_1.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) + core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + actor.setSpeedMultiplierBase(1.5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 10) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + actor.setSpeedMultiplierBase(1) + return + \ No newline at end of file diff --git a/scripts/buffs/of_deadeye_debuff.py b/scripts/buffs/of_deadeye_debuff.py new file mode 100644 index 00000000..9ecd0f4d --- /dev/null +++ b/scripts/buffs/of_deadeye_debuff.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'action_burn', 50) + core.skillModService.addSkillMod(actor, 'glancing_blow_vulnerable', 30) + actor.setSpeedMultiplierBase(1.5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', 50) + core.skillModService.deductSkillMod(actor, 'constitution_modified', 30) + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_1.py b/scripts/buffs/of_deb_def_1.py new file mode 100644 index 00000000..5a4b5cff --- /dev/null +++ b/scripts/buffs/of_deb_def_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -2) + core.skillModService.addSkillMod(actor, 'expertise_parry', -2) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 3) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -2) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -2) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 3) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_2.py b/scripts/buffs/of_deb_def_2.py new file mode 100644 index 00000000..75c97f71 --- /dev/null +++ b/scripts/buffs/of_deb_def_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) + core.skillModService.addSkillMod(actor, 'expertise_parry', -3) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_3.py b/scripts/buffs/of_deb_def_3.py new file mode 100644 index 00000000..5b125b31 --- /dev/null +++ b/scripts/buffs/of_deb_def_3.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -3) + core.skillModService.addSkillMod(actor, 'expertise_parry', -3) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -3) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -3) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_4.py b/scripts/buffs/of_deb_def_4.py new file mode 100644 index 00000000..056db66a --- /dev/null +++ b/scripts/buffs/of_deb_def_4.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) + core.skillModService.addSkillMod(actor, 'expertise_parry', -4) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_5.py b/scripts/buffs/of_deb_def_5.py new file mode 100644 index 00000000..ec243e5b --- /dev/null +++ b/scripts/buffs/of_deb_def_5.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -4) + core.skillModService.addSkillMod(actor, 'expertise_parry', -4) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -4) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -4) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_6.py b/scripts/buffs/of_deb_def_6.py new file mode 100644 index 00000000..3ebd39ea --- /dev/null +++ b/scripts/buffs/of_deb_def_6.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -5) + core.skillModService.addSkillMod(actor, 'expertise_parry', -5) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -5) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -5) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_7.py b/scripts/buffs/of_deb_def_7.py new file mode 100644 index 00000000..7503918d --- /dev/null +++ b/scripts/buffs/of_deb_def_7.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -6) + core.skillModService.addSkillMod(actor, 'expertise_parry', -6) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 7) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -6) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -6) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 7) + return \ No newline at end of file diff --git a/scripts/buffs/of_deb_def_8.py b/scripts/buffs/of_deb_def_8.py new file mode 100644 index 00000000..bc8e5334 --- /dev/null +++ b/scripts/buffs/of_deb_def_8.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_dodge', -7) + core.skillModService.addSkillMod(actor, 'expertise_parry', -7) + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 8) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_dodge', -7) + core.skillModService.deductSkillMod(actor, 'expertise_parry', -7) + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 8) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_1.py b/scripts/buffs/of_decap_bleed_1.py new file mode 100644 index 00000000..16152e90 --- /dev/null +++ b/scripts/buffs/of_decap_bleed_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 18) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 18) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_2.py b/scripts/buffs/of_decap_bleed_2.py new file mode 100644 index 00000000..f34171fc --- /dev/null +++ b/scripts/buffs/of_decap_bleed_2.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 25) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 25) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_3.py b/scripts/buffs/of_decap_bleed_3.py new file mode 100644 index 00000000..01d777ca --- /dev/null +++ b/scripts/buffs/of_decap_bleed_3.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 32) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 32) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_4.py b/scripts/buffs/of_decap_bleed_4.py new file mode 100644 index 00000000..1e847dea --- /dev/null +++ b/scripts/buffs/of_decap_bleed_4.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 42) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 42) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_5.py b/scripts/buffs/of_decap_bleed_5.py new file mode 100644 index 00000000..596a9457 --- /dev/null +++ b/scripts/buffs/of_decap_bleed_5.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 50) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 50) + return \ No newline at end of file diff --git a/scripts/buffs/of_decap_bleed_6.py b/scripts/buffs/of_decap_bleed_6.py new file mode 100644 index 00000000..1e96e637 --- /dev/null +++ b/scripts/buffs/of_decap_bleed_6.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 60) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) + return \ No newline at end of file diff --git a/scripts/buffs/of_dot_bomb_1.py b/scripts/buffs/of_dot_bomb_1.py new file mode 100644 index 00000000..9ab3d9f7 --- /dev/null +++ b/scripts/buffs/of_dot_bomb_1.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_fire', 200) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_fire', 200) + return \ No newline at end of file diff --git a/scripts/buffs/of_emergency_shield.py b/scripts/buffs/of_emergency_shield.py new file mode 100644 index 00000000..8b27d418 --- /dev/null +++ b/scripts/buffs/of_emergency_shield.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_divide_damage_taken', 75) + core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 75) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_divide_damage_taken', 75) + core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 75) + return \ No newline at end of file diff --git a/scripts/buffs/of_firepower.py b/scripts/buffs/of_firepower.py new file mode 100644 index 00000000..e7b0b129 --- /dev/null +++ b/scripts/buffs/of_firepower.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_damage_line_of_aoe', 125) + core.skillModService.addSkillMod(actor, 'expertise_critical_line_of_aoe', 50) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_damage_line_of_aoe', 125) + core.skillModService.deductSkillMod(actor, 'expertise_critical_line_of_aoe', 50) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_1.py b/scripts/buffs/of_focus_fire_1.py new file mode 100644 index 00000000..c8e0d364 --- /dev/null +++ b/scripts/buffs/of_focus_fire_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 2) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 15) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 2) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 15) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_2.py b/scripts/buffs/of_focus_fire_2.py new file mode 100644 index 00000000..7803b873 --- /dev/null +++ b/scripts/buffs/of_focus_fire_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 20) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 2) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 20) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 2) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_3.py b/scripts/buffs/of_focus_fire_3.py new file mode 100644 index 00000000..a4084512 --- /dev/null +++ b/scripts/buffs/of_focus_fire_3.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 3) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 23) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 3) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 23) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 3) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_4.py b/scripts/buffs/of_focus_fire_4.py new file mode 100644 index 00000000..27402933 --- /dev/null +++ b/scripts/buffs/of_focus_fire_4.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 26) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 3) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 26) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_5.py b/scripts/buffs/of_focus_fire_5.py new file mode 100644 index 00000000..9cc90e8d --- /dev/null +++ b/scripts/buffs/of_focus_fire_5.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 4) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 29) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 4) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 4) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 29) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 4) + return \ No newline at end of file diff --git a/scripts/buffs/of_focus_fire_6.py b/scripts/buffs/of_focus_fire_6.py new file mode 100644 index 00000000..58879cbe --- /dev/null +++ b/scripts/buffs/of_focus_fire_6.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'combat_strikethrough_value', 5) + core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 32) + core.skillModService.addSkillMod(actor, 'expertise_strikethrough_chance', 5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'combat_strikethrough_value', 5) + core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 32) + core.skillModService.deductSkillMod(actor, 'expertise_strikethrough_chance', 5) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_1.py b/scripts/buffs/of_inspiration_1.py new file mode 100644 index 00000000..6cd2da65 --- /dev/null +++ b/scripts/buffs/of_inspiration_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 870) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 870) + core.skillModService.deductSkillMod(actor, 'healing_action', 870) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_2.py b/scripts/buffs/of_inspiration_2.py new file mode 100644 index 00000000..a26bbe86 --- /dev/null +++ b/scripts/buffs/of_inspiration_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 1111) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.deductSkillMod(actor, 'healing_action', 1111) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_3.py b/scripts/buffs/of_inspiration_3.py new file mode 100644 index 00000000..337108a6 --- /dev/null +++ b/scripts/buffs/of_inspiration_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 1532) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.deductSkillMod(actor, 'healing_action', 1532) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_4.py b/scripts/buffs/of_inspiration_4.py new file mode 100644 index 00000000..5738cd3d --- /dev/null +++ b/scripts/buffs/of_inspiration_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 1954) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.deductSkillMod(actor, 'healing_action', 1954) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_5.py b/scripts/buffs/of_inspiration_5.py new file mode 100644 index 00000000..6ab7d9d3 --- /dev/null +++ b/scripts/buffs/of_inspiration_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 2374) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.deductSkillMod(actor, 'healing_action', 2374) + return \ No newline at end of file diff --git a/scripts/buffs/of_inspiration_6.py b/scripts/buffs/of_inspiration_6.py new file mode 100644 index 00000000..9e7e9def --- /dev/null +++ b/scripts/buffs/of_inspiration_6.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.addSkillMod(actor, 'healing_action', 2800) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) + core.skillModService.deductSkillMod(actor, 'healing_action', 2800) + return \ No newline at end of file diff --git a/scripts/buffs/of_last_words.py b/scripts/buffs/of_last_words.py new file mode 100644 index 00000000..9611d588 --- /dev/null +++ b/scripts/buffs/of_last_words.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'healing_health', 3500) + core.skillModService.addSkillMod(actor, 'healing_action', 6000) + core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) + core.skillModService.addSkillMod(actor, 'expertise_action_all', 10) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'healing_health', 125) + core.skillModService.deductSkillMod(actor, 'healing_action', 50) + core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 50) + core.skillModService.deductSkillMod(actor, 'expertise_action_all', 50) + return \ No newline at end of file diff --git a/scripts/buffs/of_pistol_bleed.py b/scripts/buffs/of_pistol_bleed.py new file mode 100644 index 00000000..1e96e637 --- /dev/null +++ b/scripts/buffs/of_pistol_bleed.py @@ -0,0 +1,10 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 60) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 60) + return \ No newline at end of file diff --git a/scripts/buffs/of_purge_1.py b/scripts/buffs/of_purge_1.py new file mode 100644 index 00000000..c41e52e8 --- /dev/null +++ b/scripts/buffs/of_purge_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_divisor_all', 50) + core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) + + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_divisor_all', 50) + core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) + return \ No newline at end of file diff --git a/scripts/buffs/of_scatter_1.py b/scripts/buffs/of_scatter_1.py new file mode 100644 index 00000000..efbdf183 --- /dev/null +++ b/scripts/buffs/of_scatter_1.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 2) + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 15) + core.skillModService.addSkillMod(actor, 'movement_resist_root', 2) + actor.setSpeedMultiplierBase(1.5) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 15) + core.skillModService.deductSkillMod(actor, 'movement_resist_root', 2) + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_1.py b/scripts/buffs/of_vortex_bleed_1.py new file mode 100644 index 00000000..e1095bbc --- /dev/null +++ b/scripts/buffs/of_vortex_bleed_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 30) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 30) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_2.py b/scripts/buffs/of_vortex_bleed_2.py new file mode 100644 index 00000000..cc0b1590 --- /dev/null +++ b/scripts/buffs/of_vortex_bleed_2.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 44) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 44) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_3.py b/scripts/buffs/of_vortex_bleed_3.py new file mode 100644 index 00000000..12c3f4cd --- /dev/null +++ b/scripts/buffs/of_vortex_bleed_3.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 58) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 58) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_4.py b/scripts/buffs/of_vortex_bleed_4.py new file mode 100644 index 00000000..9d2c2648 --- /dev/null +++ b/scripts/buffs/of_vortex_bleed_4.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 72) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 72) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_bleed_5.py b/scripts/buffs/of_vortex_bleed_5.py new file mode 100644 index 00000000..760cc493 --- /dev/null +++ b/scripts/buffs/of_vortex_bleed_5.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + core.skillModService.addSkillMod(actor, 'dot_bleed', 90) + return + +def removeBuff(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'dot_bleed', 90) + return \ No newline at end of file diff --git a/scripts/buffs/of_vortex_root.py b/scripts/buffs/of_vortex_root.py new file mode 100644 index 00000000..eab4b6a4 --- /dev/null +++ b/scripts/buffs/of_vortex_root.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + actor.setSpeedMultiplierBase(0) + return + +def removeBuff(core, actor, buff): + actor.setSpeedMultiplierBase(1) + return \ No newline at end of file diff --git a/scripts/commands/combat/of_ae_dm_cc_1.py b/scripts/commands/combat/of_ae_dm_cc_1.py new file mode 100644 index 00000000..8cb29c18 --- /dev/null +++ b/scripts/commands/combat/of_ae_dm_cc_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_ae_dm_cc_2.py b/scripts/commands/combat/of_ae_dm_cc_2.py new file mode 100644 index 00000000..6a6e15d1 --- /dev/null +++ b/scripts/commands/combat/of_ae_dm_cc_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_ae_dm_cc_3.py b/scripts/commands/combat/of_ae_dm_cc_3.py new file mode 100644 index 00000000..fe44b74b --- /dev/null +++ b/scripts/commands/combat/of_ae_dm_cc_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_ae_dm_cc_3') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_1.py b/scripts/commands/combat/of_cc_melee_1.py new file mode 100644 index 00000000..78feccc6 --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_2.py b/scripts/commands/combat/of_cc_melee_2.py new file mode 100644 index 00000000..90462c2e --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_3.py b/scripts/commands/combat/of_cc_melee_3.py new file mode 100644 index 00000000..b23d1da4 --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_3') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_4.py b/scripts/commands/combat/of_cc_melee_4.py new file mode 100644 index 00000000..7c5fb4ac --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_4') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_5.py b/scripts/commands/combat/of_cc_melee_5.py new file mode 100644 index 00000000..b30529b9 --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_5') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_6.py b/scripts/commands/combat/of_cc_melee_6.py new file mode 100644 index 00000000..8ade5109 --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_6.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_6') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_cc_melee_7.py b/scripts/commands/combat/of_cc_melee_7.py new file mode 100644 index 00000000..8736060a --- /dev/null +++ b/scripts/commands/combat/of_cc_melee_7.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_cc_melee_7') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deadeye_debuff.py b/scripts/commands/combat/of_deadeye_debuff.py new file mode 100644 index 00000000..5209b851 --- /dev/null +++ b/scripts/commands/combat/of_deadeye_debuff.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deadeye_debuff') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_1.py b/scripts/commands/combat/of_deb_def_1.py new file mode 100644 index 00000000..6e9a7fd3 --- /dev/null +++ b/scripts/commands/combat/of_deb_def_1.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_1') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_1') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_1') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_1') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_2.py b/scripts/commands/combat/of_deb_def_2.py new file mode 100644 index 00000000..109e4d2c --- /dev/null +++ b/scripts/commands/combat/of_deb_def_2.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_2') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_2') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_2') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_2') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_3.py b/scripts/commands/combat/of_deb_def_3.py new file mode 100644 index 00000000..0060bee0 --- /dev/null +++ b/scripts/commands/combat/of_deb_def_3.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_3') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_3') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_3') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_3') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_3') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_4.py b/scripts/commands/combat/of_deb_def_4.py new file mode 100644 index 00000000..32b7d21a --- /dev/null +++ b/scripts/commands/combat/of_deb_def_4.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_4') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_4') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_4') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_4') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_4') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_5.py b/scripts/commands/combat/of_deb_def_5.py new file mode 100644 index 00000000..f880a828 --- /dev/null +++ b/scripts/commands/combat/of_deb_def_5.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_5') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_5') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_5') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_5') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_5') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_6.py b/scripts/commands/combat/of_deb_def_6.py new file mode 100644 index 00000000..aa1f3f18 --- /dev/null +++ b/scripts/commands/combat/of_deb_def_6.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_6') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_6') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_6') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_6') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_6') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_7.py b/scripts/commands/combat/of_deb_def_7.py new file mode 100644 index 00000000..ac8dbaec --- /dev/null +++ b/scripts/commands/combat/of_deb_def_7.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_7') + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_7') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_7') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_7') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_7') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_deb_def_8.py b/scripts/commands/combat/of_deb_def_8.py new file mode 100644 index 00000000..b2ad7912 --- /dev/null +++ b/scripts/commands/combat/of_deb_def_8.py @@ -0,0 +1,15 @@ +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'of_deb_def_8;) + if actor.getSkillMod('expertise_of_adv_paint_debuff'): + core.buffService.addBuffToCreature(target, 'of_deb_def_8') + core.buffService.addBuffToCreature(target, 'of_adv_paint_debuff_8') + if actor.getSkillMod('expertise_of_adv_paint_expose'): + core.buffService.addBuffToCreature(target, 'of_deb_def_8') + core.buffService.addBuffToCreature(target, 'of_adv_paint_expose_8') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_1.py b/scripts/commands/combat/of_decapitate_1.py new file mode 100644 index 00000000..d32bcc1e --- /dev/null +++ b/scripts/commands/combat/of_decapitate_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_2.py b/scripts/commands/combat/of_decapitate_2.py new file mode 100644 index 00000000..7202e1e7 --- /dev/null +++ b/scripts/commands/combat/of_decapitate_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_2') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_3.py b/scripts/commands/combat/of_decapitate_3.py new file mode 100644 index 00000000..53fc24d1 --- /dev/null +++ b/scripts/commands/combat/of_decapitate_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_3') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_4.py b/scripts/commands/combat/of_decapitate_4.py new file mode 100644 index 00000000..0ad1f93d --- /dev/null +++ b/scripts/commands/combat/of_decapitate_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_4') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_5.py b/scripts/commands/combat/of_decapitate_5.py new file mode 100644 index 00000000..fdc3539e --- /dev/null +++ b/scripts/commands/combat/of_decapitate_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_5') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_decapitate_6.py b/scripts/commands/combat/of_decapitate_6.py new file mode 100644 index 00000000..7b9fa74a --- /dev/null +++ b/scripts/commands/combat/of_decapitate_6.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_decap_bleed_6') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_del_ae_dm_dot_1.py b/scripts/commands/combat/of_del_ae_dm_dot_1.py new file mode 100644 index 00000000..a609a9fd --- /dev/null +++ b/scripts/commands/combat/of_del_ae_dm_dot_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_dot_bomb_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_del_ae_dm_dot_2.py b/scripts/commands/combat/of_del_ae_dm_dot_2.py new file mode 100644 index 00000000..a609a9fd --- /dev/null +++ b/scripts/commands/combat/of_del_ae_dm_dot_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_dot_bomb_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_del_ae_dm_dot_3.py b/scripts/commands/combat/of_del_ae_dm_dot_3.py new file mode 100644 index 00000000..a609a9fd --- /dev/null +++ b/scripts/commands/combat/of_del_ae_dm_dot_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_dot_bomb_1') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_pistol_bleed_1.py b/scripts/commands/combat/of_pistol_bleed_1.py new file mode 100644 index 00000000..ba2f33ba --- /dev/null +++ b/scripts/commands/combat/of_pistol_bleed_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_pistol_bleed') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_1.py b/scripts/commands/combat/of_vortex_1.py new file mode 100644 index 00000000..fa9bd5a9 --- /dev/null +++ b/scripts/commands/combat/of_vortex_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_vortex_bleed_1') + command.setBuffNameTarget('of_vortex_root') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_2.py b/scripts/commands/combat/of_vortex_2.py new file mode 100644 index 00000000..15ea7699 --- /dev/null +++ b/scripts/commands/combat/of_vortex_2.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_vortex_bleed_2') + command.setBuffNameTarget('of_vortex_root') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_3.py b/scripts/commands/combat/of_vortex_3.py new file mode 100644 index 00000000..6b5a9e0f --- /dev/null +++ b/scripts/commands/combat/of_vortex_3.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_vortex_bleed_3') + command.setBuffNameTarget('of_vortex_root') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_4.py b/scripts/commands/combat/of_vortex_4.py new file mode 100644 index 00000000..d185ba6a --- /dev/null +++ b/scripts/commands/combat/of_vortex_4.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_vortex_bleed_4') + command.setBuffNameTarget('of_vortex_root') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/of_vortex_5.py b/scripts/commands/combat/of_vortex_5.py new file mode 100644 index 00000000..b8b7010c --- /dev/null +++ b/scripts/commands/combat/of_vortex_5.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, target, command): + command.setBuffNameTarget('of_vortex_bleed_5') + command.setBuffNameTarget('of_vortex_root') + return + +def preRun(core, actor, target, command): + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/of_buff_def_1.py b/scripts/commands/of_buff_def_1.py new file mode 100644 index 00000000..d7403af1 --- /dev/null +++ b/scripts/commands/of_buff_def_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_1') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_2.py b/scripts/commands/of_buff_def_2.py new file mode 100644 index 00000000..cd5fd42d --- /dev/null +++ b/scripts/commands/of_buff_def_2.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_2') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_2') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_3.py b/scripts/commands/of_buff_def_3.py new file mode 100644 index 00000000..85b34c54 --- /dev/null +++ b/scripts/commands/of_buff_def_3.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_3') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_3') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_4.py b/scripts/commands/of_buff_def_4.py new file mode 100644 index 00000000..0831b80f --- /dev/null +++ b/scripts/commands/of_buff_def_4.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_4') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_4') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_5.py b/scripts/commands/of_buff_def_5.py new file mode 100644 index 00000000..f3577253 --- /dev/null +++ b/scripts/commands/of_buff_def_5.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_5') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_5') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_6.py b/scripts/commands/of_buff_def_6.py new file mode 100644 index 00000000..890aea37 --- /dev/null +++ b/scripts/commands/of_buff_def_6.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_6') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_6') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_7.py b/scripts/commands/of_buff_def_7.py new file mode 100644 index 00000000..7235a9a0 --- /dev/null +++ b/scripts/commands/of_buff_def_7.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_7') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_7') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_8.py b/scripts/commands/of_buff_def_8.py new file mode 100644 index 00000000..3ef2ec72 --- /dev/null +++ b/scripts/commands/of_buff_def_8.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_8') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_8') + return + \ No newline at end of file diff --git a/scripts/commands/of_buff_def_9.py b/scripts/commands/of_buff_def_9.py new file mode 100644 index 00000000..ecf3917c --- /dev/null +++ b/scripts/commands/of_buff_def_9.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_buff_def_9') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_buff_def_9') + return + \ No newline at end of file diff --git a/scripts/commands/of_charge_1.py b/scripts/commands/of_charge_1.py new file mode 100644 index 00000000..8b1194d2 --- /dev/null +++ b/scripts/commands/of_charge_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_charge_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_charge_1') + return + \ No newline at end of file diff --git a/scripts/commands/of_emergency_shield.py b/scripts/commands/of_emergency_shield.py new file mode 100644 index 00000000..0a9cb543 --- /dev/null +++ b/scripts/commands/of_emergency_shield.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_emergency_shield') + return + \ No newline at end of file diff --git a/scripts/commands/of_firepower_1.py b/scripts/commands/of_firepower_1.py new file mode 100644 index 00000000..50eba86a --- /dev/null +++ b/scripts/commands/of_firepower_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_firepower') + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_1.py b/scripts/commands/of_focus_fire_1.py new file mode 100644 index 00000000..4857b1ce --- /dev/null +++ b/scripts/commands/of_focus_fire_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_1') + return + \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_2.py b/scripts/commands/of_focus_fire_2.py new file mode 100644 index 00000000..2eb8248d --- /dev/null +++ b/scripts/commands/of_focus_fire_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_2') + return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_3.py b/scripts/commands/of_focus_fire_3.py new file mode 100644 index 00000000..bac08eb4 --- /dev/null +++ b/scripts/commands/of_focus_fire_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_3') + return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_4.py b/scripts/commands/of_focus_fire_4.py new file mode 100644 index 00000000..4091e213 --- /dev/null +++ b/scripts/commands/of_focus_fire_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_4') + return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_5.py b/scripts/commands/of_focus_fire_5.py new file mode 100644 index 00000000..704dc3c4 --- /dev/null +++ b/scripts/commands/of_focus_fire_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_5') + return \ No newline at end of file diff --git a/scripts/commands/of_focus_fire_6.py b/scripts/commands/of_focus_fire_6.py new file mode 100644 index 00000000..5027e12c --- /dev/null +++ b/scripts/commands/of_focus_fire_6.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_focus_fire_6') + return \ No newline at end of file diff --git a/scripts/commands/of_inspiration_1.py b/scripts/commands/of_inspiration_1.py new file mode 100644 index 00000000..95c691d9 --- /dev/null +++ b/scripts/commands/of_inspiration_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_1') + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_2.py b/scripts/commands/of_inspiration_2.py new file mode 100644 index 00000000..f667ecd4 --- /dev/null +++ b/scripts/commands/of_inspiration_2.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_2') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_2') + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_3.py b/scripts/commands/of_inspiration_3.py new file mode 100644 index 00000000..ce4e0b49 --- /dev/null +++ b/scripts/commands/of_inspiration_3.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_3') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_3') + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_4.py b/scripts/commands/of_inspiration_4.py new file mode 100644 index 00000000..198e36b5 --- /dev/null +++ b/scripts/commands/of_inspiration_4.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_4') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_4') + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_5.py b/scripts/commands/of_inspiration_5.py new file mode 100644 index 00000000..e114bec1 --- /dev/null +++ b/scripts/commands/of_inspiration_5.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_5') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_5') + return + \ No newline at end of file diff --git a/scripts/commands/of_inspiration_6.py b/scripts/commands/of_inspiration_6.py new file mode 100644 index 00000000..230aaa5f --- /dev/null +++ b/scripts/commands/of_inspiration_6.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_inspiration_6') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_inspiration_6') + return + \ No newline at end of file diff --git a/scripts/commands/of_purge_1.py b/scripts/commands/of_purge_1.py new file mode 100644 index 00000000..7a6edae9 --- /dev/null +++ b/scripts/commands/of_purge_1.py @@ -0,0 +1,9 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_purge_1') + return + \ No newline at end of file diff --git a/scripts/commands/of_scatter_1.py b/scripts/commands/of_scatter_1.py new file mode 100644 index 00000000..c1ae742a --- /dev/null +++ b/scripts/commands/of_scatter_1.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'of_scatter_1') + group = core.objectService.getObject(actor.getGroupId()) + for creature in group.getMemberList(): + core.buffService.addBuffToCreature(creature, 'of_scatter_1') + return + \ No newline at end of file diff --git a/scripts/commands/purchaseticket.py b/scripts/commands/purchaseticket.py new file mode 100644 index 00000000..b14d8ca2 --- /dev/null +++ b/scripts/commands/purchaseticket.py @@ -0,0 +1,22 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + #playerObject = actor.getSlottedObject('ghost') + #playerObject.setTitle(str(commandString)) + #print ('Command string: ' + commandString) + + trvSvc = core.travelService + + cmdArgs = commandString.split(" ") + + departurePlanet = cmdArgs[0] + departureLoc = cmdArgs[1].replace("_"," ") + arrivalPlanet = cmdArgs[2] + arrivalLoc = cmdArgs[3].replace("_", " ") + + trvSvc.purchaseTravelTicket(actor, departurePlanet, departureLoc, arrivalPlanet, arrivalLoc) + + return \ No newline at end of file diff --git a/scripts/commands/setwaypointactivestatus.py b/scripts/commands/setwaypointactivestatus.py index e8ff2891..70d5b50c 100644 --- a/scripts/commands/setwaypointactivestatus.py +++ b/scripts/commands/setwaypointactivestatus.py @@ -5,6 +5,8 @@ def setup(): def run(core, actor, target, commandString): playerObject = actor.getSlottedObject('ghost') + if target is None: + return waypointTarget = core.objectService.getObject(target.getObjectID()) wp = playerObject.getWaypointFromList(target) if wp.isActive() == True: diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index 931dc47d..ab107cf3 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -9,9 +9,31 @@ def run(core, actor, target, commandString): containerID = long(parsedMsg[1]) container = objService.getObject(containerID) if target and container and target.getContainer(): - print 'Armor Test' oldContainer = target.getContainer() - oldContainer.transferTo(actor, container, target) + if container == oldContainer: + print 'Error: New container is same as old container.' + return; + replacedObject = None + slotName = None + if actor == container: + slotName = container.getSlotNameForObject(target) + replacedObject = container.getSlottedObject(slotName) + + oldContainer.transferTo(actor, container, target) + + if actor == container: + if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + core.equipmentService.equip(actor, target, replacedObject) + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'equip', module, core, actor, target) + + if actor == oldContainer: + if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'unequip', module, core, actor, target) + core.equipmentService.unequip(actor, target, replacedObject) return \ No newline at end of file diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index 83f34e8d..53eef0d6 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -15,18 +15,26 @@ def run(core, actor, target, commandString): print 'Error: New container is same as old container.' return; + replacedObject = None + slotName = None + if actor == container: + slotName = container.getSlotNameForObject(target) + replacedObject = container.getSlottedObject(slotName) + oldContainer.transferTo(actor, container, target) if actor == container: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - core.scriptService.callScript(path, 'equip', module, core, actor, target) + core.equipmentService.equip(actor, target, replacedObject) + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'equip', module, core, actor, target) if actor == oldContainer: if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): - path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' - module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') - core.scriptService.callScript(path, 'unequip', module, core, actor, target) - + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'unequip', module, core, actor, target) + core.equipmentService.unequip(actor, target) + return \ No newline at end of file diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index a480461a..0bb7f55f 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -9,9 +9,32 @@ def run(core, actor, target, commandString): containerID = long(parsedMsg[1]) container = objService.getObject(containerID) if target and container and target.getContainer(): - print 'Weapon Test' oldContainer = target.getContainer() - oldContainer.transferTo(actor, container, target) + if container == oldContainer: + print 'Error: New container is same as old container.' + return; + + replacedObject = None + slotName = None + if actor == container: + slotName = container.getSlotNameForObject(target) + replacedObject = container.getSlottedObject(slotName) + + oldContainer.transferTo(actor, container, target) + + if actor == container: + if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + core.equipmentService.equip(actor, target, replacedObject) + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'equip', module, core, actor, target) + + if actor == oldContainer: + if target.getTemplate().find('/wearables/') or target.getTemplate().find('/weapon/'): + #path = 'scripts/' + target.getTemplate().rpartition('/')[0] + '/' + #module = target.getTemplate().rpartition('/')[2].replace('shared_', '').replace('.iff', '') + #core.scriptService.callScript(path, 'unequip', module, core, actor, target) + core.equipmentService.unequip(actor, target, replacedObject) actor.setWeaponId(target.getObjectID()) return \ No newline at end of file diff --git a/scripts/commands/waypoint.py b/scripts/commands/waypoint.py index 3d7b5c12..64e33136 100644 --- a/scripts/commands/waypoint.py +++ b/scripts/commands/waypoint.py @@ -33,7 +33,7 @@ def run(core, actor, target, commandString): #/wp X Z Y NAME if isFloat(commandArgs[0]) and isFloat(commandArgs[1]) and isFloat(commandArgs[2]): - waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), actor.getWorldPosition().x, actor.getWorldPosition().z, actor.getWorldPosition().y) + waypoint = core.objectService.createObject('object/waypoint/shared_waypoint.iff', actor.getPlanet(), float(commandArgs[0]), float(commandArgs[2]), float(commandArgs[1])) waypoint.setActive(True) waypoint.setColor(WaypointObject.BLUE) name = commandString.split(" ", 3) diff --git a/scripts/demo.py b/scripts/demo.py index 52c71f28..2b7889ee 100644 --- a/scripts/demo.py +++ b/scripts/demo.py @@ -12,6 +12,7 @@ def CreateStartingCharacter(core, object): testObject.setMaxDamage(1150) testObject.setElementalDamage(50) testObject.setIntAttribute('cat_wpn_damage.weapon_dps', testObject.getDamagePerSecond()) + testObject.setIntAttribute('cat_skill_mod_bonus.@stat_n:precision_modified', 35) object.addSkillMod('kinetic' , 10000) object.addSkillMod('energy' , 10000) object.addSkillMod('heat' , 6000) diff --git a/scripts/object/building/tatooine/starport_tatooine.py b/scripts/object/building/tatooine/starport_tatooine.py index e71c9121..34468ac1 100644 --- a/scripts/object/building/tatooine/starport_tatooine.py +++ b/scripts/object/building/tatooine/starport_tatooine.py @@ -9,7 +9,6 @@ def setup(core, object): stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(3.1), float(0.6), float(49), float(0), float(1)) stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-2.7), float(0.6), float(49), float(0), float(1)) stcSvc.spawnObject('object/tangible/terminal/shared_terminal_travel.iff', object.getPlanet().getName(), cell.getObjectID(), float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722)) - core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_travel.py b/scripts/object/tangible/terminal/terminal_travel.py index ccad8904..160aac1c 100644 --- a/scripts/object/tangible/terminal/terminal_travel.py +++ b/scripts/object/tangible/terminal/terminal_travel.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'travel_terminal') return \ No newline at end of file diff --git a/scripts/radial/travel_terminal.py b/scripts/radial/travel_terminal.py new file mode 100644 index 00000000..934e0f92 --- /dev/null +++ b/scripts/radial/travel_terminal.py @@ -0,0 +1,19 @@ +from resources.common import RadialOptions +from protocol.swg import EnterTicketPurchaseModeMessage +import sys + +def createRadial(core, owner, target, radials): + return + +def handleSelection(core, owner, target, option): + + if option == 21 and target: + tpm = EnterTicketPurchaseModeMessage(owner.getPlanet().getName(), core.mapService.getClosestCityName(owner)) + owner.getClient().getSession().write(tpm.serialize()) + #print ('Planet name: ' + owner.getPlanet().getName()) + #print ('City name: ' + core.mapService.getClosestCityName(owner)) + return + +def handleSUI(owner, window, eventType, returnList): + + return \ No newline at end of file diff --git a/scripts/skillMods/action_burn.py b/scripts/skillMods/action_burn.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/action_burn.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/combat_divide_damage_taken.py b/scripts/skillMods/combat_divide_damage_taken.py new file mode 100644 index 00000000..8d3e11e4 --- /dev/null +++ b/scripts/skillMods/combat_divide_damage_taken.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return diff --git a/scripts/skillMods/critical_damage_vulnerability.py b/scripts/skillMods/critical_damage_vulnerability.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/critical_damage_vulnerability.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/debuff_purge.py b/scripts/skillMods/debuff_purge.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/debuff_purge.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/dot_bleed.py b/scripts/skillMods/dot_bleed.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/dot_bleed.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/dot_divisor_all.py b/scripts/skillMods/dot_divisor_all.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/dot_divisor_all.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/dot_fire.py b/scripts/skillMods/dot_fire.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/dot_fire.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/dot_poison.py b/scripts/skillMods/dot_poison.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/dot_poison.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/dot_resist_all.py b/scripts/skillMods/dot_resist_all.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/dot_resist_all.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py b/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/expertise_damage_line_vulnerability_of_buff_def.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py b/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/expertise_damage_line_vulnerability_of_dm.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/expertise_parry.py b/scripts/skillMods/expertise_parry.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/expertise_parry.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/expertise_strikethrough_chance.py b/scripts/skillMods/expertise_strikethrough_chance.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/expertise_strikethrough_chance.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/healing_action.py b/scripts/skillMods/healing_action.py new file mode 100644 index 00000000..f198037b --- /dev/null +++ b/scripts/skillMods/healing_action.py @@ -0,0 +1,9 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return \ No newline at end of file diff --git a/scripts/skillMods/healing_health.py b/scripts/skillMods/healing_health.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/healing_health.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/skillMods/stealth_divisor.py b/scripts/skillMods/stealth_divisor.py new file mode 100644 index 00000000..ee7769e2 --- /dev/null +++ b/scripts/skillMods/stealth_divisor.py @@ -0,0 +1,10 @@ +import sys + +def add(core, actor, name, base): + actor.addSkillMod(name, base) + return + +def deduct(core, actor, name, base): + actor.deductSkillMod(name, base) + return + \ No newline at end of file diff --git a/scripts/static_travel_points.py b/scripts/static_travel_points.py new file mode 100644 index 00000000..cbc3aa6d --- /dev/null +++ b/scripts/static_travel_points.py @@ -0,0 +1,103 @@ +import sys + +def addPoints(core, planet): + + if planet.getName() == 'corellia': + corelliaPoints(core, planet) + if planet.getName() == 'dantooine': + dantooinePoints(core, planet) + if planet.getName() == 'dathomir': + dathomirPoints(core, planet) + if planet.getName() == 'endor': + endorPoints(core, planet) + if planet.getName() == 'lok': + lokPoints(core, planet) + if planet.getName() == 'naboo': + nabooPoints(core, planet) + if planet.getName() == 'rori': + roriPoints(core, planet) + if planet.getName() == 'talus': + talusPoints(core, planet) + if planet.getName() == 'tatooine': + tatooinePoints(core, planet) + if planet.getName() == 'yavin4': + yavin4Points(core, planet) + return + +def corelliaPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Coronet Starport", -51, 28, -4735) + trvSvc.addTravelPoint(planet, "Tyrena Starport", -4975, 21, -2230) + trvSvc.addTravelPoint(planet, "Kor Vella Starport", -3136, 31, 2894) + trvSvc.addTravelPoint(planet, "Doaba Guerful Starport", 3377, 308, 5605) + return + +def dantooinePoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Coronet Starport", -51, 28, -4735) + trvSvc.addTravelPoint(planet, "Tyrena Starport", -4975, 21, -2230) + trvSvc.addTravelPoint(planet, "Kor Vella Starport", -3136, 31, 2894) + trvSvc.addTravelPoint(planet, "Doaba Guerful Starport", 3377, 308, 5605) + return + +def dathomirPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Science Outpost", -76, 18, -1586) + trvSvc.addTravelPoint(planet, "Trade Outpost", -592, 6, 3087) + return + +def endorPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Smuggler Outpost", -978, 73, 1554) + trvSvc.addTravelPoint(planet, "Research Outpost", 3222, 24, -3482) + return + +def lokPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Nym's Stronghold", 459, 9, 5494) + return + +def nabooPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Kaadara Starport", 5295, -192, 6664) + trvSvc.addTravelPoint(planet, "Keren Starport", 1352, 13, 2768) + trvSvc.addTravelPoint(planet, "Moenia Starport", 4728, 4, -4650) + return + +def roriPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Narmle Starport", -5472, 80, 2161) + trvSvc.addTravelPoint(planet, "Rebel Outpost", 3672, 96, -6421) + return + +def talusPoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Dearic Starport", 245, 6, -2931) + trvSvc.addTravelPoint(planet, "Nashal Starport", 4480, 2, 6365) + trvSvc.addTravelPoint(planet, "Imperial Outpost", -2212, 20, 2302) + return + +def tatooinePoints(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Bestine Starport", -1376, 12, -3576) + trvSvc.addTravelPoint(planet, "Mos Eisley Starport", 3619, 5, -4801) + trvSvc.addTravelPoint(planet, "Mos Espa Starport", -2829, 5, 2080) + trvSvc.addTravelPoint(planet, "Mos Entha Starport", 1238, 7, 3062) + return + +def yavin4Points(core, planet): + trvSvc = core.travelService + + trvSvc.addTravelPoint(planet, "Imperial Base", 4033, 37, -6234) + trvSvc.addTravelPoint(planet, "Labor Outpost", -6939, 73, -5706) + trvSvc.addTravelPoint(planet, "Mining Outpost", -277, 35, 4879) + return \ No newline at end of file diff --git a/src/main/NGECore.java b/src/main/NGECore.java index e8b651a3..1b4c040f 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -31,12 +31,16 @@ import java.util.concurrent.ConcurrentHashMap; + + import resources.common.RadialOptions; +import resources.common.ThreadMonitor; import resources.objects.creature.CreatureObject; import services.AttributeService; import services.BuffService; import services.CharacterService; import services.ConnectionService; +import services.EquipmentService; import services.GroupService; import services.LoginService; import services.PlayerService; @@ -57,6 +61,7 @@ import services.object.ObjectService; import services.object.UpdateService; import services.sui.SUIService; import services.trade.TradeService; +import services.travel.TravelService; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; @@ -122,6 +127,8 @@ public class NGECore { public GroupService groupService; public SkillService skillService; public SkillModService skillModService; + public EquipmentService equipmentService; + public TravelService travelService; // Login Server public NetworkDispatch loginDispatch; @@ -141,12 +148,25 @@ public class NGECore { public void start() { instance = this; + + final ThreadMonitor deadlockDetector = new ThreadMonitor(); + Thread deadlockMonitor = new Thread(new Runnable() { + @Override + public void run() { + try { + deadlockDetector.findDeadlock(); + Thread.sleep(60000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }); + deadlockMonitor.start(); config = new Config(); config.setFilePath("nge.cfg"); if (!(config.loadConfigFile())) { config = DefaultConfig.getConfig(); } - // Database databaseConnection = new DatabaseConnection(); databaseConnection.connect(config.getString("DB.URL"), config.getString("DB.NAME"), config.getString("DB.USER"), config.getString("DB.PASS"), "postgresql"); @@ -161,6 +181,7 @@ public class NGECore { connectionService = new ConnectionService(this); characterService = new CharacterService(this); mapService = new MapService(this); + travelService = new TravelService(this); objectService = new ObjectService(this); terrainService = new TerrainService(this); @@ -176,6 +197,8 @@ public class NGECore { groupService = new GroupService(this); skillService = new SkillService(this); skillModService = new SkillModService(this); + equipmentService = new EquipmentService(this); + // Ping Server try { @@ -201,6 +224,7 @@ public class NGECore { zoneDispatch.addService(chatService); zoneDispatch.addService(suiService); zoneDispatch.addService(mapService); + zoneDispatch.addService(travelService); zoneDispatch.addService(playerService); zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); @@ -218,9 +242,9 @@ public class NGECore { terrainService.addPlanet(8, "yavin4", "terrain/yavin4.trn", true); terrainService.addPlanet(9, "endor", "terrain/endor.trn", true); terrainService.addPlanet(10, "dathomir", "terrain/dathomir.trn", true); + terrainService.addPlanet(11, "mustafar", "terrain/mustafar.trn", true); + terrainService.addPlanet(12, "kashyyyk_main", "terrain/kashyyyk_main.trn", true); terrainService.loadSnapShotObjects(); - - // Zone services that need to be loaded after the above simulationService = new SimulationService(this); @@ -229,6 +253,8 @@ public class NGECore { // Static Spawns staticService.spawnStatics(); + // Travel Points + travelService.loadTravelPoints(); guildService = new GuildService(this); zoneDispatch.addService(guildService); diff --git a/src/protocol/swg/ChatFriendsListUpdate.java b/src/protocol/swg/ChatFriendsListUpdate.java index ec4ead39..b804c17b 100644 --- a/src/protocol/swg/ChatFriendsListUpdate.java +++ b/src/protocol/swg/ChatFriendsListUpdate.java @@ -11,8 +11,6 @@ import engine.resources.config.DefaultConfig; public class ChatFriendsListUpdate extends SWGMessage { - - private NGECore core; private String friendName; private byte onlineFlag; diff --git a/src/protocol/swg/ChatOnChangeFriendStatus.java b/src/protocol/swg/ChatOnChangeFriendStatus.java index c78c24be..5eeb3f33 100644 --- a/src/protocol/swg/ChatOnChangeFriendStatus.java +++ b/src/protocol/swg/ChatOnChangeFriendStatus.java @@ -11,7 +11,6 @@ import engine.resources.config.DefaultConfig; public class ChatOnChangeFriendStatus extends SWGMessage { - private NGECore core; private String name; private int type; private long playerID; diff --git a/src/services/TravelService.java b/src/protocol/swg/EnterTicketPurchaseModeMessage.java similarity index 59% rename from src/services/TravelService.java rename to src/protocol/swg/EnterTicketPurchaseModeMessage.java index dd5c5dc4..2c5c2315 100644 --- a/src/services/TravelService.java +++ b/src/protocol/swg/EnterTicketPurchaseModeMessage.java @@ -19,8 +19,39 @@ * 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; +package protocol.swg; -public class TravelService { +import java.nio.ByteOrder; + +import org.apache.mina.core.buffer.IoBuffer; + +public class EnterTicketPurchaseModeMessage extends SWGMessage { + + public String planetName; + public String cityName; + + public EnterTicketPurchaseModeMessage(String planetName, String cityName) { + this.planetName = planetName; + this.cityName = cityName; + } + + @Override + public void deserialize(IoBuffer data) { + // TODO Auto-generated method stub + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 3); + result.putInt(0x904DAE1A); + + result.put(getAsciiString(planetName)); + result.put(getAsciiString(cityName + " Starport")); + + return result.flip(); + } } diff --git a/src/protocol/swg/PlanetTravelPointListRequest.java b/src/protocol/swg/PlanetTravelPointListRequest.java new file mode 100644 index 00000000..51e37548 --- /dev/null +++ b/src/protocol/swg/PlanetTravelPointListRequest.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; + +import java.util.List; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import engine.resources.scene.Planet; + +public class PlanetTravelPointListRequest extends SWGMessage{ + + private NGECore core; + private long objectId; + private String planet; + + @Override + public void deserialize(IoBuffer buffer) { + + //buffer.getShort(); + //buffer.getInt(); + + setObjectId(buffer.getLong()); + setPlanet(getAsciiString(buffer)); + + //System.out.println("String: " + getAsciiString(buffer)); + + } + + @Override + public IoBuffer serialize() { + return null; + } + + public long getObjectId() { + return objectId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public String getPlanet() { + return planet; + } + + public void setPlanet(String asciiString) { + this.planet = asciiString; + } +} diff --git a/src/protocol/swg/PlanetTravelPointListResponse.java b/src/protocol/swg/PlanetTravelPointListResponse.java new file mode 100644 index 00000000..6b55ab59 --- /dev/null +++ b/src/protocol/swg/PlanetTravelPointListResponse.java @@ -0,0 +1,89 @@ +/******************************************************************************* + * 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; + +import java.nio.ByteOrder; +import java.util.List; +import java.util.Vector; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import services.travel.TravelPoint; +import engine.resources.scene.Planet; + +@SuppressWarnings("unused") +public class PlanetTravelPointListResponse extends SWGMessage { + + private String planetString; + private Vector travelPoints; + private List planetList; + + public PlanetTravelPointListResponse(String planetString, Vector travelPoints, List planetList) { + this.planetString = planetString; + this.travelPoints = travelPoints; + this.planetList = planetList; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(700).order(ByteOrder.LITTLE_ENDIAN); + + result.putShort((short) 9); + result.putInt(0x4D32541F); + + result.put(getAsciiString(planetString)); + + result.putInt(travelPoints.size()); // shuttles/sp count + for (TravelPoint point : travelPoints) { + result.put(getAsciiString(point.getName())); + } + + result.putInt(travelPoints.size()); // shuttles/sp count + for (TravelPoint point : travelPoints) { + + result.putFloat(point.getLocation().x); + result.putFloat(0); + result.putFloat(point.getLocation().z); + + } + + result.putInt(travelPoints.size()); // shuttes/sp count + for (TravelPoint point : travelPoints) { + result.putInt(point.getTicketPrice()); + } + + result.putInt(travelPoints.size()); + for (TravelPoint point : travelPoints) { + result.put((byte) 1); // isReachable + } + result.flip(); + return result; + } + +} diff --git a/src/resources/common/Opcodes.java b/src/resources/common/Opcodes.java index 3a99b664..405cd992 100644 --- a/src/resources/common/Opcodes.java +++ b/src/resources/common/Opcodes.java @@ -54,5 +54,6 @@ public class Opcodes { public static int ExpertiseRequestMessage = 0xC19085D5; public static int ClientMfdStatusUpdateMessage = CRC.StringtoCRC("ClientMdfStatusUpdateMessage"); public static int PlayMusicMessage = CRC.StringtoCRC("PlayMusicMessage"); + public static int PlanetTravelPointListRequest = 0x96405D4D; } diff --git a/src/resources/common/ThreadMonitor.java b/src/resources/common/ThreadMonitor.java new file mode 100644 index 00000000..43adcb64 --- /dev/null +++ b/src/resources/common/ThreadMonitor.java @@ -0,0 +1,226 @@ +/******************************************************************************* + * 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 static java.lang.management.ManagementFactory.THREAD_MXBEAN_NAME; +import static java.lang.management.ManagementFactory.getThreadMXBean; +import static java.lang.management.ManagementFactory.newPlatformMXBeanProxy; + +import java.io.IOException; +import java.lang.management.LockInfo; +import java.lang.management.MonitorInfo; +import java.lang.management.ThreadInfo; +import java.lang.management.ThreadMXBean; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + +import javax.management.InstanceNotFoundException; +import javax.management.IntrospectionException; +import javax.management.MBeanOperationInfo; +import javax.management.MBeanServerConnection; +import javax.management.MalformedObjectNameException; +import javax.management.ObjectName; +import javax.management.ReflectionException; + +public class ThreadMonitor { + + private MBeanServerConnection server; + + private ThreadMXBean tmbean; + + private ObjectName objname; + + // default - JDK 6+ VM + private String findDeadlocksMethodName = "findDeadlockedThreads"; + + private boolean canDumpLocks = true; + + /** + * Constructs a ThreadMonitor object to get thread information in the local + * JVM. + */ + public ThreadMonitor() { + this.tmbean = getThreadMXBean(); + } + + /** + * Prints the thread dump information to System.out. + */ + public void threadDump() { + if (canDumpLocks) { + if (tmbean.isObjectMonitorUsageSupported() && tmbean.isSynchronizerUsageSupported()) { + dumpThreadInfoWithLocks(); + } + } else { + dumpThreadInfo(); + } + } + + private void dumpThreadInfo() { + System.out.println("Full Java thread dump"); + long[] tids = tmbean.getAllThreadIds(); + ThreadInfo[] tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE); + for (ThreadInfo ti : tinfos) { + printThreadInfo(ti); + } + } + + /** + * Prints the thread dump information with locks info to System.out. + */ + private void dumpThreadInfoWithLocks() { + System.out.println("Full Java thread dump with locks info"); + + ThreadInfo[] tinfos = tmbean.dumpAllThreads(true, true); + for (ThreadInfo ti : tinfos) { + printThreadInfo(ti); + LockInfo[] syncs = ti.getLockedSynchronizers(); + printLockInfo(syncs); + } + System.out.println(); + } + + private static String INDENT = " "; + + private void printThreadInfo(ThreadInfo ti) { + // print thread information + printThread(ti); + + // print stack trace with locks + StackTraceElement[] stacktrace = ti.getStackTrace(); + MonitorInfo[] monitors = ti.getLockedMonitors(); + for (int i = 0; i < stacktrace.length; i++) { + StackTraceElement ste = stacktrace[i]; + System.out.println(INDENT + "at " + ste.toString()); + for (MonitorInfo mi : monitors) { + if (mi.getLockedStackDepth() == i) { + System.out.println(INDENT + " - locked " + mi); + } + } + } + System.out.println(); + } + + private void printThread(ThreadInfo ti) { + StringBuilder sb = new StringBuilder("\"" + ti.getThreadName() + "\"" + " Id=" + + ti.getThreadId() + " in " + ti.getThreadState()); + if (ti.getLockName() != null) { + sb.append(" on lock=" + ti.getLockName()); + } + if (ti.isSuspended()) { + sb.append(" (suspended)"); + } + if (ti.isInNative()) { + sb.append(" (running in native)"); + } + System.out.println(sb.toString()); + if (ti.getLockOwnerName() != null) { + System.out.println(INDENT + " owned by " + ti.getLockOwnerName() + " Id=" + + ti.getLockOwnerId()); + } + } + + private void printMonitorInfo(ThreadInfo ti, MonitorInfo[] monitors) { + System.out.println(INDENT + "Locked monitors: count = " + monitors.length); + for (MonitorInfo mi : monitors) { + System.out.println(INDENT + " - " + mi + " locked at "); + System.out.println(INDENT + " " + mi.getLockedStackDepth() + " " + + mi.getLockedStackFrame()); + } + } + + private void printLockInfo(LockInfo[] locks) { + System.out.println(INDENT + "Locked synchronizers: count = " + locks.length); + for (LockInfo li : locks) { + System.out.println(INDENT + " - " + li); + } + System.out.println(); + } + + /** + * Checks if any threads are deadlocked. If any, print the thread dump + * information. + */ + public boolean findDeadlock() { + long[] tids; + if (findDeadlocksMethodName.equals("findDeadlockedThreads") + && tmbean.isSynchronizerUsageSupported()) { + tids = tmbean.findDeadlockedThreads(); + if (tids == null) { + return false; + } + + System.out.println("Deadlock found :-"); + ThreadInfo[] infos = tmbean.getThreadInfo(tids, true, true); + for (ThreadInfo ti : infos) { + printThreadInfo(ti); + printLockInfo(ti.getLockedSynchronizers()); + System.out.println(); + } + } else { + tids = tmbean.findMonitorDeadlockedThreads(); + if (tids == null) { + return false; + } + ThreadInfo[] infos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE); + for (ThreadInfo ti : infos) { + // print thread information + printThreadInfo(ti); + } + } + + return true; + } + + private void parseMBeanInfo() throws IOException { + try { + MBeanOperationInfo[] mopis = server.getMBeanInfo(objname).getOperations(); + + // look for findDeadlockedThreads operations; + boolean found = false; + for (MBeanOperationInfo op : mopis) { + if (op.getName().equals(findDeadlocksMethodName)) { + found = true; + break; + } + } + if (!found) { + findDeadlocksMethodName = "findMonitorDeadlockedThreads"; + canDumpLocks = false; + } + } catch (IntrospectionException e) { + InternalError ie = new InternalError(e.getMessage()); + ie.initCause(e); + throw ie; + } catch (InstanceNotFoundException e) { + InternalError ie = new InternalError(e.getMessage()); + ie.initCause(e); + throw ie; + } catch (ReflectionException e) { + InternalError ie = new InternalError(e.getMessage()); + ie.initCause(e); + throw ie; + } + } + } \ No newline at end of file diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index 953e2dce..050b6ab7 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -208,13 +208,13 @@ public class CharacterService implements INetworkDispatch { // should set to some planet and starting location String sharedRaceTemplate = raceTemplate.replace("player/", "player/shared_"); - CreatureObject object = (CreatureObject) core.objectService.createObject(sharedRaceTemplate, core.terrainService.getPlanetByName("naboo")); + CreatureObject object = (CreatureObject) core.objectService.createObject(sharedRaceTemplate, core.terrainService.getPlanetByName("tatooine")); object.setContainerPermissions(CreaturePermissions.CREATURE_PERMISSIONS); object.setCustomization(clientCreateCharacter.getCustomizationData()); object.setCustomName(clientCreateCharacter.getName()); object.setHeight(clientCreateCharacter.getScale()); object.setPersistent(true); - object.setPosition(new Point3D(-5567, 0, -32)); + object.setPosition(new Point3D(3528, 0, -4804)); object.setCashCredits(100); object.setBankCredits(1000); //object.setPosition(new Point3D(0, 0, 0)); diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java new file mode 100644 index 00000000..8223e3b0 --- /dev/null +++ b/src/services/EquipmentService.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * 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.Map; +import java.util.Map.Entry; +import java.util.TreeMap; +import org.python.core.Py; +import org.python.core.PyObject; +import resources.objects.creature.CreatureObject; +import main.NGECore; +import engine.resources.objects.SWGObject; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class EquipmentService implements INetworkDispatch { + + private NGECore core; + + public EquipmentService(NGECore core) { + this.core = core; + } + + @Override + public void insertOpcodes(Map arg0, Map arg1) { + + } + + @Override + public void shutdown() { + + } + + public void equip(CreatureObject actor, SWGObject item, SWGObject replacedItem) { + + if(replacedItem != null) + unequip(actor, replacedItem); + + String template = item.getTemplate(); + String serverTemplate = template.replace(".iff", ""); + PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); + if(func != null) + func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); + + // TODO: add health/action bonus from crafted weapon with augmentations + + Map attributes = new TreeMap(item.getAttributes()); + + for(Entry e : attributes.entrySet()) { + + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { + core.skillModService.addSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + + } + + } + + public void unequip(CreatureObject actor, SWGObject item) { + + String template = item.getTemplate(); + String serverTemplate = template.replace(".iff", ""); + PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); + if(func != null) + func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); + + // TODO: remove health/action bonus from crafted weapon with augmentations + + Map attributes = new TreeMap(item.getAttributes()); + + for(Entry e : attributes.entrySet()) { + + if(e.getKey().startsWith("cat_skill_mod_bonus.@stat_n:")) { + core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_skill_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); + } + + } + + } + + +} diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index 440a9c5e..e7d3b966 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -95,10 +95,9 @@ public class ScriptService { } public PyObject getMethod(String path, String module, String method) { - PythonInterpreter interpreter = new PythonInterpreter(); - interpreter.cleanup(); - interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); - PyObject func = interpreter.get(method); + PythonInterpreter python = new PythonInterpreter(); + python.execfile(path + module + ".py"); + PyObject func = python.get(method); return func; } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index 8287a389..ec42a7bc 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -138,6 +138,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("deathblow"); core.commandService.registerCommand("endduel"); core.commandService.registerCommand("duel"); + core.commandService.registerCommand("purchaseticket"); } diff --git a/src/services/SkillModService.java b/src/services/SkillModService.java index 6ca47aa9..d84576b0 100644 --- a/src/services/SkillModService.java +++ b/src/services/SkillModService.java @@ -23,10 +23,10 @@ package services; import java.util.Map; +import resources.objects.SWGList; import resources.objects.creature.CreatureObject; - import main.NGECore; - +import engine.resources.objects.SkillMod; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; @@ -49,6 +49,22 @@ public class SkillModService implements INetworkDispatch { core.scriptService.callScript("scripts/skillMods/", skillMod, "deduct", core, creature, skillMod, value); } + + public boolean hasSkillMod(CreatureObject creature, String skillMod) { + + SWGList skillMods = creature.getSkillMods(); + + if (skillMods.isEmpty()) { return false; } + + for (SkillMod skill : skillMods) { + if (skill.getSkillModString() == skillMod) { + return true; + } + else { return false; } + } + + return false; + } @Override public void insertOpcodes(Map arg0, Map arg1) { diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index db8426c2..0b32913a 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -344,7 +344,7 @@ public class ChatService implements INetworkDispatch { friendName = friendName.toLowerCase(); - SWGObject friendObject = getObjectByFirstName(friendName); + //SWGObject friendObject = getObjectByFirstName(friendName); if (actor == null || actor.getContainer() == null) return; diff --git a/src/services/map/MapService.java b/src/services/map/MapService.java index e1d81d93..29a6d1fe 100644 --- a/src/services/map/MapService.java +++ b/src/services/map/MapService.java @@ -138,4 +138,8 @@ public class MapService implements INetworkDispatch { } + public Vector getPlanetMapLocations(Planet planet) { + return locationMap.get(planet); + } + } diff --git a/src/services/travel/TravelPoint.java b/src/services/travel/TravelPoint.java new file mode 100644 index 00000000..e418166b --- /dev/null +++ b/src/services/travel/TravelPoint.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * 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.travel; + +import engine.resources.scene.Point3D; + +public class TravelPoint { + + private String planetName; + private String name; + //private float posX; + //private float posY; + //private float posZ; + private Point3D location; + private int ticketPrice; + + public TravelPoint() { + } + + public TravelPoint(String name, float x, float y, float z, int price) { + this.name = name; + this.location = new Point3D(x, y, z); + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + public Point3D getLocation() { + return location; + } + + public void setLocation(float x, float y, float z) { + this.location.x = x; + this.location.y = y; + this.location.z = z; + } + + public int getTicketPrice() { + return ticketPrice; + } + public void setTicketPrice(int ticketPrice) { + this.ticketPrice = ticketPrice; + } + + public String getPlanetName() { + return planetName; + } + + public void setPlanetName(String planetName) { + this.planetName = planetName; + } +} diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java new file mode 100644 index 00000000..1a61cb2c --- /dev/null +++ b/src/services/travel/TravelService.java @@ -0,0 +1,226 @@ +/******************************************************************************* + * 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.travel; + +import java.nio.ByteOrder; +import java.util.List; +import java.util.Map; +import java.util.Vector; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.commons.lang3.text.WordUtils; +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.PlanetTravelPointListRequest; +import protocol.swg.PlanetTravelPointListResponse; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.quadtree.QuadTree; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; +import main.NGECore; +import resources.common.Opcodes; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.map.*; + +public class TravelService implements INetworkDispatch { + + private NGECore core; + + private Map> travelMap = new ConcurrentHashMap>(); + + public TravelService(NGECore core) { + this.core = core; + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + swgOpcodes.put(Opcodes.PlanetTravelPointListRequest, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + PlanetTravelPointListRequest request = new PlanetTravelPointListRequest(); + request.deserialize(data); + + Client client = core.getClient((Integer) session.getAttribute("connectionId")); + + if(client == null || client.getSession() == null) + return; + + SWGObject object = client.getParent(); + + if(object == null) + return; + + List planetList = core.terrainService.getPlanetList(); + + for (Planet planet : planetList) { + String planetString = planet.getName(); + + if (request.getPlanet().equals(planetString)) { + + PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(planetString, travelMap.get(planet), planetList); + client.getSession().write(response.serialize()); + break; + //System.out.println("Sent the list for the planet " + planet.getName()); + + } + } + //PlanetTravelPointListResponse response = new PlanetTravelPointListResponse(request.getPlanet(), travelMap.get(request.getPlanet())); + //client.getSession().write(response.serialize()); + } + + }); + + } + + public void addPlanet(Planet planet) { + Vector travelPointVector = new Vector(); + travelMap.put(planet, travelPointVector); + core.scriptService.callScript("scripts/", "addPoints", "static_travel_points", core, planet); + } + + + public void addTravelPoint(Planet planet, String name, float x, float y, float z) { + // z should be y for 2d map + TravelPoint travelPoint = new TravelPoint(name, x, y, z, 100); + + travelPoint.setPlanetName(WordUtils.capitalize(planet.getName())); + + //CreatureObject shuttleObj = (CreatureObject) core.objectService.createObject("object/creature/npc/theme_park/player_transport.iff", planet, x, z, y); + // x z y + //core.objectService.createObject("object/creature/npc/theme_park/shared_player_transport.iff", planet, 3622, 5, -4792); + //TangibleObject collector = (TangibleObject) core.objectService.createObject("object/tangible/travel/ticket_collector/shared_ticket_collector.iff", planet, 3622, 5, -4792); + //core.simulationService.add(collector, collector.getPosition().x, collector.getPosition().y); + + if (travelMap.containsKey(planet)) { + + travelMap.get(planet).add(travelPoint); + System.out.println("Added travel point " + travelPoint.getName()); + + } else { + Vector travelPointVector = new Vector(); + travelMap.put(planet, travelPointVector); + travelMap.get(planet).add(travelPoint); + System.out.println("Added planet " + planet.getName() + " to TravelMap."); + System.out.println("Added travel point " + travelPoint.getName()); + } + + + } + + public void removeTravelPointByName(Planet planet, String name){ + if (travelMap.containsKey(planet)) { + Vector travelVector = travelMap.get(planet); + + for(TravelPoint point : travelVector) { + if (point.getName() == name) { + travelMap.get(planet).removeElement(point); + break; + } + } + } + } + + public void loadTravelPoints() { + List planetList = core.terrainService.getPlanetList(); + for (Planet planet : planetList) { + addPlanet(planet); + } + } + + public void setTravelAttachment(SWGObject obj) { + Vector planetTravelPoints = travelMap.get(obj.getPlanet()); + + TravelPoint travelPoint = null; + + for (TravelPoint point : planetTravelPoints) { + if (obj.getPosition().x == point.getLocation().x && obj.getPosition().y == point.getLocation().y && obj.getPosition().z == point.getLocation().z) { + + point = travelPoint; + + if (travelPoint == null) + return; + + obj.setAttachment("transport", travelPoint); + System.out.println("Set the objects travel point."); + + break; + } + + else { + System.out.println("Could not set a travel attachment for obj!"); + break; + } + } + } + + public SWGObject createTravelTicket(String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc) { + + Planet planet = core.terrainService.getPlanetByName(departurePlanet.toLowerCase()); + SWGObject travelTicket = core.objectService.createObject("object/tangible/travel/travel_ticket/base/shared_base_travel_ticket.iff", planet); + + travelTicket.setStringAttribute("@obj_attr_n:travel_departure_planet", WordUtils.capitalize(departurePlanet)); + travelTicket.setStringAttribute("@obj_attr_n:travel_departure_point", departureLoc); + + travelTicket.setStringAttribute("@obj_attr_n:travel_arrival_planet", WordUtils.capitalize(arrivalPlanet)); + travelTicket.setStringAttribute("@obj_attr_n:travel_arrival_point", arrivalLoc); + + return travelTicket; + } + + public void purchaseTravelTicket(SWGObject player, String departurePlanet, String departureLoc, String arrivalPlanet, String arrivalLoc) { + //PlayerObject playerObj = (PlayerObject) player.getSlottedObject("ghost"); + CreatureObject creatureObj = (CreatureObject) player; + + + SWGObject travelTicket = createTravelTicket(departurePlanet, departureLoc, arrivalPlanet, arrivalLoc); + + creatureObj.getSlottedObject("inventory").add(travelTicket); + + creatureObj.sendSystemMessage("@travel:ticket_purchase_complete", (byte) 0); + System.out.println("Created travel ticket: " + departurePlanet + " " + departureLoc + " " + arrivalPlanet + " " + arrivalLoc); + } + + public void handleTicketCollector(SWGObject player, TravelPoint tp) { + List objectList = core.simulationService.get(player.getPlanet(), tp.getLocation().x, tp.getLocation().y, 100); + for (SWGObject obj : objectList) { + if (obj.getAttachment("transport") == tp) { + System.out.println("Shuttle is in range!"); + break; + //obj.setAttachment(arg0, arg1); + } + } + } + + @Override + public void shutdown() { + + } +}