diff --git a/README.md b/README.md index 24abfa1e..ff4c8504 100644 --- a/README.md +++ b/README.md @@ -12,8 +12,8 @@ The Engine(NGEngine) is a closed source library and is only licensed for use wit Requirements for Building the Core: ======== -- JDK 7 -- An IDE like Eclipse Juno +- JDK 8 +- A Java 8 compatible IDE like Eclipse Kepler (https://wiki.eclipse.org/JDT/Eclipse_Java_8_Support_For_Kepler) - A valid Star Wars Galaxies Installation with the final patch - Postgresql server (www.postgresql.org) - TRE Explorer(http://forum.modsource.org/index.php?PHPSESSID=bf02fd8244123807f4716c1686abb59f&action=dlattach;topic=33.0;attach=49) diff --git a/odb/doids/placeholder.txt b/odb/doids/placeholder.txt new file mode 100644 index 00000000..e69de29b diff --git a/scripts/buffs/armor_break.py b/scripts/buffs/armor_break.py index 288a2db0..f0a2f58e 100644 --- a/scripts/buffs/armor_break.py +++ b/scripts/buffs/armor_break.py @@ -1,12 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.addSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) actor.addSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.deductSkillMod('expertise_innate_reduction_all_mob', 600 * buff.getStacks()) actor.deductSkillMod('expertise_innate_reduction_all_player', 6 * buff.getStacks()) return - diff --git a/scripts/buffs/bh_armor_sprint_1.py b/scripts/buffs/bh_armor_sprint_1.py index e9637ebd..5f39a64d 100644 --- a/scripts/buffs/bh_armor_sprint_1.py +++ b/scripts/buffs/bh_armor_sprint_1.py @@ -1,12 +1,15 @@ import sys -def setup(core, actor, buff): +def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 6) core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 6) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) diff --git a/scripts/buffs/bh_cover_1.py b/scripts/buffs/bh_cover_1.py index b3ca84ce..b68de518 100644 --- a/scripts/buffs/bh_cover_1.py +++ b/scripts/buffs/bh_cover_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_ranged', 40) core.skillModService.addSkillMod(actor, 'invis', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_ranged', 40) core.skillModService.deductSkillMod(actor, 'invis', 1) diff --git a/scripts/buffs/bh_prescience.py b/scripts/buffs/bh_prescience.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bh_prescience.py +++ b/scripts/buffs/bh_prescience.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/bh_return_fire_1.py b/scripts/buffs/bh_return_fire_1.py index 7a0f25b4..95612d87 100644 --- a/scripts/buffs/bh_return_fire_1.py +++ b/scripts/buffs/bh_return_fire_1.py @@ -2,11 +2,14 @@ import sys def setup(core, actor, buff): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_bh_return_fire'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_bh_return_fire_1', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_bh_return_fire_1', 1) return \ No newline at end of file diff --git a/scripts/buffs/bleeding.py b/scripts/buffs/bleeding.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/bleeding.py +++ b/scripts/buffs/bleeding.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/buildabuff_inspiration.py b/scripts/buffs/buildabuff_inspiration.py index bfcff248..25ba7355 100644 --- a/scripts/buffs/buildabuff_inspiration.py +++ b/scripts/buffs/buildabuff_inspiration.py @@ -2,26 +2,27 @@ from resources.common import BuffBuilder import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): buffWorkshop = actor.getAttachment('buffWorkshop') if buffWorkshop is None: return - buff.setDuration(3600) #1 hour - - for BuffBuilder in buffWorkshop: - core.skillModService.addSkillMod(actor, BuffBuilder.getStatAffects(), BuffBuilder.getTotalAffected()) - print (' gave the skill mod ' + BuffBuilder.getStatAffects() + ' with affect of ' + str(BuffBuilder.getTotalAffected())) - return - + attached = actor.getAttachment('inspireDuration') + + buff.setDuration(float(actor.getAttachment('inspireDuration') * 60)) + + for BuffItem in buffWorkshop: + core.skillModService.addSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) + return -def removeBuff(core, actor, buff): - for BuffBuilder in actor.getAttachment('buffWorkshop'): - core.skillModService.deductSkillMod(actor, BuffBuilder.getStatAffects(), BuffBuilder.getTotalAffected()) - print ('removed skill mod!') - return +def remove(core, actor, buff): + for BuffItem in actor.getAttachment('buffWorkshop'): + core.skillModService.deductSkillMod(actor, BuffItem.getSkillName(), BuffItem.getAffectAmount()) - actor.setAttachment('buffWorkshop', 'none') + actor.setAttachment('buffWorkshop', None) return \ No newline at end of file diff --git a/scripts/buffs/co_base_of_operations.py b/scripts/buffs/co_base_of_operations.py index 894c389c..8c8eb346 100644 --- a/scripts/buffs/co_base_of_operations.py +++ b/scripts/buffs/co_base_of_operations.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_innate_protection_all', 1000) core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_innate_protection_all', 1000) core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 5) return diff --git a/scripts/buffs/co_first_aid_training.py b/scripts/buffs/co_first_aid_training.py index b0ffe0f9..8679678c 100644 --- a/scripts/buffs/co_first_aid_training.py +++ b/scripts/buffs/co_first_aid_training.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_healing_all', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_healing_all', 20) return \ No newline at end of file diff --git a/scripts/buffs/co_position_secured.py b/scripts/buffs/co_position_secured.py index b0b2781c..0885ccd9 100644 --- a/scripts/buffs/co_position_secured.py +++ b/scripts/buffs/co_position_secured.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierMod(0) @@ -22,7 +25,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierMod(1) diff --git a/scripts/buffs/co_stand_fast.py b/scripts/buffs/co_stand_fast.py index 17563ff9..8f8be535 100644 --- a/scripts/buffs/co_stand_fast.py +++ b/scripts/buffs/co_stand_fast.py @@ -3,7 +3,9 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_co_stand_fast'): buff.setDuration(buff.getDuration() + actor.getSkillMod('expertise_buff_duration_line_co_stand_fast').getBase()) - + return + +def add(core, actor, buff): if actor.getSkillMod('expertise_damage_decrease_percentage'): core.skillModService.addSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) else: @@ -11,7 +13,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): if actor.getSkillMod('expertise_damage_decrease_percentage'): core.skillModService.deductSkillMod(actor, 'damage_decrease_percentage', (60 + actor.getSkillMod('expertise_damage_decrease_percentage').getBase()) / 2) else: diff --git a/scripts/buffs/en_action_regen.py b/scripts/buffs/en_action_regen.py new file mode 100644 index 00000000..850186d0 --- /dev/null +++ b/scripts/buffs/en_action_regen.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_action_weapon_melee', 60) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_action_weapon_melee', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill.py b/scripts/buffs/en_debuff_thrill.py new file mode 100644 index 00000000..9a25438b --- /dev/null +++ b/scripts/buffs/en_debuff_thrill.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 2) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 2) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_1.py b/scripts/buffs/en_debuff_thrill_1.py new file mode 100644 index 00000000..cbcb2ac4 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 4) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 4) + return \ No newline at end of file diff --git a/scripts/buffs/en_debuff_thrill_2.py b/scripts/buffs/en_debuff_thrill_2.py new file mode 100644 index 00000000..6b887e82 --- /dev/null +++ b/scripts/buffs/en_debuff_thrill_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 6) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 6) + return \ No newline at end of file diff --git a/scripts/buffs/en_spiral_kick_snare.py b/scripts/buffs/en_spiral_kick_snare.py new file mode 100644 index 00000000..2ee81fe9 --- /dev/null +++ b/scripts/buffs/en_spiral_kick_snare.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/en_sprint.py b/scripts/buffs/en_sprint.py new file mode 100644 index 00000000..288b25b1 --- /dev/null +++ b/scripts/buffs/en_sprint.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement_resist_snare', 100) + core.skillModService.addSkillMod(actor, 'movement', 5) + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) + core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 100) + return + \ No newline at end of file diff --git a/scripts/buffs/en_sweeping_pirouette_root.py b/scripts/buffs/en_sweeping_pirouette_root.py new file mode 100644 index 00000000..42418564 --- /dev/null +++ b/scripts/buffs/en_sweeping_pirouette_root.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 10) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 10) + return \ No newline at end of file diff --git a/scripts/buffs/en_unhealthy_fixation_debuff.py b/scripts/buffs/en_unhealthy_fixation_debuff.py new file mode 100644 index 00000000..7dfe77af --- /dev/null +++ b/scripts/buffs/en_unhealthy_fixation_debuff.py @@ -0,0 +1,12 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'en_unhealthy_stun', 1) + return + +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'en_unhealthy_stun', 1) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff.py b/scripts/buffs/en_void_dance_buff.py new file mode 100644 index 00000000..3197e246 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 60) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 60) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_1.py b/scripts/buffs/en_void_dance_buff_1.py new file mode 100644 index 00000000..6a37025d --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_1.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 65) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 65) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_2.py b/scripts/buffs/en_void_dance_buff_2.py new file mode 100644 index 00000000..bcd31db8 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_2.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 70) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 70) + return \ No newline at end of file diff --git a/scripts/buffs/en_void_dance_buff_3.py b/scripts/buffs/en_void_dance_buff_3.py new file mode 100644 index 00000000..e2d98d20 --- /dev/null +++ b/scripts/buffs/en_void_dance_buff_3.py @@ -0,0 +1,13 @@ +import sys + +def setup(core, actor, buff): + return + +def add(core, actor, buff): + core.skillModService.addSkillMod(actor, 'expertise_glancing_blow_all', 75) + + return + +def remove(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 75) + return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_1.py b/scripts/buffs/flawless_bead_1.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_1.py +++ b/scripts/buffs/flawless_bead_1.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_2.py b/scripts/buffs/flawless_bead_2.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_2.py +++ b/scripts/buffs/flawless_bead_2.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/flawless_bead_3.py b/scripts/buffs/flawless_bead_3.py index 84123a88..9d402987 100644 --- a/scripts/buffs/flawless_bead_3.py +++ b/scripts/buffs/flawless_bead_3.py @@ -2,6 +2,9 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/fs_ae_dm_cc_0.py b/scripts/buffs/fs_ae_dm_cc_0.py index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_0.py +++ b/scripts/buffs/fs_ae_dm_cc_0.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_1.py +++ b/scripts/buffs/fs_ae_dm_cc_1.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_2.py +++ b/scripts/buffs/fs_ae_dm_cc_2.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_3.py +++ b/scripts/buffs/fs_ae_dm_cc_3.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_4.py +++ b/scripts/buffs/fs_ae_dm_cc_4.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_5.py +++ b/scripts/buffs/fs_ae_dm_cc_5.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + 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 index 493481d7..2ee81fe9 100644 --- a/scripts/buffs/fs_ae_dm_cc_6.py +++ b/scripts/buffs/fs_ae_dm_cc_6.py @@ -1,10 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(0.5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_ca_1.py b/scripts/buffs/fs_buff_ca_1.py index 5fb1239f..837e11f7 100644 --- a/scripts/buffs/fs_buff_ca_1.py +++ b/scripts/buffs/fs_buff_ca_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_sokan_focus.prt', 'fs_buff_ca_1') core.skillModService.addSkillMod(actor, 'expertise_focus', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_focus', 1) return \ No newline at end of file diff --git a/scripts/buffs/fs_buff_def_1_1.py b/scripts/buffs/fs_buff_def_1_1.py index 0d7ad4dd..743dc69b 100644 --- a/scripts/buffs/fs_buff_def_1_1.py +++ b/scripts/buffs/fs_buff_def_1_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('appearance/pt_force_avoid_incapacitation.prt', 'fs_buff_def_1_1') core.skillModService.addSkillMod(actor, 'expertise_stance', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_stance', 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 index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_1.py +++ b/scripts/buffs/fs_dm_cc_crit_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(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 index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_2.py +++ b/scripts/buffs/fs_dm_cc_crit_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(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 index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_3.py +++ b/scripts/buffs/fs_dm_cc_crit_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(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 index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_4.py +++ b/scripts/buffs/fs_dm_cc_crit_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(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 index 493481d7..df2109d8 100644 --- a/scripts/buffs/fs_dm_cc_crit_5.py +++ b/scripts/buffs/fs_dm_cc_crit_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.setSpeedMultiplierBase(0.5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/fs_force_run.py b/scripts/buffs/fs_force_run.py index f691d76f..714e8198 100644 --- a/scripts/buffs/fs_force_run.py +++ b/scripts/buffs/fs_force_run.py @@ -1,7 +1,10 @@ import sys -def setup(core, actor, buff): +def setup(core, actor, buff): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_fs_force_run'))) + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/pl_force_run.cef', 'fs_force_run') actor.playEffectObject('appearance/pt_force_speed.prt', 'fs_force_run') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() + 2.5 + (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) @@ -14,7 +17,7 @@ def setup(core, actor, buff): return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.stopEffectObject('fs_force_run') actor.setSpeedMultiplierBase(actor.getSpeedMultiplierBase() - 2.5 - (2.5 * (actor.getSkillModBase('expertise_movement_buff_fs_force_run')) / 100)) core.skillModService.deductSkillMod(actor, 'slope_move', 5) diff --git a/scripts/buffs/fs_force_throw.py b/scripts/buffs/fs_force_throw.py index f20ef882..2ee81fe9 100644 --- a/scripts/buffs/fs_force_throw.py +++ b/scripts/buffs/fs_force_throw.py @@ -1,11 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', float(-0.5)) - + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', float(-0.5)) - return - \ No newline at end of file +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) + return \ No newline at end of file diff --git a/scripts/buffs/fs_saber_reflect.py b/scripts/buffs/fs_saber_reflect.py index cba5694e..815b8b7d 100644 --- a/scripts/buffs/fs_saber_reflect.py +++ b/scripts/buffs/fs_saber_reflect.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_saber_block', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_saber_block', 1) return \ No newline at end of file diff --git a/scripts/buffs/invis_fs_buff_invis_1.py b/scripts/buffs/invis_fs_buff_invis_1.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/invis_fs_buff_invis_1.py +++ b/scripts/buffs/invis_fs_buff_invis_1.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_1.py b/scripts/buffs/me_buff_action_1.py index d5cff5fb..7cd3cf3c 100644 --- a/scripts/buffs/me_buff_action_1.py +++ b/scripts/buffs/me_buff_action_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_2.py b/scripts/buffs/me_buff_action_2.py index 9848727e..0d1a1718 100644 --- a/scripts/buffs/me_buff_action_2.py +++ b/scripts/buffs/me_buff_action_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_action_3.py b/scripts/buffs/me_buff_action_3.py index f59277c9..625808f2 100644 --- a/scripts/buffs/me_buff_action_3.py +++ b/scripts/buffs/me_buff_action_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_1.py b/scripts/buffs/me_buff_agility_1.py index 10d3a0a6..cc0368a7 100644 --- a/scripts/buffs/me_buff_agility_1.py +++ b/scripts/buffs/me_buff_agility_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_2.py b/scripts/buffs/me_buff_agility_2.py index 8130ad0f..47ae13c6 100644 --- a/scripts/buffs/me_buff_agility_2.py +++ b/scripts/buffs/me_buff_agility_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_agility_3.py b/scripts/buffs/me_buff_agility_3.py index a9727dc2..83686069 100644 --- a/scripts/buffs/me_buff_agility_3.py +++ b/scripts/buffs/me_buff_agility_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'agility_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'agility_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health.py b/scripts/buffs/me_buff_health.py index 70dd9938..f5396585 100644 --- a/scripts/buffs/me_buff_health.py +++ b/scripts/buffs/me_buff_health.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_0.py b/scripts/buffs/me_buff_health_0.py index b20b680b..513dabb4 100644 --- a/scripts/buffs/me_buff_health_0.py +++ b/scripts/buffs/me_buff_health_0.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 35) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 35) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_health_2.py b/scripts/buffs/me_buff_health_2.py index fc52c4a3..4c0a9502 100644 --- a/scripts/buffs/me_buff_health_2.py +++ b/scripts/buffs/me_buff_health_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'constitution_modified', 250) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'constitution_modified', 250) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_melee_gb_1.py b/scripts/buffs/me_buff_melee_gb_1.py index f052d7b9..9819dcb3 100644 --- a/scripts/buffs/me_buff_melee_gb_1.py +++ b/scripts/buffs/me_buff_melee_gb_1.py @@ -3,11 +3,14 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_block', 1000) core.skillModService.addSkillMod(actor, 'combat_block_value', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_block', 1000) core.skillModService.deductSkillMod(actor, 'combat_block_value', 200) return diff --git a/scripts/buffs/me_buff_precision_1.py b/scripts/buffs/me_buff_precision_1.py index 3006e18e..6b24b151 100644 --- a/scripts/buffs/me_buff_precision_1.py +++ b/scripts/buffs/me_buff_precision_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_2.py b/scripts/buffs/me_buff_precision_2.py index fbf6d978..b3c2aab5 100644 --- a/scripts/buffs/me_buff_precision_2.py +++ b/scripts/buffs/me_buff_precision_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_precision_3.py b/scripts/buffs/me_buff_precision_3.py index f6490d10..40899ffb 100644 --- a/scripts/buffs/me_buff_precision_3.py +++ b/scripts/buffs/me_buff_precision_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'precision_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'precision_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_ranged_gb_1.py b/scripts/buffs/me_buff_ranged_gb_1.py index d2476abe..ce5770a8 100644 --- a/scripts/buffs/me_buff_ranged_gb_1.py +++ b/scripts/buffs/me_buff_ranged_gb_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_dodge', 500) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_dodge', 500) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_1.py b/scripts/buffs/me_buff_strength_1.py index 462d84a5..fa50d073 100644 --- a/scripts/buffs/me_buff_strength_1.py +++ b/scripts/buffs/me_buff_strength_1.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 15) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_2.py b/scripts/buffs/me_buff_strength_2.py index 85f6d038..5f8f02d2 100644 --- a/scripts/buffs/me_buff_strength_2.py +++ b/scripts/buffs/me_buff_strength_2.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 45) return \ No newline at end of file diff --git a/scripts/buffs/me_buff_strength_3.py b/scripts/buffs/me_buff_strength_3.py index 6fa59e33..fcba94f9 100644 --- a/scripts/buffs/me_buff_strength_3.py +++ b/scripts/buffs/me_buff_strength_3.py @@ -3,10 +3,13 @@ import sys def setup(core, actor, buff): if actor.getSkillMod('expertise_buff_duration_line_me_enhance'): buff.setDuration(buff.getDuration()+(actor.getSkillModBase('expertise_buff_duration_line_me_enhance'))) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'strength_modified', 80) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'strength_modified', 80) return \ No newline at end of file diff --git a/scripts/buffs/me_burst_1.py b/scripts/buffs/me_burst_1.py index 15d5cd85..82f6065b 100644 --- a/scripts/buffs/me_burst_1.py +++ b/scripts/buffs/me_burst_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_critical_niche_all', 3) core.skillModService.addSkillMod(actor, 'strikethrough_vulnerable', 5) core.skillModService.addSkillMod(actor, 'critical_hit_vulnerable', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_critical_niche_all', 3) core.skillModService.deductSkillMod(actor, 'strikethrough_vulnerable', 5) core.skillModService.deductSkillMod(actor, 'critical_hit_vulnerable', 5) diff --git a/scripts/buffs/me_cranial_smash_1.py b/scripts/buffs/me_cranial_smash_1.py index f63ec968..3daa6068 100644 --- a/scripts/buffs/me_cranial_smash_1.py +++ b/scripts/buffs/me_cranial_smash_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 10) core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 10) return diff --git a/scripts/buffs/me_cure_affliction_1.py b/scripts/buffs/me_cure_affliction_1.py index f5e1ce07..b071a958 100644 --- a/scripts/buffs/me_cure_affliction_1.py +++ b/scripts/buffs/me_cure_affliction_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_reduction_all', 5) core.skillModService.addSkillMod(actor, 'dot_resist_all', 100) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_reduction_all', 5) core.skillModService.deductSkillMod(actor, 'dot_resist_all', 100) return diff --git a/scripts/buffs/me_doom.py b/scripts/buffs/me_doom.py index d4f40162..fe90deb5 100644 --- a/scripts/buffs/me_doom.py +++ b/scripts/buffs/me_doom.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'me_doom', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'me_doom', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_electrolyte_drain_1.py b/scripts/buffs/me_electrolyte_drain_1.py index 82a33b29..2ee81fe9 100644 --- a/scripts/buffs/me_electrolyte_drain_1.py +++ b/scripts/buffs/me_electrolyte_drain_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/me_evasion_1.py b/scripts/buffs/me_evasion_1.py index 59984429..81ea7c1d 100644 --- a/scripts/buffs/me_evasion_1.py +++ b/scripts/buffs/me_evasion_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 35) core.skillModService.addSkillMod(actor, 'display_only_evasion', 5000) core.skillModService.addSkillMod(actor, 'combat_evasion_value', 50) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_dodge', 35) core.skillModService.deductSkillMod(actor, 'display_only_evasion', 5000) core.skillModService.deductSkillMod(actor, 'combat_evasion_value', 50) diff --git a/scripts/buffs/me_rheumatic_calamity_1.py b/scripts/buffs/me_rheumatic_calamity_1.py index 2884acd8..8870a12b 100644 --- a/scripts/buffs/me_rheumatic_calamity_1.py +++ b/scripts/buffs/me_rheumatic_calamity_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 65) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 65) return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_boost_1.py b/scripts/buffs/me_serotonin_boost_1.py index 5eb23142..2c931a78 100644 --- a/scripts/buffs/me_serotonin_boost_1.py +++ b/scripts/buffs/me_serotonin_boost_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'debuff_purge', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_serotonin_purge_1.py b/scripts/buffs/me_serotonin_purge_1.py index 8b288359..c5540781 100644 --- a/scripts/buffs/me_serotonin_purge_1.py +++ b/scripts/buffs/me_serotonin_purge_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'buff_purge', 1) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'buff_purge', 1) return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_1.py b/scripts/buffs/me_stasis_1.py index 1539e280..7d4b7fe5 100644 --- a/scripts/buffs/me_stasis_1.py +++ b/scripts/buffs/me_stasis_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_1') actor.setSpeedMultiplierBase(0.2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/me_stasis_self_1.py b/scripts/buffs/me_stasis_self_1.py index 6341cb4c..cfb0b3f3 100644 --- a/scripts/buffs/me_stasis_self_1.py +++ b/scripts/buffs/me_stasis_self_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): actor.playEffectObject('clienteffect/medic_stasis.cef', 'me_stasis_self_1') actor.setSpeedMultiplierBase(0.2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): actor.setSpeedMultiplierBase(1) return \ No newline at end of file diff --git a/scripts/buffs/me_thyroid_rupture_1.py b/scripts/buffs/me_thyroid_rupture_1.py index 03b1fba8..fcafd14c 100644 --- a/scripts/buffs/me_thyroid_rupture_1.py +++ b/scripts/buffs/me_thyroid_rupture_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'combat_divide_damage_dealt', 25) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'combat_divide_damage_dealt', 25) 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 index 7f6894de..54bbaa4e 100644 --- a/scripts/buffs/of_adv_paint_debuff_1.py +++ b/scripts/buffs/of_adv_paint_debuff_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 3) return -def removeBuff(core, actor, buff): +def remove(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 index 92f239c0..2a7c28ce 100644 --- a/scripts/buffs/of_adv_paint_debuff_2.py +++ b/scripts/buffs/of_adv_paint_debuff_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 4) return -def removeBuff(core, actor, buff): +def remove(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 index 58fe704f..18dc8a8c 100644 --- a/scripts/buffs/of_adv_paint_debuff_3.py +++ b/scripts/buffs/of_adv_paint_debuff_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 5) return -def removeBuff(core, actor, buff): +def remove(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 index f41ae124..ec98f8ea 100644 --- a/scripts/buffs/of_adv_paint_debuff_4.py +++ b/scripts/buffs/of_adv_paint_debuff_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 6) return -def removeBuff(core, actor, buff): +def remove(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 index d31be060..e8fc48e0 100644 --- a/scripts/buffs/of_adv_paint_debuff_5.py +++ b/scripts/buffs/of_adv_paint_debuff_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 7) return -def removeBuff(core, actor, buff): +def remove(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 index 84ffe9ed..739acd40 100644 --- a/scripts/buffs/of_adv_paint_debuff_6.py +++ b/scripts/buffs/of_adv_paint_debuff_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 8) return -def removeBuff(core, actor, buff): +def remove(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 index 231f4a1b..32276a5f 100644 --- a/scripts/buffs/of_adv_paint_debuff_7.py +++ b/scripts/buffs/of_adv_paint_debuff_7.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 9) return -def removeBuff(core, actor, buff): +def remove(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 index 65e1c826..7af4032c 100644 --- a/scripts/buffs/of_adv_paint_debuff_8.py +++ b/scripts/buffs/of_adv_paint_debuff_8.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'critical_damage_vulnerability', 10) return -def removeBuff(core, actor, buff): +def remove(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 index e3583535..cf3db901 100644 --- a/scripts/buffs/of_adv_paint_expose_1.py +++ b/scripts/buffs/of_adv_paint_expose_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_2.py b/scripts/buffs/of_adv_paint_expose_2.py index 07ed0966..cb86a0d8 100644 --- a/scripts/buffs/of_adv_paint_expose_2.py +++ b/scripts/buffs/of_adv_paint_expose_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_3.py b/scripts/buffs/of_adv_paint_expose_3.py index 4ab6e431..7a7d18af 100644 --- a/scripts/buffs/of_adv_paint_expose_3.py +++ b/scripts/buffs/of_adv_paint_expose_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_4.py b/scripts/buffs/of_adv_paint_expose_4.py index df8fae5c..3716ee92 100644 --- a/scripts/buffs/of_adv_paint_expose_4.py +++ b/scripts/buffs/of_adv_paint_expose_4.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_5.py b/scripts/buffs/of_adv_paint_expose_5.py index d22f46f0..210f262d 100644 --- a/scripts/buffs/of_adv_paint_expose_5.py +++ b/scripts/buffs/of_adv_paint_expose_5.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_6.py b/scripts/buffs/of_adv_paint_expose_6.py index 4e3af368..d58904ce 100644 --- a/scripts/buffs/of_adv_paint_expose_6.py +++ b/scripts/buffs/of_adv_paint_expose_6.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_7.py b/scripts/buffs/of_adv_paint_expose_7.py index 46e42ba4..c83c4950 100644 --- a/scripts/buffs/of_adv_paint_expose_7.py +++ b/scripts/buffs/of_adv_paint_expose_7.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_adv_paint_expose_8.py b/scripts/buffs/of_adv_paint_expose_8.py index ff43fe6c..38a00bf2 100644 --- a/scripts/buffs/of_adv_paint_expose_8.py +++ b/scripts/buffs/of_adv_paint_expose_8.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_ae_dm_cc_1.py b/scripts/buffs/of_ae_dm_cc_1.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_1.py +++ b/scripts/buffs/of_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_2.py +++ b/scripts/buffs/of_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_ae_dm_cc_3.py +++ b/scripts/buffs/of_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index dd15adaf..01f17ada 100644 --- a/scripts/buffs/of_buff_def_1.py +++ b/scripts/buffs/of_buff_def_1.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 1) core.skillModService.addSkillMod(actor, 'constitution_modified', 5) return -def removeBuff(core, actor, buff): +def remove(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 index d819404b..7536841f 100644 --- a/scripts/buffs/of_buff_def_2.py +++ b/scripts/buffs/of_buff_def_2.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 10) return -def removeBuff(core, actor, buff): +def remove(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 index d18a3633..dd577237 100644 --- a/scripts/buffs/of_buff_def_3.py +++ b/scripts/buffs/of_buff_def_3.py @@ -1,11 +1,17 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_dodge', 2) core.skillModService.addSkillMod(actor, 'constitution_modified', 20) return -def removeBuff(core, actor, buff): +def remove(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 index b115ce6b..6a650b41 100644 --- a/scripts/buffs/of_buff_def_4.py +++ b/scripts/buffs/of_buff_def_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_buff_def_5.py b/scripts/buffs/of_buff_def_5.py index 5c6ff8eb..0dfd361a 100644 --- a/scripts/buffs/of_buff_def_5.py +++ b/scripts/buffs/of_buff_def_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_buff_def_6.py b/scripts/buffs/of_buff_def_6.py index b8a4b168..06dac062 100644 --- a/scripts/buffs/of_buff_def_6.py +++ b/scripts/buffs/of_buff_def_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_buff_def_7.py b/scripts/buffs/of_buff_def_7.py index 77bdd6b4..b18cd574 100644 --- a/scripts/buffs/of_buff_def_7.py +++ b/scripts/buffs/of_buff_def_7.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_buff_def_8.py b/scripts/buffs/of_buff_def_8.py index e4b5ba0c..1b16cad6 100644 --- a/scripts/buffs/of_buff_def_8.py +++ b/scripts/buffs/of_buff_def_8.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_buff_def_9.py b/scripts/buffs/of_buff_def_9.py index 6f5e35e7..ac342f70 100644 --- a/scripts/buffs/of_buff_def_9.py +++ b/scripts/buffs/of_buff_def_9.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + buff.setDuration(-1) + + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_cc_melee_1.py b/scripts/buffs/of_cc_melee_1.py index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_1.py +++ b/scripts/buffs/of_cc_melee_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_2.py +++ b/scripts/buffs/of_cc_melee_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_3.py +++ b/scripts/buffs/of_cc_melee_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_4.py +++ b/scripts/buffs/of_cc_melee_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_5.py +++ b/scripts/buffs/of_cc_melee_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_6.py +++ b/scripts/buffs/of_cc_melee_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) 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 index 620bbaaa..2ee81fe9 100644 --- a/scripts/buffs/of_cc_melee_7.py +++ b/scripts/buffs/of_cc_melee_7.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', -5) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 15) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/of_charge_1.py b/scripts/buffs/of_charge_1.py index 1edd38b5..104612e7 100644 --- a/scripts/buffs/of_charge_1.py +++ b/scripts/buffs/of_charge_1.py @@ -1,13 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) + return + +def add(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) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 10) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 10) diff --git a/scripts/buffs/of_deadeye_debuff.py b/scripts/buffs/of_deadeye_debuff.py index 533e3262..be22ec3e 100644 --- a/scripts/buffs/of_deadeye_debuff.py +++ b/scripts/buffs/of_deadeye_debuff.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'action_burn', 50) core.skillModService.addSkillMod(actor, 'glancing_blow_vulnerable', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'action_burn', 50) core.skillModService.deductSkillMod(actor, 'glancing_blow_vulnerable', 30) 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 index 5a4b5cff..13cdab58 100644 --- a/scripts/buffs/of_deb_def_1.py +++ b/scripts/buffs/of_deb_def_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_2.py b/scripts/buffs/of_deb_def_2.py index 75c97f71..097ffe2b 100644 --- a/scripts/buffs/of_deb_def_2.py +++ b/scripts/buffs/of_deb_def_2.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_3.py b/scripts/buffs/of_deb_def_3.py index 5b125b31..c3b28b0b 100644 --- a/scripts/buffs/of_deb_def_3.py +++ b/scripts/buffs/of_deb_def_3.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_4.py b/scripts/buffs/of_deb_def_4.py index 056db66a..e93dde70 100644 --- a/scripts/buffs/of_deb_def_4.py +++ b/scripts/buffs/of_deb_def_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_5.py b/scripts/buffs/of_deb_def_5.py index ec243e5b..233ec4dd 100644 --- a/scripts/buffs/of_deb_def_5.py +++ b/scripts/buffs/of_deb_def_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_6.py b/scripts/buffs/of_deb_def_6.py index 3ebd39ea..cdb29995 100644 --- a/scripts/buffs/of_deb_def_6.py +++ b/scripts/buffs/of_deb_def_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_7.py b/scripts/buffs/of_deb_def_7.py index 7503918d..9e9fedf5 100644 --- a/scripts/buffs/of_deb_def_7.py +++ b/scripts/buffs/of_deb_def_7.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_deb_def_8.py b/scripts/buffs/of_deb_def_8.py index bc8e5334..6016ba0d 100644 --- a/scripts/buffs/of_deb_def_8.py +++ b/scripts/buffs/of_deb_def_8.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 0: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_decap_bleed_1.py b/scripts/buffs/of_decap_bleed_1.py index 16152e90..ff8b7fcf 100644 --- a/scripts/buffs/of_decap_bleed_1.py +++ b/scripts/buffs/of_decap_bleed_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 18) return -def removeBuff(core, actor, buff): +def remove(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 index f34171fc..1cdbd89d 100644 --- a/scripts/buffs/of_decap_bleed_2.py +++ b/scripts/buffs/of_decap_bleed_2.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 25) return -def removeBuff(core, actor, buff): +def remove(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 index 01d777ca..13629ef6 100644 --- a/scripts/buffs/of_decap_bleed_3.py +++ b/scripts/buffs/of_decap_bleed_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 32) return -def removeBuff(core, actor, buff): +def remove(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 index 1e847dea..3e266371 100644 --- a/scripts/buffs/of_decap_bleed_4.py +++ b/scripts/buffs/of_decap_bleed_4.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 42) return -def removeBuff(core, actor, buff): +def remove(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 index 596a9457..22db45c2 100644 --- a/scripts/buffs/of_decap_bleed_5.py +++ b/scripts/buffs/of_decap_bleed_5.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 50) return -def removeBuff(core, actor, buff): +def remove(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 index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_decap_bleed_6.py +++ b/scripts/buffs/of_decap_bleed_6.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(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 index 9ab3d9f7..1534cc2e 100644 --- a/scripts/buffs/of_dot_bomb_1.py +++ b/scripts/buffs/of_dot_bomb_1.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_fire', 200) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'dot_fire', 200) return \ No newline at end of file diff --git a/scripts/buffs/of_drillmaster_1.py b/scripts/buffs/of_drillmaster_1.py index 9dd26849..233744a6 100644 --- a/scripts/buffs/of_drillmaster_1.py +++ b/scripts/buffs/of_drillmaster_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 2: + buff.setDuration(-1) + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'expertise_damage_weapon_2', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_damage_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_action_all', 5) core.skillModService.deductSkillMod(actor, 'expertise_damage_weapon_2', 5) diff --git a/scripts/buffs/of_emergency_shield.py b/scripts/buffs/of_emergency_shield.py index 8b27d418..e4f367c3 100644 --- a/scripts/buffs/of_emergency_shield.py +++ b/scripts/buffs/of_emergency_shield.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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 index e7b0b129..9bf1f1fe 100644 --- a/scripts/buffs/of_firepower.py +++ b/scripts/buffs/of_firepower.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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 index c8e0d364..4e191992 100644 --- a/scripts/buffs/of_focus_fire_1.py +++ b/scripts/buffs/of_focus_fire_1.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_focus_fire_2.py b/scripts/buffs/of_focus_fire_2.py index 7803b873..60404f53 100644 --- a/scripts/buffs/of_focus_fire_2.py +++ b/scripts/buffs/of_focus_fire_2.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_focus_fire_3.py b/scripts/buffs/of_focus_fire_3.py index a4084512..3420c94c 100644 --- a/scripts/buffs/of_focus_fire_3.py +++ b/scripts/buffs/of_focus_fire_3.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_focus_fire_4.py b/scripts/buffs/of_focus_fire_4.py index 27402933..a95fb77f 100644 --- a/scripts/buffs/of_focus_fire_4.py +++ b/scripts/buffs/of_focus_fire_4.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_focus_fire_5.py b/scripts/buffs/of_focus_fire_5.py index 9cc90e8d..4d084789 100644 --- a/scripts/buffs/of_focus_fire_5.py +++ b/scripts/buffs/of_focus_fire_5.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_focus_fire_6.py b/scripts/buffs/of_focus_fire_6.py index 58879cbe..e091b13f 100644 --- a/scripts/buffs/of_focus_fire_6.py +++ b/scripts/buffs/of_focus_fire_6.py @@ -1,12 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_aura_maintain'): + if actor.getSkillModBase('expertise_aura_maintain') > 1: + buff.setDuration(-1) + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_inspiration_1.py b/scripts/buffs/of_inspiration_1.py index 6cd2da65..cbf0963e 100644 --- a/scripts/buffs/of_inspiration_1.py +++ b/scripts/buffs/of_inspiration_1.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 870) return -def removeBuff(core, actor, buff): +def remove(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 index a26bbe86..1cf07e9c 100644 --- a/scripts/buffs/of_inspiration_2.py +++ b/scripts/buffs/of_inspiration_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1111) return -def removeBuff(core, actor, buff): +def remove(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 index 337108a6..1162d3b3 100644 --- a/scripts/buffs/of_inspiration_3.py +++ b/scripts/buffs/of_inspiration_3.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1532) return -def removeBuff(core, actor, buff): +def remove(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 index 5738cd3d..67879833 100644 --- a/scripts/buffs/of_inspiration_4.py +++ b/scripts/buffs/of_inspiration_4.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 1954) return -def removeBuff(core, actor, buff): +def remove(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 index 6ab7d9d3..f566e44a 100644 --- a/scripts/buffs/of_inspiration_5.py +++ b/scripts/buffs/of_inspiration_5.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2374) return -def removeBuff(core, actor, buff): +def remove(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 index 9e7e9def..31bcc7df 100644 --- a/scripts/buffs/of_inspiration_6.py +++ b/scripts/buffs/of_inspiration_6.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_all', 5) core.skillModService.addSkillMod(actor, 'healing_action', 2800) return -def removeBuff(core, actor, buff): +def remove(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 index 9611d588..49c70490 100644 --- a/scripts/buffs/of_last_words.py +++ b/scripts/buffs/of_last_words.py @@ -1,13 +1,16 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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) diff --git a/scripts/buffs/of_pistol_bleed.py b/scripts/buffs/of_pistol_bleed.py index 1e96e637..8bbabdd6 100644 --- a/scripts/buffs/of_pistol_bleed.py +++ b/scripts/buffs/of_pistol_bleed.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 60) return -def removeBuff(core, actor, buff): +def remove(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 index c41e52e8..21dd70e7 100644 --- a/scripts/buffs/of_purge_1.py +++ b/scripts/buffs/of_purge_1.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(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): +def remove(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 index ed252b06..8309302a 100644 --- a/scripts/buffs/of_scatter_1.py +++ b/scripts/buffs/of_scatter_1.py @@ -1,13 +1,18 @@ import sys def setup(core, actor, buff): + if actor.getSkillMod('expertise_buff_duration_line_of_group_buff'): + buff.setDuration(buff.getDuration() + actor.getSkillModBase('expertise_buff_duration_line_of_group_buff')) + return + +def add(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) core.skillModService.addSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'movement', 5) core.skillModService.deductSkillMod(actor, 'expertise_glancing_blow_all', 2) core.skillModService.deductSkillMod(actor, 'movement_resist_snare', 15) diff --git a/scripts/buffs/of_stimulator_1.py b/scripts/buffs/of_stimulator_1.py index f28888e7..4e120b7f 100644 --- a/scripts/buffs/of_stimulator_1.py +++ b/scripts/buffs/of_stimulator_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'debuff_purge', 2) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'debuff_purge', 2) 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 index e1095bbc..188e61a7 100644 --- a/scripts/buffs/of_vortex_bleed_1.py +++ b/scripts/buffs/of_vortex_bleed_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 30) return -def removeBuff(core, actor, buff): +def remove(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 index cc0b1590..9a2bb14b 100644 --- a/scripts/buffs/of_vortex_bleed_2.py +++ b/scripts/buffs/of_vortex_bleed_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 44) return -def removeBuff(core, actor, buff): +def remove(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 index 12c3f4cd..711ac6ef 100644 --- a/scripts/buffs/of_vortex_bleed_3.py +++ b/scripts/buffs/of_vortex_bleed_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 58) return -def removeBuff(core, actor, buff): +def remove(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 index 9d2c2648..a6b25916 100644 --- a/scripts/buffs/of_vortex_bleed_4.py +++ b/scripts/buffs/of_vortex_bleed_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 72) return -def removeBuff(core, actor, buff): +def remove(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 index 760cc493..20f90a7f 100644 --- a/scripts/buffs/of_vortex_bleed_5.py +++ b/scripts/buffs/of_vortex_bleed_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'dot_bleed', 90) return -def removeBuff(core, actor, buff): +def remove(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 index 5048a0be..42418564 100644 --- a/scripts/buffs/of_vortex_root.py +++ b/scripts/buffs/of_vortex_root.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - core.skillModService.addSkillMod(actor, 'movement', 0) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 10) return -def removeBuff(core, actor, buff): - core.skillModService.deductSkillMod(actor, 'movement', 10) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 10) return \ No newline at end of file diff --git a/scripts/buffs/poisoned.py b/scripts/buffs/poisoned.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/poisoned.py +++ b/scripts/buffs/poisoned.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_dark_jedi_gift.py b/scripts/buffs/proc_old_dark_jedi_gift.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/proc_old_dark_jedi_gift.py +++ b/scripts/buffs/proc_old_dark_jedi_gift.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/proc_old_light_jedi_gift.py b/scripts/buffs/proc_old_light_jedi_gift.py index e09c02e5..c60417a0 100644 --- a/scripts/buffs/proc_old_light_jedi_gift.py +++ b/scripts/buffs/proc_old_light_jedi_gift.py @@ -2,7 +2,10 @@ import sys def setup(core, actor, buff): return + +def add(core, actor, buff): + return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): return \ No newline at end of file diff --git a/scripts/buffs/saberblock.py b/scripts/buffs/saberblock.py index 15962ce9..3386a66a 100644 --- a/scripts/buffs/saberblock.py +++ b/scripts/buffs/saberblock.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'display_only_parry', 1000 + (actor.getSkillModBase('expertise_saber_block') * 100)) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_1.py b/scripts/buffs/set_bonus_bh_dps_1.py index 58d3ed08..6055bf9f 100644 --- a/scripts/buffs/set_bonus_bh_dps_1.py +++ b/scripts/buffs/set_bonus_bh_dps_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_2.py b/scripts/buffs/set_bonus_bh_dps_2.py index cf463a7a..5f0aa83c 100644 --- a/scripts/buffs/set_bonus_bh_dps_2.py +++ b/scripts/buffs/set_bonus_bh_dps_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 5) core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 5) core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_dps_3.py b/scripts/buffs/set_bonus_bh_dps_3.py index 06bcee28..4d48df3e 100644 --- a/scripts/buffs/set_bonus_bh_dps_3.py +++ b/scripts/buffs/set_bonus_bh_dps_3.py @@ -1,6 +1,9 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_action_line_dm', 10) core.skillModService.addSkillMod(actor, 'expertise_action_line_dm_crit', 10) core.skillModService.addSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) @@ -8,7 +11,7 @@ def setup(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_return_fire' , 750) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm', 10) core.skillModService.deductSkillMod(actor, 'expertise_action_line_dm_crit', 10) core.skillModService.deductSkillMod(actor, 'expertise_buff_duration_line_bh_return_fire' , 10) diff --git a/scripts/buffs/set_bonus_bh_utility_a_1.py b/scripts/buffs/set_bonus_bh_utility_a_1.py index 4f9e42e4..3035fdd8 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_1.py +++ b/scripts/buffs/set_bonus_bh_utility_a_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_2.py b/scripts/buffs/set_bonus_bh_utility_a_2.py index 4f9e42e4..3035fdd8 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_2.py +++ b/scripts/buffs/set_bonus_bh_utility_a_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 15) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_a_3.py b/scripts/buffs/set_bonus_bh_utility_a_3.py index e98992f3..6a3ed086 100644 --- a/scripts/buffs/set_bonus_bh_utility_a_3.py +++ b/scripts/buffs/set_bonus_bh_utility_a_3.py @@ -1,10 +1,13 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'expertise_cooldown_line_bh_flawless_strike', 30) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_1.py b/scripts/buffs/set_bonus_bh_utility_b_1.py index 0f4597fe..9115f6d4 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_1.py +++ b/scripts/buffs/set_bonus_bh_utility_b_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 5) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 5) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_bh_utility_b_2.py b/scripts/buffs/set_bonus_bh_utility_b_2.py index 945c2883..b641c6a6 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_2.py +++ b/scripts/buffs/set_bonus_bh_utility_b_2.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 10) core.skillModService.addSkillMod(actor, 'bh_dire_root', 20) core.skillModService.addSkillMod(actor, 'bh_dire_snare', 20) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 10) core.skillModService.deductSkillMod(actor, 'bh_dire_root', 20) core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 20) diff --git a/scripts/buffs/set_bonus_bh_utility_b_3.py b/scripts/buffs/set_bonus_bh_utility_b_3.py index d136c4ec..b4b4154f 100644 --- a/scripts/buffs/set_bonus_bh_utility_b_3.py +++ b/scripts/buffs/set_bonus_bh_utility_b_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'fast_attack_line_dm_cc', 35) core.skillModService.addSkillMod(actor, 'bh_dire_root', 45) core.skillModService.addSkillMod(actor, 'bh_dire_snare', 45) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'fast_attack_line_dm_cc', 35) core.skillModService.deductSkillMod(actor, 'bh_dire_root', 45) core.skillModService.deductSkillMod(actor, 'bh_dire_snare', 45) diff --git a/scripts/buffs/set_bonus_hero_1.py b/scripts/buffs/set_bonus_hero_1.py index d84a60fc..c589b0f4 100644 --- a/scripts/buffs/set_bonus_hero_1.py +++ b/scripts/buffs/set_bonus_hero_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 60) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 60) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_2.py b/scripts/buffs/set_bonus_hero_2.py index 6c87d81e..630b0e30 100644 --- a/scripts/buffs/set_bonus_hero_2.py +++ b/scripts/buffs/set_bonus_hero_2.py @@ -1,11 +1,14 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 90) core.skillModService.addSkillMod(actor, 'agility_modified', 90) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 90) core.skillModService.deductSkillMod(actor, 'agility_modified', 90) return \ No newline at end of file diff --git a/scripts/buffs/set_bonus_hero_3.py b/scripts/buffs/set_bonus_hero_3.py index 11c03f31..d2755af3 100644 --- a/scripts/buffs/set_bonus_hero_3.py +++ b/scripts/buffs/set_bonus_hero_3.py @@ -1,12 +1,15 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'stamina_modified', 150) core.skillModService.addSkillMod(actor, 'agility_modified', 150) core.skillModService.addSkillMod(actor, 'constitution_modified', 150) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'stamina_modified', 150) core.skillModService.deductSkillMod(actor, 'agility_modified', 150) core.skillModService.deductSkillMod(actor, 'constitution_modified', 150) diff --git a/scripts/buffs/sm_ae_dm_cc_1.py b/scripts/buffs/sm_ae_dm_cc_1.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_1.py +++ b/scripts/buffs/sm_ae_dm_cc_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_2.py b/scripts/buffs/sm_ae_dm_cc_2.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_2.py +++ b/scripts/buffs/sm_ae_dm_cc_2.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_3.py b/scripts/buffs/sm_ae_dm_cc_3.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_3.py +++ b/scripts/buffs/sm_ae_dm_cc_3.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_4.py b/scripts/buffs/sm_ae_dm_cc_4.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_4.py +++ b/scripts/buffs/sm_ae_dm_cc_4.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_5.py b/scripts/buffs/sm_ae_dm_cc_5.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_5.py +++ b/scripts/buffs/sm_ae_dm_cc_5.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_ae_dm_cc_6.py b/scripts/buffs/sm_ae_dm_cc_6.py index 18da7f78..2ee81fe9 100644 --- a/scripts/buffs/sm_ae_dm_cc_6.py +++ b/scripts/buffs/sm_ae_dm_cc_6.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): - actor.setSpeedMultiplierBase(1) + return + +def add(core, actor, buff): + core.skillModService.deductSkillMod(actor, 'movement', 5) return -def removeBuff(core, actor, buff): - actor.setSpeedMultiplierBase(1) +def remove(core, actor, buff): + core.skillModService.addSkillMod(actor, 'movement', 5) return \ No newline at end of file diff --git a/scripts/buffs/sm_pistol_whip_1.py b/scripts/buffs/sm_pistol_whip_1.py index 5537d303..f83a6829 100644 --- a/scripts/buffs/sm_pistol_whip_1.py +++ b/scripts/buffs/sm_pistol_whip_1.py @@ -1,9 +1,12 @@ import sys def setup(core, actor, buff): + return + +def add(core, actor, buff): core.skillModService.addSkillMod(actor, 'sm_pistol_whip', 0) return -def removeBuff(core, actor, buff): +def remove(core, actor, buff): core.skillModService.deductSkillMod(actor, 'sm_pistol_whip', 0) return \ No newline at end of file diff --git a/scripts/collections/col_entertainer_01.py b/scripts/collections/col_entertainer_01.py new file mode 100644 index 00000000..100fa53e --- /dev/null +++ b/scripts/collections/col_entertainer_01.py @@ -0,0 +1,12 @@ +from java.lang import System +import sys + +def modify(core, actor, count): + return + +def complete(core, actor, collection): + ghost = actor.getSlottedObject('ghost') + + actor.sendSystemMessage('@collection_n:col_entertainer_01_finished', 0) + ghost.addAbility('bm_dancing_pet_entertainer') + return \ No newline at end of file diff --git a/scripts/commands/bandflourish.py b/scripts/commands/bandflourish.py index e30daa8f..446ceb72 100644 --- a/scripts/commands/bandflourish.py +++ b/scripts/commands/bandflourish.py @@ -31,15 +31,10 @@ def run(core, actor, target, commandString): if actor.getPerformanceId() <= 0: actor.sendSystemMessage('@performance:flourish_not_performing', 0) return - - animation = 'skill_action_' + str(flourish) - if flourish == 9: - animation = 'mistake' if actor.getAcceptBandflourishes(): actor.sendSystemMessage('@performance:flourish_perform_band_self', 0) - actor.sendSystemMessage('@performance:flourish_perform', 0) - actor.doSkillAnimation(animation) + core.entertainmentService.performFlourish(actor, flourish) group = core.objectService.getObject(actor.getGroupId()) if not group: @@ -50,8 +45,7 @@ def run(core, actor, target, commandString): continue if creature.getAcceptBandflourishes(): creature.sendSystemMessage('@performance:flourish_perform_band_member', 0) - creature.sendSystemMessage('@performance:flourish_perform', 0) - creature.doSkillAnimation(animation) + core.entertainmentService.performFlourish(creature, flourish) return diff --git a/scripts/commands/centerstage.py b/scripts/commands/centerstage.py new file mode 100644 index 00000000..362738c5 --- /dev/null +++ b/scripts/commands/centerstage.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 66: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'CenterStage', 'clienteffect/entertainer_center_stage.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_center_stage', 0) + return \ No newline at end of file diff --git a/scripts/commands/co_first_aid_training.py b/scripts/commands/co_first_aid_training.py index baf4621d..e185f733 100644 --- a/scripts/commands/co_first_aid_training.py +++ b/scripts/commands/co_first_aid_training.py @@ -4,6 +4,5 @@ def setup(): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'co_first_aid_training') return \ No newline at end of file diff --git a/scripts/commands/colorSwirl.py b/scripts/commands/colorSwirl.py new file mode 100644 index 00000000..cae47e72 --- /dev/null +++ b/scripts/commands/colorSwirl.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 34: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'ColorSwirl', 'clienteffect/entertainer_color_swirl.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_swirl', 0) + return \ No newline at end of file diff --git a/scripts/commands/colorlights.py b/scripts/commands/colorlights.py new file mode 100644 index 00000000..0708c4ea --- /dev/null +++ b/scripts/commands/colorlights.py @@ -0,0 +1,39 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'ColorLights1' + effect = 'clienteffect/entertainer_color_lights_level_1.cef' + rLevel = 4 # minimum level to perform this effect + + if commandString is None or commandString == '': + + if level >= 50: + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + + elif level >= 20: + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'ColorLights2' + effect = 'clienteffect/entertainer_color_lights_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'ColorLights3' + effect = 'clienteffect/entertainer_color_lights_level_3.cef' + rLevel = 50 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_color_lights', 0) + return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_1.py b/scripts/commands/combat/bh_dm_1.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_1.py +++ b/scripts/commands/combat/bh_dm_1.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_2.py b/scripts/commands/combat/bh_dm_2.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_2.py +++ b/scripts/commands/combat/bh_dm_2.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_3.py b/scripts/commands/combat/bh_dm_3.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_3.py +++ b/scripts/commands/combat/bh_dm_3.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_4.py b/scripts/commands/combat/bh_dm_4.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_4.py +++ b/scripts/commands/combat/bh_dm_4.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_5.py b/scripts/commands/combat/bh_dm_5.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_5.py +++ b/scripts/commands/combat/bh_dm_5.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_6.py b/scripts/commands/combat/bh_dm_6.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_6.py +++ b/scripts/commands/combat/bh_dm_6.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_7.py b/scripts/commands/combat/bh_dm_7.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_7.py +++ b/scripts/commands/combat/bh_dm_7.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_8.py b/scripts/commands/combat/bh_dm_8.py index 707a2c00..0506c54f 100644 --- a/scripts/commands/combat/bh_dm_8.py +++ b/scripts/commands/combat/bh_dm_8.py @@ -2,7 +2,11 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm')/10)) + + if actor.getSkillMod('expertise_damage_line_dm'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm'))/100)) + return def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_1.py b/scripts/commands/combat/bh_dm_crit_1.py index 94292ffd..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_1.py +++ b/scripts/commands/combat/bh_dm_crit_1.py @@ -2,7 +2,17 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/bh_dm_crit_2.py b/scripts/commands/combat/bh_dm_crit_2.py index 94292ffd..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_2.py +++ b/scripts/commands/combat/bh_dm_crit_2.py @@ -2,7 +2,17 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/bh_dm_crit_3.py b/scripts/commands/combat/bh_dm_crit_3.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_3.py +++ b/scripts/commands/combat/bh_dm_crit_3.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_4.py b/scripts/commands/combat/bh_dm_crit_4.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_4.py +++ b/scripts/commands/combat/bh_dm_crit_4.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_5.py b/scripts/commands/combat/bh_dm_crit_5.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_5.py +++ b/scripts/commands/combat/bh_dm_crit_5.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_6.py b/scripts/commands/combat/bh_dm_crit_6.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_6.py +++ b/scripts/commands/combat/bh_dm_crit_6.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_7.py b/scripts/commands/combat/bh_dm_crit_7.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_7.py +++ b/scripts/commands/combat/bh_dm_crit_7.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/bh_dm_crit_8.py b/scripts/commands/combat/bh_dm_crit_8.py index 94b54628..c12e2a2a 100644 --- a/scripts/commands/combat/bh_dm_crit_8.py +++ b/scripts/commands/combat/bh_dm_crit_8.py @@ -2,8 +2,18 @@ import sys def setup(core, actor, target, command): if actor.getSkillMod('expertise_cooldown_line_dm_crit'): - command.setCooldown(command.getCooldown() - (actor.getSkillMod('expertise_cooldown_line_dm_crit').getBase()/10)) + command.setCooldown(command.getCooldown() - (actor.getSkillModBase('expertise_cooldown_line_dm_crit')/10)) + + if actor.getSkillMod('expertise_damage_line_dm_crit'): + command.setAddedDamage(command.getAddedDamage() + ((command.getAddedDamage()*actor.getSkillModBase('expertise_damage_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_action_line_dm_crit'): + command.setActionCost(command.getActionCost() - ((command.getActionCost()*actor.getSkillModBase('expertise_action_line_dm_crit'))/100)) + + if actor.getSkillMod('expertise_critical_line_dm_crit'): + command.setCriticalChance(command.getCriticalChance + actor.getSkillModBase('expertise_critical_line_dm_crit')) + return - + def run(core, actor, target, commandString): return \ No newline at end of file diff --git a/scripts/commands/combat/en_spiral_kick_0.py b/scripts/commands/combat/en_spiral_kick_0.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_0.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + 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/en_spiral_kick_1.py b/scripts/commands/combat/en_spiral_kick_1.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + 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/en_spiral_kick_2.py b/scripts/commands/combat/en_spiral_kick_2.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + 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/en_spiral_kick_3.py b/scripts/commands/combat/en_spiral_kick_3.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + 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/en_spiral_kick_4.py b/scripts/commands/combat/en_spiral_kick_4.py new file mode 100644 index 00000000..eee76225 --- /dev/null +++ b/scripts/commands/combat/en_spiral_kick_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_spiral_kick_snare') + 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/en_thrill.py b/scripts/commands/combat/en_thrill.py new file mode 100644 index 00000000..868b6bed --- /dev/null +++ b/scripts/commands/combat/en_thrill.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill') + 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/en_thrill_1.py b/scripts/commands/combat/en_thrill_1.py new file mode 100644 index 00000000..c3fd3fc2 --- /dev/null +++ b/scripts/commands/combat/en_thrill_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_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/en_thrill_2.py b/scripts/commands/combat/en_thrill_2.py new file mode 100644 index 00000000..c3fd3fc2 --- /dev/null +++ b/scripts/commands/combat/en_thrill_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_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/en_thrill_3.py b/scripts/commands/combat/en_thrill_3.py new file mode 100644 index 00000000..2783c9d7 --- /dev/null +++ b/scripts/commands/combat/en_thrill_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_debuff_thrill_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/en_unhealthy_fixation.py b/scripts/commands/combat/en_unhealthy_fixation.py new file mode 100644 index 00000000..620dd09a --- /dev/null +++ b/scripts/commands/combat/en_unhealthy_fixation.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_unhealthy_fixation_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/en_void_dance.py b/scripts/commands/combat/en_void_dance.py new file mode 100644 index 00000000..2354238e --- /dev/null +++ b/scripts/commands/combat/en_void_dance.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff') + 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/en_void_dance_1.py b/scripts/commands/combat/en_void_dance_1.py new file mode 100644 index 00000000..cdc97c59 --- /dev/null +++ b/scripts/commands/combat/en_void_dance_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_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/en_void_dance_2.py b/scripts/commands/combat/en_void_dance_2.py new file mode 100644 index 00000000..186e477a --- /dev/null +++ b/scripts/commands/combat/en_void_dance_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_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/en_void_dance_3.py b/scripts/commands/combat/en_void_dance_3.py new file mode 100644 index 00000000..77d58c3d --- /dev/null +++ b/scripts/commands/combat/en_void_dance_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + core.buffService.addBuffToCreature(target, 'en_void_dance_buff_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/fs_dm_cc_crit_1.py b/scripts/commands/combat/fs_dm_cc_crit_1.py new file mode 100644 index 00000000..493481d7 --- /dev/null +++ b/scripts/commands/combat/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/commands/combat/fs_flurry_1.py b/scripts/commands/combat/fs_flurry_1.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_1.py +++ b/scripts/commands/combat/fs_flurry_1.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_2.py b/scripts/commands/combat/fs_flurry_2.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_2.py +++ b/scripts/commands/combat/fs_flurry_2.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_3.py b/scripts/commands/combat/fs_flurry_3.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_3.py +++ b/scripts/commands/combat/fs_flurry_3.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_4.py b/scripts/commands/combat/fs_flurry_4.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_4.py +++ b/scripts/commands/combat/fs_flurry_4.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_5.py b/scripts/commands/combat/fs_flurry_5.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_5.py +++ b/scripts/commands/combat/fs_flurry_5.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_6.py b/scripts/commands/combat/fs_flurry_6.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_6.py +++ b/scripts/commands/combat/fs_flurry_6.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_flurry_7.py b/scripts/commands/combat/fs_flurry_7.py index 1d6cd02c..5e5c429e 100644 --- a/scripts/commands/combat/fs_flurry_7.py +++ b/scripts/commands/combat/fs_flurry_7.py @@ -7,9 +7,6 @@ def setup(core, actor, target, command): if actor.getSkillMod('expertise_critical_line_fs_dm'): command.setCriticalChance(command.getCriticalChance() + actor.getSkillMod('expertise_critical_line_fs_dm').getBase()) - if actor.getSkillMod('expertise_action_line_fs_dm'): - command.setActionCost(command.getActionCost() - ((command.getActionCost() * actor.getSkillMod('expertise_action_line_fs_dm').getBase())/100)) - return def run(core, actor, target, commandString): diff --git a/scripts/commands/combat/fs_maelstrom_1.py b/scripts/commands/combat/fs_maelstrom_1.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_1.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_2.py b/scripts/commands/combat/fs_maelstrom_2.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_2.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_3.py b/scripts/commands/combat/fs_maelstrom_3.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_3.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_4.py b/scripts/commands/combat/fs_maelstrom_4.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_4.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/combat/fs_maelstrom_5.py b/scripts/commands/combat/fs_maelstrom_5.py new file mode 100644 index 00000000..70a66b61 --- /dev/null +++ b/scripts/commands/combat/fs_maelstrom_5.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, actor, target, command): + + if actor.getSkillMod('expertise_fs_dm_armor_bypass'): + command.setBypassArmor(actor.getSkillModBase("expertise_fs_dm_armor_bypass")) + + return + +def run(core, actor, target, commandString): + return \ No newline at end of file diff --git a/scripts/commands/covercharge.py b/scripts/commands/covercharge.py new file mode 100644 index 00000000..d0eae641 --- /dev/null +++ b/scripts/commands/covercharge.py @@ -0,0 +1,46 @@ +from services.sui import SUIWindow +from services.sui.SUIWindow import Trigger +from java.util import Vector +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + ghost = actor.getSlottedObject('ghost') + if ghost.getProfession() != 'entertainer_1a': + actor.sendSystemMessage('@performance:cc_no_skill', 0) + return + if commandString == '0': + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + + if commandString == None or commandString == '': + window = core.suiService.createInputBox(2, '@performance:cc_set_title', '@performance:cc_set_prompt', actor, None, 10, handleCoverCharge) + window.setProperty('txtInput:NumericInteger', 'true') + window.setProperty('txtInput:MaxLength', '12') + core.suiService.openSUIWindow(window) + return + else: + try: + actor.setCoverCharge(int(commandString)) + actor.sendSystemMessage('You are now charging a cover of ' + commandString + ' credit(s).', 0) + except ValueError: + return + return + return + +def handleCoverCharge(actor, window, eventType, returnList): + if eventType == 0 and len(returnList) == 1: + charge = returnList.get(0) + if charge == "0": + actor.setCoverCharge(0) + actor.sendSystemMessage('@performance:cc_stop_charge', 0) + return + else: + actor.setCoverCharge(charge) + actor.sendSystemMessage('You are now charging a cover of ' + returnList.get(0) + ' credits(s).', 0) + return + return + return \ No newline at end of file diff --git a/scripts/commands/dazzle.py b/scripts/commands/dazzle.py new file mode 100644 index 00000000..03e79b11 --- /dev/null +++ b/scripts/commands/dazzle.py @@ -0,0 +1,39 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Dazzle1' + effect = 'clienteffect/entertainer_dazzle_level_1.cef' + rLevel = 10 # minimum level to perform this effect + + if commandString is None or commandString == '': + + if level >= 30: + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + + elif level >= 20: + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Dazzle2' + effect = 'clienteffect/entertainer_dazzle_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'Dazzle3' + effect = 'clienteffect/entertainer_dazzle_level_3.cef' + rLevel = 30 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_dazzle', 0) + return \ No newline at end of file diff --git a/scripts/commands/distract.py b/scripts/commands/distract.py new file mode 100644 index 00000000..ec57828b --- /dev/null +++ b/scripts/commands/distract.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Distract1' + effect = 'clienteffect/entertainer_distract_level_1.cef' + rLevel = 18 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 75: + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + + elif level >= 50: + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Distract2' + effect = 'clienteffect/entertainer_distract_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'Distract3' + effect = 'clienteffect/entertainer_distract_level_3.cef' + rLevel = 75 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_distract', 0) + return \ No newline at end of file diff --git a/scripts/commands/duel.py b/scripts/commands/duel.py index 4ce25bdf..cd26b240 100644 --- a/scripts/commands/duel.py +++ b/scripts/commands/duel.py @@ -22,6 +22,7 @@ def run(core, actor, target, commandString): if actor.getDuelList().contains(target): actor.sendSystemMessage('You already challenged ' + target.getCustomName() + ' to a duel.', 0) + return combatSvc.handleDuel(actor, target) diff --git a/scripts/commands/eject.py b/scripts/commands/eject.py new file mode 100644 index 00000000..eafbd1f0 --- /dev/null +++ b/scripts/commands/eject.py @@ -0,0 +1,8 @@ +import sys + +def run(core, actor, target, commandString): + instSvc = core.instanceService + + if instSvc.isInInstance(actor): + instSvc.remove(instSvc.getActiveInstance(actor), actor) + diff --git a/scripts/commands/en_action_regen.py b/scripts/commands/en_action_regen.py new file mode 100644 index 00000000..c6905572 --- /dev/null +++ b/scripts/commands/en_action_regen.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_action_regen') + return \ No newline at end of file diff --git a/scripts/commands/en_sprint_1.py b/scripts/commands/en_sprint_1.py new file mode 100644 index 00000000..1393d38e --- /dev/null +++ b/scripts/commands/en_sprint_1.py @@ -0,0 +1,8 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + core.buffService.addBuffToCreature(actor, 'en_sprint') + return \ No newline at end of file diff --git a/scripts/commands/featuredSolo.py b/scripts/commands/featuredSolo.py new file mode 100644 index 00000000..e7e943b0 --- /dev/null +++ b/scripts/commands/featuredSolo.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 90: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'FeaturedSolo', 'clienteffect/entertainer_featured_solo.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_featured_solo', 0) + return \ No newline at end of file diff --git a/scripts/commands/firejet.py b/scripts/commands/firejet.py new file mode 100644 index 00000000..26261d56 --- /dev/null +++ b/scripts/commands/firejet.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'FireJets1' + effect = 'clienteffect/entertainer_fire_jets_level_1.cef' + rLevel = 26 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 75: + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + + elif level >= 50: + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'FireJets2' + effect = 'clienteffect/entertainer_fire_jets_level_2.cef' + rLevel = 50 + + elif commandString == '3': + command = 'FireJets3' + effect = 'clienteffect/entertainer_fire_jets_level_3.cef' + rLevel = 75 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets', 0) + return \ No newline at end of file diff --git a/scripts/commands/firejet2.py b/scripts/commands/firejet2.py new file mode 100644 index 00000000..f51758fb --- /dev/null +++ b/scripts/commands/firejet2.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 76: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'FireJetsB', 'clienteffect/entertainer_fire_jets2.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_fire_jets_2', 0) + return \ No newline at end of file diff --git a/scripts/commands/floorLights.py b/scripts/commands/floorLights.py new file mode 100644 index 00000000..d69f30e8 --- /dev/null +++ b/scripts/commands/floorLights.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 82: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'DanceFloor', 'clienteffect/entertainer_dance_floor.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_dance_floor', 0) + return \ No newline at end of file diff --git a/scripts/commands/flourish.py b/scripts/commands/flourish.py index 37c26077..0ec20d6b 100644 --- a/scripts/commands/flourish.py +++ b/scripts/commands/flourish.py @@ -22,11 +22,5 @@ def run(core, actor, target, commandString): if actor.getPerformanceId() <= 0: actor.sendSystemMessage('@performance:flourish_not_performing', 0) return - - actor.incFlourishCount() - actor.sendSystemMessage('@performance:flourish_perform', 0) - animation = 'skill_action_' + str(flourish) - if flourish == 9: - animation = 'mistake' - actor.doSkillAnimation(animation) + core.entertainmentService.performFlourish(actor, flourish) \ No newline at end of file diff --git a/scripts/commands/giveitem.py b/scripts/commands/giveitem.py index de894888..8279dc05 100644 --- a/scripts/commands/giveitem.py +++ b/scripts/commands/giveitem.py @@ -2,23 +2,23 @@ import sys def setup(): return - + def run(core, actor, target, commandString): - + if actor.getClient() and actor.getClient().isGM() == False: return - + if not commandString.startswith('object/tangible') and not commandString.startswith('object/weapon'): return - + object = core.objectService.createObject(commandString, actor.getPlanet()) if not object: return - + inventory = actor.getSlottedObject('inventory') - + if inventory: inventory.add(object) - + return \ No newline at end of file diff --git a/scripts/commands/inspire.py b/scripts/commands/inspire.py index 46a97aaf..dea0e544 100644 --- a/scripts/commands/inspire.py +++ b/scripts/commands/inspire.py @@ -7,12 +7,11 @@ def setup(): def run(core, actor, target, commandString): playerObject = actor.getSlottedObject('ghost') - print playerObject.getProfession() + if not playerObject or playerObject.getProfession() != "entertainer_1a": return if target is None or actor.getObjectId() == target.getObjectId(): - print ('Buffing Player: ' + str(target.getObjectId()) + ' or: ' + target.getCustomName()) openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), actor.getObjectId()) objController = ObjControllerMessage(11, openBuffWindow) actor.getClient().getSession().write(objController.serialize()) @@ -29,13 +28,16 @@ def run(core, actor, target, commandString): else: actor.sendSystemMessage('@performance:insp_buff_must_listen', 2) return - - print ('Buffing Player: ' + str(target.getObjectId()) + ' or: ' + target.getCustomName()) - openBuffWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) - objController = ObjControllerMessage(11, openBuffWindow) + + if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to inspire.', 0) + return + + builderWindow = BuffBuilderStartMessage(actor.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController = ObjControllerMessage(11, builderWindow) actor.getClient().getSession().write(objController.serialize()) - openBuffWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) - objController2 = ObjControllerMessage(11, openBuffWindow) + recipientWindow = BuffBuilderStartMessage(target.getObjectId(), actor.getObjectId(), target.getObjectId()) + objController2 = ObjControllerMessage(11, recipientWindow) target.getClient().getSession().write(objController2.serialize()) return diff --git a/scripts/commands/laserShow.py b/scripts/commands/laserShow.py new file mode 100644 index 00000000..df9af800 --- /dev/null +++ b/scripts/commands/laserShow.py @@ -0,0 +1,14 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + + if actor.getLevel() < 42: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, 'LaserShow', 'clienteffect/entertainer_laser_show.cef', target) is True: + actor.sendSystemMessage('@performance:effect_perform_laser_show', 0) + return diff --git a/scripts/commands/me_buff_health_1.py b/scripts/commands/me_buff_health_1.py index 1bbefb27..fb9880d2 100644 --- a/scripts/commands/me_buff_health_1.py +++ b/scripts/commands/me_buff_health_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_2.py b/scripts/commands/me_buff_health_2.py index dad03f73..dd4c396c 100644 --- a/scripts/commands/me_buff_health_2.py +++ b/scripts/commands/me_buff_health_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health_2') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_buff_health_3.py b/scripts/commands/me_buff_health_3.py index 7dce8f50..26ec110f 100644 --- a/scripts/commands/me_buff_health_3.py +++ b/scripts/commands/me_buff_health_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_health_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_health_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_health_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_health_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_1.py b/scripts/commands/me_enhance_action_1.py index db09845c..9239af4d 100644 --- a/scripts/commands/me_enhance_action_1.py +++ b/scripts/commands/me_enhance_action_1.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_1') + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_1', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_2.py b/scripts/commands/me_enhance_action_2.py index cc476e94..1c9b8dff 100644 --- a/scripts/commands/me_enhance_action_2.py +++ b/scripts/commands/me_enhance_action_2.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_2') + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_2', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_action_3.py b/scripts/commands/me_enhance_action_3.py index e945d92c..a4d9dd4a 100644 --- a/scripts/commands/me_enhance_action_3.py +++ b/scripts/commands/me_enhance_action_3.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_action_3') + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_action_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_action_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_action_3', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_1.py b/scripts/commands/me_enhance_agility_1.py index 5f489803..50b163ac 100644 --- a/scripts/commands/me_enhance_agility_1.py +++ b/scripts/commands/me_enhance_agility_1.py @@ -4,6 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_1') + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_1', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_2.py b/scripts/commands/me_enhance_agility_2.py index f3935dcb..0df03459 100644 --- a/scripts/commands/me_enhance_agility_2.py +++ b/scripts/commands/me_enhance_agility_2.py @@ -1,9 +1,19 @@ import sys def setup(core, actor, buff): - return + return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_2') + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_2', actor) + return \ No newline at end of file diff --git a/scripts/commands/me_enhance_agility_3.py b/scripts/commands/me_enhance_agility_3.py index e1dfd7fd..fe489909 100644 --- a/scripts/commands/me_enhance_agility_3.py +++ b/scripts/commands/me_enhance_agility_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_agility_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_agility_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_agility_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_agility_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_block_1.py b/scripts/commands/me_enhance_block_1.py index c2758143..d1f27220 100644 --- a/scripts/commands/me_enhance_block_1.py +++ b/scripts/commands/me_enhance_block_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_melee_gb_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_melee_gb_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_melee_gb_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_dodge_1.py b/scripts/commands/me_enhance_dodge_1.py index bb1a034e..9702a6f3 100644 --- a/scripts/commands/me_enhance_dodge_1.py +++ b/scripts/commands/me_enhance_dodge_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_ranged_gb_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_ranged_gb_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_ranged_gb_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_1.py b/scripts/commands/me_enhance_precision_1.py index 398e39fa..a5ddce5a 100644 --- a/scripts/commands/me_enhance_precision_1.py +++ b/scripts/commands/me_enhance_precision_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_2.py b/scripts/commands/me_enhance_precision_2.py index a9bba8a5..9c6906d2 100644 --- a/scripts/commands/me_enhance_precision_2.py +++ b/scripts/commands/me_enhance_precision_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_2') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_precision_3.py b/scripts/commands/me_enhance_precision_3.py index 8f218b1c..a4997749 100644 --- a/scripts/commands/me_enhance_precision_3.py +++ b/scripts/commands/me_enhance_precision_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_precision_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_precision_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_precision_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_precision_3', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_1.py b/scripts/commands/me_enhance_strength_1.py index 6ed252e5..cf3529bc 100644 --- a/scripts/commands/me_enhance_strength_1.py +++ b/scripts/commands/me_enhance_strength_1.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_1') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_1', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_1', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_1', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_2.py b/scripts/commands/me_enhance_strength_2.py index b56331fe..13ddfe22 100644 --- a/scripts/commands/me_enhance_strength_2.py +++ b/scripts/commands/me_enhance_strength_2.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_2', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_2', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_2', actor) + + return + \ No newline at end of file diff --git a/scripts/commands/me_enhance_strength_3.py b/scripts/commands/me_enhance_strength_3.py index b56331fe..2a822999 100644 --- a/scripts/commands/me_enhance_strength_3.py +++ b/scripts/commands/me_enhance_strength_3.py @@ -4,5 +4,16 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addGroupBuff(actor, 'me_buff_strength_3') - return \ No newline at end of file + + group = core.objectService.getObject(actor.getGroupId()) + + if target and target.getSlottedObject("ghost"): + if group and target in group.getMemberList(): + core.buffService.addGroupBuff(target, 'me_buff_strength_3', actor) + else: + core.buffService.addBuffToCreature(target, 'me_buff_strength_3', actor) + else: + core.buffService.addGroupBuff(actor, 'me_buff_strength_3', actor) + + 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 index d7403af1..90af7887 100644 --- a/scripts/commands/of_buff_def_1.py +++ b/scripts/commands/of_buff_def_1.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index cd5fd42d..1627ed3c 100644 --- a/scripts/commands/of_buff_def_2.py +++ b/scripts/commands/of_buff_def_2.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 85b34c54..1936f539 100644 --- a/scripts/commands/of_buff_def_3.py +++ b/scripts/commands/of_buff_def_3.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 0831b80f..0d047c07 100644 --- a/scripts/commands/of_buff_def_4.py +++ b/scripts/commands/of_buff_def_4.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index f3577253..2e21de66 100644 --- a/scripts/commands/of_buff_def_5.py +++ b/scripts/commands/of_buff_def_5.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 890aea37..80517962 100644 --- a/scripts/commands/of_buff_def_6.py +++ b/scripts/commands/of_buff_def_6.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 7235a9a0..4d0fe8ba 100644 --- a/scripts/commands/of_buff_def_7.py +++ b/scripts/commands/of_buff_def_7.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 3ef2ec72..b5d13337 100644 --- a/scripts/commands/of_buff_def_8.py +++ b/scripts/commands/of_buff_def_8.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index ecf3917c..1b09914e 100644 --- a/scripts/commands/of_buff_def_9.py +++ b/scripts/commands/of_buff_def_9.py @@ -4,9 +4,6 @@ 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') + core.buffService.addGroupBuff(actor, '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 index 8a1c683d..b2a3524e 100644 --- a/scripts/commands/of_charge_1.py +++ b/scripts/commands/of_charge_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_charge_1') + core.buffService.addGroupBuff(actor, 'of_charge_1') return \ No newline at end of file diff --git a/scripts/commands/of_drillmaster_1.py b/scripts/commands/of_drillmaster_1.py index 0b448c2b..00c17c70 100644 --- a/scripts/commands/of_drillmaster_1.py +++ b/scripts/commands/of_drillmaster_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_drillmaster_1') + core.buffService.addGroupBuff(actor, 'of_drillmaster_1') 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 index d3a2cfb8..dbd564ec 100644 --- a/scripts/commands/of_focus_fire_1.py +++ b/scripts/commands/of_focus_fire_1.py @@ -4,11 +4,6 @@ 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()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_1') - return + core.buffService.addGroupBuff(actor, '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 index cafae5bd..406fb584 100644 --- a/scripts/commands/of_focus_fire_2.py +++ b/scripts/commands/of_focus_fire_2.py @@ -4,11 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_2') - group = core.objectService.getObject(actor.getGroupId()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_2') - return + core.buffService.addGroupBuff(actor, '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 index 75129446..ea194a77 100644 --- a/scripts/commands/of_focus_fire_3.py +++ b/scripts/commands/of_focus_fire_3.py @@ -4,11 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_3') - group = core.objectService.getObject(actor.getGroupId()) - if group is not None: - for creature in group.getMemberList(): - core.buffService.addBuffToCreature(creature, 'of_focus_fire_3') - return + core.buffService.addGroupBuff(actor, '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 index a5fa51f9..d4645925 100644 --- a/scripts/commands/of_focus_fire_4.py +++ b/scripts/commands/of_focus_fire_4.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, '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 index a5fa51f9..1ff3a903 100644 --- a/scripts/commands/of_focus_fire_5.py +++ b/scripts/commands/of_focus_fire_5.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, '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 index a5fa51f9..834a0d25 100644 --- a/scripts/commands/of_focus_fire_6.py +++ b/scripts/commands/of_focus_fire_6.py @@ -4,5 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_focus_fire_1') - return \ No newline at end of file + core.buffService.addGroupBuff(actor, '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 index 001b0e69..9f0c3a20 100644 --- a/scripts/commands/of_inspiration_1.py +++ b/scripts/commands/of_inspiration_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_1') + core.buffService.addGroupBuff(actor, '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 index 01dbef43..c7ffcb5e 100644 --- a/scripts/commands/of_inspiration_2.py +++ b/scripts/commands/of_inspiration_2.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_2') + core.buffService.addGroupBuff(actor, '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 index a1d2296f..fd2e8b80 100644 --- a/scripts/commands/of_inspiration_3.py +++ b/scripts/commands/of_inspiration_3.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_3') + core.buffService.addGroupBuff(actor, '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 index d1954310..35bae1ab 100644 --- a/scripts/commands/of_inspiration_4.py +++ b/scripts/commands/of_inspiration_4.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_4') + core.buffService.addGroupBuff(actor, '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 index e2d35933..f9c9ba48 100644 --- a/scripts/commands/of_inspiration_5.py +++ b/scripts/commands/of_inspiration_5.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_5') + core.buffService.addGroupBuff(actor, '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 index c73a2000..ca05422d 100644 --- a/scripts/commands/of_inspiration_6.py +++ b/scripts/commands/of_inspiration_6.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_inspiration_6') + core.buffService.addGroupBuff(actor, 'of_inspiration_6') return \ No newline at end of file diff --git a/scripts/commands/of_scatter_1.py b/scripts/commands/of_scatter_1.py index 8ee17071..e4f86354 100644 --- a/scripts/commands/of_scatter_1.py +++ b/scripts/commands/of_scatter_1.py @@ -4,6 +4,6 @@ def setup(core, actor, buff): return def run(core, actor, target, commandString): - core.buffService.addBuffToCreature(actor, 'of_scatter_1') + core.buffService.addGroupBuff(actor, 'of_scatter_1') return \ No newline at end of file diff --git a/scripts/commands/setcurrentskilltitle.py b/scripts/commands/setcurrentskilltitle.py index 43e9e5f4..160c9091 100644 --- a/scripts/commands/setcurrentskilltitle.py +++ b/scripts/commands/setcurrentskilltitle.py @@ -11,5 +11,6 @@ def run(core, actor, target, commandString): if playerObject is None: return - playerObject.setTitle(str(commandString)) + if str(commandString) in playerObject.getTitleList() or str(commandString) == "citizenship" or str(commandString) == "": playerObject.setTitle(str(commandString)) + return \ No newline at end of file diff --git a/scripts/commands/smokebomb.py b/scripts/commands/smokebomb.py new file mode 100644 index 00000000..a9da5abb --- /dev/null +++ b/scripts/commands/smokebomb.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'SmokeBomb1' + effect = 'clienteffect/entertainer_smoke_bomb_level_1.cef' + rLevel = 50 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 90: + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + + elif level >= 75: + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'SmokeBomb2' + effect = 'clienteffect/entertainer_smoke_bomb_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'SmokeBomb3' + effect = 'clienteffect/entertainer_smoke_bomb_level_3.cef' + rLevel = 90 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_smoke_bomb', 0) + return \ No newline at end of file diff --git a/scripts/commands/spotlight.py b/scripts/commands/spotlight.py new file mode 100644 index 00000000..204c0017 --- /dev/null +++ b/scripts/commands/spotlight.py @@ -0,0 +1,39 @@ +from protocol.swg import PlayClientEffectObjectMessage +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'SpotLight1' + effect = 'clienteffect/entertainer_spot_light_level_1.cef' + rLevel = 1 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 30: + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + + elif level >= 20: + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'SpotLight2' + effect = 'clienteffect/entertainer_spot_light_level_2.cef' + rLevel = 20 + + elif commandString == '3': + command = 'SpotLight3' + effect = 'clienteffect/entertainer_spot_light_level_3.cef' + rLevel = 30 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, None) is True: + actor.sendSystemMessage('@performance:effect_perform_spot_light', 0) + return diff --git a/scripts/commands/startdance.py b/scripts/commands/startdance.py index bae424d8..13aba090 100644 --- a/scripts/commands/startdance.py +++ b/scripts/commands/startdance.py @@ -4,6 +4,7 @@ from services.sui.SUIWindow import Trigger from services.sui.SUIService import ListBoxType from java.util import Vector from java.util import HashMap +from resources.datatables import Posture import sys def setup(): @@ -26,7 +27,6 @@ def run(core, actor, target, commandString): else: availableDances = entSvc.getAvailableDances(actor) - print availableDances suiSvc = core.suiService suiWindow = suiSvc.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@performance:select_dance", "@performance:available_dances", availableDances, actor, None, 10) @@ -74,8 +74,12 @@ def startDance(core, actor, danceName, visual): actor.sendSystemMessage('@performance:already_performing_self',0) return - #TODO: check costume, posture, etc? - + #TODO: check costume + + if actor.getPosture() != Posture.Upright: + actor.sendSystemMessage('@performance:dance_fail', 0) + return + actor.sendSystemMessage('@performance:dance_start_self',0); # i'm not sure about this. i think stopping just stopped any watchers anyways # method doesn't exist now. @@ -92,7 +96,7 @@ def startDance(core, actor, danceName, visual): actor.setPosture(0x09); playerObject = actor.getSlottedObject('ghost') - if playerObject and playerObject.getProfession() == "entertainer_1a": + if playerObject and playerObject.getProfession() == "entertainer_1a" and actor.getLevel() != 90: entSvc.startPerformanceExperience(actor) dance = entSvc.getDance(visual) diff --git a/scripts/commands/stopwatching.py b/scripts/commands/stopwatching.py index 7dc96fc8..23a36c17 100644 --- a/scripts/commands/stopwatching.py +++ b/scripts/commands/stopwatching.py @@ -4,12 +4,14 @@ def setup(): return def run(core, actor, target, commandString): - dancer = actor.getPerformanceWatchee() - if not dancer: - return - + performer = target + if commandString is not None and target is None: + performer = core.chatService.getObjectByFirstName(commandString) + + if performer is None: + return + performer.removeAudience(actor) actor.setPerformanceWatchee(None) - dancer.removeAudience(actor) if not actor.getPerformanceListenee(): actor.setMoodAnimation('') diff --git a/scripts/commands/transferitemarmor.py b/scripts/commands/transferitemarmor.py index bfd8486d..2edbec74 100644 --- a/scripts/commands/transferitemarmor.py +++ b/scripts/commands/transferitemarmor.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index ee205206..5dc726fd 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/scripts/commands/transferitemweapon.py b/scripts/commands/transferitemweapon.py index 2640ac0c..6e356571 100644 --- a/scripts/commands/transferitemweapon.py +++ b/scripts/commands/transferitemweapon.py @@ -5,6 +5,7 @@ def setup(): def run(core, actor, target, commandString): if core.equipmentService.canEquip(actor, target) is False: + actor.sendSystemMessage('@error_message:insufficient_skill', 0) return diff --git a/scripts/commands/ventriloquism.py b/scripts/commands/ventriloquism.py new file mode 100644 index 00000000..1781fbd1 --- /dev/null +++ b/scripts/commands/ventriloquism.py @@ -0,0 +1,38 @@ +import sys + +def setup(): + return + +def run(core, actor, target, commandString): + level = actor.getLevel() + command = 'Ventriloquism1' + effect = 'clienteffect/entertainer_ventriloquism_level_1.cef' + rLevel = 58 # minimum level to perform this effect + + if commandString is None or commandString == '': + if level >= 90: + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + + elif level >= 75: + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + + if commandString is not None: + if commandString == '2': + command = 'Ventriloquism2' + effect = 'clienteffect/entertainer_ventriloquism_level_2.cef' + rLevel = 75 + + elif commandString == '3': + command = 'Ventriloquism3' + effect = 'clienteffect/entertainer_ventriloquism_level_3.cef' + rLevel = 90 + + if level < rLevel: + actor.sendSystemMessage('@performance:effect_lack_skill_self', 0) + return + + if core.entertainmentService.performEffect(actor, command, effect, target) is True: + actor.sendSystemMessage('@performance:effect_perform_ventriloquism', 0) + return \ No newline at end of file diff --git a/scripts/commands/watch.py b/scripts/commands/watch.py index 5658d8fb..07ca268d 100644 --- a/scripts/commands/watch.py +++ b/scripts/commands/watch.py @@ -4,31 +4,32 @@ def setup(): return def run(core, actor, target, commandString): - if not target: - #FIXME: should accept name as a parameter. - # since that probably needs support in many places, - # best find a generic place for it in the server code - return + entSvc = core.entertainmentService + + if not target and commandString is not None: + target = core.chatService.getObjectByFirstName(commandString) + + if target is None: + return - if not target.isPlayer(): - actor.sendSystemMessage('@performance:dance_watch_npc') - return + if target.getPosition().getDistance2D(actor.getWorldPosition()) > float(20): + actor.sendSystemMessage(target.getCustomName() + ' is too far away to watch.', 0) + return - entSvc = core.entertainmentService - perf = entSvc.getPerformanceByIndex(target.getPerformanceId()) + if not target.isPlayer(): + actor.sendSystemMessage('@performance:dance_watch_npc', 0) + return - if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: - actor.sendSystemMessage('@performance:dance_watch_not_dancing',0) - return - - oldWatchee = actor.getPerformanceWatchee() - if oldWatchee and oldWatchee != target: - oldWatchee.removeAudience(actor) - - actor.setPerformanceWatchee(target) - target.addAudience(actor) - actor.setMoodAnimation('entertained') - actor.sendSystemMessage('@performance:dance_watch_self',0) - return + perf = entSvc.getPerformanceByIndex(target.getPerformanceId()) + if target.getPosture() != 0x09 or not perf or perf.getDanceVisualId() < 0: + actor.sendSystemMessage(target.getCustomName() + ' is not dancing.',0) + return + + if target.getCoverCharge() > 0 or target.getCoverCharge() == None: + core.entertainmentService.handleCoverCharge(actor, target) + return + else: + core.entertainmentService.startSpectating(actor, target, True) + return \ No newline at end of file diff --git a/scripts/equipment/force_protection.py b/scripts/equipment/force_protection.py new file mode 100644 index 00000000..c5fd6ce0 --- /dev/null +++ b/scripts/equipment/force_protection.py @@ -0,0 +1,32 @@ +import sys + +def jedi_robe_Faint(): + return 1400 + +def jedi_robe_Weak(): + return 3000 + +def jedi_robe_Lucent(): + return 4000 + +def jedi_robe_Luminous(): + return 5000 + +def jedi_robe_Radiant(): + return 6500 + +def jedi_cloak_Faint(): + return 0 + +def jedi_cloak_Weak(): + return 0 + +def jedi_cloak_Lucent(): + return 4500 + +def jedi_cloak_Luminous(): + return 5600 + +def jedi_cloak_Radiant(): + return 6500 + \ No newline at end of file diff --git a/scripts/equipment/weapon_critical.py b/scripts/equipment/weapon_critical.py new file mode 100644 index 00000000..683c4692 --- /dev/null +++ b/scripts/equipment/weapon_critical.py @@ -0,0 +1,25 @@ +import sys + +def Rifle(): + return "expertise_critical_rifle" + +def Carbine(): + return "expertise_critical_carbine" + +def Pistol(): + return "expertise_critical_pistol" + +def OneHandedMelee(): + return "expertise_critical_1h" + +def TwoHandedMelee(): + return "expertise_critical_2h" + +def Unarmed(): + return "expertise_critical_unarmed" + +def Polearm(): + return "expertise_critical_polearm" + +def FreeTargetingHeavyWeapon(): + return "expertise_critical_heavy" diff --git a/scripts/expertise/expertise_en_holographic_mastery_1.py b/scripts/expertise/expertise_en_holographic_mastery_1.py index 59a4c40a..e705762e 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_1.py +++ b/scripts/expertise/expertise_en_holographic_mastery_1.py @@ -10,7 +10,7 @@ def addExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.addSkill('expertise_en_holographic_mastery_1') + core.services.skillModService.addSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) addAbilities(core, actor, player) return @@ -25,7 +25,7 @@ def removeExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.removeSkill('expertise_en_holographic_mastery_1') + core.services.skillModService.deductSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) removeAbilities(core, actor, player) diff --git a/scripts/expertise/expertise_en_holographic_mastery_2.py b/scripts/expertise/expertise_en_holographic_mastery_2.py index 72a8e391..e705762e 100644 --- a/scripts/expertise/expertise_en_holographic_mastery_2.py +++ b/scripts/expertise/expertise_en_holographic_mastery_2.py @@ -10,7 +10,7 @@ def addExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.addSkill('expertise_en_holographic_mastery_2') + core.services.skillModService.addSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) addAbilities(core, actor, player) return @@ -25,7 +25,7 @@ def removeExpertisePoint(core, actor): if not player.getProfession() == 'entertainer_1a': return - actor.removeSkill('expertise_en_holographic_mastery_2') + core.services.skillModService.deductSkillMod(actor, 'expertise_en_holographic_additional_backup', 1) removeAbilities(core, actor, player) diff --git a/scripts/expertise/expertise_en_intense_performer_1.py b/scripts/expertise/expertise_en_intense_performer_1.py index cf9f9699..8925253a 100644 --- a/scripts/expertise/expertise_en_intense_performer_1.py +++ b/scripts/expertise/expertise_en_intense_performer_1.py @@ -11,8 +11,8 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_1') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) - return def removeExpertisePoint(core, actor): @@ -26,9 +26,8 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_1') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) - return # this checks what abilities the player gets by level, need to also call this on level-up diff --git a/scripts/expertise/expertise_en_intense_performer_2.py b/scripts/expertise/expertise_en_intense_performer_2.py index 0582a021..f0327c0c 100644 --- a/scripts/expertise/expertise_en_intense_performer_2.py +++ b/scripts/expertise/expertise_en_intense_performer_2.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_2') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_2') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_intense_performer_3.py b/scripts/expertise/expertise_en_intense_performer_3.py index 5ee49acf..ac3eb24a 100644 --- a/scripts/expertise/expertise_en_intense_performer_3.py +++ b/scripts/expertise/expertise_en_intense_performer_3.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_3') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_3') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_intense_performer_4.py b/scripts/expertise/expertise_en_intense_performer_4.py index 29b5eb73..5e316992 100644 --- a/scripts/expertise/expertise_en_intense_performer_4.py +++ b/scripts/expertise/expertise_en_intense_performer_4.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_intense_performer_4') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_intense_performer_4') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_pulse_duration_increase', 1) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_1.py b/scripts/expertise/expertise_en_lasting_impression_1.py index 960c9b75..1ce042fc 100644 --- a/scripts/expertise/expertise_en_lasting_impression_1.py +++ b/scripts/expertise/expertise_en_lasting_impression_1.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_1') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_1') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_2.py b/scripts/expertise/expertise_en_lasting_impression_2.py index 0ef56c25..5daf6031 100644 --- a/scripts/expertise/expertise_en_lasting_impression_2.py +++ b/scripts/expertise/expertise_en_lasting_impression_2.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_2') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_2') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_3.py b/scripts/expertise/expertise_en_lasting_impression_3.py index 74107ef2..8a4642bd 100644 --- a/scripts/expertise/expertise_en_lasting_impression_3.py +++ b/scripts/expertise/expertise_en_lasting_impression_3.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_3') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_3') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/expertise/expertise_en_lasting_impression_4.py b/scripts/expertise/expertise_en_lasting_impression_4.py index b71d1b91..086a38c9 100644 --- a/scripts/expertise/expertise_en_lasting_impression_4.py +++ b/scripts/expertise/expertise_en_lasting_impression_4.py @@ -11,6 +11,7 @@ def addExpertisePoint(core, actor): return actor.addSkill('expertise_en_lasting_impression_4') + core.skillModService.addSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) addAbilities(core, actor, player) return @@ -26,7 +27,7 @@ def removeExpertisePoint(core, actor): return actor.removeSkill('expertise_en_lasting_impression_4') - + core.skillModService.deductSkillMod(actor, 'expertise_en_inspire_buff_duration_increase', 30) removeAbilities(core, actor, player) return diff --git a/scripts/instances/heroic_exar_kun.py b/scripts/instances/heroic_exar_kun.py new file mode 100644 index 00000000..d961fee0 --- /dev/null +++ b/scripts/instances/heroic_exar_kun.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/heroic/shared_exar_kun_tomb.iff' + +def getCellId(): + return 1 + +def getSpawnPosition(position): + position.x = float(-11.918457) + position.y = float(0.601063) + position.z = float(-125.692871) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/yavin4.trn' + +def getExitPosition(position): + position.x = float(5097) + position.y = float(0) + position.z = float(5537) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/instances/heroic_star_destroyer.py b/scripts/instances/heroic_star_destroyer.py new file mode 100644 index 00000000..2109ea39 --- /dev/null +++ b/scripts/instances/heroic_star_destroyer.py @@ -0,0 +1,53 @@ +import sys +import services.InstanceService.Instance + +def getTerrain(): + return 'terrain/dungeon1.trn' + +def getBuilding(): + return 'object/building/general/shared_space_dungeon_star_destroyer.iff' + +def getCellId(): + return 36 + +def getSpawnPosition(position): + position.x = float(0) + position.y = float(173.834625) + position.z = float(30) + return + +def getDuration(): + return 120 + +# NK lockout time was 30 minutes. Most instances were 0 and got reset at 12AM PTC. +def getLockoutTime(): + return 0 + +def getExitTerrain(): + return 'terrain/corellia.trn' + +def getExitPosition(position): + position.x = float(-131) + position.y = float(0) + position.z = float(-4723) + return + +# Called on instance creation to spawn npcs and objects. +def setup(core, instance): + return + +# Called when there is a new participant added to the instance. +def add(core, instance, actor): + return + +# Called when a participant is removed from the instance. +def remove(core, instance, actor): + return + +# Any operations that need to be carried out regularly +def run(core, instance): + return + +# Called on instance destruction to destroy the instance. +def destroy(core, instance): + return \ No newline at end of file diff --git a/scripts/object/building/military/outpost_cloning_facility.py b/scripts/object/building/military/outpost_cloning_facility.py index c3d8cb98..e9fd684a 100644 --- a/scripts/object/building/military/outpost_cloning_facility.py +++ b/scripts/object/building/military/outpost_cloning_facility.py @@ -4,10 +4,10 @@ from resources.common import SpawnPoint def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.0387871), float(0.125265), float(-6), float(-0.0595427), float(0.998226), 3) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(0.04), float(0.16), float(-6), float(-0.06), float(0.99), 3) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(3.2408, 0.125266, -3.59732, 0.707641, -0.706572, 5)) + spawnPoints.add(SpawnPoint(3.24, 0.16, -3.60, 0.71, -0.71, 5)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/military/outpost_cloning_facility_s02.py b/scripts/object/building/military/outpost_cloning_facility_s02.py index b77dca9b..bcea9348 100644 --- a/scripts/object/building/military/outpost_cloning_facility_s02.py +++ b/scripts/object/building/military/outpost_cloning_facility_s02.py @@ -4,12 +4,12 @@ from resources.common import SpawnPoint def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-5.5), float(0.125265), float(-3.43841), float(0.699512), float(0.714621), 6) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(-5.5), float(0.13), float(-3.44), float(0.70), float(0.71), 6) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(4.44727, 0.125266, -3.80136, -0.706468, 0.707745, 5)) - spawnPoints.add(SpawnPoint(4.65395, 0.125266, 1.49466, 0.714548, -0.699587, 4)) - spawnPoints.add(SpawnPoint(-3.99569, 0.125266, -3.51553, 0.70407, 0.710131, 6)) + spawnPoints.add(SpawnPoint(4.45, 0.13, -3.80, -0.71, 0.71, 5)) + spawnPoints.add(SpawnPoint(4.65, 0.13, 1.50, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(-3.99, 0.13, -3.52, 0.70, 0.71, 6)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/military/outpost_starport.py b/scripts/object/building/military/outpost_starport.py index 22ca3e75..b0e8b915 100644 --- a/scripts/object/building/military/outpost_starport.py +++ b/scripts/object/building/military/outpost_starport.py @@ -2,9 +2,9 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 7, 0, 0.71, 0.71) objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 1, 0, -10, 0, 1) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.14659503), float(-17.57), float(0.707107), float(-0.707107), 1) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-3.12), float(0.15), float(-17.57), float(0.71), float(-0.71), 1) 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/building/naboo/cloning_facility_naboo.py b/scripts/object/building/naboo/cloning_facility_naboo.py index 76288df2..91cb87d3 100644 --- a/scripts/object/building/naboo/cloning_facility_naboo.py +++ b/scripts/object/building/naboo/cloning_facility_naboo.py @@ -8,13 +8,13 @@ def setup(core, object): objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_cloning.iff', float(1), float(-0.05), float(-1.35), float(1), float(0), 2) spawnPoints = Vector() - spawnPoints.add(SpawnPoint(-16.6514, -4.29167, -10.4976, 0.709453, 0.704753, 4)) - spawnPoints.add(SpawnPoint(-16.5965, -4.29167, -14.1652, 0.721346, 0.692575, 4)) - spawnPoints.add(SpawnPoint(16.5771, -4.29167, -14.2091, 0.71195, -0.702231, 4)) - spawnPoints.add(SpawnPoint(16.6876, -4.29167, -10.5391, -0.6972, 0.716877, 4)) - spawnPoints.add(SpawnPoint(6.32992, -4.79167, 0.613332, 0.999992, 0.00405023, 4)) - spawnPoints.add(SpawnPoint(1.58067, -4.79167, 0.582775, 0.989691, 0.0143216, 4)) - spawnPoints.add(SpawnPoint(-2.84125, -4.79167, 0.657588, -0.0356012, 0.999366, 4)) + spawnPoints.add(SpawnPoint(-16.66, -4.29, -10.50, 0.71, 0.70, 4)) + spawnPoints.add(SpawnPoint(-16.60, -4.29, -14.17, 0.72, 0.69, 4)) + spawnPoints.add(SpawnPoint(16.58, -4.29, -14.21, 0.71, -0.70, 4)) + spawnPoints.add(SpawnPoint(16.69, -4.29, -10.54, -0.70, 0.72, 4)) + spawnPoints.add(SpawnPoint(6.33, -4.79, 0.61, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(1.58, -4.79, 0.58, 0.99, 0.01, 4)) + spawnPoints.add(SpawnPoint(-2.84, -4.79, 0.66, -0.04, 0.99, 4)) object.setAttachment('spawnPoints', spawnPoints) diff --git a/scripts/object/building/naboo/hangar_naboo_theed.py b/scripts/object/building/naboo/hangar_naboo_theed.py index 41cc6f5c..79a247e9 100644 --- a/scripts/object/building/naboo/hangar_naboo_theed.py +++ b/scripts/object/building/naboo/hangar_naboo_theed.py @@ -3,12 +3,12 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-26.94), float(0.749), float(-67.14), float(1), float(0), 3) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(26.94), float(0.749), float(-67.14), float(1), float(0), 4) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-9.49), float(7.979), float(-45.2359), float(0), float(1), 5) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(9.49), float(7.979), float(-45.2359), float(0), float(1), 5) - objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', float(-10), float(7.979), float(10), float(-0.707107), float(0.707107), 5) - objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff', float(0), float(7.979), float(0), float(1), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-26.94), float(0.75), float(-67.14), float(1), float(0), 3) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(26.94), float(0.75), float(-67.14), float(1), float(0), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(9.49), float(7.98), float(-45.24), float(0), float(1), 5) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', float(-10), float(7.98), float(10), float(-0.71), float(0.71), 5) + objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport_theed_hangar.iff', float(0), float(7.98), float(0), float(1), float(1), 5) core.mapService.addLocation(object.getPlanet(), 'Starport', object.getPosition().x, object.getPosition().z, 15, 0, 0) diff --git a/scripts/object/building/naboo/starport_naboo.py b/scripts/object/building/naboo/starport_naboo.py index bfb384c6..e66e8bf2 100644 --- a/scripts/object/building/naboo/starport_naboo.py +++ b/scripts/object/building/naboo/starport_naboo.py @@ -2,12 +2,12 @@ import sys def setup(core, object): objSvc = core.objectService - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(11.5), float(0.6), float(51.3), float(0.20), float(-0.98), 4) objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(3.1), float(0.6), float(49), float(0), float(1), 4) objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-2.7), float(0.6), float(49), float(0), float(1), 4) - objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.195405), float(-0.980722), 4) + objSvc.createChildObject(object, 'object/tangible/terminal/shared_terminal_travel.iff', float(-13.2), float(0.6), float(51.3), float(-0.20), float(-0.98), 4) objSvc.createChildObject(object, 'object/creature/npc/theme_park/shared_player_transport.iff', 0, 0, 0, 1, 0) - objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.707107, 0.707107) + objSvc.createChildObject(object, 'object/tangible/travel/ticket_collector/shared_ticket_collector.iff', 10, 0, -10, 0.71, 0.71) 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/creature/player/bothan_female.py b/scripts/object/creature/player/bothan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/bothan_female.py +++ b/scripts/object/creature/player/bothan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/bothan_male.py b/scripts/object/creature/player/bothan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/bothan_male.py +++ b/scripts/object/creature/player/bothan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_female.py b/scripts/object/creature/player/human_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/human_female.py +++ b/scripts/object/creature/player/human_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/human_male.py b/scripts/object/creature/player/human_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/human_male.py +++ b/scripts/object/creature/player/human_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_female.py b/scripts/object/creature/player/ithorian_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/ithorian_female.py +++ b/scripts/object/creature/player/ithorian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/ithorian_male.py b/scripts/object/creature/player/ithorian_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/ithorian_male.py +++ b/scripts/object/creature/player/ithorian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_female.py b/scripts/object/creature/player/moncal_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/moncal_female.py +++ b/scripts/object/creature/player/moncal_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/moncal_male.py b/scripts/object/creature/player/moncal_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/moncal_male.py +++ b/scripts/object/creature/player/moncal_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_female.py b/scripts/object/creature/player/rodian_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/rodian_female.py +++ b/scripts/object/creature/player/rodian_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/rodian_male.py b/scripts/object/creature/player/rodian_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/rodian_male.py +++ b/scripts/object/creature/player/rodian_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_female.py b/scripts/object/creature/player/sullustan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/sullustan_female.py +++ b/scripts/object/creature/player/sullustan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/sullustan_male.py b/scripts/object/creature/player/sullustan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/sullustan_male.py +++ b/scripts/object/creature/player/sullustan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_female.py b/scripts/object/creature/player/trandoshan_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/trandoshan_female.py +++ b/scripts/object/creature/player/trandoshan_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/trandoshan_male.py b/scripts/object/creature/player/trandoshan_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/trandoshan_male.py +++ b/scripts/object/creature/player/trandoshan_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_female.py b/scripts/object/creature/player/twilek_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/twilek_female.py +++ b/scripts/object/creature/player/twilek_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/twilek_male.py b/scripts/object/creature/player/twilek_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/twilek_male.py +++ b/scripts/object/creature/player/twilek_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_female.py b/scripts/object/creature/player/wookiee_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/wookiee_female.py +++ b/scripts/object/creature/player/wookiee_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/wookiee_male.py b/scripts/object/creature/player/wookiee_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/wookiee_male.py +++ b/scripts/object/creature/player/wookiee_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_female.py b/scripts/object/creature/player/zabrak_female.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/zabrak_female.py +++ b/scripts/object/creature/player/zabrak_female.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/creature/player/zabrak_male.py b/scripts/object/creature/player/zabrak_male.py index ccad8904..b80d569c 100644 --- a/scripts/object/creature/player/zabrak_male.py +++ b/scripts/object/creature/player/zabrak_male.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'player') return \ No newline at end of file diff --git a/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py index ccad8904..79b40d1f 100644 --- a/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py +++ b/scripts/object/tangible/quest/heroic/heroic_exar_kun_entrance.py @@ -1,4 +1,9 @@ import sys def setup(core, object): - return \ No newline at end of file + object.setAttachment('radial_filename', 'exar_kun_brazier') + return + +def use(core, actor, object): + if actor: + core.instanceService.queue('heroic_exar_kun', actor) \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_character_builder.py b/scripts/object/tangible/terminal/terminal_character_builder.py index ccad8904..d95cbb4c 100644 --- a/scripts/object/tangible/terminal/terminal_character_builder.py +++ b/scripts/object/tangible/terminal/terminal_character_builder.py @@ -1,4 +1,9 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'usable') + return + +def use(core, owner, target): + core.devService.sendCharacterBuilderSUI(owner, 0); return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/aakuan_ring.py b/scripts/object/tangible/wearables/ring/aakuan_ring.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/aakuan_ring.py +++ b/scripts/object/tangible/wearables/ring/aakuan_ring.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py index e8042f0b..110a5ec1 100644 --- a/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py +++ b/scripts/object/tangible/wearables/ring/item_bounty_hunter_ring_01_02.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_bounty_hunter_ring_01_02') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py index 1219d4db..a22d7967 100644 --- a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_01_02.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_force_sensitive_ring_01_02') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py index 7fc2c243..01a05612 100644 --- a/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py +++ b/scripts/object/tangible/wearables/ring/item_force_sensitive_ring_02_01.py @@ -1,6 +1,7 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') object.setStfFilename('static_item_n') object.setStfName('item_force_sensitive_ring_02_01') object.setDetailFilename('static_item_d') diff --git a/scripts/object/tangible/wearables/ring/ring_base.py b/scripts/object/tangible/wearables/ring/ring_base.py index ccad8904..21d2e709 100644 --- a/scripts/object/tangible/wearables/ring/ring_base.py +++ b/scripts/object/tangible/wearables/ring/ring_base.py @@ -1,4 +1,6 @@ import sys def setup(core, object): + object.setAttachment('objType', 'ring') + object.setAttachment('radial_filename', 'ring/unity') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_imperial.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py +++ b/scripts/object/tangible/wearables/ring/ring_gcw_rebel.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_mark_hero.py b/scripts/object/tangible/wearables/ring/ring_mark_hero.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_mark_hero.py +++ b/scripts/object/tangible/wearables/ring/ring_mark_hero.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_nightsister.py b/scripts/object/tangible/wearables/ring/ring_nightsister.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_nightsister.py +++ b/scripts/object/tangible/wearables/ring/ring_nightsister.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s01.py b/scripts/object/tangible/wearables/ring/ring_s01.py index 83da2342..f311265b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s01.py +++ b/scripts/object/tangible/wearables/ring/ring_s01.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s02.py b/scripts/object/tangible/wearables/ring/ring_s02.py index f594fe2b..467d8fb3 100644 --- a/scripts/object/tangible/wearables/ring/ring_s02.py +++ b/scripts/object/tangible/wearables/ring/ring_s02.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03.py b/scripts/object/tangible/wearables/ring/ring_s03.py index c4aa2f2f..52d2d1d2 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03.py +++ b/scripts/object/tangible/wearables/ring/ring_s03.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/ring/ring_s03_quest.py b/scripts/object/tangible/wearables/ring/ring_s03_quest.py index 2540ccc0..a7a9a10b 100644 --- a/scripts/object/tangible/wearables/ring/ring_s03_quest.py +++ b/scripts/object/tangible/wearables/ring/ring_s03_quest.py @@ -2,4 +2,5 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return \ No newline at end of file diff --git a/scripts/object/tangible/wearables/ring/ring_s04.py b/scripts/object/tangible/wearables/ring/ring_s04.py index 8eee5461..c00caed9 100644 --- a/scripts/object/tangible/wearables/ring/ring_s04.py +++ b/scripts/object/tangible/wearables/ring/ring_s04.py @@ -2,6 +2,7 @@ import sys def setup(core, object): object.setAttachment('radial_filename', 'ring/unity') + object.setAttachment('objType', 'ring') return def equip(core, actor, object): diff --git a/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py new file mode 100644 index 00000000..afb64a4b --- /dev/null +++ b/scripts/object/tangible/wearables/robe/item_npe_fs_robe_02_01.py @@ -0,0 +1,11 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_fs_robe_02_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_fs_robe_02_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 10) + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 1) + return diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py index 1d64fa57..6c8a9d3c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s01.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') + object.setAttachment('type', 'jedi_robe') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 100) - core.skillModService.addSkillMod(actor, 'precision_modified', 100) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 100) - core.skillModService.deductSkillMod(actor, 'precision_modified', 100) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py index 0a02012a..ab11f14c 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s02.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 145) - core.skillModService.addSkillMod(actor, 'precision_modified', 145) - - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 145) - core.skillModService.deductSkillMod(actor, 'precision_modified', 145) - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py index 9a627b3b..ba216204 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_dark_s03.py @@ -1,19 +1,16 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_dark_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_dark_03_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:precision_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:luck_modified', 185) + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 185) - core.skillModService.addSkillMod(actor, 'precision_modified', 185) - core.skillModService.addSkillMod(actor, 'luck_modified', 185) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 185) - core.skillModService.deductSkillMod(actor, 'precision_modified', 185) - core.skillModService.deductSkillMod(actor, 'luck_modified', 185) - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py index 639eac05..bc274ef4 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s01.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_01') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 100) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 100) + object.setStringAttribute('protection_level', 'Weak') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 40) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 100) - core.skillModService.addSkillMod(actor, 'strength_modified', 100) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 100) - core.skillModService.deductSkillMod(actor, 'strength_modified', 100) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py index 9db15ef9..7e01e7ab 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s02.py @@ -1,18 +1,15 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_02') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_02') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 145) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 145) + object.setStringAttribute('protection_level', 'Lucent') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 60) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'constitution_modified', 145) - core.skillModService.addSkillMod(actor, 'strength_modified', 145) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'constitution_modified', 145) - core.skillModService.deductSkillMod(actor, 'strength_modified', 145) - - - return - \ No newline at end of file diff --git a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py index 6a546a09..a40fe4b9 100644 --- a/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py +++ b/scripts/object/tangible/wearables/robe/robe_jedi_light_s03.py @@ -1,19 +1,16 @@ import sys def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_jedi_robe_light_03_03') + object.setDetailFilename('static_item_d') + object.setDetailName('item_jedi_robe_light_03_03') + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:constitution_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:strength_modified', 185) + object.setIntAttribute('cat_stat_mod_bonus.@stat_n:agility_modified', 185) + object.setStringAttribute('protection_level', 'Luminous') + object.setStringAttribute('class_required', 'Jedi') + object.setIntAttribute('required_combat_level', 80) + object.setAttachment('type', 'jedi_robe') + object.setStringAttribute('@set_bonus:piece_bonus_count_2', '@set_bonus:set_bonus_jedi_robe_1') return - -def equip(core, actor, target): - core.skillModService.addSkillMod(actor, 'agility_modified', 185) - core.skillModService.addSkillMod(actor, 'constitution_modified', 185) - core.skillModService.addSkillMod(actor, 'strength_modified', 185) - - return - -def unequip(core, actor, target): - core.skillModService.deductSkillMod(actor, 'agility_modified', 185) - core.skillModService.deductSkillMod(actor, 'constitution_modified', 185) - core.skillModService.deductSkillMod(actor, 'strength_modified', 185) - - return - \ No newline at end of file diff --git a/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py new file mode 100644 index 00000000..c8e1804c --- /dev/null +++ b/scripts/object/weapon/melee/polearm/weapon_polearm_02_03.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_polearm_02_03') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_polearm_02_03') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 1) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Kinetic') + object.setStringAttribute('cat_wpn_damage.damage', '43-75') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-5m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Polearm') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py index eb0efac8..eede7b59 100644 --- a/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py +++ b/scripts/object/weapon/ranged/carbine/weapon_carbine_bh_roadmap_01_02.py @@ -11,7 +11,7 @@ def setup(core, object): object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') object.setStringAttribute('cat_wpn_damage.damage', '109-218') - object.setStringAttribute('cat_wpn_damage.range', '0-55m') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-55m') object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py new file mode 100644 index 00000000..21afc76b --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_bh_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_bh_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_bh_03_01') + object.setStringAttribute('class_required', 'Bounty Hunter') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '17-43') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py new file mode 100644 index 00000000..53149824 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_carbine_spy_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_carbine_spy_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_carbine_spy_03_01') + object.setStringAttribute('class_required', 'Spy') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '17-43') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py new file mode 100644 index 00000000..681e8699 --- /dev/null +++ b/scripts/object/weapon/ranged/carbine/weapon_npe_commando_carbine_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_commando_carbine_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_commando_carbine_03_01') + object.setStringAttribute('class_required', 'Commando') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.6) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '20-40') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Carbine') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py new file mode 100644 index 00000000..3600d8b4 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_officer_sidearm.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_officer_sidearm') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_officer_sidearm') + object.setStringAttribute('class_required', 'Officer') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '15-25') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py new file mode 100644 index 00000000..4f615807 --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/item_npe_smuggler_han_solo_gun.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('item_npe_smuggler_han_solo_gun') + object.setDetailFilename('static_item_d') + object.setDetailName('item_npe_smuggler_han_solo_gun') + object.setStringAttribute('class_required', 'Smuggler') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '13-27') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py new file mode 100644 index 00000000..4a68c9af --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_npe_medic_pistol_03_01.py @@ -0,0 +1,16 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_npe_medic_pistol_03_01') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_npe_medic_pistol_03_01') + object.setStringAttribute('class_required', 'Medic') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '13-27') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py new file mode 100644 index 00000000..055d033d --- /dev/null +++ b/scripts/object/weapon/ranged/pistol/weapon_pistol_02_02.py @@ -0,0 +1,15 @@ +import sys + +def setup(core, object): + object.setStfFilename('static_item_n') + object.setStfName('weapon_pistol_02_02') + object.setDetailFilename('static_item_d') + object.setDetailName('weapon_pistol_02_02') + object.setIntAttribute('required_combat_level', 1) + object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.4) + object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') + object.setStringAttribute('cat_wpn_damage.damage', '10-26') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-35m') + object.setStringAttribute('cat_wpn_damage.wpn_category', 'Pistol') + object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) + return \ No newline at end of file diff --git a/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py index ec585481..33825f81 100644 --- a/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py +++ b/scripts/object/weapon/ranged/rifle/weapon_rifle_bh_roadmap_01_02.py @@ -11,7 +11,7 @@ def setup(core, object): object.setFloatAttribute('cat_wpn_damage.wpn_attack_speed', 0.8) object.setStringAttribute('cat_wpn_damage.wpn_damage_type', 'Energy') object.setStringAttribute('cat_wpn_damage.damage', '261-522') - object.setStringAttribute('cat_wpn_damage.range', '0-64m') + object.setStringAttribute('cat_wpn_damage.wpn_range', '0-64m') object.setStringAttribute('cat_wpn_damage.wpn_category', 'Rifle') object.setIntAttribute('cat_wpn_damage.dps', object.getDamagePerSecond()) return \ No newline at end of file diff --git a/scripts/radial/exar_kun_brazier.py b/scripts/radial/exar_kun_brazier.py new file mode 100644 index 00000000..d78e1915 --- /dev/null +++ b/scripts/radial/exar_kun_brazier.py @@ -0,0 +1,14 @@ +from resources.common import RadialOptions +import sys + +def createRadial(core, owner, target, radials): + radials.add(RadialOptions(0, 21, 1, '')) + radials.add(RadialOptions(0, 7, 1, '')) + radials.add(RadialOptions(0, 21, 3, '@building_name:heroic_exar_enter')) + return + +def handleSelection(core, owner, target, option): + if option == 21 and target: + core.objectService.useObject(owner, target) + return + \ No newline at end of file diff --git a/scripts/radial/player.py b/scripts/radial/player.py new file mode 100644 index 00000000..6ad15a17 --- /dev/null +++ b/scripts/radial/player.py @@ -0,0 +1,32 @@ +from resources.common import RadialOptions +from resources.datatables import Posture +import sys + +def createRadial(core, owner, target, radials): + if target.getPosture() == Posture.SkillAnimating: + if owner.getPerformanceWatchee() == target: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 141, 3, 'Stop Watching')) + elif owner.getPerformanceListenee() == target: # TODO: Get rid of PerformanceWatchee variable, no need for listenee (same thing really) + radials.add(RadialOptions(0, 141, 3, 'Stop Listening')) + else: + if target.getPerformanceType() is True: + radials.add(RadialOptions(0, 140, 3, 'Watch')) + else: + radials.add(RadialOptions(0, 140, 3, 'Listen')) + return + +def handleSelection(core, owner, target, option): + if option == 140: + if target.getPerformanceType() is True: + core.commandService.callCommand(owner, 'watch', target, '') + return + else: + # TODO: Insert callCommand /listen + return + return + + if option == 141: + #core.commandService.callCommand(owner, 'stopwatching', target, '') #SWGList error for remove audience in CreatureObject + return + return \ No newline at end of file diff --git a/scripts/radial/ring/unity.py b/scripts/radial/ring/unity.py index 704268a4..92940452 100644 --- a/scripts/radial/ring/unity.py +++ b/scripts/radial/ring/unity.py @@ -1,5 +1,8 @@ from resources.common import RadialOptions from services.sui.SUIWindow import Trigger +from java.util import Vector +from main import NGECore +from engine.resources.objects import SWGObject import sys def createRadial(core, owner, target, radials): @@ -7,29 +10,99 @@ def createRadial(core, owner, target, radials): ghost = owner.getSlottedObject('ghost') if ghost is None: return - print (owner.getTargetId()) - print (owner.getObjectId()) - if ghost.getSpouseName() is None: + + if ghost.getSpouseName() is None or ghost.getSpouseName() is "": targetPlayer = core.objectService.getObject(owner.getTargetId()) if targetPlayer is not None and targetPlayer.getSlottedObject('ghost') is not None: - radials.add(RadialOptions(0, 69, 1, 'Propose Unity')) + if targetPlayer.getObjectID() == owner.getObjectID(): + return + radials.add(RadialOptions(0, 69, 3, '@unity:mnu_propose')) + return + else: + radials.add(RadialOptions(0, 70, 3, '@unity:mnu_divorce')) + return return def handleSelection(core, owner, target, option): if option == 69 and target: - tGhost = core.objectService.getObject(owner.getTargetId()).getSlottedObject('ghost') + player = core.objectService.getObject(owner.getTargetId()) + tGhost = player.getSlottedObject('ghost') suiSvc = core.suiService - targetWindow = suiSvc.createMessageBox(3, 'Proposal', owner.getCustomName() + ' would like to marry you. Would you like to marry?', tGhost, owner, 10) - returnList = Vector() - targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSUI) - targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSUI) - suiSvc.openSUIWindow(targetWindow) + + if tGhost.getPosition().getDistance2D(owner.getWorldPosition()) < 50: + owner.sendSystemMessage('@unity:out_of_range', 0) + return + + if tGhost.getSpouseName() is not None: + owner.sendSystemMessage('@unity:target_married', 0) + return + + if player.getAttachment("proposer") is not None: + owner.sendSystemMessage('@unity:target_proposed', 0) + return + + else: + + owner.sendSystemMessage('You propose unity to ' + player.getCustomName() + '.', 0) + targetWindow = suiSvc.createMessageBox(3, '@unity:accept_title', owner.getCustomName() + ' is proposing unity to you. Do you wish to accept?', tGhost.getContainer(), owner, 15) + returnList = Vector() + + targetWindow.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handlePropose) + targetWindow.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handlePropose) + player.setAttachment("proposer", owner.getCustomName()) + suiSvc.openSUIWindow(targetWindow) + + target.setAttachment("unity", True) + core.equipmentService.equip(owner, target) + + core.commandService.callCommand(owner, 'kneel', None, '') + return + return + + if option == 70: + married = owner.getSlottedObject('ghost').getSpouseName() + myGhost = owner.getSlottedObject('ghost') + otherPlayer = NGECore.getInstance().objectService.getObjectByCustomName(married) + + if otherPlayer is None: + return + ghost = otherPlayer.getSlottedObject('ghost') + + if ghost is None: + return + + owner.sendSystemMessage('Your union with ' + married + ' has ended.', 0) + otherPlayer.sendSystemMessage('Your union with ' + owner.getCustomName() + ' has ended.', 0) + myGhost.setSpouseName(None) + ghost.setSpouseName(None) + + target.setAttachment("unity", None) + #TODO: Divorce offline players return return -def handleSUI(owner, window, eventType, returnList): - if eventType == 0: - ghost = owner.getSlottedObject('ghost') - ghost.setSpouseName("Waverunner") - return - return \ No newline at end of file +def handlePropose(owner, window, eventType, returnList): + core = NGECore.getInstance() + + if owner is None: + return + + if eventType == 0: + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + if proposer is None: + return + + core.playerService.performUnity(owner, proposer) + return + + if eventType == 1: + proposer = core.objectService.getObjectByCustomName(owner.getAttachment("proposer")) + proposer.sendSystemMessage('@unity:declined', 0) + for SWGObject in proposer.getEquipmentList(): + if SWGObject.getAttachment("unity") is not None: + SWGObject.setAttachment("unity", None) + break + + owner.setAttachment("proposer", None) + return + return diff --git a/scripts/roadmap/bounty_hunter_1a.py b/scripts/roadmap/bounty_hunter_1a.py index 7bb425e3..0c708fec 100644 --- a/scripts/roadmap/bounty_hunter_1a.py +++ b/scripts/roadmap/bounty_hunter_1a.py @@ -23,3 +23,97 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_bounty_hunter_backpack_01_02': + return "object/tangible/wearables/backpack/shared_backpack_s05.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bicep_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_l_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" + + if name == 'armor_bounty_hunter_roadmap_bracer_r_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" + + if name == 'armor_bounty_hunter_roadmap_boots_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" + + if name == 'armor_bounty_hunter_roadmap_chest_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" + + if name == 'armor_bounty_hunter_roadmap_gloves_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" + + if name == 'armor_bounty_hunter_roadmap_helmet_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" + + if name == 'armor_bounty_hunter_roadmap_leggings_02_01': + return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" + + if name == 'armor_wookiee_roadmap_chest_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" + + if name == 'armor_wookiee_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" + + if name == 'armor_wookiee_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" + + if name == 'armor_wookiee_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" + + if name == 'armor_wookiee_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" + + if name == 'armor_wookiee_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_chest_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" + + if name == 'armor_ithorian_roadmap_leggings_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" + + if name == 'armor_ithorian_roadmap_helmet_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" + + if name == 'armor_ithorian_roadmap_bicep_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" + + if name == 'armor_ithorian_roadmap_bicep_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" + + if name == 'armor_ithorian_roadmap_bracer_l_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" + + if name == 'armor_ithorian_roadmap_bracer_r_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" + + if name == 'armor_ithorian_roadmap_boots_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" + + if name == 'armor_ithorian_roadmap_gloves_02_03': + return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" + + if name == 'weapon_carbine_bh_roadmap_01_02': + return "object/weapon/ranged/carbine/shared_carbine_ee3.iff" + + if name == 'item_bounty_hunter_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'weapon_rifle_bh_roadmap_01_02': + return "object/weapon/ranged/rifle/shared_rifle_lightning.iff" + + if name == 'item_bounty_hunter_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s02.iff" + + if name == 'item_bounty_hunter_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" + + if name == 'item_roadmap_belt_bounty_hunter_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/commando_1a.py b/scripts/roadmap/commando_1a.py index 8d9253ae..67cdb14b 100644 --- a/scripts/roadmap/commando_1a.py +++ b/scripts/roadmap/commando_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/entertainer_1a.py b/scripts/roadmap/entertainer_1a.py index 0541cc93..efe33465 100644 --- a/scripts/roadmap/entertainer_1a.py +++ b/scripts/roadmap/entertainer_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/force_sensitive_1a.py b/scripts/roadmap/force_sensitive_1a.py index 2d9241b0..9fd5ca69 100644 --- a/scripts/roadmap/force_sensitive_1a.py +++ b/scripts/roadmap/force_sensitive_1a.py @@ -23,3 +23,28 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + if name == 'item_force_sensitive_ring_02_01': + return "object/tangible/wearables/ring/shared_ring_s02.iff" + + if name == 'item_npe_fs_robe_02_02': + return "object/tangible/wearables/robe/shared_robe_jedi_padawan.iff" + + if name == 'weapon_roadmap_lightsaber_02_02': + return "object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_s1.iff" + + if name == 'item_force_sensitive_ring_01_02': + return "object/tangible/wearables/ring/shared_ring_s01.iff" + + if name == 'item_krayt_pearl_04_01': + return "object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff" + + if name == 'item_force_sensitive_pendant_01_02': + return "object/tangible/wearables/necklace/shared_necklace_s12.iff" + + if name == 'item_force_sensitive_clicky_01_02': + return "object/tangible/loot/generic_usable/shared_generic_crystal.iff" + + if name == 'item_roadmap_belt_force_sensitive_01_02': + return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/medic_1a.py b/scripts/roadmap/medic_1a.py index 6b84327b..e6f67dfb 100644 --- a/scripts/roadmap/medic_1a.py +++ b/scripts/roadmap/medic_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/officer_1a.py b/scripts/roadmap/officer_1a.py index 25e7254f..83bca56f 100644 --- a/scripts/roadmap/officer_1a.py +++ b/scripts/roadmap/officer_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/roadmap_rewards.py b/scripts/roadmap/roadmap_rewards.py deleted file mode 100644 index a764248f..00000000 --- a/scripts/roadmap/roadmap_rewards.py +++ /dev/null @@ -1,122 +0,0 @@ -import sys - -def get(name): - # Jedi # - if name == 'item_force_sensitive_ring_02_01': - return "object/tangible/wearables/ring/shared_ring_s02.iff" - - if name == 'item_npe_fs_robe_02_02': - return "object/tangible/wearables/robe/shared_robe_jedi_padawan.iff" - - if name == 'weapon_roadmap_lightsaber_02_02': - return "object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_s1.iff" - - if name == 'item_force_sensitive_ring_01_02': - return "object/tangible/wearables/ring/shared_ring_s01.iff" - - if name == 'item_krayt_pearl_04_01': - return "object/tangible/component/weapon/lightsaber/shared_lightsaber_module_krayt_dragon_pearl.iff" - - if name == 'item_force_sensitive_pendant_01_02': - return "object/tangible/wearables/necklace/shared_necklace_s12.iff" - - if name == 'item_force_sensitive_clicky_01_02': - return "object/tangible/loot/generic_usable/shared_generic_crystal.iff" - - if name == 'item_roadmap_belt_force_sensitive_01_02': - return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" - - # Bounty Hunter # - - if name == 'item_bounty_hunter_backpack_01_02': - return "object/tangible/wearables/backpack/shared_backpack_s05.iff" - - if name == 'armor_bounty_hunter_roadmap_bicep_l_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff" - - if name == 'armor_bounty_hunter_roadmap_bicep_r_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff" - - if name == 'armor_bounty_hunter_roadmap_bracer_l_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff" - - if name == 'armor_bounty_hunter_roadmap_bracer_r_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff" - - if name == 'armor_bounty_hunter_roadmap_boots_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff" - - if name == 'armor_bounty_hunter_roadmap_chest_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff" - - if name == 'armor_bounty_hunter_roadmap_gloves_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff" - - if name == 'armor_bounty_hunter_roadmap_helmet_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff" - - if name == 'armor_bounty_hunter_roadmap_leggings_02_01': - return "object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff" - - if name == 'armor_wookiee_roadmap_chest_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_chestplate.iff" - - if name == 'armor_wookiee_roadmap_leggings_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_leggings.iff" - - if name == 'armor_wookiee_roadmap_bicep_l_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_l.iff" - - if name == 'armor_wookiee_roadmap_bicep_r_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bicep_r.iff" - - if name == 'armor_wookiee_roadmap_bracer_l_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_l.iff" - - if name == 'armor_wookiee_roadmap_bracer_r_02_03': - return "object/tangible/wearables/armor/kashyyykian_hunting/shared_armor_kashyyykian_hunting_bracer_r.iff" - - if name == 'armor_ithorian_roadmap_chest_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_chest_plate.iff" - - if name == 'armor_ithorian_roadmap_leggings_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_leggings.iff" - - if name == 'armor_ithorian_roadmap_helmet_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_helmet.iff" - - if name == 'armor_ithorian_roadmap_bicep_l_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_l.iff" - - if name == 'armor_ithorian_roadmap_bicep_r_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bicep_r.iff" - - if name == 'armor_ithorian_roadmap_bracer_l_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_l.iff" - - if name == 'armor_ithorian_roadmap_bracer_r_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_bracer_r.iff" - - if name == 'armor_ithorian_roadmap_boots_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_boots.iff" - - if name == 'armor_ithorian_roadmap_gloves_02_03': - return "object/tangible/wearables/armor/ithorian_sentinel/shared_ith_armor_s03_gloves.iff" - - if name == 'weapon_carbine_bh_roadmap_01_02': - return "object/weapon/ranged/carbine/shared_carbine_ee3.iff" - - if name == 'item_bounty_hunter_ring_01_02': - return "object/tangible/wearables/ring/shared_ring_s02.iff" - - if name == 'weapon_rifle_bh_roadmap_01_02': - return "object/weapon/ranged/rifle/shared_rifle_lightning.iff" - - if name == 'item_bounty_hunter_pendant_01_02': - return "object/tangible/wearables/necklace/shared_necklace_s02.iff" - - if name == 'item_bounty_hunter_clicky_01_02': - return "object/tangible/loot/generic_usable/shared_survey_pad_adv_generic.iff" - - if name == 'item_roadmap_belt_bounty_hunter_01_02': - return "object/tangible/wearables/armor/zam/shared_armor_zam_wesell_belt.iff" \ No newline at end of file diff --git a/scripts/roadmap/smuggler_1a.py b/scripts/roadmap/smuggler_1a.py index 8084fcd2..2b41cce4 100644 --- a/scripts/roadmap/smuggler_1a.py +++ b/scripts/roadmap/smuggler_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/spy_1a.py b/scripts/roadmap/spy_1a.py index 6fe7c37a..079de728 100644 --- a/scripts/roadmap/spy_1a.py +++ b/scripts/roadmap/spy_1a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0a.py b/scripts/roadmap/trader_0a.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0a.py +++ b/scripts/roadmap/trader_0a.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0b.py b/scripts/roadmap/trader_0b.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0b.py +++ b/scripts/roadmap/trader_0b.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0c.py b/scripts/roadmap/trader_0c.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0c.py +++ b/scripts/roadmap/trader_0c.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/roadmap/trader_0d.py b/scripts/roadmap/trader_0d.py index 2846dee7..203b6ad9 100644 --- a/scripts/roadmap/trader_0d.py +++ b/scripts/roadmap/trader_0d.py @@ -23,3 +23,6 @@ def getHealth(): def getAction(): return 75 + +def getRewards(name): + return \ No newline at end of file diff --git a/scripts/skillMods/expertise_critical_melee.py b/scripts/skillMods/expertise_critical_melee.py index ee7769e2..fd6ebde6 100644 --- a/scripts/skillMods/expertise_critical_melee.py +++ b/scripts/skillMods/expertise_critical_melee.py @@ -1,10 +1,16 @@ import sys def add(core, actor, name, base): - actor.addSkillMod(name, base) + actor.addSkillMod("expertise_critical_1h", base) + actor.addSkillMod("expertise_critical_2h", base) + actor.addSkillMod("expertise_critical_unarmed", base) + actor.addSkillMod("expertise_critical_polearm", base) return def deduct(core, actor, name, base): - actor.deductSkillMod(name, base) + actor.deductSkillMod("expertise_critical_1h", base) + actor.deductSkillMod("expertise_critical_2h", base) + actor.deductSkillMod("expertise_critical_unarmed", base) + actor.deductSkillMod("expertise_critical_polearm", base) return \ No newline at end of file diff --git a/scripts/starterclothing.py b/scripts/starterclothing.py index f24afeb3..567e1345 100644 --- a/scripts/starterclothing.py +++ b/scripts/starterclothing.py @@ -5,294 +5,294 @@ import sys def CreateStarterClothing(core, object, starterProfession, raceTemplate): if starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidMale", "outdoors_scout_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_male", "OutdoorScoutHumanoidMale", coree, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutHumanoidFemale", "outdoors_scout_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_humanoid_female", "OutdoorScoutHumanoidFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanMale", "outdoors_scout_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_trandoshan_male", "OutdoorScoutTrandoshanMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutTrandoshanFemale", "outdoors_scout_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_trandoshan_female", "OutdoorScoutTrandoshanFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeMale", "outdoors_scout_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_wookiee_male", "OutdoorScoutWookieeMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutWookieeFemale", "outdoors_scout_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_wookiee_female", "OutdoorScoutWookieeFemale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianMale", "outdoors_scout_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_ithorian_male", "OutdoorScoutIthorianMale", core, object) elif starterProfession == 'outdoors_scout' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "OutdoorScoutIthorianFemale", "outdoors_scout_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "outdoors_scout_ithorian_female", "OutdoorScoutIthorianFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidMale", "combat_brawler_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_male", "CombatBrawlerHumanoidMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerHumanoidFemale", "combat_brawler_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_humanoid_female", "CombatBrawlerHumanoidFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerTrandoshanMale", "combat_brawler_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_trandoshan_male", "CombatBrawlerTrandoshanMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerOutdoorScoutTrandoshanFemale", "combat_brawler_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_trandoshan_female", "CombatBrawlerOutdoorScoutTrandoshanFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeMale", "combat_brawler_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_wookiee_male", "CombatBrawlerWookieeMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerWookieeFemale", "combat_brawler_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_wookiee_female", "CombatBrawlerWookieeFemale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianMale", "combat_brawler_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_ithorian_male", "CombatBrawlerIthorianMale", core, object) elif starterProfession == 'combat_brawler' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatBrawlerIthorianFemale", "combat_brawler_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_brawler_ithorian_female", "CombatBrawlerIthorianFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidMale", "combat_marksman_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_male", "CombatMarksmanHumanoidMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanHumanoidFemale", "combat_marksman_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_humanoid_female", "CombatMarksmanHumanoidFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanMale", "combat_marksman_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_trandoshan_male", "CombatMarksmanTrandoshanMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanTrandoshanFemale", "combat_marksman_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_trandoshan_female", "CombatMarksmanTrandoshanFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeMale", "combat_marksman_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_wookiee_male", "CombatMarksmanWookieeMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanWookieeFemale", "combat_marksman_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_wookiee_female", "CombatMarksmanWookieeFemale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianMale", "combat_marksman_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_ithorian_male", "CombatMarksmanIthorianMale", core, object) elif starterProfession == 'combat_marksman' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CombatMarksmanIthorianFemale", "combat_marksman_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "combat_marksman_ithorian_female", "CombatMarksmanIthorianFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidMale", "crafting_artisan_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_male", "CraftingArtisanHumanoidMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTwilekFemale", "crafting_artisan_twilek_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_twilek_female", "CraftingArtisanTwilekFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanHumanoidFemale", "crafting_artisan_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_humanoid_female", "CraftingArtisanHumanoidFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanMale", "crafting_artisan_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_trandoshan_male", "CraftingArtisanTrandoshanMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanTrandoshanFemale", "crafting_artisan_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_trandoshan_female", "CraftingArtisanTrandoshanFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeMale", "crafting_artisan_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_wookiee_male", "CraftingArtisanWookieeMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanWookieeFemale", "crafting_artisan_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_wookiee_female", "CraftingArtisanWookieeFemale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianMale", "crafting_artisan_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_ithorian_male", "CraftingArtisanIthorianMale", core, object) elif starterProfession == 'crafting_artisan' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "CraftingArtisanIthorianFemale", "crafting_artisan_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "crafting_artisan_ithorian_female", "CraftingArtisanIthorianFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidMale", "science_medic_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_male", "ScienceMedicHumanoidMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicHumanoidFemale", "science_medic_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_humanoid_female", "ScienceMedicHumanoidFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanMale", "science_medic_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_trandoshan_male", "ScienceMedicTrandoshanMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicTrandoshanFemale", "science_medic_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_trandoshan_female", "ScienceMedicTrandoshanFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeMale", "science_medic_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_wookiee_male", "ScienceMedicWookieeMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicWookieeFemale", "science_medic_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_wookiee_female", "ScienceMedicWookieeFemale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianMale", "science_medic_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_ithorian_male", "ScienceMedicIthorianMale", core, object) elif starterProfession == 'science_medic' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "ScienceMedicIthorianFemale", "science_medic_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "science_medic_ithorian_female", "ScienceMedicIthorianFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidMale", "social_entertainer_humanoid_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_male", "SocialEntertainerHumanoidMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/human_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/zabrak_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/bothan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/sullustan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/twilek_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTwilekFemale", "social_entertainer_twilek_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_twilek_female", "SocialEntertainerTwilekFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/moncal_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/rodian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerHumanoidFemale", "social_entertainer_humanoid_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_humanoid_female", "SocialEntertainerHumanoi_female", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanMale", "social_entertainer_trandoshan_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_trandoshan_male", "SocialEntertainerTrandoshanMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/trandoshan_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerTrandoshanFemale", "social_entertainer_trandoshan_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_trandoshan_female", "SocialEntertainerTrandoshanFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeMale", "social_entertainer_wookiee_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_wookiee_male", "SocialEntertainerWookieeMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/wookiee_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerWookieeFemale", "social_entertainer_wookiee_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_wookiee_female", "SocialEntertainerWookieeFemale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_male.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianMale", "social_entertainer_ithorian_male", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_ithorian_male", "SocialEntertainerIthorianMale", core, object) elif starterProfession == 'social_entertainer' and raceTemplate == 'object/creature/player/ithorian_female.iff': - core.scriptService.callScript("scripts/starter_clothing/", "SocialEntertainerIthorianFemale", "social_entertainer_ithorian_female", core, object) + core.scriptService.callScript("scripts/starter_clothing/", "social_entertainer_ithorian_female", "SocialEntertainerIthorianFemale", core, object) \ No newline at end of file diff --git a/scripts/static_spawns/kaas.py b/scripts/static_spawns/kaas.py new file mode 100644 index 00000000..6b171a07 --- /dev/null +++ b/scripts/static_spawns/kaas.py @@ -0,0 +1,13 @@ +import sys +from resources.datatables import Options +from resources.datatables import StateStatus + +def addPlanetSpawns(core, planet): + + stcSvc = core.staticService + + #stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) + + + return + diff --git a/scripts/static_spawns/tatooine.py b/scripts/static_spawns/tatooine.py index 4ff2338b..785f26b5 100644 --- a/scripts/static_spawns/tatooine.py +++ b/scripts/static_spawns/tatooine.py @@ -8,7 +8,7 @@ def addPlanetSpawns(core, planet): #this script is no longer for NPC spawning usage. - Levarris #stcSvc.spawnObject('object/mobile/shared_3po_protocol_droid_red.iff', 'tatooine', long(26582), float(-14.3), float(2.0), float(47.4), float(0.70), float(0.71)) - + stcSvc.spawnObject('object/tangible/terminal/shared_terminal_character_builder.iff', 'tatooine', long(0), float(3525), float(4), float(-4801), float(0.70), float(0.71)) return diff --git a/src/main/NGECore.java b/src/main/NGECore.java index 48281f51..b4b8eb5a 100644 --- a/src/main/NGECore.java +++ b/src/main/NGECore.java @@ -52,9 +52,11 @@ import services.AttributeService; import services.BuffService; import services.CharacterService; import services.ConnectionService; +import services.DevService; import services.EntertainmentService; import services.EquipmentService; import services.GroupService; +import services.InstanceService; import services.LoginService; import services.MissionService; import services.PlayerService; @@ -163,6 +165,8 @@ public class NGECore { public SpawnService spawnService; public AIService aiService; //public MissionService missionService; + public InstanceService instanceService; + public DevService devService; // Login Server public NetworkDispatch loginDispatch; @@ -180,6 +184,7 @@ public class NGECore { private ObjectDatabase mailODB; private ObjectDatabase guildODB; private ObjectDatabase objectIdODB; + private ObjectDatabase duplicateIdODB; private BusConfiguration eventBusConfig = BusConfiguration.Default(1, new ThreadPoolExecutor(1, 4, 1, TimeUnit.MINUTES, new LinkedBlockingQueue())); @@ -229,6 +234,7 @@ public class NGECore { mailODB = new ObjectDatabase("mails", true, false, true); guildODB = new ObjectDatabase("guild", true, false, true); objectIdODB = new ObjectDatabase("oids", true, false, false); + duplicateIdODB = new ObjectDatabase("doids", true, false, true); // Services loginService = new LoginService(this); @@ -255,6 +261,7 @@ public class NGECore { skillModService = new SkillModService(this); equipmentService = new EquipmentService(this); entertainmentService = new EntertainmentService(this); + devService = new DevService(this); if (config.keyExists("JYTHONCONSOLE.PORT")) { int jythonPort = config.getInt("JYTHONCONSOLE.PORT"); @@ -306,8 +313,8 @@ public class NGECore { zoneServer = new MINAServer(zoneDispatch, config.getInt("ZONE.PORT")); zoneServer.start(); staticService = new StaticService(this); - - // Planets + //Start terrainList + // Original Planets terrainService.addPlanet(1, "tatooine", "terrain/tatooine.trn", true); terrainService.addPlanet(2, "naboo", "terrain/naboo.trn", true); terrainService.addPlanet(3, "corellia", "terrain/corellia.trn", true); @@ -320,6 +327,48 @@ public class NGECore { 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); + //Dungeon Terrains + // TODO: Fix BufferUnderFlow Errors on loaded of dungeon instances. + /*terrainService.addPlanet(13, "kashyyyk_dead_forest", "terrain/kashyyyk_dead_forest.trn", true); + terrainService.addPlanet(14, "kashyyyk_hunting", "terrain/kashyyyk_hunting.trn", true); + terrainService.addPlanet(15, "kashyyyk_north_dungeons", "terrain/kashyyyk_north_dungeons.trn", true); + terrainService.addPlanet(16, "kashyyyk_rryatt_trail", "terrain/kashyyyk_rryatt_trail.trn", true); + terrainService.addPlanet(17, "kashyyyk_south_dungeons", "terrain/kashyyyk_south_dungeons.trn", true);*/ + terrainService.addPlanet(18, "adventure1", "terrain/adventure1.trn", true); + terrainService.addPlanet(19, "adventure2", "terrain/adventure2.trn", true); + terrainService.addPlanet(20, "dungeon1", "terrain/dungeon1.trn", true); + //Space Zones + // NOTE: Commented out for now until space is implemented. No need to be loaded into memory when space is not implemented. + /*terrainService.addPlanet(21, "space_corellia", "terrain/space_corellia.trn", true); + terrainService.addPlanet(22, "space_corellia_2", "terrain/space_corellia_2.trn", true); + terrainService.addPlanet(23, "space_dantooine", "terrain/space_dantooine.trn", true); + terrainService.addPlanet(24, "space_dathomir", "terrain/space_dathomir.trn", true); + terrainService.addPlanet(25, "space_endor", "terrain/space_endor.trn", true); + terrainService.addPlanet(26, "space_env", "terrain/space_env.trn", true); + terrainService.addPlanet(27, "space_halos", "terrain/space_halos.trn", true); + terrainService.addPlanet(28, "space_heavy1", "terrain/space_heavy1.trn", true); + terrainService.addPlanet(29, "space_kashyyyk", "terrain/space_kashyyyk.trn", true); + terrainService.addPlanet(30, "space_light1", "terrain/space_light1.trn", true); + terrainService.addPlanet(31, "space_lok", "terrain/space_lok.trn", true); + terrainService.addPlanet(32, "space_naboo", "terrain/space_naboo.trn", true); + terrainService.addPlanet(33, "space_naboo_2", "terrain/space_naboo_2.trn", true); + terrainService.addPlanet(34, "space_nova_orion", "terrain/space_nova_orion.trn", true); + terrainService.addPlanet(35, "space_npe_falcon", "terrain/space_npe_falcon.trn", true); // TODO: New Player Tutorial + terrainService.addPlanet(36, "space_npe_falcon_2", "terrain/space_npe_falcon_2.trn", true); // TODO: New Player Tutorial + terrainService.addPlanet(37, "space_ord_mantell", "terrain/space_ord_mantell.trn", true); + terrainService.addPlanet(38, "space_ord_mantell_2", "terrain/space_ord_mantell_2.trn", true); + terrainService.addPlanet(39, "space_ord_mantell_3", "terrain/space_ord_mantell_3.trn", true); + terrainService.addPlanet(40, "space_ord_mantell_4", "terrain/space_ord_mantell_4.trn", true); + terrainService.addPlanet(41, "space_ord_mantell_5", "terrain/space_ord_mantell_5.trn", true); + terrainService.addPlanet(42, "space_ord_mantell_6", "terrain/space_ord_mantell_6.trn", true); + terrainService.addPlanet(43, "space_tatooine", "terrain/space_tatooine.trn", true); + terrainService.addPlanet(44, "space_tatooine_2", "terrain/space_tatooine_2.trn", true); + terrainService.addPlanet(45, "space_yavin4", "terrain/space_yavin4.trn", true);*/ + //PSWG New Content Terrains (WARNING Keep commented out unless you have the current build of kaas!) + + //terrainService.addPlanet(46, "kaas", "terrain/kaas.trn", true); + + //end terrainList spawnService = new SpawnService(this); terrainService.loadClientPois(); // Travel Points @@ -351,6 +400,9 @@ public class NGECore { zoneDispatch.addService(skillService); + instanceService = new InstanceService(this); + zoneDispatch.addService(instanceService); + //travelService.startShuttleSchedule(); weatherService = new WeatherService(this); @@ -471,6 +523,10 @@ public class NGECore { return objectIdODB; } + public ObjectDatabase getDuplicateIdODB() { + return duplicateIdODB; + } + public int getActiveClients() { int connections = 0; for (Map.Entry c : clients.entrySet()) { diff --git a/src/protocol/swg/CharacterSheetResponseMessage.java b/src/protocol/swg/CharacterSheetResponseMessage.java index 3e3dbc81..28de844d 100644 --- a/src/protocol/swg/CharacterSheetResponseMessage.java +++ b/src/protocol/swg/CharacterSheetResponseMessage.java @@ -16,17 +16,22 @@ * 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. + * 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 main.NGECore; + import org.apache.mina.core.buffer.IoBuffer; +import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Point3D; public class CharacterSheetResponseMessage extends SWGMessage { @@ -34,7 +39,7 @@ public class CharacterSheetResponseMessage extends SWGMessage { public CharacterSheetResponseMessage(PlayerObject player) { this.player = player; } - + @Override public void deserialize(IoBuffer data) { @@ -42,35 +47,63 @@ public class CharacterSheetResponseMessage extends SWGMessage { @Override public IoBuffer serialize() { - IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - buffer.putShort((short) 12); - buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); - buffer.putShort((short) 0); //unk - buffer.putInt(1); // unk - - - buffer.putFloat(0); // bind x - buffer.putFloat(0); // bind z - buffer.putFloat(0); // bind y - buffer.putInt(0); // planet - - buffer.putFloat(0); // bank x - buffer.putFloat(0); // bank z - buffer.putFloat(0); // bank y - buffer.put(getAsciiString("tatooine")); // planet - - buffer.putFloat(0); // home x - buffer.putFloat(0); // home z - buffer.putFloat(0); // home y - buffer.putInt(0); // home planet - - if (player.getSpouseName() == null) + CreatureObject creature = (CreatureObject) player.getContainer(); + + if (creature != null) { + + SWGObject desCloner = null; + if (creature.getAttachment("preDesignatedCloner") != null) + desCloner = NGECore.getInstance().objectService.getObject((long) creature.getAttachment("preDesignatedCloner")); + + String clonerPlanet = ""; + String spouse = ""; + + if (desCloner != null) + clonerPlanet = desCloner.getPlanet().getName(); + + if (player.getSpouseName() != null) + spouse = player.getSpouseName(); + + IoBuffer buffer = IoBuffer.allocate(82 + clonerPlanet.length() + (spouse.length() * 2)).order(ByteOrder.LITTLE_ENDIAN); + + buffer.putShort((short) 12); + buffer.putInt(CRC.StringtoCRC("CharacterSheetResponseMessage")); + buffer.putInt(0); - else - buffer.put(getUnicodeString(player.getSpouseName())); // spouse name <<<<< CORRECT - - buffer.putInt(10); // lots remaining <<<<<<< CORRECT - return buffer.flip(); + buffer.putInt(0); + + if (desCloner != null) { + Point3D loc = desCloner.getPosition(); + buffer.putFloat(loc.x); // bind x + buffer.putFloat(loc.y); // bind z + buffer.putFloat(loc.z); // bind y + buffer.put(getAsciiString(clonerPlanet)); // bind planet + } else { + buffer.putFloat(0); // bind x + buffer.putFloat(0); // bind z + buffer.putFloat(0); // bind y + buffer.put(getAsciiString("")); // bind planet + } + + buffer.putFloat(0); // bank x + buffer.putFloat(0); // bank z + buffer.putFloat(0); // bank y + buffer.put(getAsciiString("tatooine")); + + buffer.putFloat(0); // home x + buffer.putFloat(0); // home z + buffer.putFloat(0); // home y + buffer.put(getAsciiString("")); // home planet + + buffer.put(getAsciiString("")); // Name of city player resides in + + buffer.put(getUnicodeString(spouse)); + + buffer.putInt(10); // lots remaining + + return buffer.flip(); + } + return null; } } diff --git a/src/protocol/swg/CollectionServerFirstListRequest.java b/src/protocol/swg/CollectionServerFirstListRequest.java new file mode 100644 index 00000000..cc053664 --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListRequest.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * 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 org.apache.mina.core.buffer.IoBuffer; + +public class CollectionServerFirstListRequest extends SWGMessage { + + private String server; + + public CollectionServerFirstListRequest() { + } + + @Override + public void deserialize(IoBuffer data) { + data.getShort(); + data.getInt(); + setServer(getAsciiString(data)); + } + + public String getServer() { + return server; + } + + @Override + public IoBuffer serialize() { + return null; + } + + public void setServer(String server) { + this.server = server; + } + +} diff --git a/src/protocol/swg/CollectionServerFirstListResponse.java b/src/protocol/swg/CollectionServerFirstListResponse.java new file mode 100644 index 00000000..163627da --- /dev/null +++ b/src/protocol/swg/CollectionServerFirstListResponse.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 protocol.swg; + +import java.nio.ByteOrder; +import java.util.Map; +import java.util.Map.Entry; + +import main.NGECore; + +import org.apache.mina.core.buffer.IoBuffer; + +import services.collections.ServerFirst; +import engine.resources.common.CRC; + +public class CollectionServerFirstListResponse extends SWGMessage { + + private Map sfList; + private String server; + + public CollectionServerFirstListResponse(String server, Map serverFirstList){ + this.sfList = serverFirstList; + this.server = server; + } + + @Override + public void deserialize(IoBuffer data) { + + } + + @Override + public IoBuffer serialize() { + IoBuffer buffer; + + int size = 0; + + synchronized (sfList) { + for (Entry entry : sfList.entrySet()) { + size += entry.getValue().getBytes().length; + } + + buffer = IoBuffer.allocate(12 + server.length() + size).order(ByteOrder.LITTLE_ENDIAN); + buffer.putShort((short) 2); + buffer.putInt(CRC.StringtoCRC("CollectionServerFirstListResponse")); + + buffer.put(getAsciiString(server)); + buffer.putInt(sfList.size()); + + for (Entry entry : sfList.entrySet()) { + buffer.put(entry.getValue().getBytes()); + + } + return buffer.flip(); + } + } +} diff --git a/src/protocol/swg/ObjControllerMessage.java b/src/protocol/swg/ObjControllerMessage.java index af68bbe7..a441cad4 100644 --- a/src/protocol/swg/ObjControllerMessage.java +++ b/src/protocol/swg/ObjControllerMessage.java @@ -55,8 +55,9 @@ public class ObjControllerMessage extends SWGMessage { public static final int SHOW_FLY_TEXT = 0x01BD; public static final int START_TASK = 0x448; public static final int ANIMATION = 0x00F2; - public static final int BUFF_BUILDER_START = 0x025C; public static final int BUFF_BUILDER_CHANGE = 0x025A; + public static final int BUFF_BUILDER_END = 0x025B; + public static final int BUFF_BUILDER_START = 0x025C; public static final int UI_PLAY_EFFECT = 0x0401; public static final int SHOW_LOOT_BOX = 0x04BC; diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java index a877944a..ef067e9c 100644 --- a/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderChangeMessage.java @@ -6,28 +6,26 @@ import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; -import resources.common.ObjControllerOpcodes; -import resources.common.StringUtilities; import resources.objects.BuffItem; public class BuffBuilderChangeMessage extends ObjControllerObject { + private boolean accepted; private int buffCost; - private int time; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; private long objectId; - private long bufferId; - private long buffRecipientId; - - private boolean accepted; - private int buffRecipientAccepted; - private Vector statBuffs = new Vector(); - + + private int time; + public BuffBuilderChangeMessage() { - + } - + public BuffBuilderChangeMessage(long objectId, long bufferId, long buffRecipientId, Vector statBuffs) { this.objectId = objectId; this.bufferId = bufferId; @@ -35,136 +33,135 @@ public class BuffBuilderChangeMessage extends ObjControllerObject { this.statBuffs = statBuffs; } - + @Override - public void deserialize(IoBuffer buffer) { - setObjectId(buffer.getLong()); - buffer.getInt(); - setBufferId(buffer.getLong()); - setBuffRecipientId(buffer.getLong()); - setTime(buffer.getInt()); - setBuffCost(buffer.getInt()); - - byte value = buffer.get(); + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); if (value == (byte) 0) setAccepted(false); else if (value == (byte) 1) setAccepted(true); - - setBuffRecipientAccepted(buffer.getInt()); - - int statSize = buffer.getInt(); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); for (int i = 0; i < statSize; i++) { BuffItem item = new BuffItem(); - - String statName = getAsciiString(buffer); + + String statName = getAsciiString(data); item.setSkillName(statName); - - int investedPoints = buffer.getInt(); + + int investedPoints = data.getInt(); item.setInvested(investedPoints); - - int maxAmount = buffer.getInt(); - item.setBonusAmount(maxAmount); - + + int entBonus = data.getInt(); + item.setEntertainerBonus(entBonus); + statBuffs.add(item); - System.out.println("Added buff item with " + investedPoints + " invested points " + " which has a bonus amount of " + maxAmount); } } - @Override - public IoBuffer serialize() { - IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); - - result.putInt(ObjControllerMessage.BUFF_BUILDER_CHANGE); - result.putLong(objectId); - - result.putInt(0); - - result.putLong(bufferId); - result.putLong(buffRecipientId); - - result.putInt(time); - result.putInt(buffCost); - - result.put((byte) ((accepted) ? 1 : 0)); - result.putInt(buffRecipientAccepted); - - result.putInt(statBuffs.size()); - - if (!statBuffs.isEmpty()) { - for (BuffItem item : statBuffs) { - result.put(getAsciiString(item.getSkillName())); - result.putInt(item.getInvested()); - result.putInt(item.getBonusAmount()); - } - } - - return result.flip(); - } - - public int getBuffCost() { - return buffCost; - } - - public void setBuffCost(int buffCost) { - this.buffCost = buffCost; - } - - public int getTime() { - return time; - } - - public void setTime(int time) { - this.time = time; - } - - public long getObjectId() { - return objectId; - } - - public void setObjectId(long objectId) { - this.objectId = objectId; - } - - public long getBufferId() { - return bufferId; - } - - public void setBufferId(long bufferId) { - this.bufferId = bufferId; - } - - public long getBuffRecipientId() { - return buffRecipientId; - } - - public void setBuffRecipientId(long buffRecipientId) { - this.buffRecipientId = buffRecipientId; - } - public boolean getAccepted() { return accepted; } - public void setAccepted(boolean accepted) { - this.accepted = accepted; + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; } public int getBuffRecipientAccepted() { return buffRecipientAccepted; } - public void setBuffRecipientAccepted(int buffRecipientAccepted) { - this.buffRecipientAccepted = buffRecipientAccepted; + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; } public Vector getStatBuffs() { return statBuffs; } + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_CHANGE); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + public void setStatBuffs(Vector statBuffs) { this.statBuffs = statBuffs; } + public void setTime(int time) { + this.time = time; + } + } diff --git a/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java new file mode 100644 index 00000000..96a959db --- /dev/null +++ b/src/protocol/swg/objectControllerObjects/BuffBuilderEndMessage.java @@ -0,0 +1,197 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ +package protocol.swg.objectControllerObjects; + +import java.nio.ByteOrder; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; + +import protocol.swg.ObjControllerMessage; +import resources.objects.BuffItem; + +public class BuffBuilderEndMessage extends ObjControllerObject { + + private boolean accepted; + private int buffCost; + + private long bufferId; + private int buffRecipientAccepted; + private long buffRecipientId; + + private long objectId; + private Vector statBuffs = new Vector(); + + private int time; + + public BuffBuilderEndMessage() { + + } + + public BuffBuilderEndMessage(BuffBuilderEndMessage endMessage) { + this.buffCost = endMessage.getBuffCost(); + this.time = endMessage.getTime(); + this.accepted = endMessage.getAccepted(); + this.buffRecipientAccepted = endMessage.getBuffRecipientAccepted(); + this.statBuffs = endMessage.getStatBuffs(); + } + + public BuffBuilderEndMessage(BuffBuilderChangeMessage changeMessage) { + this.buffRecipientId = changeMessage.getBuffRecipientId(); + this.bufferId = changeMessage.getBufferId(); + this.buffCost = changeMessage.getBuffCost(); + this.time = changeMessage.getTime(); + this.accepted = changeMessage.getAccepted(); + this.buffRecipientAccepted = changeMessage.getBuffRecipientAccepted(); + this.statBuffs = changeMessage.getStatBuffs(); + } + @Override + public void deserialize(IoBuffer data) { + setObjectId(data.getLong()); + data.getInt(); + setBufferId(data.getLong()); + setBuffRecipientId(data.getLong()); + setTime(data.getInt()); + setBuffCost(data.getInt()); + + byte value = data.get(); + if (value == (byte) 0) + setAccepted(false); + else if (value == (byte) 1) + setAccepted(true); + + setBuffRecipientAccepted(data.getInt()); + + int statSize = data.getInt(); + for (int i = 0; i < statSize; i++) { + BuffItem item = new BuffItem(); + + String statName = getAsciiString(data); + item.setSkillName(statName); + + int investedPoints = data.getInt(); + item.setInvested(investedPoints); + + int entBonus = data.getInt(); + item.setEntertainerBonus(entBonus); + + statBuffs.add(item); + } + } + + public boolean getAccepted() { + return accepted; + } + + public int getBuffCost() { + return buffCost; + } + + public long getBufferId() { + return bufferId; + } + + public int getBuffRecipientAccepted() { + return buffRecipientAccepted; + } + + public long getBuffRecipientId() { + return buffRecipientId; + } + + public long getObjectId() { + return objectId; + } + + public Vector getStatBuffs() { + return statBuffs; + } + + public int getTime() { + return time; + } + + @Override + public IoBuffer serialize() { + IoBuffer result = IoBuffer.allocate(65 + statBuffs.size()).order(ByteOrder.LITTLE_ENDIAN); + result.setAutoExpand(true); + + result.putInt(ObjControllerMessage.BUFF_BUILDER_END); + result.putLong(objectId); + + result.putInt(0); + + result.putLong(bufferId); + result.putLong(buffRecipientId); + + result.putInt(time); + result.putInt(buffCost); + + result.put((byte) ((accepted) ? 1 : 0)); + result.putInt(buffRecipientAccepted); + + result.putInt(statBuffs.size()); + + if (!statBuffs.isEmpty()) { + for (BuffItem item : statBuffs) { + result.put(getAsciiString(item.getSkillName())); + result.putInt(item.getInvested()); + result.putInt(item.getEntertainerBonus()); + } + } + + return result.flip(); + } + + public void setAccepted(boolean accepted) { + this.accepted = accepted; + } + + public void setBuffCost(int buffCost) { + this.buffCost = buffCost; + } + + public void setBufferId(long bufferId) { + this.bufferId = bufferId; + } + + public void setBuffRecipientAccepted(int buffRecipientAccepted) { + this.buffRecipientAccepted = buffRecipientAccepted; + } + + public void setBuffRecipientId(long buffRecipientId) { + this.buffRecipientId = buffRecipientId; + } + + public void setObjectId(long objectId) { + this.objectId = objectId; + } + + public void setStatBuffs(Vector statBuffs) { + this.statBuffs = statBuffs; + } + + public void setTime(int time) { + this.time = time; + } + +} diff --git a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java index 1d1ae2c5..f7533788 100644 --- a/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java +++ b/src/protocol/swg/objectControllerObjects/ObjectMenuResponse.java @@ -59,41 +59,30 @@ public class ObjectMenuResponse extends ObjControllerObject { @Override public IoBuffer serialize() { + int size = 37; + byte counter = 0; - IoBuffer result = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN); - result.setAutoExpand(true); + for (RadialOptions radialOption : radialOptions) { + size += 5 + getUnicodeString(radialOption.getDescription()).length; + } + IoBuffer result = IoBuffer.allocate(size).order(ByteOrder.LITTLE_ENDIAN); result.putInt(ObjControllerMessage.OBJECT_MENU_RESPONSE); result.putLong(ownerId); result.putInt(0); result.putLong(targetId); result.putLong(ownerId); - - int size = radialOptions.size(); - result.putInt(size); - - if(size > 0) { - byte counter = 0; - for(RadialOptions radialOption : radialOptions) { - result.put(++counter); - result.put(radialOption.getParentId()); - result.putShort(radialOption.getOptionId()); - //result.put(radialOption.getOptionType()); - result.put((byte) 3); - - if(radialOption.getDescription().length() > 0) - result.put(getUnicodeString(radialOption.getDescription())); - else - result.putInt(0); - - } + result.putInt(radialOptions.size()); + for (RadialOptions radialOption : radialOptions) { + result.put(++counter); + result.put(radialOption.getParentId()); + result.putShort(radialOption.getOptionId()); + result.put(radialOption.getOptionType()); //result.put((byte) 3); + result.put(getUnicodeString(radialOption.getDescription())); } result.put(radialCount); - int packetSize = result.position(); - result = IoBuffer.allocate(packetSize).put(result.array(), 0, packetSize); return result.flip(); - } } diff --git a/src/protocol/swg/objectControllerObjects/ShowFlyText.java b/src/protocol/swg/objectControllerObjects/ShowFlyText.java index 41325368..f47bbbb2 100644 --- a/src/protocol/swg/objectControllerObjects/ShowFlyText.java +++ b/src/protocol/swg/objectControllerObjects/ShowFlyText.java @@ -27,6 +27,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ObjControllerMessage; import resources.common.RGB; +import resources.common.StringUtilities; public class ShowFlyText extends ObjControllerObject { @@ -70,6 +71,7 @@ public class ShowFlyText extends ObjControllerObject { this.scale = scale; this.color = color; this.alternativeStructure = true; + this.displayType = displayType; } @Override @@ -117,13 +119,16 @@ public class ShowFlyText extends ObjControllerObject { result.putLong(0); result.putLong(0); result.putLong(0); - result.put(getUnicodeString(customText)); - result.putShort(xp); + result.put(getUnicodeString(customText)); // %TO? + result.putShort(xp); // %DI ? result.putLong(0); result.putFloat(scale); result.put(color.getBytes()); result.putInt(displayType); - return result.flip(); + + result.flip(); + //StringUtilities.printBytes(result.array()); + return result; } } diff --git a/src/protocol/swg/objectControllerObjects/ShowLootBox.java b/src/protocol/swg/objectControllerObjects/ShowLootBox.java index e295fc2d..432ddd14 100644 --- a/src/protocol/swg/objectControllerObjects/ShowLootBox.java +++ b/src/protocol/swg/objectControllerObjects/ShowLootBox.java @@ -23,6 +23,7 @@ package protocol.swg.objectControllerObjects; import java.nio.ByteOrder; import java.util.List; +import java.util.Vector; import org.apache.mina.core.buffer.IoBuffer; @@ -33,9 +34,15 @@ import resources.common.StringUtilities; public class ShowLootBox extends ObjControllerObject { private long playerId; - private SWGObject[] rewards; + private Vector rewards; + private SWGObject reward; - public ShowLootBox(long playerId, SWGObject[] rewards) { + public ShowLootBox(long playerId, SWGObject reward) { + this.playerId = playerId; + this.rewards = rewards; + } + + public ShowLootBox(long playerId, Vector rewards) { this.playerId = playerId; this.rewards = rewards; } @@ -47,19 +54,24 @@ public class ShowLootBox extends ObjControllerObject { @Override public IoBuffer serialize() { - // Controller Type = 11 - IoBuffer buffer = IoBuffer.allocate(20 + (rewards.length * 8)).order(ByteOrder.LITTLE_ENDIAN); + IoBuffer buffer; + + if (rewards != null) + buffer = IoBuffer.allocate(20 + (rewards.size() * 8)).order(ByteOrder.LITTLE_ENDIAN); + + else + buffer = IoBuffer.allocate(28).order(ByteOrder.LITTLE_ENDIAN); buffer.putInt(ObjControllerMessage.SHOW_LOOT_BOX); buffer.putLong(playerId); buffer.putInt(0); // 1 for a black background on icon, 0 or 2 for transparent (default) - if (rewards.length == 1) { + if (rewards == null) { buffer.putInt(1); - buffer.putLong(rewards[0].getObjectId()); + buffer.putLong(reward.getObjectId()); } else { - buffer.putInt(rewards.length); + buffer.putInt(rewards.size()); for(SWGObject obj : rewards) { buffer.putLong(obj.getObjectID()); } diff --git a/src/protocol/swg/objectControllerObjects/TargetUpdate.java b/src/protocol/swg/objectControllerObjects/TargetUpdate.java index bfac2b1b..bd01c8a8 100644 --- a/src/protocol/swg/objectControllerObjects/TargetUpdate.java +++ b/src/protocol/swg/objectControllerObjects/TargetUpdate.java @@ -39,7 +39,7 @@ public class TargetUpdate extends ObjControllerObject { @Override public IoBuffer serialize() { - // TODO Auto-generated method stub + return null; } diff --git a/src/resources/common/BuffBuilder.java b/src/resources/common/BuffBuilder.java index c376ae5a..83b2d9fb 100644 --- a/src/resources/common/BuffBuilder.java +++ b/src/resources/common/BuffBuilder.java @@ -1,70 +1,92 @@ +/******************************************************************************* + * 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; public class BuffBuilder { - private String statName; - private String statAffects; - private int maxTimesApplied; private int affectAmount; - private String requiredExperience; - - private int entBonus; - + private String category; + private int cost; + private int maxTimesApplied; + private String requiredExpertise; + private String statAffects; + private String statName; + public BuffBuilder() { - - } - public String getStatName() { - return statName; - } - - public void setStatName(String statName) { - this.statName = statName; - } - - public String getStatAffects() { - return statAffects; - } - - public void setStatAffects(String statAffects) { - this.statAffects = statAffects; - } - - public int getMaxTimesApplied() { - return maxTimesApplied; - } - - public void setMaxTimesApplied(int maxTimesApplied) { - this.maxTimesApplied = maxTimesApplied; } public int getAffectAmount() { return affectAmount; } + public String getCategory() { + return category; + } + + public int getCost() { + return this.cost; + } + + public int getMaxTimesApplied() { + return maxTimesApplied; + } + + public String getRequiredExpertise() { + return requiredExpertise; + } + + public String getStatAffects() { + return statAffects; + } + + public String getStatName() { + return statName; + } + public void setAffectAmount(int affectAmount) { this.affectAmount = affectAmount; } - public String getRequiredExperience() { - return requiredExperience; + public void setCategory(String category) { + this.category = category; } - public void setRequiredExperience(String requiredExperience) { - this.requiredExperience = requiredExperience; - } - - public int getTotalAffected() { - // 10 * 10 = 100 - int totalAffected = getMaxTimesApplied() * getAffectAmount(); - Console.println("Total Affected: " + totalAffected + getEntBonus()); - return totalAffected + getEntBonus(); + public void setCost(int cost) { + this.cost = cost; } - public int getEntBonus() { - return entBonus; + public void setMaxTimesApplied(int maxTimesApplied) { + this.maxTimesApplied = maxTimesApplied; } - public void setEntBonus(int entBonus) { - this.entBonus = entBonus; + public void setRequiredExpertise(String requiredExpertise) { + this.requiredExpertise = requiredExpertise; + } + + public void setStatAffects(String statAffects) { + this.statAffects = statAffects; + } + + public void setStatName(String statName) { + this.statName = statName; } } diff --git a/src/resources/common/MathUtilities.java b/src/resources/common/MathUtilities.java index 8cf73cc0..8decf30b 100644 --- a/src/resources/common/MathUtilities.java +++ b/src/resources/common/MathUtilities.java @@ -21,6 +21,8 @@ ******************************************************************************/ package resources.common; +import java.math.BigDecimal; + import engine.resources.scene.*; public class MathUtilities { @@ -43,5 +45,27 @@ public class MathUtilities { q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); } + + /** + * Converts seconds to a whole hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToWholeHours(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + return dec.divide(new BigDecimal(3600), BigDecimal.ROUND_FLOOR).intValue(); + } + + /** + * Converts seconds to minutes of the hour. + * @author Waverunner + * @param seconds + * @return hour(s) + */ + public static int secondsToHourMinutes(int seconds) { + BigDecimal dec = new BigDecimal(seconds); + return dec.remainder(new BigDecimal(3600)).divide(new BigDecimal(60), BigDecimal.ROUND_FLOOR).intValue(); + } } diff --git a/src/resources/common/ObjControllerOpcodes.java b/src/resources/common/ObjControllerOpcodes.java index 5834038e..64636512 100644 --- a/src/resources/common/ObjControllerOpcodes.java +++ b/src/resources/common/ObjControllerOpcodes.java @@ -27,11 +27,13 @@ public class ObjControllerOpcodes { public static final int DATA_TRANSFORM_WITH_PARENT = 0xF1000000; public static final int COMMAND_QUEUE_ENQUEUE = 0x16010000; public static final int COMMAND_QUEUE_REMOVE = 0x17010000; - public static final int HOVER_TARGET = 0x26010000; // lookAtTarget - public static final int TARGET_UPDATE = 0xC5040000; // intendedTarget + public static final int lookAtTarget = 0x26010000; + public static final int intendedTarget = 0xC5040000; public static final int OBJECT_MENU_REQUEST = 0x46010000; public static final int SECURE_TRADE = 0x15010000; public static final int BUFF_BUILDER_CHANGE = 0x5A020000; + public static final int BUFF_BUILDER_END = 0x5B020000; public static final int MISSION_LIST_REQUEST = 0xF5000000; public static final int ChangeRoleIconChoice = 0x4D040000; + } diff --git a/src/resources/common/Performance.java b/src/resources/common/Performance.java index 9100e2f2..4179f4be 100644 --- a/src/resources/common/Performance.java +++ b/src/resources/common/Performance.java @@ -1,3 +1,24 @@ +/******************************************************************************* + * Copyright (c) 2013 + * + * This File is part of NGECore2. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * Using NGEngine to work with NGECore2 is making a combined work based on NGEngine. + * Therefore all terms and conditions of the GNU Lesser General Public License cover the combination. + ******************************************************************************/ package resources.common; public class Performance { diff --git a/src/resources/common/PerformanceEffect.java b/src/resources/common/PerformanceEffect.java new file mode 100644 index 00000000..09afddd0 --- /dev/null +++ b/src/resources/common/PerformanceEffect.java @@ -0,0 +1,108 @@ +/******************************************************************************* + * 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; + +public class PerformanceEffect { + + private int effectActionCost; + private float effectDuration; + private String name; + private String performanceType; + private boolean requiredPerforming; + private int requiredSkillModValue; + private int targetType; + private boolean music; + private boolean dance; + + public PerformanceEffect() { } + + public int getEffectActionCost() { + return effectActionCost; + } + public float getEffectDuration() { + return effectDuration; + } + public String getName() { + return name; + } + public int getRequiredSkillModValue() { + return requiredSkillModValue; + } + public int getTargetType() { + return targetType; + } + public String getPerformanceType() { + return performanceType; + } + public boolean isRequiredPerforming() { + return requiredPerforming; + } + public void setEffectActionCost(int effectActionCost) { + this.effectActionCost = effectActionCost; + } + public void setEffectDuration(float effectDuration) { + this.effectDuration = effectDuration; + } + public void setName(String name) { + this.name = name; + } + public void setPerformanceType(String performanceType) { + this.performanceType = performanceType; + + if (performanceType.contains(",")) { + String[] array = performanceType.split(","); + if(array.length < 2) + return; + + this.dance = true; + this.music = true; + } + else if (performanceType.equals("music")) { this.music = true; } + else if (performanceType.equals("dance")) { this.dance = true; } + } + public void setRequiredPerforming(boolean requiredPerforming) { + this.requiredPerforming = requiredPerforming; + } + public void setRequiredSkillModValue(int requiredSkillModValue) { + this.requiredSkillModValue = requiredSkillModValue; + } + public void setTargetType(int targetType) { + this.targetType = targetType; + } + + public boolean isMusic() { + return music; + } + + public void setMusic(boolean music) { + this.music = music; + } + + public boolean isDance() { + return dance; + } + + public void setDance(boolean dance) { + this.dance = dance; + } + +} diff --git a/src/resources/common/Stf.java b/src/resources/common/Stf.java index 1ebfc72a..468960f6 100644 --- a/src/resources/common/Stf.java +++ b/src/resources/common/Stf.java @@ -80,6 +80,20 @@ public class Stf extends Delta { } } + public String getString() { + synchronized(objectMutex) { + return ("@" + stfFilename + ":" + stfName); + } + } + + public void setString(String stf) { + synchronized(objectMutex) { + stf = stf.replace("@", ""); + stfFilename.set(stf.split(":")[0]); + stfName.set(stf.split(":")[1]); + } + } + public byte[] getBytes() { synchronized(objectMutex) { int size = stfFilename.getBytes().length + 4 + stfName.getBytes().length; diff --git a/src/resources/datatables/Posture.java b/src/resources/datatables/Posture.java new file mode 100644 index 00000000..312337f1 --- /dev/null +++ b/src/resources/datatables/Posture.java @@ -0,0 +1,21 @@ +package resources.datatables; + +public class Posture { + // Posture.iff + public static final int Invalid = -1; + public static final int Upright = 0; + public static final int Crouched = 1; + public static final int Prone = 2; + public static final int Sneaking = 3; + public static final int Blocking = 4; + public static final int Climbing = 5; + public static final int Flying = 6; + public static final int LyingDown = 7; + public static final int Sitting = 8; + public static final int SkillAnimating = 9; + public static final int DrivingVehicle = 10; + public static final int RidingCreature = 11; + public static final int KnockedDown = 12; + public static final int Incapacitated = 13; + public static final int Dead = 14; +} diff --git a/src/resources/objects/BuffItem.java b/src/resources/objects/BuffItem.java index 8d647d4a..050c21e9 100644 --- a/src/resources/objects/BuffItem.java +++ b/src/resources/objects/BuffItem.java @@ -16,47 +16,56 @@ * 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. + * 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.objects; public class BuffItem { - private String skillName; + private int affectAmount; + private int entertainerBonus; private int invested; - private int bonusAmount; // expertise bonus (50%*4 = 200) which would then result in bonusAmount + (maxTimesApplied * affectAmount) = result - + private String skillName; + public BuffItem() { - + } - - public BuffItem(String skillName, int invested, int amount) { + + public BuffItem(String skillName, int invested, int entBonus) { this.skillName = skillName; this.invested = invested; - this.bonusAmount = amount; + this.entertainerBonus = entBonus; } - public String getSkillName() { - return skillName; + public int getAffectAmount() { + return affectAmount; } - public void setSkillName(String skillName) { - this.skillName = skillName; + public int getEntertainerBonus() { + return entertainerBonus; } public int getInvested() { return invested; } + public String getSkillName() { + return skillName; + } + + public void setAffectAmount(int amount) { + this.affectAmount = amount; + } + + public void setEntertainerBonus(int entertainerBonus) { + this.entertainerBonus = entertainerBonus; + } + public void setInvested(int invested) { this.invested = invested; } - public int getBonusAmount() { - return bonusAmount; - } - - public void setBonusAmount(int amount) { - this.bonusAmount = amount; + public void setSkillName(String skillName) { + this.skillName = skillName; } } diff --git a/src/resources/objects/SkillMod.java b/src/resources/objects/SkillMod.java new file mode 100644 index 00000000..0af11b6b --- /dev/null +++ b/src/resources/objects/SkillMod.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * 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.objects; + +import org.apache.mina.core.buffer.IoBuffer; + +import com.sleepycat.persist.model.Persistent; + +@Persistent +public class SkillMod extends Delta { + + private int base; + private int modifier; + private String name; + + public SkillMod() { + } + + public SkillMod(String name, int base, int modifier) { + this.name = name; + this.base = base; + this.modifier = modifier; + } + + public int getBase() { + return base; + } + + public void setBase(int base) { + this.base = base; + } + + public int getModifier() { + return modifier; + } + + public void setModifier(int modifier) { + this.modifier = modifier; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public byte[] getBytes() { + IoBuffer buffer = createBuffer(name.length() + 10); + + buffer.put(getAsciiString(name)); + buffer.putInt(base); + buffer.putInt(modifier); + + return buffer.array(); + } + +} diff --git a/src/resources/objects/creature/CreatureMessageBuilder.java b/src/resources/objects/creature/CreatureMessageBuilder.java index 8f7eb18a..e7c25f85 100644 --- a/src/resources/objects/creature/CreatureMessageBuilder.java +++ b/src/resources/objects/creature/CreatureMessageBuilder.java @@ -31,9 +31,8 @@ import com.sleepycat.persist.model.Persistent; import engine.resources.common.CRC; import resources.objects.Buff; import resources.objects.ObjectMessageBuilder; +import resources.objects.SkillMod; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; - import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; @@ -158,18 +157,22 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(0); } else { buffer.putInt(creature.getSkillMods().size()); - buffer.putInt(creature.getSkillModsUpdateCounter()); + buffer.putInt(creature.getSkillMods().getUpdateCounter()); - for(SkillMod skillMod : creature.getSkillMods().get()) { + for(SkillMod skillMod : creature.getSkillMods()) { buffer.put((byte) 0); - buffer.put(getAsciiString(skillMod.getSkillModString())); + buffer.put(getAsciiString(skillMod.getName())); buffer.putInt(skillMod.getBase()); buffer.putInt(skillMod.getModifier()); } } buffer.putFloat(creature.getSpeedMultiplierBase()); buffer.putFloat(creature.getSpeedMultiplierMod()); - buffer.putLong(creature.getListenToId()); + + if(creature.getPerformanceListenee() != null) + buffer.putLong(creature.getPerformanceListenee().getObjectId()); + else + buffer.putLong(0); buffer.putFloat(creature.getRunSpeed()); @@ -196,7 +199,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putInt(1); } } - buffer.putInt(0); // xp bar value + buffer.putInt(creature.getXpBarValue()); // xp bar value int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -213,21 +216,23 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN); buffer.setAutoExpand(true); buffer.putShort((short) 0x23); - buffer.putInt(0x43); + buffer.putInt(0x43); // serverId - buffer.putInt(0); // defenders list unused in NGE - buffer.putInt(0); + buffer.putShort((short) 0); // detaiLStfFilename + buffer.putInt(0); // detailStfSpacer + buffer.putShort((short) 0); // detailStfName + + // TANO 6 lists TODO: research buffer.put(creature.getCombatFlag()); - - buffer.putLong(0); - buffer.putLong(0); - buffer.putLong(0); // Vehicle vars or TANO 6 vars TODO: research - buffer.putLong(0); - buffer.putInt(0); + + buffer.putLong(0); //List possibly defenders list + buffer.putInt(0); //Int + buffer.putLong(0); //List + buffer.putLong(0); //List + buffer.putLong(0); //List buffer.putShort(creature.getLevel()); - //buffer.putShort((short) 90); buffer.putInt(creature.getGrantedHealth()); // From player_level.iff. Ranges from 0-2000 as you level, consistent with that table. //0A @@ -253,8 +258,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer.putLong(creature.getInviteCounter()); buffer.putInt(creature.getGuildId()); - //10 - buffer.putLong(creature.getTargetId()); + + buffer.putLong(creature.getLookAtTarget()); // lookAtTarget 0x10 + buffer.putLong(creature.getIntendedTarget()); // intendedTarget 0x11 buffer.put(creature.getMoodId()); buffer.putInt(creature.getPerformanceCounter()); /* @@ -262,9 +268,6 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { * in the CREO, otherwise the evul note bubbles appear */ buffer.putInt((creature.getPerformanceType()) ? 0 : creature.getPerformanceId()); - - buffer.putInt(0); // unks - buffer.putInt(0); buffer.putInt(6); // Current HAM buffer.putInt(creature.getHamListCounter()); @@ -332,9 +335,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.putShort((short) 0); + buffer.putShort((short) 0); // costume //buffer.put(getAsciiString("appearance/gungan_m.sat")); - buffer.put((byte) 1); // 0 = cloak + buffer.put((byte) 1); // visible boolean. default: true. cloaked if false. if(creature.getBuffList().isEmpty()) { buffer.putInt(0); @@ -377,10 +380,15 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - buffer.put((byte) 0); // crashes if 1 + buffer.put((byte) 0); // performing? boolean buffer.put(creature.getDifficulty()); - buffer.putInt(0xFFFFFFFF); // -1 normal appearance, 0 hologram - buffer.put((byte) 1); // crashes if 0 + + if(creature.isHologram()) + buffer.putInt(0); + else + buffer.putInt(0xFFFFFFFF); + + buffer.put((byte) 1); // visibleOnRadar? boolean buffer.put((byte) 0); // no effect for 1? buffer.put((byte) 0); // no effect for 1? @@ -413,8 +421,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } } - buffer.putInt(0); // unk list - buffer.putInt(0); + buffer.putLong(0); // unk long int size = buffer.position(); buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size); @@ -665,16 +672,22 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildTargetDelta(long targetId) { - + public IoBuffer buildLookAtTargetDelta(long targetId) { IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); buffer.putLong(targetId); int size = buffer.position(); buffer.flip(); buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x10, buffer, size + 4); - return buffer; - + } + + public IoBuffer buildIntendedTargetDelta(long targetId) { + IoBuffer buffer = bufferPool.allocate(8, false).order(ByteOrder.LITTLE_ENDIAN); + buffer.putLong(targetId); + int size = buffer.position(); + buffer.flip(); + buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x11, buffer, size + 4); + return buffer; } public IoBuffer buildHealthDelta(int health) { @@ -823,7 +836,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } - public IoBuffer buildAddSkillModDelta(String name, int base) { + /*public IoBuffer buildAddSkillModDelta(String name, int base) { CreatureObject creature = (CreatureObject) object; @@ -841,9 +854,9 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; - } + }*/ - public IoBuffer buildRemoveSkillModDelta(String name, int base) { + /*public IoBuffer buildRemoveSkillModDelta(String name, int base) { CreatureObject creature = (CreatureObject) object; @@ -861,7 +874,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { return buffer; - } + }*/ public IoBuffer buildAddSkillDelta(String name) { @@ -1050,13 +1063,7 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { buffer = createDelta("CREO", (byte) 6, (short) 1, (short) 0x1C, buffer, size + 4); return buffer; } - - @Override - public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { - // TODO Auto-generated method stub - - } - + public IoBuffer buildAddEquipmentDelta(TangibleObject item) { CreatureObject creature = (CreatureObject) object; @@ -1168,11 +1175,36 @@ public class CreatureMessageBuilder extends ObjectMessageBuilder { } + public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) { + switch (viewType) { + case 1: + case 3: + case 4: { + switch(updateType) { + case 3: { + buffer = createDelta("CREO", (byte) 4, (short) 1, (byte) 3, buffer.flip(), buffer.array().length + 4); + + if (object.getClient() != null && object.getClient().getSession() != null) { + //object.getClient().getSession().write(buffer); + } + break; + } + + } + } + case 6: + case 8: + case 9: + default: + { + return; + } + } + } + @Override public void sendBaselines() { } - - } diff --git a/src/resources/objects/creature/CreatureObject.java b/src/resources/objects/creature/CreatureObject.java index 6382356a..2d1844c9 100644 --- a/src/resources/objects/creature/CreatureObject.java +++ b/src/resources/objects/creature/CreatureObject.java @@ -31,6 +31,7 @@ import org.apache.mina.core.buffer.IoBuffer; import protocol.swg.ChatSystemMessage; import protocol.swg.ObjControllerMessage; +import protocol.swg.PlayClientEffectObjectMessage; import protocol.swg.PlayMusicMessage; import protocol.swg.UpdatePostureMessage; import protocol.swg.UpdatePVPStatusMessage; @@ -46,17 +47,17 @@ import engine.clients.Client; import resources.objects.Buff; import resources.objects.DamageOverTime; import resources.objects.SWGList; +import resources.objects.SkillMod; import engine.resources.objects.IPersistent; import engine.resources.objects.MissionCriticalObject; import engine.resources.objects.SWGObject; -import engine.resources.objects.SkillMod; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; import resources.objects.tangible.TangibleObject; import resources.objects.weapon.WeaponObject; -@Entity(version=2) +@Entity(version=3) public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent @@ -85,7 +86,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { private int skillModsUpdateCounter = 0; private float speedMultiplierBase = 1; private float speedMultiplierMod = 1; - private long listenToId = 0; private float runSpeed = (float) 7.3; private float slopeModAngle = 1; private float slopeModPercent = 1; @@ -113,16 +113,14 @@ public class CreatureObject extends TangibleObject implements IPersistent { private String inviteSenderName; private long inviteCounter = 0; private int guildId = 0; + private long lookAtTarget = 0; private long targetId = 0; private byte moodId = 0; private int performanceCounter = 0; private int performanceId = 0; - //FIXME: this is a bit of a hack. + private boolean hologram = false; private boolean performanceType = false; - //FIXME: hmm.. or persistent? - @NotPersistent private boolean acceptBandflourishes = true; - @NotPersistent private boolean groupDance = true; private CreatureObject performanceWatchee; private CreatureObject performanceListenee; @@ -161,10 +159,18 @@ public class CreatureObject extends TangibleObject implements IPersistent { @NotPersistent private ScheduledFuture inspirationTick; + @NotPersistent + private ScheduledFuture spectatorTask; + private boolean staticNPC = false; // temp @NotPersistent private int flourishCount = 0; + @NotPersistent + private boolean performingEffect; + + private int coverCharge; + public CreatureObject(long objectID, Planet planet, Point3D position, Quaternion orientation, String Template) { super(objectID, planet, Template, position, orientation); messageBuilder = new CreatureMessageBuilder(this); @@ -354,11 +360,10 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.posture = posture; } - IoBuffer postureDelta = messageBuilder.buildPostureDelta(posture); Posture postureUpdate = new Posture(getObjectID(), posture); ObjControllerMessage objController = new ObjControllerMessage(0x1B, postureUpdate); - notifyObservers(postureDelta, true); + notifyObservers(messageBuilder.buildPostureDelta(posture), true); notifyObservers(objController, true); if (needsStopPerformance) { @@ -376,6 +381,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void stopPerformance() { String type = ""; synchronized(objectMutex) { + // TODO: Minimum check to wait for song to finish before stopping... ? setPerformanceId(0,true); setPerformanceCounter(0); setCurrentAnimation(""); @@ -412,7 +418,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { next.setMoodAnimation(""); } if (next == this) { continue; } - next.sendSystemMessage("@performance:" + type + "_stop_other",(byte)0); + if(performanceType) { next.sendSystemMessage("You stop watching " + getCustomName() + ".",(byte)0); } + else { next.sendSystemMessage("You stop listening to " + getCustomName() + ".",(byte)0); } + next.getSpectatorTask().cancel(true); } //not sure if this behaviour is correct. might need fixing later. performanceAudience = new SWGList(); @@ -427,11 +435,15 @@ public class CreatureObject extends TangibleObject implements IPersistent { } public ScheduledFuture getInspirationTick() { - return inspirationTick; + synchronized(objectMutex) { + return inspirationTick; + } } public void setInspirationTick(ScheduledFuture inspirationTick) { - this.inspirationTick = inspirationTick; + synchronized(objectMutex) { + this.inspirationTick = inspirationTick; + } } @Override @@ -547,7 +559,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { public SkillMod getSkillMod(String name) { synchronized(skillMods.getMutex()) { for(SkillMod skillMod : skillMods.get()) { - if(skillMod.getSkillModString().equals(name)) + if(skillMod.getName().equals(name)) return skillMod; } } @@ -562,18 +574,21 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void addSkillMod(String name, int base) { if(getSkillMod(name) == null) { + // TODO: Send skill mods delta in sendListDelta SkillMod skillMod = new SkillMod(); skillMod.setBase(base); - skillMod.setSkillModString(name); + skillMod.setName(name); skillMod.setModifier(0); skillMods.add(skillMod); } else { + SkillMod mod = getSkillMod(name); mod.setBase(mod.getBase() + base); - if(getClient() != null) { + + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } + }*/ } } @@ -589,24 +604,23 @@ public class CreatureObject extends TangibleObject implements IPersistent { if(mod.getBase() <= 0) { removeSkillMod(mod); } else { - if(getClient() != null) { + skillMods.set(skillMods.indexOf(mod), mod); + System.out.println("Deducted mod!"); + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); getClient().getSession().write(messageBuilder.buildAddSkillModDelta(name, mod.getBase())); - } + }*/ } } public void removeSkillMod(SkillMod mod) { - skillMods.remove(mod); - if(getClient() != null) { + /*if(getClient() != null) { setSkillModsUpdateCounter((short) (getSkillModsUpdateCounter() + 1)); - getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getSkillModString(), mod.getBase())); - } - - + getClient().getSession().write(messageBuilder.buildRemoveSkillModDelta(mod.getName(), mod.getBase())); + }*/ } public short getSkillModsUpdateCounter() { @@ -653,18 +667,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { notifyObservers(speedDelta, true); } - public long getListenToId() { - synchronized(objectMutex) { - return listenToId; - } - } - - public void setListenToId(long listenToId) { - synchronized(objectMutex) { - this.listenToId = listenToId; - } - } - public float getRunSpeed() { synchronized(objectMutex) { return runSpeed; @@ -957,23 +959,43 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.guildId = guildId; } } - - public long getTargetId() { + + public long getLookAtTarget() { + synchronized(objectMutex) { + return lookAtTarget; + } + } + + public void setLookAtTarget(long lookAtTarget) { + synchronized(objectMutex) { + this.lookAtTarget = lookAtTarget; + } + + notifyObservers(messageBuilder.buildLookAtTargetDelta(lookAtTarget), true); + } + + public long getIntendedTarget() { synchronized(objectMutex) { return targetId; } } - public void setTargetId(long targetId) { + public void setIntendedTarget(long intendedTarget) { synchronized(objectMutex) { - this.targetId = targetId; + this.targetId = intendedTarget; } - IoBuffer targetDelta = messageBuilder.buildTargetDelta(targetId); - notifyObservers(targetDelta, false); - + notifyObservers(messageBuilder.buildIntendedTargetDelta(intendedTarget), true); } - + + public long getTargetId() { + return getIntendedTarget(); + } + + public void setTargetId(long targetId) { + setIntendedTarget(targetId); + } + public long getInviteCounter() { synchronized(objectMutex) { return inviteCounter; @@ -1149,7 +1171,7 @@ public class CreatureObject extends TangibleObject implements IPersistent { */ destination.getSession().write(upvpm.serialize()); - UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), (byte) 0); + UpdatePostureMessage upm = new UpdatePostureMessage(getObjectID(), getPosture()); destination.getSession().write(upm.serialize()); } } @@ -1504,7 +1526,11 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void removeAudience(CreatureObject audienceMember) { synchronized(objectMutex) { if (performanceAudience == null) { return; } - performanceAudience.remove(audienceMember); + if (audienceMember.getInspirationTick() != null) + audienceMember.getInspirationTick().cancel(true); + + if(performanceAudience.contains(audienceMember)) + performanceAudience.remove(audienceMember); // SWGList error } } @@ -1518,9 +1544,9 @@ public class CreatureObject extends TangibleObject implements IPersistent { synchronized(objectMutex) { this.performanceWatchee = performanceWatchee; } - // not sure at this point if it makes a difference really. - // on Live, an empty CREO4 was sent, at least when listenToId was empty. - //getClient().getSession().write(messageBuilder.buildListenToId(0)); + + //if(this.performanceListenee == null) + //getClient().getSession().write(messageBuilder.buildListenToId(0)); } public CreatureObject getPerformanceListenee() { @@ -1532,10 +1558,8 @@ public class CreatureObject extends TangibleObject implements IPersistent { public void setPerformanceListenee(CreatureObject performanceListenee) { synchronized(objectMutex) { this.performanceListenee = performanceListenee; - //possibly redundant, need to research this further. - this.listenToId = performanceListenee.getObjectId(); } - getClient().getSession().write(messageBuilder.buildListenToId(this.listenToId)); + getClient().getSession().write(messageBuilder.buildListenToId(performanceListenee.getObjectId())); } @@ -1619,7 +1643,6 @@ public class CreatureObject extends TangibleObject implements IPersistent { this.appearanceEquipmentListUpdateCounter = appearanceEquipmentListUpdateCounter; } } - public int getXpBarValue() { synchronized(objectMutex) { return xpBarValue; @@ -1633,4 +1656,51 @@ public class CreatureObject extends TangibleObject implements IPersistent { getClient().getSession().write(messageBuilder.buildXPBarDelta(xpBarValue)); } + public ScheduledFuture getSpectatorTask() { + synchronized(objectMutex) { + return spectatorTask; + } + } + + public void setSpectatorTask(ScheduledFuture spectatorTask) { + synchronized(objectMutex) { + this.spectatorTask = spectatorTask; + } + } + + public boolean isPerformingEffect() { + synchronized(objectMutex) { + return performingEffect; + } + } + + public void setPerformingEffect(boolean hasEffect) { + synchronized(objectMutex) { + this.performingEffect = hasEffect; + } + } + + public void setHologram(boolean isHologram) { + synchronized(objectMutex) { + this.hologram = isHologram; + } + } + + public boolean isHologram() { + synchronized(objectMutex) { + return hologram; + } + } + + public int getCoverCharge() { + synchronized(objectMutex) { + return coverCharge; + } + } + + public void setCoverCharge(int coverCharge) { + synchronized (objectMutex) { + this.coverCharge = coverCharge; + } + } } diff --git a/src/resources/objects/guild/GuildObject.java b/src/resources/objects/guild/GuildObject.java index a1fe7edb..5890756b 100644 --- a/src/resources/objects/guild/GuildObject.java +++ b/src/resources/objects/guild/GuildObject.java @@ -46,12 +46,11 @@ import com.sleepycat.persist.model.NotPersistent; import engine.clients.Client; import engine.resources.objects.IPersistent; -import engine.resources.objects.SWGObject; import engine.resources.scene.Planet; import engine.resources.scene.Point3D; import engine.resources.scene.Quaternion; -@Entity(version=0) +@Entity(version=1) public class GuildObject extends UniverseObject implements IPersistent { protected NGECore core; @@ -63,6 +62,8 @@ public class GuildObject extends UniverseObject implements IPersistent { @NotPersistent private Transaction txn; + private long nextInstanceId = 0; + // GILD 3 private float complexity = 0x803F0F00; private String STFFile = "string_id_table"; @@ -281,6 +282,12 @@ public class GuildObject extends UniverseObject implements IPersistent { } } + public synchronized long getNextInstanceId() { + long ret = nextInstanceId; + nextInstanceId++; + return ret; + } + @Override public void sendBaselines(Client destination) { destination.getSession().write(messageBuilder.buildBaseline3()); diff --git a/src/resources/objects/player/PlayerObject.java b/src/resources/objects/player/PlayerObject.java index 1e47aeaf..94bb6b4b 100644 --- a/src/resources/objects/player/PlayerObject.java +++ b/src/resources/objects/player/PlayerObject.java @@ -233,8 +233,8 @@ public class PlayerObject extends IntangibleObject { synchronized(objectMutex) { xpExists = xpList.containsKey(type); xpList.put(type, amount); - Console.println("Put " + type + " exp of " + amount + " in the map."); - Console.println("Map is now: " + xpList.get(type).intValue()); + //Console.println("Put " + type + " exp of " + amount + " in the map."); + //Console.println("Map is now: " + xpList.get(type).intValue()); } if (getContainer() != null && getContainer().getClient() != null && getContainer().getClient().getSession() != null) { @@ -687,7 +687,9 @@ public class PlayerObject extends IntangibleObject { } public String getSpouseName() { - return spouse; + synchronized(objectMutex) { + return spouse; + } } public void setSpouseName(String spouse) { diff --git a/src/resources/objects/tangible/TangibleObject.java b/src/resources/objects/tangible/TangibleObject.java index 587daa91..8c579480 100644 --- a/src/resources/objects/tangible/TangibleObject.java +++ b/src/resources/objects/tangible/TangibleObject.java @@ -321,6 +321,18 @@ public class TangibleObject extends SWGObject { } } + public void showFlyText(String stfFile, String stfString, String customText, int xp, float scale, RGB color, int displayType, int unkInt) { + //Set observers = getObservers(); + + if (getClient() != null) { + getClient().getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); + } + + /*for (Client client : observers) { + client.getSession().write((new ObjControllerMessage(0x0000000B, new ShowFlyText(client.getParent().getObjectID(), getObjectID(), unkInt, 1, 1, -1, stfFile, stfString, customText, xp, scale, color, displayType))).serialize()); + }*/ + } + public void playEffectObject(String effectFile, String commandString) { notifyObservers(new PlayClientEffectObjectMessage(effectFile, getObjectID(), commandString), true); } diff --git a/src/services/BuffService.java b/src/services/BuffService.java index 76948e89..aa822001 100644 --- a/src/services/BuffService.java +++ b/src/services/BuffService.java @@ -60,28 +60,52 @@ public class BuffService implements INetworkDispatch { } - public void addBuffToCreature(final CreatureObject creature, String buffName) { + public void addBuffToCreature(CreatureObject creature, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New AddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addBuffToCreature(creature, buffName, creature); + } + + public boolean addBuffToCreature(CreatureObject target, String buffName, CreatureObject buffer) { /*if(!FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) { //System.out.println("Buff script doesnt exist for: " + buffName); return; }*/ - final Buff buff = new Buff(buffName, creature.getObjectID()); + final Buff buff = new Buff(buffName, buffer.getObjectID()); if(buff.isGroupBuff()) { - addGroupBuff(creature, buffName); + addGroupBuff(buffer, buffName, buffer); + return true; } else { - doAddBuff(creature, buffName); + doAddBuff(target, buffName, buffer); + return true; } } - public Buff doAddBuff(final CreatureObject creature, String buffName) { + public Buff doAddBuff(final CreatureObject target, String buffName, CreatureObject buffer) { - final Buff buff = new Buff(buffName, creature.getObjectID()); - buff.setTotalPlayTime(((PlayerObject) creature.getSlottedObject("ghost")).getTotalPlayTime()); + if (target.getPosition().getDistance(buffer.getPosition()) > 20) { + return null; + } + if (!core.simulationService.checkLineOfSight(buffer, target)) { + return null; + } + + final Buff buff = new Buff(buffName, target.getObjectID()); + buff.setTotalPlayTime(((PlayerObject) target.getSlottedObject("ghost")).getTotalPlayTime()); + + if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) + core.scriptService.callScript("scripts/buffs/", buffName, "setup", core, buffer, buff); - for (final Buff otherBuff : creature.getBuffList()) { + for (final Buff otherBuff : target.getBuffList()) { if (buff.getGroup1().equals(otherBuff.getGroup1())) if (buff.getPriority() >= otherBuff.getPriority()) { if (buff.getBuffName().equals(otherBuff.getBuffName())) { @@ -89,19 +113,18 @@ public class BuffService implements INetworkDispatch { if(otherBuff.getStacks() < otherBuff.getMaxStacks()) { buff.setStacks(otherBuff.getStacks() + 1); - if(creature.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack - creature.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); + if(target.getDotByBuff(otherBuff) != null) // reset duration when theres a dot stack + target.getDotByBuff(otherBuff).setStartTime(buff.getStartTime()); } else { buff.setStacks(buff.getMaxStacks()); } - - if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) { - return null; - } + if (buff.getDuration() != -1.0) + if (otherBuff.getRemainingDuration() > buff.getDuration() && otherBuff.getStacks() >= otherBuff.getMaxStacks()) + return null; } - removeBuffFromCreature(creature, otherBuff); + removeBuffFromCreature(target, otherBuff); break; } else { System.out.println("buff not added:" + buffName); @@ -110,9 +133,9 @@ public class BuffService implements INetworkDispatch { } if(FileUtilities.doesFileExist("scripts/buffs/" + buffName + ".py")) - core.scriptService.callScript("scripts/buffs/", "setup", buffName, core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buffName, "add", core, target, buff); - creature.addBuff(buff); + target.addBuff(buff); if(buff.getDuration() > 0) { @@ -121,7 +144,7 @@ public class BuffService implements INetworkDispatch { @Override public void run() { - removeBuffFromCreature(creature, buff); + removeBuffFromCreature(target, buff); } @@ -133,7 +156,7 @@ public class BuffService implements INetworkDispatch { } for (String effect : buff.getParticleEffect().split(",")) { - creature.playEffectObject(effect, buff.getBuffName()); + target.playEffectObject(effect, buff.getBuffName()); } if (!buff.getCallback().equals("")) { @@ -145,7 +168,7 @@ public class BuffService implements INetworkDispatch { PyObject method = core.scriptService.getMethod("scripts/buffs/", buff.getBuffName(), buff.getCallback()); if (method != null && method.isCallable()) { - method.__call__(Py.java2py(core), Py.java2py(creature), Py.java2py(buff)); + method.__call__(Py.java2py(core), Py.java2py(target), Py.java2py(buff)); } } @@ -153,6 +176,10 @@ public class BuffService implements INetworkDispatch { } } + if (buffer != null && target.getGroupId() != 0 && target.getGroupId() == buffer.getGroupId()) { + buff.setGroupBufferId(buffer.getObjectID()); + } + return buff; } @@ -168,7 +195,7 @@ public class BuffService implements INetworkDispatch { creature.removeDot(dot); } if(FileUtilities.doesFileExist("scripts/buffs/" + buff.getBuffName() + ".py")) - core.scriptService.callScript("scripts/buffs/", "removeBuff", buff.getBuffName(), core, creature, buff); + core.scriptService.callScript("scripts/buffs/", buff.getBuffName(), "remove", core, creature, buff); creature.removeBuff(buff); for (String effect : buff.getParticleEffect().split(",")) { @@ -212,23 +239,34 @@ public class BuffService implements INetworkDispatch { } - public void addGroupBuff(final CreatureObject buffer, String buffName) { + public void addGroupBuff(CreatureObject buffer, String buffName) { + try { + throw new Exception(); + } catch (Exception e) { + // New system becoming necessary. Target can be the buffer for abilities that can't buff others. + System.out.println("WARNING: New GroupAddBuff Format: target, buffName, buffer"); + e.printStackTrace(); + } + + addGroupBuff(buffer, buffName, buffer); + } + + public void addGroupBuff(CreatureObject target, String buffName, CreatureObject buffer) { if(buffer.getGroupId() == 0) { - doAddBuff(buffer, buffName); + doAddBuff(target, buffName, buffer); return; } GroupObject group = (GroupObject) core.objectService.getObject(buffer.getGroupId()); if(group == null) { - doAddBuff(buffer, buffName); + doAddBuff(target, buffName, buffer); return; } for(SWGObject member : group.getMemberList()) { - Buff buff = doAddBuff((CreatureObject) member, buffName); - buff.setGroupBufferId(buffer.getObjectID()); + doAddBuff((CreatureObject) member, buffName, buffer); } } diff --git a/src/services/CharacterService.java b/src/services/CharacterService.java index d87738c9..ea133655 100644 --- a/src/services/CharacterService.java +++ b/src/services/CharacterService.java @@ -325,7 +325,7 @@ public class CharacterService implements INetworkDispatch { object._add(defaultWeapon); object.setWeaponId(defaultWeapon.getObjectID()); core.scriptService.callScript("scripts/", "starterclothing", "CreateStarterClothing", core, object, clientCreateCharacter.getStarterProfession(), clientCreateCharacter.getRaceTemplate()); - core.scriptService.callScript("scripts/", "CreateStartingCharacter", "demo", core, object); + core.scriptService.callScript("scripts/", "demo", "CreateStartingCharacter", core, object); core.getCreatureODB().put(object, Long.class, CreatureObject.class, object.getTransaction()); // might not need to commit transaction but better safe than sorry diff --git a/src/services/ConnectionService.java b/src/services/ConnectionService.java index 9da42193..af6c7071 100644 --- a/src/services/ConnectionService.java +++ b/src/services/ConnectionService.java @@ -191,19 +191,43 @@ public class ConnectionService implements INetworkDispatch { return; CreatureObject object = (CreatureObject) client.getParent(); + object.setInviteCounter(0); object.setInviteSenderId(0); object.setInviteSenderName(""); + + if(object.getAttachment("inspireDuration") != null) + object.setAttachment("inspireDuration", null); + + if(object.getInspirationTick() != null) { + object.getInspirationTick().cancel(true); + object.setInspirationTick(null); + } + + if(object.getSpectatorTask() != null) { + object.getSpectatorTask().cancel(true); + object.setSpectatorTask(null); + } + core.groupService.handleGroupDisband(object); + + for (CreatureObject opponent : object.getDuelList()) { + if (opponent != null) { + core.combatService.handleEndDuel(object, opponent); + } + } + + if (core.instanceService.isInInstance(object)) { + core.instanceService.remove(core.instanceService.getActiveInstance(object), object); + } + object.setClient(null); + PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); if(ghost == null) return; - if(object.getGroupId() != 0) - core.groupService.handleGroupDisband(object); - Point3D objectPos = object.getWorldPosition(); List collidables = core.simulationService.getCollidables(object.getPlanet(), objectPos.x, objectPos.z, 512); diff --git a/src/services/DevService.java b/src/services/DevService.java new file mode 100644 index 00000000..062adf0f --- /dev/null +++ b/src/services/DevService.java @@ -0,0 +1,277 @@ +/******************************************************************************* + * 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.nio.ByteOrder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Vector; + +import org.apache.mina.core.buffer.IoBuffer; +import org.apache.mina.core.session.IoSession; + +import protocol.swg.ExpertiseRequestMessage; + +import resources.common.Console; +import resources.common.FileUtilities; +import resources.common.Opcodes; +import resources.common.SpawnPoint; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.sui.SUIWindow; +import services.sui.SUIService.ListBoxType; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import main.NGECore; +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.clients.Client; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +@SuppressWarnings("unused") +public class DevService implements INetworkDispatch { + + private NGECore core; + + public DevService(NGECore core) { + this.core = core; + } + + public void sendCharacterBuilderSUI(CreatureObject creature, int childMenu) + { + Map suiOptions = new HashMap(); + + switch(childMenu) + { + case 0: // Root + suiOptions.put((long) 1, "Character"); + suiOptions.put((long) 2, "Items"); + break; + case 1: // Character + suiOptions.put((long) 10, "Set combat level to 90"); + suiOptions.put((long) 11, "Give 100,000 credits"); + break; + case 2: // Items + suiOptions.put((long) 20, "(Light) Jedi Robe"); + suiOptions.put((long) 21, "(Dark) Jedi Robe"); + suiOptions.put((long) 22, "Composite Armor"); + suiOptions.put((long) 23, "Weapons"); + break; + case 3: // [Items] Weapons + suiOptions.put((long) 30, "Jedi Weapons"); + suiOptions.put((long) 31, "Melee Weapons"); + suiOptions.put((long) 32, "Ranged Weapons"); + break; + } + + final SUIWindow window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "Character Builder Terminal", "Select the desired option and click OK.", suiOptions, creature, null, 10); + Vector returnList = new Vector(); + + returnList.add("List.lstList:SelectedRow"); + + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() + { + public void process(SWGObject owner, int eventType, Vector returnList) + { + int index = Integer.parseInt(returnList.get(0)); + int childIndex = (int) window.getObjectIdByIndex(index); + + CreatureObject player = (CreatureObject) owner; + SWGObject inventory = player.getSlottedObject("inventory"); + Planet planet = player.getPlanet(); + + switch(childIndex) + { + // Root + case 1: // Character + sendCharacterBuilderSUI(player, 1); + return; + case 2: // Items + sendCharacterBuilderSUI(player, 2); + return; + + // Character + case 10: // Set combat level to 90 + core.playerService.giveExperience(player, 999999999); + return; + case 11: // Give 100,000 credits + player.setCashCredits(player.getCashCredits() + 100000); + return; + + // Items + case 20: // (Light) Jedi Robe + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_light_s03.iff", planet)); + return; + case 21: // (Dark) Jedi Robe + inventory.add(core.objectService.createObject("object/tangible/wearables/robe/shared_robe_jedi_dark_s03.iff", planet)); + return; + case 22: // Composite Armor + SWGObject bicep_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_r.iff", planet); + bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bicep_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bicep_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bicep_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bicep_l.iff", planet); + bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bicep_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bicep_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bracer_r = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_r.iff", planet); + bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bracer_r.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bracer_r.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject bracer_l = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_bracer_l.iff", planet); + bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + bracer_l.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + bracer_l.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject leggings = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_leggings.iff", planet); + leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + leggings.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + leggings.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject helmet = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_helmet.iff", planet); + helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + helmet.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + helmet.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject chest = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_chest_plate.iff", planet); + chest.setIntAttribute("cat_armor_standard_protection.armor_eff_kinetic", 7000); + chest.setIntAttribute("cat_armor_standard_protection.armor_eff_energy", 5000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_heat", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_cold", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_acid", 6000); + chest.setIntAttribute("cat_armor_special_protection.special_protection_type_electricity", 6000); + + SWGObject boots = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_boots.iff", planet); + SWGObject gloves = core.objectService.createObject("object/tangible/wearables/armor/composite/shared_armor_composite_gloves.iff", planet); + + + + inventory.add(bicep_r); + inventory.add(bicep_l); + inventory.add(bracer_r); + inventory.add(bracer_l); + inventory.add(leggings); + inventory.add(helmet); + inventory.add(chest); + inventory.add(boots); + inventory.add(gloves); + + + return; + case 23: // Weapons + sendCharacterBuilderSUI(player, 3); + return; + + // [Items] Weapons + case 30: // Jedi Weapons + SWGObject lightsaber1 = core.objectService.createObject("object/weapon/melee/sword/crafted_saber/shared_sword_lightsaber_one_handed_gen5.iff", planet); + lightsaber1.setIntAttribute("required_combat_level", 90); + lightsaber1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber1.setStringAttribute("class_required", "Jedi"); + lightsaber1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber1.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + SWGObject lightsaber2 = core.objectService.createObject("object/weapon/melee/2h_sword/crafted_saber/shared_sword_lightsaber_two_handed_gen5.iff", planet); + lightsaber2.setIntAttribute("required_combat_level", 90); + lightsaber2.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber2.setStringAttribute("class_required", "Jedi"); + lightsaber2.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber2.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + SWGObject lightsaber3 = core.objectService.createObject("object/weapon/melee/polearm/crafted_saber/shared_sword_lightsaber_polearm_gen5.iff", planet); + lightsaber3.setIntAttribute("required_combat_level", 90); + lightsaber3.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + lightsaber3.setStringAttribute("class_required", "Jedi"); + lightsaber3.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + lightsaber3.setStringAttribute("cat_wpn_damage.damage", "689-1379"); + + inventory.add(lightsaber1); + inventory.add(lightsaber2); + inventory.add(lightsaber3); + return; + case 31: // Melee Weapons + SWGObject sword1 = core.objectService.createObject("object/weapon/melee/sword/shared_sword_01.iff", planet); + sword1.setIntAttribute("required_combat_level", 90); + sword1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + sword1.setStringAttribute("class_required", "None"); + sword1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + sword1.setStringAttribute("cat_wpn_damage.damage", "1100-1200"); + + inventory.add(sword1); + return; + case 32: // Ranged Weapons + SWGObject rifle1 = core.objectService.createObject("object/weapon/ranged/rifle/shared_rifle_e11.iff", planet); + rifle1.setIntAttribute("required_combat_level", 90); + rifle1.setFloatAttribute("cat_wpn_damage.wpn_attack_speed", 1); + rifle1.setStringAttribute("class_required", "None"); + rifle1.setStringAttribute("cat_wpn_damage.wpn_damage_type", "Energy"); + rifle1.setStringAttribute("cat_wpn_damage.damage", "800-1250"); + + inventory.add(rifle1); + return; + } + } + }); + + core.suiService.openSUIWindow(window); + } + + @Override + public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + } + + + @Override + public void shutdown() { + + } + +} diff --git a/src/services/EntertainmentService.java b/src/services/EntertainmentService.java index 2f6adb3b..885d4999 100644 --- a/src/services/EntertainmentService.java +++ b/src/services/EntertainmentService.java @@ -4,6 +4,7 @@ import java.nio.ByteOrder; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.Random; import java.util.Vector; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; @@ -18,16 +19,30 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.ObjControllerMessage; import protocol.swg.OkMessage; +import protocol.swg.PlayClientEffectObjectMessage; import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage; +import protocol.swg.objectControllerObjects.BuffBuilderEndMessage; import protocol.swg.objectControllerObjects.BuffBuilderStartMessage; import resources.common.BuffBuilder; import resources.common.Console; +import resources.common.MathUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Performance; +import resources.common.PerformanceEffect; +import resources.common.RGB; +import resources.common.StringUtilities; +import resources.datatables.Posture; import resources.objects.Buff; import resources.objects.BuffItem; +import resources.objects.SWGList; +import resources.objects.SkillMod; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; +import services.sui.SUIService.InputBoxType; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; import engine.clientdata.ClientFileManager; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; @@ -42,65 +57,121 @@ public class EntertainmentService implements INetworkDispatch { private Vector buffBuilderSkills = new Vector(); //FIXME: create a wrapper class for double key lookup maps - private HashMap performances = new HashMap(); - private HashMap performancesByIndex = new HashMap(); - private HashMap danceMap = new HashMap(); + private ConcurrentHashMap performances = new ConcurrentHashMap(); + private ConcurrentHashMap performancesByIndex = new ConcurrentHashMap(); + private ConcurrentHashMap danceMap = new ConcurrentHashMap(); + + private Random ranWorkshop = new Random(); + + private Map performanceEffects = new ConcurrentHashMap(); public EntertainmentService(NGECore core) { this.core = core; populateSkillCaps(); populatePerformanceTable(); + populatePerformanceEffects(); registerCommands(); } @Override public void insertOpcodes(Map swgOpcodes, Map objControllerOpcodes) { + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_END, new INetworkRemoteEvent() { + + @Override + public void handlePacket(IoSession session, IoBuffer data) throws Exception { + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) + return; + + SWGObject sender = client.getParent(); + + if(sender == null) + return; + + BuffBuilderEndMessage sentPacket = new BuffBuilderEndMessage(); + sentPacket.deserialize(data); + + SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); + SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); + + if(buffer == null || buffRecipient == null) + return; + + // No need to send end packet when buffing yourself. + if (buffRecipient != buffer) { + if(buffRecipient.getClient() == null || buffRecipient.getClient().getSession() == null) + return; + + if (sender.getObjectId() == buffer.getObjectId()) { + // send close packet to recipient + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffRecipient.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffRecipient.getClient().getSession().write(closeMessage.serialize()); + + } + if (sender.getObjectId() == buffRecipient.getObjectId()) { + // send close packet to buffer + BuffBuilderEndMessage end = new BuffBuilderEndMessage(sentPacket); + end.setObjectId(buffer.getObjectId()); + + end.setBufferId(buffer.getObjectId()); + end.setBuffRecipientId(buffRecipient.getObjectId()); + + ObjControllerMessage closeMessage = new ObjControllerMessage(0x0B, end); + buffer.getClient().getSession().write(closeMessage.serialize()); + CreatureObject cre = (CreatureObject) buffer; + cre.sendSystemMessage("The buff recipient cancelled the buff builder session.", (byte) 0); + } + } + } + }); + objControllerOpcodes.put(ObjControllerOpcodes.BUFF_BUILDER_CHANGE, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - Console.println("BUFF_BUILDER_CHANGE RECIEVED"); data.order(ByteOrder.LITTLE_ENDIAN); - + Client client = core.getClient(session); - + if(client == null) return; - + SWGObject sender = client.getParent(); - + if(sender == null) return; - + BuffBuilderChangeMessage sentPacket = new BuffBuilderChangeMessage(); sentPacket.deserialize(data); Vector statBuffs = sentPacket.getStatBuffs(); - - /*for (BuffItem item : statBuffs) { - System.out.println("Buff Name: " + item.getSkillName()); - System.out.println("Ents bonus to item: " + item.getAmount()); - }*/ - - SWGObject buffer = core.objectService.getObject(sentPacket.getBufferId()); - SWGObject buffRecipient = core.objectService.getObject(sentPacket.getBuffRecipientId()); - - Console.println("Packet Sender ID: " + sender.getObjectId()); - + + CreatureObject buffer = (CreatureObject) core.objectService.getObject(sentPacket.getBufferId()); + CreatureObject buffRecipient = (CreatureObject) core.objectService.getObject(sentPacket.getBuffRecipientId()); + if (buffer != buffRecipient) { - + BuffBuilderChangeMessage changeMessage = new BuffBuilderChangeMessage(); changeMessage.setBuffCost(sentPacket.getBuffCost()); changeMessage.setTime(sentPacket.getTime()); changeMessage.setBufferId(buffer.getObjectId()); changeMessage.setBuffRecipientId(buffRecipient.getObjectId()); - + if (!statBuffs.isEmpty()) changeMessage.setStatBuffs(statBuffs); - + if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 1) { - System.out.println("both accepted!"); - + if (sentPacket.getBuffCost() > 0) { CreatureObject recipientCreature = (CreatureObject) buffRecipient; if (recipientCreature.getCashCredits() >= sentPacket.getBuffCost()) { @@ -109,36 +180,47 @@ public class EntertainmentService implements INetworkDispatch { return; } } - - OkMessage closeMsg = new OkMessage(); - buffer.getClient().getSession().write(closeMsg.serialize()); - - giveInspirationBuff(buffRecipient, statBuffs); - + + giveInspirationBuff(buffRecipient, buffer, statBuffs); + + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(changeMessage); + endBuilder.setObjectId(buffer.getObjectId()); + + BuffBuilderEndMessage endRecipient = new BuffBuilderEndMessage(changeMessage); + endRecipient.setObjectId(buffRecipient.getObjectId()); + + ObjControllerMessage closeBuilder = new ObjControllerMessage(0x0B, endBuilder); + buffer.getClient().getSession().write(closeBuilder.serialize()); + + ObjControllerMessage closeRecipient = new ObjControllerMessage(0x0B, endRecipient); + buffRecipient.getClient().getSession().write(closeRecipient.serialize()); + } else if (sentPacket.getAccepted() == true && sentPacket.getBuffRecipientAccepted() == 0) { changeMessage.setAccepted(true); changeMessage.setObjectId(buffRecipient.getObjectId()); - + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); buffRecipient.getClient().getSession().write(objMsg.serialize()); } else { changeMessage.setAccepted(false); changeMessage.setObjectId(sentPacket.getBuffRecipientId()); - + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, changeMessage); buffRecipient.getClient().getSession().write(objMsg.serialize()); } - + } else { if (sentPacket.getAccepted() == true) { - OkMessage closeMsg = new OkMessage(); - buffer.getClient().getSession().write(closeMsg.serialize()); - - giveInspirationBuff(buffRecipient, statBuffs); + giveInspirationBuff(buffRecipient, buffer, statBuffs); + BuffBuilderEndMessage endBuilder = new BuffBuilderEndMessage(sentPacket); + endBuilder.setObjectId(buffer.getObjectId()); + + ObjControllerMessage objMsg = new ObjControllerMessage(0x0B, endBuilder); + buffRecipient.getClient().getSession().write(objMsg.serialize()); } } } - + }); } @@ -202,17 +284,21 @@ public class EntertainmentService implements INetworkDispatch { for (int r = 0; r < buffBuilder.getRowCount(); r++) { String skillName = ((String) buffBuilder.getObject(r, 0)); + String category = ((String) buffBuilder.getObject(r, 1)); String statAffects = ((String) buffBuilder.getObject(r, 2)); int maxTimes = ((int) buffBuilder.getObject(r, 3)); + int cost = ((int) buffBuilder.getObject(r, 4)); int affectAmount = ((int) buffBuilder.getObject(r, 5)); - String requiredExperience = ((String) buffBuilder.getObject(r, 6)); + String requiredExpertise = ((String) buffBuilder.getObject(r, 6)); BuffBuilder item = new BuffBuilder(); item.setStatName(skillName); + item.setCategory(category); item.setStatAffects(statAffects); item.setMaxTimesApplied(maxTimes); + item.setCost(cost); item.setAffectAmount(affectAmount); - item.setRequiredExperience(requiredExperience); + item.setRequiredExpertise(requiredExpertise); buffBuilderSkills.add(item); } @@ -220,7 +306,37 @@ public class EntertainmentService implements INetworkDispatch { e.printStackTrace(); } } + + private void populatePerformanceEffects() { + try { + DatatableVisitor effects = ClientFileManager.loadFile("datatables/performance/perform_effect.iff", DatatableVisitor.class); + for (int r = 0; r < effects.getRowCount(); r++) { + String effectName = ((String) effects.getObject(r, 0)); + String performanceType = ((String) effects.getObject(r, 1)); + int requiredSkillModValue = ((int) effects.getObject(r, 2)); + Boolean requiredPerforming = ((Boolean) effects.getObject(r, 3)); + int targetType = ((int) effects.getObject(r, 4)); + float effectDuration = ((float) effects.getObject(r, 5)); + int effectActionCost = ((int) effects.getObject(r, 6)); + + PerformanceEffect item = new PerformanceEffect(); + item.setEffectActionCost(effectActionCost); + item.setEffectDuration(effectDuration); + item.setName(effectName); + item.setPerformanceType(performanceType); + item.setRequiredPerforming(requiredPerforming); + item.setRequiredSkillModValue(requiredSkillModValue); + item.setTargetType(targetType); + + performanceEffects.put(effectName.toLowerCase(), item); + + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + private void registerCommands() { core.commandService.registerCommand("bandflourish"); core.commandService.registerCommand("flourish"); @@ -229,31 +345,78 @@ public class EntertainmentService implements INetworkDispatch { core.commandService.registerCommand("startdance"); core.commandService.registerCommand("stopdance"); core.commandService.registerCommand("watch"); - core.commandService.registerCommand("stopwatching"); + //core.commandService.registerCommand("stopwatching"); // SWGList error + //core.commandService.registerCommand("holoEmote"); + core.commandService.registerCommand("covercharge"); + //core.commandService.registerCommand("en_holographic_recall"); + //core.commandService.registerCommand("en_holographic_image"); + // TODO: Add /bandsolo, /bandpause, /changeBandMusic, /changeDance, /changeGroupDance, /changeMusic + + // Entertainer Effects + core.commandService.registerCommand("centerStage"); + core.commandService.registerCommand("colorSwirl"); + core.commandService.registerCommand("colorlights"); + core.commandService.registerCommand("floorLights"); // referred to also as Dance Floor + core.commandService.registerCommand("dazzle"); + core.commandService.registerCommand("distract"); + core.commandService.registerCommand("featuredSolo"); + core.commandService.registerCommand("firejet"); + core.commandService.registerCommand("firejet2"); + core.commandService.registerCommand("laserShow"); + core.commandService.registerCommand("smokebomb"); + core.commandService.registerCommand("spotlight"); + core.commandService.registerCommand("ventriloquism"); } - public void giveInspirationBuff(SWGObject reciever, Vector buffVector) { - CreatureObject buffCreature = (CreatureObject) reciever; - - Vector availableSkills = buffBuilderSkills; - - Vector buffsToAdd = new Vector(); + public void giveInspirationBuff(CreatureObject reciever, CreatureObject buffer, Vector buffVector) { + Vector availableStats = buffBuilderSkills; + Vector stats = new Vector(); + for (BuffItem item : buffVector) { - for (BuffBuilder builder : availableSkills) { - if (builder.getStatName().equals(item.getSkillName())) { - builder.setEntBonus(item.getBonusAmount()); - buffsToAdd.add(builder); - Console.println("Added buff item: " + builder.getStatAffects() + " with total affect of " + builder.getTotalAffected() + " and ent bonus of " + builder.getEntBonus()); - continue; + for(BuffBuilder builder : availableStats) { + if(builder.getStatName().equalsIgnoreCase(item.getSkillName())) { + if(builder.getMaxTimesApplied() < item.getInvested()) + return; + + // Ent. Expertise Percent + (invested points * affect amount) = stat + int bonusPoints = (int) (builder.getAffectAmount() *((float) item.getEntertainerBonus()/100f)); + int affectTotal = bonusPoints + (item.getInvested() * builder.getAffectAmount()); + + BuffItem stat = new BuffItem(builder.getStatAffects(), item.getInvested(), item.getEntertainerBonus()); + stat.setAffectAmount(affectTotal); + + stats.add(stat); } } } - reciever.setAttachment("buffWorkshop", buffsToAdd); + reciever.setAttachment("buffWorkshop", stats); - core.buffService.addBuffToCreature(buffCreature, "buildabuff_inspiration"); + if (buffer == reciever) + reciever.setAttachment("inspireDuration", 215); + //PlayerObject rPlayer = (PlayerObject) reciever.getSlottedObject("ghost"); + + //long timeStamp = 0; + //if (reciever.getAttachment("buffWorkshopTimestamp") != null) + //timeStamp = (long) reciever.getAttachment("buffWorkshopTimestamp"); + + core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer); + /*if (core.buffService.addBuffToCreature(reciever, "buildabuff_inspiration", buffer) && !rPlayer.getProfession().equals("entertainer_1a")) { + if (timeStamp == 0 || (System.currentTimeMillis() - timeStamp > 86400000)) { + float random = ranWorkshop.nextFloat(); + if (random < 0.75f) { + + if(rPlayer.getProfession().contains("trader")) { core.collectionService.addCollection(buffer, "prof_trader"); } + + else { + core.collectionService.addCollection(buffer, rPlayer.getProfession()); + } + } + } else { buffer.sendSystemMessage("@collection:buffed_too_soon", (byte) 0); } + reciever.setAttachment("buffWorkshopTimestamp", System.currentTimeMillis()); + }*/ } public int getDanceVisualId(String danceName) { @@ -303,6 +466,10 @@ public class EntertainmentService implements INetworkDispatch { return performancesByIndex.get(index); } + public Map getPerformanceEffects() { + return performanceEffects; + } + public void startPerformance(CreatureObject actor, int performanceId, int performanceCounter, String skillName, boolean isDance) { actor.setPerformanceId(performanceId, isDance); actor.setPerformanceCounter(performanceCounter); @@ -342,6 +509,217 @@ public class EntertainmentService implements INetworkDispatch { } + public void startSpectating(final CreatureObject spectator, final CreatureObject performer, boolean spectateType) { + + // visual + if (spectator.getPerformanceWatchee() == performer && spectateType) + spectator.getPerformanceWatchee().removeAudience(spectator); + // music + else if (spectator.getPerformanceListenee() == performer && !spectateType) + spectator.getPerformanceListenee().removeAudience(spectator); + + spectator.setPerformanceWatchee(performer); + performer.addAudience(spectator); + spectator.setMoodAnimation("entertained"); + + final ScheduledFuture spectatorTask = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + if (spectator.getPosition().getDistance2D(performer.getWorldPosition()) > (float) 70) { + + if(((performer.getPerformanceType()) ? "dance" : "music").equals("dance")) { + spectator.setPerformanceWatchee(null); + spectator.sendSystemMessage("You stop watching " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + else { + spectator.setPerformanceListenee(null); + spectator.sendSystemMessage("You stop listening to " + performer.getCustomName() + " because " + performer.getCustomName() + + " is out of range.", (byte) 0); + } + spectator.setMoodAnimation("neutral"); + performer.removeAudience(spectator); + + if (spectator.getInspirationTick().cancel(true)) + spectator.getSpectatorTask().cancel(true); + } + } + + }, 2, 2, TimeUnit.SECONDS); + + spectator.setSpectatorTask(spectatorTask); + + if(((PlayerObject)performer.getSlottedObject("ghost")).getProfession().equals("entertainer_1a")) { + handleInspirationTicks(spectator, performer); + } + + if(spectateType) + spectator.sendSystemMessage("You start watching " + performer.getCustomName() + ".", (byte) 0); + else + spectator.sendSystemMessage("You start listening to " + performer.getCustomName() + ".", (byte) 0); + + } + + public void performFlourish(final CreatureObject performer, int flourish) { + + if (performer.getFlourishCount() > 0) { + performer.sendSystemMessage("@performance:wait_flourish_self", (byte) 0); + return; + } + Performance performance = getPerformanceByIndex(performer.getPerformanceId()); + + if(performance == null) + return; + + String anmFlo = "skill_action_" + flourish; + + if (flourish == 9) + anmFlo = "mistake"; + + performer.setFlourishCount(1); + performer.sendSystemMessage("@performance:flourish_perform", (byte) 0); + performer.doSkillAnimation(anmFlo); + + scheduler.schedule(new Runnable() { + + @Override + public void run() { + performer.setFlourishCount(0); + } + + }, (long) performance.getLoopDuration(), TimeUnit.SECONDS); + } + + public boolean performEffect(final CreatureObject performer, String command, String effect, TangibleObject target) { + PerformanceEffect pEffect = performanceEffects.get(command.toLowerCase()); + + if(pEffect == null) + return false; + + String performance = (performer.getPerformanceType()) ? "dance" : "music"; + + if(performer.isPerformingEffect()) { + performer.sendSystemMessage("@performance:effect_wait_self", (byte) 0); + return false; + } + + if (performer.getPosture() != Posture.SkillAnimating) { + performer.sendSystemMessage("@performance:effect_not_performing", (byte) 0); + return false; + } + + if(performance.equals("dance") && !pEffect.isDance() || performance.equals("music") && !pEffect.isMusic()) { + performer.sendSystemMessage("@performance:effect_not_performing_correct", (byte) 0); + return false; + } + + if(performer.getAction() < pEffect.getEffectActionCost()) { + performer.sendSystemMessage("@performance:effect_too_tired", (byte) 0); + return false; + } + + performer.setAction(performer.getAction() - pEffect.getEffectActionCost()); + + performer.setPerformingEffect(true); + + if(target != null) + target.playEffectObject(effect, ""); + + else + performer.playEffectObject(effect, ""); + + scheduler.schedule(new Runnable() { + + @Override + public void run() { + performer.setPerformingEffect(false); + } + + }, (long) pEffect.getEffectDuration(), TimeUnit.SECONDS); + + return true; + } + + public void handleInspirationTicks(final CreatureObject spectator, final CreatureObject performer) { + // http://youtu.be/WqyAde-oC7o?t=11m14s << Player watching entertainer (Has ring only, no pet, + 15 min ticks) + // TODO: Camp/Cantina checks for expertise and duration bonus %. Right now only using basic values. + final ScheduledFuture inspirationTick = scheduler.scheduleAtFixedRate(new Runnable() { + + @Override + public void run() { + int time = 0; // current buff duration time (minutes) + int buffCap = 215; // 5 hours 35 minutes - 2 hours (buff duration increase bonus) << Taken from video, doesn't account for performance bonuses etc. + + if (spectator.getAttachment("inspireDuration") != null) + time+= (int) spectator.getAttachment("inspireDuration"); + + if (performer.getSkillMod("expertise_en_inspire_buff_duration_increase") != null) { + SkillMod durationMod = performer.getSkillMod("expertise_en_inspire_buff_duration_increase"); + buffCap += durationMod.getBase() + durationMod.getModifier(); + } + + if (time >= buffCap) { + spectator.setAttachment("inspireDuration", buffCap); // incase someone went over cap + spectator.getInspirationTick().cancel(true); + } else { + int entTick = 10; + if (performer.getSkillMod("expertise_en_inspire_pulse_duration_increase") != null) { + SkillMod pulseMod = performer.getSkillMod("expertise_en_inspire_pulse_duration_increase"); + entTick += pulseMod.getBase() + pulseMod.getModifier(); + } + + int duration = (time + entTick); // minutes + int hMinutes = MathUtilities.secondsToHourMinutes(duration * 60); + int hours = MathUtilities.secondsToWholeHours(duration * 60); + + spectator.showFlyText("spam", "buff_duration_tick_observer", String.valueOf(hours) + " hours , " + hMinutes + " minutes ", 0, (float) 0.66, new RGB(255, 182, 193), 3, 78); + + spectator.setAttachment("inspireDuration", duration); + //System.out.println("Inspire Duration: " + spectator.getAttachment("inspireDuration") + " on " + spectator.getCustomName()); + } + } + + }, 10, 10, TimeUnit.SECONDS); + spectator.setInspirationTick(inspirationTick); + } + + public void handleCoverCharge(final CreatureObject actor, final CreatureObject performer) { + final int charge = performer.getCoverCharge(); + + if (charge == 0) + return; + + else { + SUIWindow notification = core.suiService.createMessageBox(InputBoxType.INPUT_BOX_OK, "Cover Charge", performer.getCustomName() + + " has a cover charge of " + performer.getCoverCharge() + ". Do you wish to pay it?", actor, performer, (float) 30); + Vector returnParams = new Vector(); + + returnParams.add("btnOk:Text"); + + notification.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, new SUICallback(){ + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + if (eventType == 0) { + if (charge > actor.getCashCredits()) { + actor.sendSystemMessage("You do not have enough credits to cover the charge.", (byte) 0); // TODO: Find the message in the STF files. + return; + } else{ + actor.setCashCredits(actor.getCashCredits() - charge); + actor.sendSystemMessage("You payed the cover charge of " + charge + " to " + performer.getCustomName(), (byte) 0); // TODO: Find the message in the STF files. + performer.setCashCredits(performer.getCashCredits() + charge); + + startSpectating(actor, performer, performer.getPerformanceType()); + + } + } + } + }); + core.suiService.openSUIWindow(notification); + } + } + @Override public void shutdown() { diff --git a/src/services/EquipmentService.java b/src/services/EquipmentService.java index 7125fa32..d9df1dc8 100644 --- a/src/services/EquipmentService.java +++ b/src/services/EquipmentService.java @@ -39,7 +39,7 @@ import resources.objects.player.PlayerObject; public class EquipmentService implements INetworkDispatch { private NGECore core; - + public EquipmentService(NGECore core) { this.core = core; } @@ -51,45 +51,33 @@ public class EquipmentService implements INetworkDispatch { @Override public void shutdown() { - + } - public void weaponCriticalToDisplay(CreatureObject actor, SWGObject item, boolean add) { + private int getWeaponCriticalChance(CreatureObject actor, SWGObject item) { + int weaponCriticalChance = 0; + String weaponCriticalSkillMod = (core.scriptService.getMethod("scripts/equipment/", "weapon_critical", item.getStringAttribute("cat_wpn_damage.wpn_category")/*.replace(" ", "").replace("-", "") + "_" */).__call__().asString()); - if (add == true) { - - switch(item.getStringAttribute("cat_wpn_damage.wpn_category")) { - - case "Rifle": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_rifle") * 100); // rifle - case "Carbine": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_carbine") * 100); // carbine - case "Pistol": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_pistol") * 100); // pistol - case "One-Handed Melee": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_1h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // one-handed - case "Two-Handed Melee": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_2h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // two-handed - case "Unarmed": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_unarmed") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // unarmed - case "Polearm": actor.addSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_polearm") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // polearm - case "Free Targeting Heavy Weapon": actor.addSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_heavy") * 100); // Heavy - - - } - - } + if(weaponCriticalSkillMod.contains(" ")) + weaponCriticalSkillMod.replace(" ", ""); - if (add == false) { - - switch(item.getStringAttribute("cat_wpn_damage.wpn_category")) { - - case "Rifle": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_rifle") * 100); // rifle - case "Carbine": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_carbine") * 100); // carbine - case "Pistol": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_pistol") * 100); // pistol - case "One-Handed Melee": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_1h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // one-handed - case "Two-Handed Melee": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_2h") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // two-handed - case "Unarmed": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_unarmed") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // unarmed - case "Polearm": actor.deductSkillMod("display_only_critical", ((actor.getSkillModBase("expertise_critical_polearm") + actor.getSkillModBase("expertise_critical_melee")) * 100)); // polearm - case "Free Targeting Heavy Weapon": actor.deductSkillMod("display_only_critical", actor.getSkillModBase("expertise_critical_heavy") * 100); // Heavy - } - } + if(weaponCriticalSkillMod.contains("-")) + weaponCriticalSkillMod.replace("-", ""); + + if(actor.getSkillMod(weaponCriticalSkillMod) != null) + weaponCriticalChance = actor.getSkillModBase((core.scriptService.getMethod("scripts/equipment/", "weapon_critical", item.getStringAttribute("cat_wpn_damage.wpn_category").replace(" ", "").replace("-", "") + "_" ).__call__().asString())); + + return weaponCriticalChance; } + private void addWeaponCriticalChance(CreatureObject actor, SWGObject item) { + actor.addSkillMod("display_only_critical", getWeaponCriticalChance(actor, item)); + } + + private void deductWeaponCriticalChance(CreatureObject actor, SWGObject item) { + actor.deductSkillMod("display_only_critical", getWeaponCriticalChance(actor, item)); + } + public String getFormalProfessionName(String stfName) { String formalName = ""; @@ -112,9 +100,15 @@ public class EquipmentService implements INetworkDispatch { public boolean canEquip(CreatureObject actor, SWGObject item) { boolean result = true; + if (item.getAttributes().toString().contains("cat_armor")) + if (actor.getLevel() >= 22) + result = true; + else + return false; + if (item.getStringAttribute("class_required") != null) { String profession = ((PlayerObject) actor.getSlottedObject("ghost")).getProfession(); - if (item.getStringAttribute("class_required").contentEquals(getFormalProfessionName(profession))) + if (item.getStringAttribute("class_required").contentEquals(getFormalProfessionName(profession)) || item.getStringAttribute("class_required").contentEquals("None")) result = true; else return false; @@ -126,7 +120,7 @@ public class EquipmentService implements INetworkDispatch { else return false; - if (item.getAttributes().toString().contains("required_combat_level")) + if (item.getAttributes().containsKey("required_combat_level")) if (actor.getLevel() >= item.getIntAttribute("required_combat_level")) result = true; else @@ -135,44 +129,19 @@ public class EquipmentService implements INetworkDispatch { return result; } - public void calculateForceProtection(CreatureObject actor, SWGObject item, boolean add) { - int type = 0; - int level = 0; - int[][] protection = {{1400,3000,4000,5000,6500},{0, 0, 4500, 5600, 6500}}; - - switch ((String) item.getAttachment("type")) { - case "jedi_robe": type = 0; break; - case "jedi_cloak": type = 1; break; - } - - switch (item.getStringAttribute("protection_level")) { - case "Faint": level = 0; break; - case "Weak": level = 1; break; - case "Lucent": level = 2; break; - case "Luminous": level = 3; break; - case "Radiant": level = 4; break; - } - - if (add==true) { - core.skillModService.addSkillMod(actor, "kinetic", protection[type][level]); - core.skillModService.addSkillMod(actor, "energy", protection[type][level]); - core.skillModService.addSkillMod(actor, "heat", protection[type][level]); - core.skillModService.addSkillMod(actor, "cold", protection[type][level]); - core.skillModService.addSkillMod(actor, "acid", protection[type][level]); - core.skillModService.addSkillMod(actor, "electricity", protection[type][level]); - } else { - core.skillModService.deductSkillMod(actor, "kinetic", protection[type][level]); - core.skillModService.deductSkillMod(actor, "energy", protection[type][level]); - core.skillModService.deductSkillMod(actor, "heat", protection[type][level]); - core.skillModService.deductSkillMod(actor, "cold", protection[type][level]); - core.skillModService.deductSkillMod(actor, "acid", protection[type][level]); - core.skillModService.deductSkillMod(actor, "electricity", protection[type][level]); - } - + private void addForceProtection(CreatureObject actor, SWGObject item) { + actor.addSkillMod("expertise_innate_protection_all", getForceProtection(item)); + } + + private void deductForceProtection(CreatureObject actor, SWGObject item) { + actor.deductSkillMod("expertise_innate_protection_all", getForceProtection(item)); + } + + private int getForceProtection(SWGObject item) { + return core.scriptService.getMethod("scripts/equipment/", "force_protection", item.getAttachment("type") + "_" + item.getStringAttribute("protection_level")).__call__().asInt(); } public void equip(CreatureObject actor, SWGObject item) { - String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "equip"); @@ -180,7 +149,7 @@ public class EquipmentService implements INetworkDispatch { func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); if (item.getStringAttribute("protection_level") != null) - calculateForceProtection(actor, item, true); + addForceProtection(actor, item); // TODO: faction restrictions - You had to be a Combatant as minimum in order to EQUIP an item. // TODO: Species restrictions @@ -192,8 +161,8 @@ public class EquipmentService implements INetworkDispatch { if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) - weaponCriticalToDisplay(actor, item, true); - + addWeaponCriticalChance(actor, item); + Map attributes = new TreeMap(item.getAttributes()); for(Entry e : attributes.entrySet()) { @@ -221,7 +190,6 @@ public class EquipmentService implements INetworkDispatch { public void unequip(CreatureObject actor, SWGObject item) { - String template = ((item.getAttachment("customServerTemplate") == null) ? item.getTemplate() : (item.getTemplate().split("shared_")[0] + "shared_" + ((String) item.getAttachment("customServerTemplate")) + ".iff")); String serverTemplate = template.replace(".iff", ""); PyObject func = core.scriptService.getMethod("scripts/" + serverTemplate.split("shared_" , 2)[0].replace("shared_", ""), serverTemplate.split("shared_" , 2)[1], "unequip"); @@ -229,11 +197,10 @@ public class EquipmentService implements INetworkDispatch { func.__call__(Py.java2py(core), Py.java2py(actor), Py.java2py(item)); if (item.getStringAttribute("protection_level") != null) - calculateForceProtection(actor, item, false); + deductForceProtection(actor, item); if(item.getStringAttribute("cat_wpn_damage.wpn_category") != null) - if (actor.getSlotNameForObject(item).contentEquals("hold_r") == true) - weaponCriticalToDisplay(actor, item, false); + deductWeaponCriticalChance(actor, item); Map attributes = new TreeMap(item.getAttributes()); @@ -241,6 +208,9 @@ public class EquipmentService implements INetworkDispatch { 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())); + } + if(e.getKey().startsWith("cat_stat_mod_bonus.@stat_n:")) { + core.skillModService.deductSkillMod(actor, e.getKey().replace("cat_stat_mod_bonus.@stat_n:", ""), Integer.parseInt((String) e.getValue())); } if(e.getKey().startsWith("cat_attrib_mod_bonus.attr_health")) { actor.setMaxHealth(actor.getMaxHealth() - Integer.parseInt((String) e.getValue())); @@ -251,6 +221,11 @@ public class EquipmentService implements INetworkDispatch { } + if(item.getAttachment("unity") != null) { + actor.sendSystemMessage("@unity:cannot_remove_ring", (byte) 0); + return; + } + if(actor.getEquipmentList().contains(item)) actor.removeObjectFromEquipList(item); diff --git a/src/services/GroupService.java b/src/services/GroupService.java index 5b1a9f07..4946f503 100644 --- a/src/services/GroupService.java +++ b/src/services/GroupService.java @@ -188,8 +188,7 @@ public class GroupService implements INetworkDispatch { if(otherMember != member) { for(Buff buff : ((CreatureObject) otherMember).getBuffList().get()) { if(buff.isGroupBuff()) { - Buff newBuff = core.buffService.doAddBuff(member, buff.getBuffName()); - newBuff.setGroupBufferId(buff.getGroupBufferId()); + core.buffService.doAddBuff(member, buff.getBuffName(), (CreatureObject) core.objectService.getObject(buff.getGroupBufferId())); } } return; diff --git a/src/services/InstanceService.java b/src/services/InstanceService.java new file mode 100644 index 00000000..199b9ac4 --- /dev/null +++ b/src/services/InstanceService.java @@ -0,0 +1,753 @@ +/******************************************************************************* + * 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.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import resources.objects.group.GroupObject; + +import main.NGECore; + +import engine.clientdata.ClientFileManager; +import engine.clientdata.visitors.DatatableVisitor; +import engine.resources.common.CRC; +import engine.resources.objects.SWGObject; +import engine.resources.scene.Planet; +import engine.resources.scene.Point3D; +import engine.resources.service.INetworkDispatch; +import engine.resources.service.INetworkRemoteEvent; + +public class InstanceService implements INetworkDispatch { + + private NGECore core; + + private Map> instanceMap = new HashMap>(); + + private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); + + public class Instance { + + private long instanceId = 0; + private String name = ""; + private long startTime = System.currentTimeMillis(); + private Point3D instancePosition; + private Point3D spawnPosition; + private int duration = 0; + private int lockoutTime = 0; + private CreatureObject owner; + private List participants = new CopyOnWriteArrayList(); + private List activeParticipants = new CopyOnWriteArrayList(); + private List objectList = new CopyOnWriteArrayList(); + private ScheduledFuture task; + private boolean faulty = false; + private boolean closed = false; + + public Instance(long instanceId, String name, Point3D instancePosition, Point3D spawnPosition, int duration, int lockoutTime, CreatureObject owner) { + this.instanceId = instanceId; + this.name = name; + this.instancePosition = instancePosition; + this.spawnPosition = spawnPosition; + this.duration = (duration * 1000); + this.lockoutTime = lockoutTime; + this.owner = owner; + participants.add(owner); + } + + public Instance() { + + } + + public synchronized long getInstanceId() { + return instanceId; + } + + public synchronized String getName() { + return name; + } + + public synchronized long getStartTime() { + return startTime; + } + + public synchronized long getTimeRemaining() { + return ((closed) ? 0 : (((long) duration) - (System.currentTimeMillis() - startTime))); + } + + public synchronized boolean isOpen() { + if (closed || getTimeRemaining() <= 0) { + return false; + } + + return true; + } + + public synchronized Point3D getInstancePosition() { + return instancePosition; + } + + public synchronized Point3D getSpawnPosition() { + return spawnPosition; + } + + public synchronized int getDuration() { + return duration; + } + + public synchronized int getLockoutTime() { + return lockoutTime; + } + + public synchronized CreatureObject getOwner() { + return owner; + } + + public List getParticipants() { + return participants; + } + + public List getActiveParticipants() { + return participants; + } + + public List getObjectList() { + return objectList; + } + + public synchronized boolean addParticipant(CreatureObject participant) { + if (activeParticipants.contains(participant)) { + return true; + } + + if (activeParticipants.size() >= 8) { + return false; + } + + activeParticipants.add(participant); + participants.add(participant); + + return true; + } + + public synchronized boolean isActiveParticipant(CreatureObject participant) { + return activeParticipants.contains(participant); + } + + public synchronized boolean isFormerParticipant(CreatureObject participant) { + return participants.contains(participant); + } + + public synchronized boolean removeParticipant(CreatureObject participant) { + return activeParticipants.remove(participant); + } + + public synchronized ScheduledFuture getTask() { + return task; + } + + public synchronized void setTask(ScheduledFuture task) { + this.task = task; + } + + public synchronized boolean isFaulty() { + return faulty; + } + + public synchronized void setFaulty(boolean faulty) { + this.faulty = faulty; + } + + public synchronized boolean isClosed() { + return closed; + } + + public synchronized void close() { + for (SWGObject object : objectList) { + core.objectService.destroyObject(object); + } + + objectList.clear(); + + closed = true; + } + + } + + public InstanceService(NGECore core) { + this.core = core; + + Calendar c = Calendar.getInstance(); + Date now = new Date(); + + c.setTime(now); + + if (c.get(Calendar.HOUR_OF_DAY) >= 6) { + c.add(Calendar.DAY_OF_MONTH, 1); + } + + c.set(Calendar.HOUR_OF_DAY, 6); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + long initialDelay = (c.getTimeInMillis() - now.getTime()); + + final Map> reference = instanceMap; + + scheduler.scheduleAtFixedRate(new Runnable() { + + private Map> instanceMap = reference; + + public void run() { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if ((instance.isClosed() || !instance.isOpen())) { + instanceList.remove(instance); + } + } + } + } + + }, initialDelay, 86400000, TimeUnit.MILLISECONDS); + } + + /* + * @description Create a brand new instance. + * + * @param instanceName Buildout name of the instance to build. + * @param owner Creator's creature object. + */ + public synchronized Instance create(String instanceName, CreatureObject owner) { + Instance instance = null; + + try { + String planetName = core.scriptService.callScript("scripts/instances/", instanceName, "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(planetName); + Point3D spawnPosition = new Point3D(); + int duration = (core.scriptService.callScript("scripts/instances/", instanceName, "getDuration").asInt() * 60); + int lockoutTime = core.scriptService.callScript("scripts/instances/", instanceName, "getLockoutTime").asInt();; + + core.scriptService.callScript("scripts/instances/", instanceName, "getSpawnPosition", spawnPosition); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/areas_" + planet.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((String) buildoutTable.getObject(i, 0)).equals(instanceName)) { + Point3D instancePosition = new Point3D((Float) buildoutTable.getObject(i, 1), 0, (Float) buildoutTable.getObject(i, 2)); + + if (!instanceInUse(instanceName, instancePosition)) { + instance = new Instance(core.guildService.getGuildObject().getNextInstanceId(), instanceName, instancePosition, spawnPosition, duration, lockoutTime, owner); + } + } + } + + if (instance == null) { + return null; + } + + core.scriptService.callScript("scripts/instances/", instanceName, "setup", core, instance); + + final Instance reference = instance; + + instance.setTask(scheduler.scheduleAtFixedRate(new Runnable() { + + private Instance instance = reference; + private boolean sentCloseWarning = false; + + public void run() { + if (instance.getDuration() > 300 && instance.getTimeRemaining() <= 300 && !sentCloseWarning) { + for (CreatureObject player : instance.getActiveParticipants()) { + player.sendSystemMessage("@instance:five_minute_warning", (byte) 0); + } + + sentCloseWarning = true; + } + + if (!instance.isOpen()) { + for (CreatureObject player : instance.getActiveParticipants()) { + player.sendSystemMessage("@instance:instance_time_out", (byte) 0); + } + + close(instance); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "run", core, instance); + } + + }, 1, 1, TimeUnit.MINUTES)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + if (!instanceMap.containsKey(instance.getName())) { + instanceMap.put(instance.getName(), new ArrayList()); + } + + instanceMap.get(instance.getName()).add(instance); + + return instance; + } + + + /* + * @description Queue them for an instance for 19 seconds, remove if none available. + * + * @param instanceName Name of the instance .py script. + * @param creature Player's creature object to queue for the instance. + * + * @return None. + */ + public void queue(String instanceName, CreatureObject creature) { + Instance instance = null; + + if (creature.getBuffByName("instance_launching") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_launching"); + + if (isLockedOut(instanceName, creature)) { + creature.sendSystemMessage("@instance:lockout_notification", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + instance = getActiveInstance(instanceName, creature); + + if (creature.getGroupId() > 0) { + if (instance == null) { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + instance = getActiveInstance(instanceName, (CreatureObject) member); + + if (instance != null) { + break; + } + } + } + } else { + GroupObject group = (GroupObject) core.objectService.getObject(creature.getGroupId()); + + if (group != null) { + for (SWGObject member : group.getMemberList()) { + Instance instance2 = getActiveInstance(instanceName, (CreatureObject) member); + + if (!instance2.equals(instance)) { + creature.sendSystemMessage("@instance:fail_invalid_lockout", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + } + } + } + + if (instance == null) { + instance = create(instanceName, creature); + + if (instance == null) { + creature.sendSystemMessage("@instance:all_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + } + + if (instance.getActiveParticipants().size() >= 8) { + creature.sendSystemMessage("@instance:fail_instance_full", (byte) 0); + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + return; + } + + if (instance != null) { + add(instance, creature); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_launching")); + } + + /* + * @description Adds a player to an instance. Can be used directly to avoid queue. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public void add(Instance instance, CreatureObject creature) { + try { + String terrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getTerrain").asString(); + Planet planet = core.terrainService.getPlanetByPath(terrain); + int cellId = core.scriptService.callScript("scripts/instances/", instance.getName(), "getCellId").asInt(); + + if (cellId == -1) { + Point3D position = new Point3D(); + position.x = instance.getInstancePosition().x + instance.getSpawnPosition().x; + position.y = instance.getInstancePosition().y + instance.getSpawnPosition().y; + position.z = instance.getInstancePosition().z + instance.getSpawnPosition().z; + + core.simulationService.transferToPlanet(creature, planet, position, creature.getOrientation(), null); + } else { + String buildingName = core.scriptService.callScript("scripts/instances/", instance.getName(), "getBuilding").asString(); + BuildingObject building = null; + + Point3D buildingPosition = instance.getInstancePosition().clone(); + + DatatableVisitor buildoutTable = ClientFileManager.loadFile("datatables/buildout/" + planet.getName() + "/" + instance.getName() + ".iff", DatatableVisitor.class); + + for (int i = 0; i < buildoutTable.getRowCount(); i++) { + if (((Integer) buildoutTable.getObject(i, 3)) == CRC.StringtoCRC(buildingName)) { + buildingPosition.x += ((Float) buildoutTable.getObject(i, 5)); + buildingPosition.y += ((Float) buildoutTable.getObject(i, 6)); + buildingPosition.z += ((Float) buildoutTable.getObject(i, 7)); + } + } + + for (SWGObject object : core.objectService.getObjectList().values()) { + if (object instanceof BuildingObject && + object.getTemplate().equals(buildingName) && + object.getPosition().x == buildingPosition.x && + object.getPosition().y == buildingPosition.y && + object.getPosition().z == buildingPosition.z) { + building = (BuildingObject) object; + break; + } + } + + if (building == null) { + throw new Exception(); + } + + core.simulationService.transferToPlanet(creature, planet, instance.getSpawnPosition(), creature.getOrientation(), building.getCellByCellNumber(cellId)); + } + + instance.addParticipant(creature); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "add", core, instance, creature); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /* + * @description Removes a player from an instance. Can be used directly. + * + * @param instance Instance object. + * @param creature Player's creature object to add to the instance. + * + * @return None. + */ + public void remove(Instance instance, CreatureObject creature) { + try { + if (creature.getBuffByName("instance_exiting") != null) { + creature.sendSystemMessage("@instance:instance_request_pending", (byte) 0); + return; + } + + core.buffService.addBuffToCreature(creature, "instance_exiting"); + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "remove", core, instance, creature); + + instance.removeParticipant(creature); + + core.simulationService.transferToPlanet(creature, exitPlanet, exitPosition, creature.getOrientation(), null); + } catch (Exception e) { + e.printStackTrace(); + } + + core.buffService.removeBuffFromCreature(creature, creature.getBuffByName("instance_exiting")); + } + + /* + * @description Closes an instance. + * + * @param instance Instance object. + * + * @return None. + */ + public synchronized void close(Instance instance) { + try { + if (instance.isClosed()) { + return; + } + + String exitTerrain = core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitTerrain").asString(); + Point3D exitPosition = new Point3D(); + Planet exitPlanet = core.terrainService.getPlanetByPath(exitTerrain); + + core.scriptService.callScript("scripts/instances/", instance.getName(), "getExitPosition", exitPosition); + + for (CreatureObject participant : instance.getActiveParticipants()) { + instance.removeParticipant(participant); + core.simulationService.transferToPlanet(participant, exitPlanet, exitPosition, participant.getOrientation(), null); + } + + if (!instance.getTask().isCancelled()) { + instance.getTask().cancel(true); + } + + core.scriptService.callScript("scripts/instances/", instance.getName(), "destroy", core, instance); + + instance.close(); + } catch (Exception e) { + e.printStackTrace(); + instance.setFaulty(true); + } + } + + /* + * @description Checks if an instance area is in use. + * + * @param instanceName Buildout name of the instance. + * @param instancePosition Position of the instance in the game world. + * + * @return True if instance is in use. + */ + public boolean instanceInUse(String instanceName, Point3D instancePosition) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFaulty() || (instance.isOpen() && + instance.getInstancePosition().x == instancePosition.x && + instance.getInstancePosition().z == instancePosition.z)) { + return true; + } + } + } + + return false; + } + + /* + * @description Gets an instance object from an instanceId. + * + * @param instanceId Id of an instance you want an object for. + * + * @return Instance object, or null if none found. + */ + public Instance getInstance(long instanceId) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.getInstanceId() == instanceId) { + return instance; + } + } + } + + return null; + } + + /* + * @description Checks if player is in an instance. + * + * @param creature Player's creature object. + * + * @return True if player is in an instance. + */ + public boolean isInInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Checks if player is in a specific instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isActiveParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Checks if player is in a specific instance. + * + * @param instance Instance object. + * @param creature Player's creature object. + * + * @return True if player is in the specified instance. + */ + public boolean isInInstance(Instance instance, CreatureObject creature) { + return instance.getActiveParticipants().contains(creature); + } + + /* + * @description Finds the instance object a player is currently in. + * + * @param creature Player's creature object. + * + * @return Instance object of the player, or null if they aren't in one. + */ + public Instance getActiveInstance(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isActiveParticipant(creature)) { + return instance; + } + } + } + + return null; + } + + /* + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public Instance getActiveInstance(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() > 0) { + return instance; + } + } + } + + return null; + } + + /* + * @description Checks if player has any instance lockouts. + * + * @param creature Player's creature object. + * + * @return True if player is locked out from any instances. + */ + public boolean hasInstanceLockout(CreatureObject creature) { + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isFormerParticipant(creature)) { + return true; + } + } + } + + return false; + } + + /* + * @description Finds the instance object of an instance a player is/has been in. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return Instance object of the specified instance the specified player has entered since reset, or null if not found. + */ + public List getLockoutList(CreatureObject creature) { + List lockoutList = new ArrayList(); + + for (List instanceList : instanceMap.values()) { + for (Instance instance : instanceList) { + if (instance.isFormerParticipant(creature)) { + lockoutList.add(instance); + } + } + } + + return lockoutList; + } + + /* + * @description Checks if player is locked out of an instance. + * + * @param instanceName Buildout name of the instance. + * @param creature Player's creature object. + * + * @return True if player is locked out from the specified instance. + */ + public boolean isLockedOut(String instanceName, CreatureObject creature) { + if (instanceMap.containsKey(instanceName)) { + for (Instance instance : instanceMap.get(instanceName)) { + if (instance.isFormerParticipant(creature) && instance.getTimeRemaining() <= 0) { + return true; + } + } + } + + return false; + } + + /* + * @description Shows the instance UI. + * + * @param creature Player's creature object. + * + * @return None. + */ + public void showInstances(CreatureObject creature) { + // Stub for the /showi UI + } + + @Override + public void insertOpcodes(Map swgOpcodes, + Map objControllerOpcodes) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + + } + +} diff --git a/src/services/LoginService.java b/src/services/LoginService.java index 7bb0a2ef..374400ef 100644 --- a/src/services/LoginService.java +++ b/src/services/LoginService.java @@ -174,10 +174,10 @@ public class LoginService implements INetworkDispatch{ @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - + data = data.order(ByteOrder.LITTLE_ENDIAN); data.position(0); - + DeleteCharacterMessage packet = new DeleteCharacterMessage(); packet.deserialize(data); Client client = core.getClient(session); diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 55a4b617..a910486f 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -34,6 +34,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.function.Predicate; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.mina.core.buffer.IoBuffer; import org.apache.mina.core.session.IoSession; @@ -41,6 +42,8 @@ import org.apache.mina.core.session.IoSession; import protocol.swg.CharacterSheetResponseMessage; import protocol.swg.ClientIdMsg; import protocol.swg.ClientMfdStatusUpdateMessage; +import protocol.swg.CollectionServerFirstListRequest; +import protocol.swg.CollectionServerFirstListResponse; import protocol.swg.CreateClientPathMessage; import protocol.swg.ExpertiseRequestMessage; import protocol.swg.GuildRequestMessage; @@ -52,12 +55,12 @@ import protocol.swg.SetWaypointColor; import protocol.swg.objectControllerObjects.ChangeRoleIconChoice; import protocol.swg.objectControllerObjects.ShowFlyText; import protocol.swg.objectControllerObjects.ShowLootBox; -import resources.common.Console; import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RGB; import resources.common.SpawnPoint; +import resources.common.StringUtilities; import resources.datatables.PlayerFlags; import resources.guild.Guild; import resources.objects.Buff; @@ -66,6 +69,7 @@ import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; import resources.objects.player.PlayerMessageBuilder; import resources.objects.player.PlayerObject; +import resources.objects.tangible.TangibleObject; import resources.objects.waypoint.WaypointObject; import services.sui.SUIService.ListBoxType; import services.sui.SUIWindow; @@ -77,6 +81,7 @@ import engine.clientdata.visitors.CrcStringTableVisitor; import engine.clientdata.visitors.DatatableVisitor; import engine.clients.Client; import engine.resources.common.CRC; +import engine.resources.container.Traverser; import engine.resources.objects.DraftSchematic; import engine.resources.objects.SWGObject; import engine.resources.scene.Point3D; @@ -312,7 +317,29 @@ public class PlayerService implements INetworkDispatch { }); swgOpcodes.put(Opcodes.CollectionServerFirstListRequest, (session, data) -> { + data.order(ByteOrder.LITTLE_ENDIAN); + data.position(0); + Client client = core.getClient(session); + + if (client == null) + return; + + SWGObject player = client.getParent(); + + if (player == null) + return; + + CollectionServerFirstListRequest request = new CollectionServerFirstListRequest(); + request.deserialize(data); + + String server = request.getServer(); + System.out.println(server); + if (server == null || server.equals("")) + return; + + CollectionServerFirstListResponse response = new CollectionServerFirstListResponse(server, core.guildService.getGuildObject().getServerFirst()); + session.write(response.serialize()); }); swgOpcodes.put(Opcodes.Unknown, (session, data) -> { @@ -361,7 +388,7 @@ public class PlayerService implements INetworkDispatch { if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseBox + ".py")) return; - core.scriptService.callScript("scripts/expertise/", "addExpertisePoint", expertiseBox, core, creature); + core.scriptService.callScript("scripts/expertise/", expertiseBox, "addExpertisePoint", core, creature); } @@ -464,6 +491,10 @@ public class PlayerService implements INetworkDispatch { // Cannot gain more than half of the XP needed for the next level in one go // Do check + int experienceBonus = creature.getSkillModBase("flush_with_success"); + + experience += ((experience * experienceBonus) / 100); + // 1. Add the experience. if (experience > 0) { creature.showFlyText("base_player", "prose_flytext_xp", "", experience, (float) 2.5, new RGB(180, 60, 240), 1); @@ -485,7 +516,7 @@ public class PlayerService implements INetworkDispatch { creature.playEffectObject("clienteffect/level_granted.cef", ""); creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); - core.scriptService.callScript("scripts/collections/", "addMasterBadge", "master_" + player.getProfession(), core, creature); + core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); // 3. Add the relevant health/action and expertise points. float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); @@ -578,6 +609,8 @@ public class PlayerService implements INetworkDispatch { try { roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + Vector rewards = new Vector(); + for (int s = 0; s < roadmap.getRowCount(); s++) { if (roadmap.getObject(s, 0) != null) { if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { @@ -602,11 +635,12 @@ public class PlayerService implements INetworkDispatch { item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); } else { customServerTemplate = item; - item = core.scriptService.callScript("scripts/roadmap/", "roadmap_rewards", "get", item).asString(); + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); } if (item != null && item != "") { - creature.getSlottedObject("inventory").add(core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate)); + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + rewards.add(itemObj); } else { //System.out.println("Can't find template: " + item); } @@ -618,6 +652,11 @@ public class PlayerService implements INetworkDispatch { } } } + + if (rewards != null && !rewards.isEmpty()) { + giveItems(creature, rewards); + } + } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } @@ -629,6 +668,9 @@ public class PlayerService implements INetworkDispatch { } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } + + if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90 && creature.getEntertainerExperience() != null) + creature.getEntertainerExperience().cancel(true); //} } @@ -672,11 +714,38 @@ public class PlayerService implements INetworkDispatch { } /** - * Gives a player items and shows the "New Items" message. - * @param reciever Player receiving the items - * @param items The object(s) to be given. This will allow multiple arguments. + * Gives a player an item and shows the "New Items" message. + * @param reciever Player receiving the item. + * @param item The object to be given. + * @author Waverunner */ - public void giveItems(CreatureObject reciever, SWGObject... items) { + public void giveItem(CreatureObject reciever, SWGObject item) { + if (reciever == null || item == null) + return; + + if (reciever.getClient() == null) + return; + Client client = reciever.getClient(); + + if (client.getSession() == null) + return; + SWGObject inventory = reciever.getSlottedObject("inventory"); + + if (inventory == null) + return; + + inventory.add(item); + + ObjControllerMessage objController = new ObjControllerMessage(11, new ShowLootBox(reciever.getObjectID(), item)); + client.getSession().write(objController.serialize()); + } + + /** + * Gives a player a variety of items and shows the "New Items" message. + * @param reciever Player receiving the items. + * @param items Vector of the items. + */ + public void giveItems(CreatureObject reciever, Vector items) { if (reciever == null || items == null) return; @@ -699,6 +768,128 @@ public class PlayerService implements INetworkDispatch { client.getSession().write(objController.serialize()); } + public void performUnity(final CreatureObject acceptor, final CreatureObject proposer){ + TangibleObject acceptorInventory = (TangibleObject) acceptor.getSlottedObject("inventory"); + final AtomicBoolean acceptorHasRing = new AtomicBoolean(); + + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if(obj.getAttachment("objType") != null) { + String objType = (String) obj.getAttachment("objType"); + if(objType == "ring") { + acceptorHasRing.set(true); + } + } + } + }); + + if(acceptorHasRing.get() == false) { + acceptor.sendSystemMessage("@unity:no_ring", (byte) 0); + proposer.sendSystemMessage("@unity:accept_fail", (byte) 0); + acceptor.setAttachment("proposer", null); + } else { + PlayerObject aGhost = (PlayerObject) acceptor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + if (aGhost == null || pGhost == null) { + acceptor.sendSystemMessage("@unity:wed_error", (byte) 0); + proposer.sendSystemMessage("@unity:wed_error", (byte) 0); + acceptor.setAttachment("proposer", null); + return; + } else { + final Vector ringList = new Vector(); + acceptorInventory.viewChildren(acceptor, false, false, new Traverser() { + + @Override + public void process(SWGObject obj) { + if (obj.getAttachment("objType") != null) { + if (obj.getAttachment("objType") == "ring") { + ringList.add(obj); + } + } + } + }); + + if (ringList.size() > 1) { + sendRingSelectWindow(acceptor, proposer, ringList); + } else { + // Proposer's ring is already 'unified' from the start, so no + // need to set a unity attachment. + ringList.get(0).setAttachment("unity", (Boolean) true); + + if(!acceptor.getEquipmentList().contains(ringList.get(0))) + core.equipmentService.equip(acceptor, ringList.get(0)); + + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(acceptor.getCustomName()); + + acceptor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + acceptor.getCustomName() + " is complete.", (byte) 0); + + acceptor.setAttachment("proposer", null); + } + } + } + } + + private void sendRingSelectWindow(final CreatureObject actor, final CreatureObject proposer, Vector ringList) { + Map ringData = new HashMap(); + + for(SWGObject obj : ringList) { + ringData.put(obj.getObjectId(), obj.getCustomName()); + } + + final SUIWindow ringWindow = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, "@unity:ring_prompt", "@unity:ring_prompt", ringData, actor, proposer, (float) 15); + Vector returnList = new Vector(); + returnList.add("List.lstList:SelectedRow"); + + ringWindow.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + int index = Integer.parseInt(returnList.get(0)); + + SWGObject selectedRing = core.objectService.getObject(ringWindow.getObjectIdByIndex(index)); + selectedRing.setAttachment("unity", (Boolean) true); + + if(!actor.getEquipmentList().contains(selectedRing)) + core.equipmentService.equip(actor, selectedRing); + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + aGhost.setSpouseName(proposer.getCustomName()); + pGhost.setSpouseName(actor.getCustomName()); + + actor.sendSystemMessage("Your union with " + proposer.getCustomName() + " is complete.", (byte) 0); + proposer.sendSystemMessage("Your union with " + actor.getCustomName() + " is complete.", (byte) 0); + } + + }); + + ringWindow.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() { + + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + + PlayerObject aGhost = (PlayerObject) actor.getSlottedObject("ghost"); + PlayerObject pGhost = (PlayerObject) proposer.getSlottedObject("ghost"); + + actor.sendSystemMessage("@unity:decline", (byte) 0); + proposer.sendSystemMessage("@unity:declined", (byte) 0); + actor.setAttachment("proposer", null); + for(SWGObject obj : proposer.getEquipmentList()) { + if(obj.getAttachment("unity") != null) { + obj.setAttachment("unity", null); + break; + } + } + } + }); + core.suiService.openSUIWindow(ringWindow); + } + @Override public void shutdown() { // TODO Auto-generated method stub diff --git a/src/services/ScriptService.java b/src/services/ScriptService.java index 791e3cd5..9ea1c999 100644 --- a/src/services/ScriptService.java +++ b/src/services/ScriptService.java @@ -30,10 +30,10 @@ import main.NGECore; @SuppressWarnings("unused") public class ScriptService { - + private NGECore core; private PythonInterpreter interpreter; - + public ScriptService(NGECore core) { this.core = core; } @@ -62,7 +62,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); @@ -74,7 +74,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2)); } - public PyObject callScript(String path, String method, String module, Object arg1, Object arg2, Object arg3) { + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); interpreter.exec("import sys\nsys.path.append('" + path + "')\nfrom " + module + " import " + method); @@ -86,7 +86,7 @@ public class ScriptService { return python.get(method).__call__(Py.java2py(arg1), Py.java2py(arg2), Py.java2py(arg3)); } - + public PyObject callScript(String path, String module, String method, Object arg1, Object arg2, Object arg3, Object arg4) { /*PythonInterpreter interpreter = new PythonInterpreter(); interpreter.cleanup(); @@ -106,5 +106,5 @@ public class ScriptService { PyObject func = python.get(method); return func; } - + } diff --git a/src/services/SimulationService.java b/src/services/SimulationService.java index b9edf1e1..296cdf40 100644 --- a/src/services/SimulationService.java +++ b/src/services/SimulationService.java @@ -162,6 +162,7 @@ public class SimulationService implements INetworkDispatch { core.commandService.registerCommand("editbiography"); core.commandService.registerCommand("setbiography"); core.commandService.registerCommand("requestbiography"); + core.commandService.registerCommand("eject"); } @@ -262,6 +263,10 @@ public class SimulationService implements INetworkDispatch { } public boolean remove(SWGObject object, float x, float y, boolean notifyObservers) { + if (object == null || !object.isInQuadtree()) { + return false; + } + boolean success = quadTrees.get(object.getPlanet().getName()).remove(x, y, object); object.setIsInQuadtree(success); if(success && notifyObservers) { @@ -436,21 +441,20 @@ public class SimulationService implements INetworkDispatch { }); - objControllerOpcodes.put(ObjControllerOpcodes.TARGET_UPDATE, new INetworkRemoteEvent() { + objControllerOpcodes.put(ObjControllerOpcodes.lookAtTarget, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - - data = data.order(ByteOrder.LITTLE_ENDIAN); - data.position(0); - + + data.order(ByteOrder.LITTLE_ENDIAN); + Client client = core.getClient(session); - + if(client == null) { System.out.println("NULL Client"); return; } - + if(client.getParent() == null) { System.out.println("NULL Object"); return; @@ -459,20 +463,40 @@ public class SimulationService implements INetworkDispatch { TargetUpdate targetUpdate = new TargetUpdate(); targetUpdate.deserialize(data); - - object.setTargetId(targetUpdate.getTargetId()); - + + object.setLookAtTarget(targetUpdate.getTargetId()); + } }); - objControllerOpcodes.put(ObjControllerOpcodes.HOVER_TARGET, new INetworkRemoteEvent() { + objControllerOpcodes.put(ObjControllerOpcodes.intendedTarget, new INetworkRemoteEvent() { @Override public void handlePacket(IoSession session, IoBuffer data) throws Exception { - + + data.order(ByteOrder.LITTLE_ENDIAN); + + Client client = core.getClient(session); + + if(client == null) { + System.out.println("NULL Client"); + return; + } + + if(client.getParent() == null) { + System.out.println("NULL Object"); + return; + } + CreatureObject object = (CreatureObject) client.getParent(); + + TargetUpdate targetUpdate = new TargetUpdate(); + targetUpdate.deserialize(data); + + object.setIntendedTarget(targetUpdate.getTargetId()); + } - + }); } @@ -698,6 +722,9 @@ public class SimulationService implements INetworkDispatch { final CreatureObject object = (CreatureObject) client.getParent(); PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost"); + if(object.getAttachment("proposer") != null) + object.setAttachment("proposer", null); + //session.suspendWrite(); final long objectId = object.getObjectID(); @@ -955,6 +982,13 @@ public class SimulationService implements INetworkDispatch { Point3D end = new Point3D(position2.x, position2.y + 1, position2.z); Vector3D direction = new Vector3D(end.x - origin.x, end.y - origin.y, end.z - origin.z).normalize(); + + if (direction.getNorm() != 0) { + direction.normalize(); + } else { + System.out.println("WARNING: checkLineOfSightInBuilding: Vector norm was 0."); + } + float distance = position1.getDistance2D(position2); Ray ray = new Ray(origin, direction); diff --git a/src/services/SkillService.java b/src/services/SkillService.java index 75385d8c..e1cff8a2 100644 --- a/src/services/SkillService.java +++ b/src/services/SkillService.java @@ -271,16 +271,30 @@ public class SkillService implements INetworkDispatch { return; for(String expertiseName : expertise.getExpertiseSkills()) { - addSkill(creature, expertiseName); - if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) - continue; - core.scriptService.callScript("scripts/expertise/", "addAbilities", expertiseName, core, creature, player); - } - + if(expertiseName.startsWith("expertise_") && ((caluclateExpertisePoints(creature) - 1) > 0)) // Prevent possible glitches/exploits + { + addSkill(creature, expertiseName); + if(!FileUtilities.doesFileExist("scripts/expertise/" + expertiseName + ".py")) + continue; + core.scriptService.callScript("scripts/expertise/", expertiseName, "addAbilities", core, creature, player); + } + } } }); } + + public int caluclateExpertisePoints(CreatureObject creature) + { + int expertisePoints = 0; + try + { + DatatableVisitor table = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + for (int i = 0; i <= creature.getLevel(); i++) expertisePoints += (int) table.getObject(i, 5); + } + catch (Exception e) { e.printStackTrace(); } + return expertisePoints; + } @Override public void shutdown() { diff --git a/src/services/StaticService.java b/src/services/StaticService.java index a0447d0a..f6c8bf68 100644 --- a/src/services/StaticService.java +++ b/src/services/StaticService.java @@ -56,6 +56,7 @@ public class StaticService implements INetworkDispatch { spawnPlanetStaticObjs("naboo"); spawnPlanetStaticObjs("tatooine"); spawnPlanetStaticObjs("lok"); + //spawnPlanetStaticObjs("kaas"); // Keep commented out unless you possess the latest build of Kaas! } @Override @@ -70,7 +71,7 @@ public class StaticService implements INetworkDispatch { public void spawnPlanetStaticObjs(String planet) { Planet planetObj = (Planet) core.terrainService.getPlanetByName(planet); - core.scriptService.callScript("scripts/static_spawns/", "addPlanetSpawns", planetObj.getName(), core, planetObj); + core.scriptService.callScript("scripts/static_spawns/", planetObj.getName(), "addPlanetSpawns", core, planetObj); System.out.println("Loaded static objs for " + planetObj.getName()); } diff --git a/src/services/chat/ChatService.java b/src/services/chat/ChatService.java index 2bd76a4f..356193c9 100644 --- a/src/services/chat/ChatService.java +++ b/src/services/chat/ChatService.java @@ -553,6 +553,9 @@ public class ChatService implements INetworkDispatch { public SWGObject getObjectByFirstName(String name) { ConcurrentHashMap clients = core.getActiveConnectionsMap(); + if(name.contains(" ")) + name = name.split(" ")[0]; + for(Client client : clients.values()) { if(client.getParent() == null) continue; diff --git a/src/services/collections/CollectionService.java b/src/services/collections/CollectionService.java index 809687f0..e31bde4c 100644 --- a/src/services/collections/CollectionService.java +++ b/src/services/collections/CollectionService.java @@ -71,7 +71,7 @@ public class CollectionService implements INetworkDispatch { } } - /* + /** * @see datatables/collection/collections.iff * * Count and exploration count badges are added automatically. @@ -185,17 +185,17 @@ public class CollectionService implements INetworkDispatch { ((String) collectionTable.getObject(c, 32)) }; - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } @@ -222,11 +222,8 @@ public class CollectionService implements INetworkDispatch { BitSet bitValue = new BitSet(64); bitValue.set(64-bits, 64); - BitSet maxValue = new BitSet(64); - maxValue.set(64-maxSlotValue, 64); - - if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { - System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxValue.toLongArray()[0]); + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); throw new Exception(); } } @@ -289,18 +286,24 @@ public class CollectionService implements INetworkDispatch { } } else { if (numAltTitles > 0 || alternateTitles.length > 0) { - System.out.println(slotName + ": slot " + slotName + " cannot have any alternative titles unless it is defined as \"titleable\""); + //System.out.println(slotName + ": slot " + slotName + " cannot have any alternative titles unless it is defined as \"titleable\""); } } - if (bits > 1) { + if (maxSlotValue > -1) { + BitSet value = BitSet.valueOf(new long[] { collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]++ }); + + for (int i = beginSlotId; i <= endSlotId; i++) { + collections.set(i, value.get((i - beginSlotId))); + } + } else if (bits > 1) { int nextBit = collections.get(beginSlotId, (endSlotId + 1)).previousClearBit(endSlotId); if (nextBit == -1) { return false; } - collections.set((beginSlotId + nextBit)); + collections.set(nextBit); } else { collections.set(beginSlotId); } @@ -359,7 +362,7 @@ public class CollectionService implements INetworkDispatch { } if (trackServerFirst) { - if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), System.currentTimeMillis()))) { + if (core.guildService.getGuildObject().addServerFirst(collectionName, new ServerFirst(creature.getCustomName(), creature.getObjectId(), collectionName, System.currentTimeMillis()))) { addCollection(creature, "bdg_server_first_01"); } } @@ -417,7 +420,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * @param creature The player's CreatureObject instance. * @param collection slotName or collectionName from collection.iff. * @@ -439,8 +442,6 @@ public class CollectionService implements INetworkDispatch { String bookName = ""; String pageName = ""; String collectionName = ""; - boolean found = false; - boolean collectionComplete = false; collections = BitSet.valueOf(player.getCollections()); @@ -461,36 +462,31 @@ public class CollectionService implements INetworkDispatch { if (slotName.equals(collection)) { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName) { + if (collection.equals(bookName)) { System.out.println("Checking if a book is complete is unsupported at this time."); throw new Exception(); - } else if (collection == pageName) { + } else if (collection.equals(pageName)) { System.out.println("Checking if a page is complete is unsupported at this time."); throw new Exception(); - } else if (collection == collectionName) { - collectionComplete = collections.get(beginSlotId); - found = true; - } else if (collection == slotName) { + } else if (collection.equals(collectionName)) { + return collections.get(beginSlotId); + } else if (collection.equals(slotName)) { return collections.get(beginSlotId); - } - - if (found && collectionName != collection) { - return collectionComplete; } } } @@ -503,7 +499,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * Returns number of completed bits in a slot or the number of completed * slots in a collection, page or book. * @@ -551,34 +547,34 @@ public class CollectionService implements INetworkDispatch { int maxSlotValue = ((Integer) collectionTable.getObject(c, 6)); int bits = 0; - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName) { + if (collection.equals(bookName)) { found += getCollection(creature, pageName); continue; - } else if (collection == pageName) { + } else if (collection.equals(pageName)) { found += getCollection(creature, collectionName); continue; - } else if (collection == collectionName) { + } else if (collection.equals(collectionName)) { if (collections.get(beginSlotId)) { found++; } continue; - } else if (collection == slotName) { + } else if (collection.equals(slotName)) { if (endSlotId != -1) { if (beginSlotId >= endSlotId) { System.out.println(slotName + ", row " + c + ": begin slot id " + beginSlotId + " must be < end slot id" + endSlotId); @@ -601,14 +597,15 @@ public class CollectionService implements INetworkDispatch { BitSet bitValue = new BitSet(64); bitValue.set(64-bits, 64); - BitSet maxValue = new BitSet(64); - maxValue.set(64-maxSlotValue, 64); - - if (bitValue.toLongArray()[0] < maxValue.toLongArray()[0]) { - System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxValue.toLongArray()[0]); + if (bitValue.toLongArray()[0] < maxSlotValue) { + System.out.println(slotName + ", row " + c + ": counter-type slot uses " + bits + " bits, which can only hold a max value of " + bitValue.toLongArray()[0] + ", which is less than the specified max value of " + maxSlotValue); throw new Exception(); } - + } + + if (maxSlotValue > 0) { + return (int) collections.get(beginSlotId, (endSlotId + 1)).toLongArray()[0]; + } else { return collections.get(beginSlotId, (endSlotId + 1)).cardinality(); } } else { @@ -629,7 +626,8 @@ public class CollectionService implements INetworkDispatch { return 0; } - /* + + /** * Registers an exploration badge location. * * @param planet Name from Planet.getName(). @@ -646,7 +644,7 @@ public class CollectionService implements INetworkDispatch { explorationLocations.get(planet).put(badgeName, new ExplorationRegion(new Point3D(x, 0, z), range)); } - /* + /** * Checks if the player is in range of any exploration regions * and grants any ungranted badges. * @@ -666,7 +664,7 @@ public class CollectionService implements INetworkDispatch { } } - /* + /** * Clears the specified slot, collection, page or book. * * @param creature The player's CreatureObject instance. @@ -711,23 +709,23 @@ public class CollectionService implements INetworkDispatch { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); int endSlotId = ((Integer) collectionTable.getObject(c, 5)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } - if (collection == bookName || collection == pageName || - collection == collectionName || collection == slotName) { + if (collection.equals(bookName) || collection.equals(pageName) || + collection.equals(collectionName) || collection.equals(slotName)) { found = true; if (collections.get(beginSlotId, endSlotId + 1).cardinality() > 0) { @@ -755,7 +753,7 @@ public class CollectionService implements INetworkDispatch { return false; } - /* + /** * Clears all collections. * * This must cycle through all the collections because @@ -800,17 +798,17 @@ public class CollectionService implements INetworkDispatch { int beginSlotId = ((Integer) collectionTable.getObject(c, 4)); int endSlotId = ((Integer) collectionTable.getObject(c, 5)); - if (bookName == "") { + if (bookName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a book"); throw new Exception(); } - if (pageName == "") { + if (pageName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a page"); throw new Exception(); } - if (collectionName == "") { + if (collectionName.equals("")) { System.out.println(slotName + ", row " + c + ": slot " + slotName + " must be in a collection"); throw new Exception(); } diff --git a/src/services/collections/ServerFirst.java b/src/services/collections/ServerFirst.java index 1a955ed2..2b855fb4 100644 --- a/src/services/collections/ServerFirst.java +++ b/src/services/collections/ServerFirst.java @@ -21,6 +21,8 @@ ******************************************************************************/ package services.collections; +import org.apache.mina.core.buffer.IoBuffer; + import resources.objects.Delta; import com.sleepycat.persist.model.Persistent; @@ -29,11 +31,15 @@ import com.sleepycat.persist.model.Persistent; public class ServerFirst extends Delta { private String name; + private String collection; private long time; + private long objectId; - public ServerFirst(String name, long time) { + public ServerFirst(String name, long objectId, String collection, long time) { this.name = name; + this.objectId = objectId; this.time = time; + this.collection = collection; } public ServerFirst() { @@ -48,9 +54,24 @@ public class ServerFirst extends Delta { return time; } + public long getObjectId() { + return objectId; + } + + public String getCollection() { + return collection; + } + @Override public byte[] getBytes() { - return new byte[] { }; + synchronized(objectMutex) { + IoBuffer buffer = createBuffer(18 + collection.length() + (name.length() * 2)); + buffer.putInt((int) time / 1000); + buffer.put(getAsciiString(collection)); + buffer.putLong(objectId); + buffer.put(getUnicodeString(name)); + return buffer.array(); + } } } diff --git a/src/services/combat/CombatService.java b/src/services/combat/CombatService.java index e657b941..ad94babe 100644 --- a/src/services/combat/CombatService.java +++ b/src/services/combat/CombatService.java @@ -85,7 +85,7 @@ public class CombatService implements INetworkDispatch { } public void doCombat(final CreatureObject attacker, final TangibleObject target, final WeaponObject weapon, final CombatCommand command, final int actionCounter) { - + boolean success = true; if((command.getAttackType() == 0 || command.getAttackType() == 1 || command.getAttackType() == 3) && !attemptCombat(attacker, target)) @@ -441,7 +441,7 @@ public class CombatService implements INetworkDispatch { } else { elementalType = command.getElementalType(); - + } int baseArmor = 0; @@ -460,14 +460,16 @@ public class CombatService implements INetworkDispatch { baseArmor = target.getSkillModBase("acid"); case ElementalType.ELECTRICITY: baseArmor = target.getSkillModBase("electricity"); - } if(target.getSkillMod("expertise_innate_reduction_all_player") != null) baseArmor *= (100 - target.getSkillMod("expertise_innate_reduction_all_player").getBase()) / 100; - float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor)) + baseArmor / 9000); + if(command.getBypassArmor() > 0) + baseArmor *= (100 - command.getBypassArmor()) / 100; + float mitigation = (float) (90 * (1 - Math.exp(-0.000125 * baseArmor))) + baseArmor / 9000; + if(hitType == HitType.STRIKETHROUGH) { float stMaxValue = attacker.getSkillMod("combat_strikethrough_value").getBase() / 2 + attacker.getLuck() / 10; @@ -480,7 +482,7 @@ public class CombatService implements INetworkDispatch { stValue = 1 - stValue; mitigation *= stValue; } - + return mitigation / 100; } @@ -504,10 +506,10 @@ public class CombatService implements INetworkDispatch { if(attacker.getAttachment("AI") instanceof AIActor && target instanceof CreatureObject) { ((AIActor) attacker.getAttachment("AI")).addDefender((CreatureObject) target); } else { - attacker.addDefender(target); + attacker.addDefender(target); // See below comment } - attacker.addDefender(target); + //attacker.addDefender(target); // Why do we need to add target to defender list twice? return true; @@ -725,9 +727,12 @@ public class CombatService implements INetworkDispatch { critChance += ((float) target.getSkillModBase("critical_hit_vulnerable") / 100); - if(target.isPlayer()) - critChance += attacker.getSkillModBase("expertise_critical_niche_pvp"); - critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_pvp_reduction") / 100); + if(target.getSlottedObject("ghost") != null) + if(target.isPlayer()) { + critChance += attacker.getSkillModBase("expertise_critical_niche_pvp"); + critChance -= ((float) target.getSkillModBase("display_only_expertise_critical_hit_pvp_reduction") / 100); + } + r = random.nextFloat(); @@ -855,6 +860,16 @@ public class CombatService implements INetworkDispatch { if(healer == target) return true; + PlayerObject healerPo = (PlayerObject) healer.getSlottedObject("ghost"); + + if (healerPo != null && !healerPo.getProfession().startsWith("medic")) { + return false; + } + + if (areInDuel(healer, target)) { + return false; + } + if(healer.getFaction().equals(target.getFaction())) { if(healer.getFactionStatus() < target.getFactionStatus()) diff --git a/src/services/command/CombatCommand.java b/src/services/command/CombatCommand.java index 16198a57..2ec3f936 100644 --- a/src/services/command/CombatCommand.java +++ b/src/services/command/CombatCommand.java @@ -151,10 +151,10 @@ public class CombatCommand extends BaseSWGCommand { minDamage = (Integer) visitor.getObject(i, 77); maxDamage = (Integer) visitor.getObject(i, 78); maxRangeOverload = (Float) visitor.getObject(i, 79); - weaponCategory = ((Integer) visitor.getObject(i, 80)).byteValue(); - damageType = ((Integer) visitor.getObject(i, 81)).byteValue(); - elementalType = ((Integer) visitor.getObject(i, 82)).byteValue(); - elementalValue = (Integer) visitor.getObject(i, 83); + weaponCategory = ((Integer) visitor.getObject(i, 81)).byteValue(); + damageType = ((Integer) visitor.getObject(i, 82)).byteValue(); + elementalType = ((Integer) visitor.getObject(i, 83)); + elementalValue = (Integer) visitor.getObject(i, 84); performanceSpam = (String) visitor.getObject(i, 89); hitSpam = ((Integer) visitor.getObject(i, 90)).byteValue(); @@ -381,7 +381,7 @@ public class CombatCommand extends BaseSWGCommand { this.percentFromWeapon = percentFromWeapon; } - public float isBypassArmor() { + public float getBypassArmor() { return bypassArmor; } diff --git a/src/services/map/MapService.java b/src/services/map/MapService.java index f586cfde..23b6437c 100644 --- a/src/services/map/MapService.java +++ b/src/services/map/MapService.java @@ -105,7 +105,7 @@ public class MapService implements INetworkDispatch { public void addPlanet(Planet planet) { locationMap.put(planet, new Vector()); - core.scriptService.callScript("scripts/", "addLocations", "static_map_locations", core, planet); + core.scriptService.callScript("scripts/", "static_map_locations", "addLocations", core, planet); } public void addLocation(Planet planet, String name, float x, float y, byte category, byte subcategory, byte active) { diff --git a/src/services/object/DuplicateId.java b/src/services/object/DuplicateId.java new file mode 100644 index 00000000..57b52cea --- /dev/null +++ b/src/services/object/DuplicateId.java @@ -0,0 +1,26 @@ +package services.object; + +import com.sleepycat.persist.model.Entity; +import com.sleepycat.persist.model.PrimaryKey; + +@Entity +public class DuplicateId { + + @PrimaryKey + private String key; + private long objectId; + + public DuplicateId(String key, long objectId) { + this.key = key; + this.objectId = objectId; + } + + public DuplicateId() { + + } + + public long getObjectId() { + return objectId; + } + +} diff --git a/src/services/object/ObjectService.java b/src/services/object/ObjectService.java index 1e66cdeb..a67b1398 100644 --- a/src/services/object/ObjectService.java +++ b/src/services/object/ObjectService.java @@ -30,6 +30,7 @@ import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -52,6 +53,7 @@ import org.apache.mina.core.session.IoSession; import org.python.core.Py; import org.python.core.PyObject; +import com.sleepycat.je.Transaction; import com.sleepycat.persist.EntityCursor; import com.sleepycat.persist.model.Entity; import com.sleepycat.persist.model.PrimaryKey; @@ -84,6 +86,7 @@ import engine.resources.scene.Quaternion; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; +import resources.objects.Delta; import resources.objects.building.BuildingObject; import resources.objects.cell.CellObject; import resources.objects.creature.CreatureObject; @@ -686,7 +689,12 @@ public class ObjectService implements INetworkDispatch { int counter = 0; for(SnapshotChunk chunk : visitor.getChunks()) { ++counter; - SWGObject obj = createObject(visitor.getName(chunk.nameId), chunk.id, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ)); + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned buildouts + // This is done for buildouts; uncertain about snapshot objects so it's commented for now + //long objectId = Delta.createBuffer(8).putInt(chunk.id).putInt(0xF986FFFF).flip().getLong(); // Not sure what extension they add to 4-byte-only snapshot objectIds. With buildouts they add 0xFFFF86F9. This is demonstated in the packet sent to the server when you /target client-spawned objects + int objectId = chunk.id; + SWGObject obj = createObject(visitor.getName(chunk.nameId), objectId, planet, new Point3D(chunk.xPosition, chunk.yPosition, chunk.zPosition), new Quaternion(chunk.orientationW, chunk.orientationX, chunk.orientationY, chunk.orientationZ)); if(obj != null) { obj.setisInSnapshot(true); obj.setParentId(chunk.parentId); @@ -776,6 +784,8 @@ public class ObjectService implements INetworkDispatch { CrcStringTableVisitor crcTable = ClientFileManager.loadFile("misc/object_template_crc_string_table.iff", CrcStringTableVisitor.class); List quadtreeObjects = new ArrayList(); + Map duplicate = new HashMap(); + for (int i = 0; i < buildoutTable.getRowCount(); i++) { String template; @@ -806,8 +816,10 @@ public class ObjectService implements INetworkDispatch { } else { - objectId = (Integer) buildoutTable.getObject(i, 0); - containerId = (Integer) buildoutTable.getObject(i, 1); + // Since the ids are just ints, they append 0xFFFF86F9 to them + // This is demonstated in the packet sent to the server when you /target client-spawned objects + objectId = (((Integer) buildoutTable.getObject(i, 0) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 0)).putInt(0xF986FFFF).flip().getLong()); + containerId = (((Integer) buildoutTable.getObject(i, 1) == 0) ? 0 : Delta.createBuffer(8).putInt((Integer) buildoutTable.getObject(i, 1)).putInt(0xF986FFFF).flip().getLong()); type = (Integer) buildoutTable.getObject(i, 2); cellIndex = (Integer) buildoutTable.getObject(i, 4); @@ -822,12 +834,45 @@ public class ObjectService implements INetworkDispatch { portalCRC = (Integer) buildoutTable.getObject(i, 13); } - + + // Treeku - Refactored to work around duplicate objectIds + // Required for instances/heroics which are duplicated ie. 10 times if(!template.equals("object/cell/shared_cell.iff") && objectId != 0 && getObject(objectId) != null) { - //System.out.println("Duplicate buildout object: " + template); - continue; + SWGObject object = getObject(objectId); + + // Same coordinates is a true duplicate + if ((px + ((containerId == 0) ? 0 : x1)) == object.getPosition().x && + py == object.getPosition().y && + (pz + ((containerId == 0) ? 0 : z1)) == object.getPosition().z) { + //System.out.println("Duplicate buildout object: " + template); + continue; + } } - + + if (duplicate.containsKey(containerId)) { + containerId = duplicate.get(containerId); + } + + if (objectId != 0 && getObject(objectId) != null) { + SWGObject container = getObject(containerId); + int x = ((int) (px + ((container == null) ? x1 : container.getPosition().x))); + int z = ((int) (pz + ((container == null) ? z1 : container.getPosition().z))); + String key = "" + CRC.StringtoCRC(planet.getName()) + CRC.StringtoCRC(template) + type + containerId + cellIndex + x + py + z; + long newObjectId = 0; + + if (core.getDuplicateIdODB().contains(key, String.class, DuplicateId.class)) { + newObjectId = core.getDuplicateIdODB().get(key, String.class, DuplicateId.class).getObjectId(); + } else { + newObjectId = generateObjectID(); + Transaction txn = core.getDuplicateIdODB().getEnvironment().beginTransaction(null, null); + core.getDuplicateIdODB().put(new DuplicateId(key, newObjectId), String.class, DuplicateId.class, txn); + txn.commitSync(); + } + + duplicate.put(objectId, newObjectId); + objectId = newObjectId; + } + List containers = new ArrayList(); SWGObject object; if(objectId != 0 && containerId == 0) { @@ -835,9 +880,11 @@ public class ObjectService implements INetworkDispatch { containers.add(objectId); object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz), null, true); object.setAttachment("childObjects", null); - ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); - core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); - ((BuildingObject) object).getTransaction().commitSync(); + if (!duplicate.containsValue(objectId)) { + ((BuildingObject) object).createTransaction(core.getBuildingODB().getEnvironment()); + core.getBuildingODB().put((BuildingObject) object, Long.class, BuildingObject.class, ((BuildingObject) object).getTransaction()); + ((BuildingObject) object).getTransaction().commitSync(); + } } else { object = createObject(template, objectId, planet, new Point3D(px + x1, py, pz + z1), new Quaternion(qw, qx, qy, qz)); } diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 95498f9b..8f496dc1 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -43,12 +43,12 @@ import protocol.swg.SUIForceClosePageMessage; import protocol.swg.SUIUpdatePageMessage; import protocol.swg.objectControllerObjects.ObjectMenuRequest; import protocol.swg.objectControllerObjects.ObjectMenuResponse; - +import resources.common.FileUtilities; import resources.common.ObjControllerOpcodes; import resources.common.Opcodes; import resources.common.RadialOptions; import services.sui.SUIWindow.SUICallback; - +import services.sui.SUIWindow.Trigger; import engine.clients.Client; import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; @@ -169,12 +169,26 @@ public class SUIService implements INetworkDispatch { } public String getRadialFilename(SWGObject object) { + String serverTemplate = ("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", "") + object.getTemplate().split("shared_" , 2)[1] + ".py"); + String radialFilename = "default"; - if(object.getAttachment("radial_filename") != null) - return (String) object.getAttachment("radial_filename"); - else - return "default"; + if (FileUtilities.doesFileExist(serverTemplate)) { + PyObject method = core.scriptService.getMethod("scripts/" + object.getTemplate().split("shared_" , 2)[0].replace("shared_", ""), object.getTemplate().split("shared_" , 2)[1].replace(".iff", ""), "getRadialFilename"); + + if (method != null && method.isCallable()) { + radialFilename = method.__call__().asString(); + + if (radialFilename == null || radialFilename.equals("")) { + radialFilename = "default"; + } + } + } + if (radialFilename.equals("default") && object.getAttachment("radial_filename") != null) { + radialFilename = (String) object.getAttachment("radial_filename"); + } + + return radialFilename; } public void sendRadial(SWGObject owner, SWGObject target, Vector radialOptions, byte radialCount) { @@ -319,6 +333,34 @@ public class SUIService implements INetworkDispatch { return window; } + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param PyObject Definition that will be run when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, PyObject handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + + /** + * Creates an Input Box SUIWindow and adds a handler that will return text inputed into text box with the callback as the specified PyObject. + * @param SUICallback Callback that will be ran when user clicks on "OK" + * @return SUIWindow + * @author Waverunner + */ + public SUIWindow createInputBox(int type, String title, String promptText, SWGObject owner, SWGObject rangeObject, float maxDistance, SUICallback handleFunc) { + SUIWindow window = createInputBox(type, title, promptText, owner, rangeObject, maxDistance); + Vector returnParams = new Vector(); + returnParams.add("txtInput:LocalText"); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnParams, handleFunc); + return window; + } + public void closeSUIWindow(SWGObject owner, int id) { if(owner.getClient() == null || owner.getClient().getSession() == null) diff --git a/src/services/trade/TradeService.java b/src/services/trade/TradeService.java index 3490c69a..cde8292e 100644 --- a/src/services/trade/TradeService.java +++ b/src/services/trade/TradeService.java @@ -202,7 +202,7 @@ public class TradeService implements INetworkDispatch{ } else { - if(objectToTrade.getAttributes()/*.toString()*/.containsKey("no_trade")) { + if(objectToTrade.getAttributes().containsKey("no_trade")) { return; } diff --git a/src/services/travel/TravelService.java b/src/services/travel/TravelService.java index d0daaa6c..c81be385 100644 --- a/src/services/travel/TravelService.java +++ b/src/services/travel/TravelService.java @@ -193,7 +193,7 @@ public class TravelService implements INetworkDispatch { public void addPlanet(Planet planet) { Vector travelPointVector = new Vector(); travelMap.put(planet, travelPointVector); - core.scriptService.callScript("scripts/", "addPoints", "static_travel_points", core, planet); + core.scriptService.callScript("scripts/", "static_travel_points", "addPoints", core, planet); } public void addTravelPoint(Planet planet, String name, float x, float y, float z) { @@ -323,7 +323,7 @@ public class TravelService implements INetworkDispatch { public void doTransport(SWGObject actor, TravelPoint tp) { Planet planet = core.terrainService.getPlanetByName(tp.getPlanetName()); - Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 10, 50, actor.getPlanetId()); + Point3D spawnLocation = SpawnPoint.getRandomPosition(tp.getShuttle().getPosition(), 5, 20, actor.getPlanetId()); core.simulationService.transferToPlanet(actor, planet, spawnLocation, new Quaternion(0, 0, 0, 0), null); }