From 735d2f63842e407c46e9f5af9da694a26a06170b Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 5 Sep 2018 16:01:11 +0000 Subject: [PATCH] Channeling skills rework. Adapted from: L2jUnity free files. --- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/03300-03399.xml | 2 +- .../game/data/stats/skills/03600-03699.xml | 12 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05400-05499.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 12 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/08500-08599.xml | 20 ++- .../game/data/stats/skills/11000-11099.xml | 9 +- .../game/data/stats/skills/11100-11199.xml | 31 ++-- .../game/data/stats/skills/14000-14099.xml | 2 +- .../game/data/stats/skills/14200-14299.xml | 12 +- .../game/data/stats/skills/14400-14499.xml | 40 +++--- .../game/data/stats/skills/14500-14599.xml | 44 +++--- .../game/data/stats/skills/14600-14699.xml | 4 +- .../game/data/stats/skills/14700-14799.xml | 4 +- .../game/data/stats/skills/14900-14999.xml | 25 ++-- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../game/data/stats/skills/23400-23499.xml | 4 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/03300-03399.xml | 2 +- .../game/data/stats/skills/03600-03699.xml | 12 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05400-05499.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 12 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/08500-08599.xml | 20 ++- .../game/data/stats/skills/11000-11099.xml | 9 +- .../game/data/stats/skills/11100-11199.xml | 31 ++-- .../game/data/stats/skills/14000-14099.xml | 2 +- .../game/data/stats/skills/14200-14299.xml | 12 +- .../game/data/stats/skills/14400-14499.xml | 40 +++--- .../game/data/stats/skills/14500-14599.xml | 44 +++--- .../game/data/stats/skills/14600-14699.xml | 4 +- .../game/data/stats/skills/14700-14799.xml | 4 +- .../game/data/stats/skills/14900-14999.xml | 25 ++-- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../game/data/stats/skills/23400-23499.xml | 4 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/03300-03399.xml | 2 +- .../game/data/stats/skills/03600-03699.xml | 12 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05400-05499.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 12 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/08500-08599.xml | 20 ++- .../game/data/stats/skills/11000-11099.xml | 9 +- .../game/data/stats/skills/11100-11199.xml | 31 ++-- .../game/data/stats/skills/14000-14099.xml | 2 +- .../game/data/stats/skills/14200-14299.xml | 12 +- .../game/data/stats/skills/14400-14499.xml | 40 +++--- .../game/data/stats/skills/14500-14599.xml | 44 +++--- .../game/data/stats/skills/14600-14699.xml | 4 +- .../game/data/stats/skills/14700-14799.xml | 4 +- .../game/data/stats/skills/14900-14999.xml | 25 ++-- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../game/data/stats/skills/23400-23499.xml | 4 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/03300-03399.xml | 2 +- .../game/data/stats/skills/03600-03699.xml | 12 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05400-05499.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 12 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/08500-08599.xml | 20 ++- .../game/data/stats/skills/11000-11099.xml | 11 +- .../game/data/stats/skills/11100-11199.xml | 31 ++-- .../game/data/stats/skills/14000-14099.xml | 2 +- .../game/data/stats/skills/14200-14299.xml | 12 +- .../game/data/stats/skills/14400-14499.xml | 40 +++--- .../game/data/stats/skills/14500-14599.xml | 44 +++--- .../game/data/stats/skills/14600-14699.xml | 4 +- .../game/data/stats/skills/14700-14799.xml | 4 +- .../game/data/stats/skills/14900-14999.xml | 25 ++-- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../game/data/stats/skills/23400-23499.xml | 4 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 8 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 8 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- .../game/data/stats/skills/00400-00499.xml | 8 +- .../game/data/stats/skills/00800-00899.xml | 2 +- .../game/data/stats/skills/01400-01499.xml | 52 ++++--- .../game/data/stats/skills/01500-01599.xml | 8 +- .../game/data/stats/skills/05300-05399.xml | 4 +- .../game/data/stats/skills/05500-05599.xml | 36 +++-- .../game/data/stats/skills/05700-05799.xml | 8 +- .../game/data/stats/skills/06200-06299.xml | 4 +- .../game/data/stats/skills/06700-06799.xml | 2 +- .../game/data/stats/skills/07000-07099.xml | 2 +- .../game/data/stats/skills/15100-15199.xml | 16 +-- .../game/data/stats/skills/15300-15399.xml | 2 +- .../game/data/stats/skills/16000-16099.xml | 2 +- .../dist/game/data/xsd/skills.xsd | 4 +- .../gameserver/model/skills/Skill.java | 48 ++++--- .../gameserver/model/skills/SkillCaster.java | 2 +- .../model/skills/SkillChannelizer.java | 134 +++++++++--------- .../gameserver/model/stats/Formulas.java | 8 +- 182 files changed, 1705 insertions(+), 1559 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00400-00499.xml index 4b4c2cd962..fc3b57f71d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00400-00499.xml @@ -2285,8 +2285,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2312,8 +2312,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml index e6498491df..050d388450 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/00800-00899.xml @@ -2168,7 +2168,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01400-01499.xml index f546445943..c37a724551 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01400-01499.xml @@ -870,8 +870,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -891,23 +891,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -927,23 +926,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -963,15 +961,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -1021,8 +1018,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1042,15 +1039,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3538,7 +3534,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3555,14 +3552,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01500-01599.xml index 6428bfd137..6ab5ded4f2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/01500-01599.xml @@ -2989,7 +2989,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3006,14 +3007,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03300-03399.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03300-03399.xml index 1d1a29d82d..acf944e9f0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03300-03399.xml @@ -242,7 +242,7 @@ 5000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 FORTRESS_FLAGPOLE SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03600-03699.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03600-03699.xml index a8c71ea0fe..63043f0d81 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03600-03699.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/03600-03699.xml @@ -1135,7 +1135,7 @@ 300 5106 - 2000 + 2 -100 500 25000 @@ -1150,7 +1150,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1167,7 +1167,7 @@ 300 5107 - 2000 + 2 -100 500 25000 @@ -1182,7 +1182,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1199,7 +1199,7 @@ 300 5108 - 2000 + 2 -100 500 25000 @@ -1214,7 +1214,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05300-05399.xml index d85ec9d31c..bbdecc9388 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05400-05499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05400-05499.xml index 156af8c3a1..8239a8a3c0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05400-05499.xml @@ -2103,8 +2103,8 @@ NONE;STRIDER;WYVERN;WOLF NONE -5 - 3600 - 2000 + 3.6 + 2 TARGET SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05500-05599.xml index d6cf80058b..3152ccdcb2 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05700-05799.xml index 7f8bf86a8e..557a4b9e65 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE @@ -2777,8 +2777,8 @@ NONE;STRIDER;WYVERN;WOLF -1 -5 - 1000 - 5800 + 1 + 5.8 TARGET SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06200-06299.xml index 63258ef95d..a60cabfa05 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06200-06299.xml @@ -1358,8 +1358,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06700-06799.xml index 6afa782d9e..c0efd47e4d 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/06700-06799.xml @@ -944,7 +944,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/07000-07099.xml index 85b2197af9..a55e3116a0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/07000-07099.xml @@ -1782,7 +1782,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/08500-08599.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/08500-08599.xml index 02577b6d14..2e8d62a740 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/08500-08599.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/08500-08599.xml @@ -2559,23 +2559,19 @@ FIRE 20 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - - 111 - 3 - - + @@ -2765,19 +2761,19 @@ 1100 81 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - + diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11000-11099.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11000-11099.xml index ba640618b8..85e9ce7a3f 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11000-11099.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11000-11099.xml @@ -2297,9 +2297,8 @@ icon.skill11030 - 11030 - 1000 - 1200 + 1 + 1.2 CA1 85 @@ -4318,8 +4317,8 @@ NONE 11182 - 1200 - 2000 + 1.2 + 2 15 CA2 AIRBIND diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11100-11199.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11100-11199.xml index 8bb81bca03..75b08b18ed 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11100-11199.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/11100-11199.xml @@ -1867,9 +1867,8 @@ icon.skill0000 - 11131 - 1000 - 2000 + 1 + 2 CA1 ENEMY SINGLE @@ -1974,7 +1973,7 @@ icon.skill11134 250 11134 - 2000 + 2 FIRE 20 5 @@ -2032,9 +2031,8 @@ icon.skill11135 250 - 11135 - 1000 - 2000 + 1 + 2 DARK 20 5 @@ -2049,6 +2047,7 @@ 120000 -676 2 + 4 @@ -2076,9 +2075,8 @@ 250 1 5 - 11136 - 1000 - 2000 + 1 + 2 WATER 20 5 @@ -2093,6 +2091,7 @@ 120000 -676 2 + 4 @@ -2136,9 +2135,8 @@ icon.skill11137 250 - 11137 - 1000 - 2000 + 1 + 2 WIND 20 5 @@ -2153,6 +2151,7 @@ 120000 -676 2 + 4 @@ -2196,9 +2195,8 @@ icon.skill11138 250 - 11138 - 1000 - 2000 + 1 + 2 5 3031 CA1 @@ -2211,6 +2209,7 @@ 120000 -676 1 + 4 600 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14000-14099.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14000-14099.xml index 3521d7c02a..52cabc0493 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14000-14099.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14000-14099.xml @@ -1205,7 +1205,7 @@ 0 1000 95 - 1000 + 1 0 2 3000 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14200-14299.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14200-14299.xml index b4f4e3c3da..03ae1c13b3 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14200-14299.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14200-14299.xml @@ -465,9 +465,9 @@ 1400 99 14217 - 1200 + 1.2 15 - 2000 + 2 2 true ENEMY @@ -660,9 +660,9 @@ 600 99 14225 - 1000 + 1 15 - 2000 + 2 2 20000 ENEMY @@ -2341,8 +2341,8 @@ 1500 99 14436 - 1200 - 2000 + 1.2 + 2 2 5000 TARGET diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14400-14499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14400-14499.xml index 2631bfd7c4..c1f07890bd 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14400-14499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14400-14499.xml @@ -555,19 +555,19 @@ 62 FIRE 20 - 1000 + 1 10-10 1 - 1000 + 1 1 ENEMY SINGLE - + 84 40 - + @@ -889,8 +889,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -911,8 +911,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -933,8 +933,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -955,8 +955,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -977,8 +977,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -999,8 +999,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1021,8 +1021,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1043,8 +1043,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14500-14599.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14500-14599.xml index edb092100c..bcf969d567 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14500-14599.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14500-14599.xml @@ -205,8 +205,8 @@ 1400 85 14510 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -419,8 +419,8 @@ 1000 96 14616 - 1000 - 2000 + 1 + 2 true 2 15000 @@ -644,8 +644,8 @@ 96 FIRE 20 - 1000 - 2000 + 1 + 2 true 0;0;500;500 1 @@ -1481,8 +1481,8 @@ 1100 94 14548 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1545,8 +1545,8 @@ 1100 94 14550 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1716,8 +1716,8 @@ 400 99 14555 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -1974,8 +1974,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2001,8 +2001,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2028,8 +2028,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2055,8 +2055,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2082,8 +2082,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14600-14699.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14600-14699.xml index 05a82fd99a..faf291d2ad 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14600-14699.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14600-14699.xml @@ -676,8 +676,8 @@ NONE -5 85 - 1200 - 2000 + 1.2 + 2 ENEMY SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14700-14799.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14700-14799.xml index 115bba0470..c05506e774 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14700-14799.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14700-14799.xml @@ -465,8 +465,8 @@ -5 2000 85 - 1200 - 2000 + 1.2 + 2 1 ENEMY SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14900-14999.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14900-14999.xml index 7c476fd810..277f54b8da 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14900-14999.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/14900-14999.xml @@ -2312,17 +2312,16 @@ 0 1400 85 - 1200 - 1000 + 1.2 + 1 12000 2 - 14982 + ENEMY -10 - ENEMY SINGLE @@ -2337,18 +2336,17 @@ 0 1400 90 - 1200 - 1000 + 1.2 + 1 12000 2 - 14983 + ENEMY + SINGLE -10 - ENEMY - SINGLE @@ -2362,18 +2360,17 @@ 0 1400 95 - 1200 - 1000 + 1.2 + 1 12000 2 - 14984 + ENEMY + SINGLE -10 - ENEMY - SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15100-15199.xml index a4d0d00e30..7234e214d8 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15100-15199.xml @@ -2091,8 +2091,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2137,8 +2137,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2183,8 +2183,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2229,8 +2229,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15300-15399.xml index 5063b3252e..90807d309b 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/15300-15399.xml @@ -1728,7 +1728,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/16000-16099.xml index 064e8ab66c..872c51f9c4 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/16000-16099.xml @@ -523,7 +523,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/23400-23499.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/23400-23499.xml index eaa7f3a6b9..217a16f8c0 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/23400-23499.xml +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/23400-23499.xml @@ -2353,8 +2353,8 @@ 0 2200 85 - 1000 - 1000 + 1 + 1 1 OTHERS SINGLE diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd index a17cefb96f..8d5e6e5713 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd @@ -2368,8 +2368,8 @@ - - + + diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index a4703fce6d..a3280b6e6e 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/stats/Formulas.java index af527d2320..790bc24c2f 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00400-00499.xml index 739e27717a..0978c59fb0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00400-00499.xml @@ -2291,8 +2291,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2318,8 +2318,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml index 5a119856f7..2cda40aca0 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/00800-00899.xml @@ -2168,7 +2168,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01400-01499.xml index e6006978d3..32b8f53891 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01400-01499.xml @@ -870,8 +870,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -891,23 +891,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -927,23 +926,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -963,15 +961,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -1021,8 +1018,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1042,15 +1039,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3538,7 +3534,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3555,14 +3552,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01500-01599.xml index 120d48b953..45cd2976e2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/01500-01599.xml @@ -2989,7 +2989,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3006,14 +3007,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03300-03399.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03300-03399.xml index a013e877dc..e7e3f6fd49 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03300-03399.xml @@ -242,7 +242,7 @@ 5000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 FORTRESS_FLAGPOLE SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03600-03699.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03600-03699.xml index ce148a60ac..e7ab4599a5 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03600-03699.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/03600-03699.xml @@ -1135,7 +1135,7 @@ 300 5106 - 2000 + 2 -100 500 25000 @@ -1150,7 +1150,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1167,7 +1167,7 @@ 300 5107 - 2000 + 2 -100 500 25000 @@ -1182,7 +1182,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1199,7 +1199,7 @@ 300 5108 - 2000 + 2 -100 500 25000 @@ -1214,7 +1214,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05300-05399.xml index f31bb9865b..21d41bd0b6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05400-05499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05400-05499.xml index c095ad720c..e3ec3f8d80 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05400-05499.xml @@ -2103,8 +2103,8 @@ NONE;STRIDER;WYVERN;WOLF NONE -5 - 3600 - 2000 + 3.6 + 2 TARGET SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05500-05599.xml index b99eedc8e8..eba44dba8d 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05700-05799.xml index 5b04c4fd31..db7c8c449b 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE @@ -2777,8 +2777,8 @@ NONE;STRIDER;WYVERN;WOLF -1 -5 - 1000 - 5800 + 1 + 5.8 TARGET SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06200-06299.xml index 22502f4a84..9d011744ab 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06200-06299.xml @@ -1358,8 +1358,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06700-06799.xml index 29fe12502d..21fb75df16 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/06700-06799.xml @@ -944,7 +944,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/07000-07099.xml index 46bbb60d61..42163c7b4e 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/07000-07099.xml @@ -1782,7 +1782,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/08500-08599.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/08500-08599.xml index a3a7a489e7..a4197fb9e8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/08500-08599.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/08500-08599.xml @@ -2559,23 +2559,19 @@ FIRE 20 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - - 111 - 3 - - + @@ -2765,19 +2761,19 @@ 1100 81 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11000-11099.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11000-11099.xml index 29be396337..7c78d2f459 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11000-11099.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11000-11099.xml @@ -2297,9 +2297,8 @@ icon.skill11030 - 11030 - 1000 - 1200 + 1 + 1.2 CA1 85 @@ -4318,8 +4317,8 @@ NONE 11182 - 1200 - 2000 + 1.2 + 2 15 CA2 AIRBIND diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11100-11199.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11100-11199.xml index d09069de69..7dc32245ea 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11100-11199.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/11100-11199.xml @@ -2067,9 +2067,8 @@ icon.skill0000 - 11131 - 1000 - 2000 + 1 + 2 CA1 ENEMY SINGLE @@ -2174,7 +2173,7 @@ icon.skill11134 250 11134 - 2000 + 2 FIRE 20 5 @@ -2232,9 +2231,8 @@ icon.skill11135 250 - 11135 - 1000 - 2000 + 1 + 2 DARK 20 5 @@ -2249,6 +2247,7 @@ 120000 -676 2 + 4 @@ -2276,9 +2275,8 @@ 250 1 5 - 11136 - 1000 - 2000 + 1 + 2 WATER 20 5 @@ -2293,6 +2291,7 @@ 120000 -676 2 + 4 @@ -2336,9 +2335,8 @@ icon.skill11137 250 - 11137 - 1000 - 2000 + 1 + 2 WIND 20 5 @@ -2353,6 +2351,7 @@ 120000 -676 2 + 4 @@ -2396,9 +2395,8 @@ icon.skill11138 250 - 11138 - 1000 - 2000 + 1 + 2 5 3031 CA1 @@ -2411,6 +2409,7 @@ 120000 -676 1 + 4 600 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14000-14099.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14000-14099.xml index 9c323bddd7..883442f48a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14000-14099.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14000-14099.xml @@ -1205,7 +1205,7 @@ 0 1000 95 - 1000 + 1 0 2 3000 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14200-14299.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14200-14299.xml index 3d7676b509..e9a5bd1695 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14200-14299.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14200-14299.xml @@ -465,9 +465,9 @@ 1400 99 14217 - 1200 + 1.2 15 - 2000 + 2 2 true ENEMY @@ -660,9 +660,9 @@ 600 99 14225 - 1000 + 1 15 - 2000 + 2 2 20000 ENEMY @@ -2341,8 +2341,8 @@ 1500 99 14436 - 1200 - 2000 + 1.2 + 2 2 5000 TARGET diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14400-14499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14400-14499.xml index a1e09ce953..04895fe485 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14400-14499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14400-14499.xml @@ -555,19 +555,19 @@ 62 FIRE 20 - 1000 + 1 10-10 1 - 1000 + 1 1 ENEMY SINGLE - + 84 40 - + @@ -889,8 +889,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -911,8 +911,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -933,8 +933,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -955,8 +955,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -977,8 +977,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -999,8 +999,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1021,8 +1021,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1043,8 +1043,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14500-14599.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14500-14599.xml index c733d9deb0..a5635f3dca 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14500-14599.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14500-14599.xml @@ -205,8 +205,8 @@ 1400 85 14510 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -419,8 +419,8 @@ 1000 96 14616 - 1000 - 2000 + 1 + 2 true 2 15000 @@ -644,8 +644,8 @@ 96 FIRE 20 - 1000 - 2000 + 1 + 2 true 0;0;500;500 1 @@ -1481,8 +1481,8 @@ 1100 94 14548 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1545,8 +1545,8 @@ 1100 94 14550 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1716,8 +1716,8 @@ 400 99 14555 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -1974,8 +1974,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2001,8 +2001,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2028,8 +2028,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2055,8 +2055,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2082,8 +2082,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14600-14699.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14600-14699.xml index ffb8d2a876..5477f9f4b6 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14600-14699.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14600-14699.xml @@ -676,8 +676,8 @@ NONE -5 85 - 1200 - 2000 + 1.2 + 2 ENEMY SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14700-14799.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14700-14799.xml index 2712560e6c..0accb4c6b9 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14700-14799.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14700-14799.xml @@ -465,8 +465,8 @@ -5 2000 85 - 1200 - 2000 + 1.2 + 2 1 ENEMY SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14900-14999.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14900-14999.xml index fa46813d6a..56b5ae6e93 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14900-14999.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/14900-14999.xml @@ -2312,17 +2312,16 @@ 0 1400 85 - 1200 - 1000 + 1.2 + 1 12000 2 - 14982 + ENEMY -10 - ENEMY SINGLE @@ -2337,18 +2336,17 @@ 0 1400 90 - 1200 - 1000 + 1.2 + 1 12000 2 - 14983 + ENEMY + SINGLE -10 - ENEMY - SINGLE @@ -2362,18 +2360,17 @@ 0 1400 95 - 1200 - 1000 + 1.2 + 1 12000 2 - 14984 + ENEMY + SINGLE -10 - ENEMY - SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15100-15199.xml index 32d746cddd..8e560f5fb8 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15100-15199.xml @@ -2091,8 +2091,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2137,8 +2137,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2183,8 +2183,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2229,8 +2229,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15300-15399.xml index c76d9831d6..9173b028e2 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/15300-15399.xml @@ -1728,7 +1728,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/16000-16099.xml index 599fd9f081..8777efed96 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/16000-16099.xml @@ -523,7 +523,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/23400-23499.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/23400-23499.xml index 551bea9cd1..72ab1b4691 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/23400-23499.xml +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/23400-23499.xml @@ -2353,8 +2353,8 @@ 0 2200 85 - 1000 - 1000 + 1 + 1 1 OTHERS SINGLE diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd index cc3594e13d..0a43da532a 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd @@ -2465,8 +2465,8 @@ - - + + diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index a4703fce6d..a3280b6e6e 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java index af527d2320..790bc24c2f 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00400-00499.xml index 548fb6eb44..d008bc2182 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00400-00499.xml @@ -2291,8 +2291,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2318,8 +2318,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml index 5a119856f7..2cda40aca0 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/00800-00899.xml @@ -2168,7 +2168,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01400-01499.xml index f546445943..c37a724551 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01400-01499.xml @@ -870,8 +870,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -891,23 +891,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -927,23 +926,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -963,15 +961,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -1021,8 +1018,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1042,15 +1039,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3538,7 +3534,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3555,14 +3552,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01500-01599.xml index 6428bfd137..6ab5ded4f2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/01500-01599.xml @@ -2989,7 +2989,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3006,14 +3007,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03300-03399.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03300-03399.xml index b254223f1d..2ce89a06bf 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03300-03399.xml @@ -242,7 +242,7 @@ 5000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 FORTRESS_FLAGPOLE SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03600-03699.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03600-03699.xml index 7922f4a9ef..975dd134e9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03600-03699.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/03600-03699.xml @@ -1135,7 +1135,7 @@ 300 5106 - 2000 + 2 -100 500 25000 @@ -1150,7 +1150,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1167,7 +1167,7 @@ 300 5107 - 2000 + 2 -100 500 25000 @@ -1182,7 +1182,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1199,7 +1199,7 @@ 300 5108 - 2000 + 2 -100 500 25000 @@ -1214,7 +1214,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05300-05399.xml index f31bb9865b..21d41bd0b6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05400-05499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05400-05499.xml index c095ad720c..e3ec3f8d80 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05400-05499.xml @@ -2103,8 +2103,8 @@ NONE;STRIDER;WYVERN;WOLF NONE -5 - 3600 - 2000 + 3.6 + 2 TARGET SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05500-05599.xml index b99eedc8e8..eba44dba8d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05700-05799.xml index 7f8bf86a8e..557a4b9e65 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE @@ -2777,8 +2777,8 @@ NONE;STRIDER;WYVERN;WOLF -1 -5 - 1000 - 5800 + 1 + 5.8 TARGET SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06200-06299.xml index 63258ef95d..a60cabfa05 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06200-06299.xml @@ -1358,8 +1358,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06700-06799.xml index 6afa782d9e..c0efd47e4d 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/06700-06799.xml @@ -944,7 +944,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/07000-07099.xml index 797c29152f..9d5e46b892 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/07000-07099.xml @@ -1783,7 +1783,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/08500-08599.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/08500-08599.xml index 02577b6d14..2e8d62a740 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/08500-08599.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/08500-08599.xml @@ -2559,23 +2559,19 @@ FIRE 20 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - - 111 - 3 - - + @@ -2765,19 +2761,19 @@ 1100 81 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11000-11099.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11000-11099.xml index a28fa08230..83baf443b9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11000-11099.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11000-11099.xml @@ -2297,9 +2297,8 @@ icon.skill11030 - 11030 - 1000 - 1200 + 1 + 1.2 CA1 85 @@ -4323,8 +4322,8 @@ NONE 11182 - 1200 - 2000 + 1.2 + 2 15 CA2 AIRBIND diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11100-11199.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11100-11199.xml index 1831d1fcb5..24917aeaa5 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11100-11199.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/11100-11199.xml @@ -2067,9 +2067,8 @@ icon.skill0000 - 11131 - 1000 - 2000 + 1 + 2 CA1 ENEMY SINGLE @@ -2174,7 +2173,7 @@ icon.skill11134 250 11134 - 2000 + 2 FIRE 20 5 @@ -2232,9 +2231,8 @@ icon.skill11135 250 - 11135 - 1000 - 2000 + 1 + 2 DARK 20 5 @@ -2249,6 +2247,7 @@ 120000 -676 2 + 4 @@ -2276,9 +2275,8 @@ 250 1 5 - 11136 - 1000 - 2000 + 1 + 2 WATER 20 5 @@ -2293,6 +2291,7 @@ 120000 -676 2 + 4 @@ -2336,9 +2335,8 @@ icon.skill11137 250 - 11137 - 1000 - 2000 + 1 + 2 WIND 20 5 @@ -2353,6 +2351,7 @@ 120000 -676 2 + 4 @@ -2396,9 +2395,8 @@ icon.skill11138 250 - 11138 - 1000 - 2000 + 1 + 2 5 3031 CA1 @@ -2411,6 +2409,7 @@ 120000 -676 1 + 4 600 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14000-14099.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14000-14099.xml index 9c323bddd7..883442f48a 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14000-14099.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14000-14099.xml @@ -1205,7 +1205,7 @@ 0 1000 95 - 1000 + 1 0 2 3000 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14200-14299.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14200-14299.xml index acaba49e7e..451bdb5cd1 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14200-14299.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14200-14299.xml @@ -465,9 +465,9 @@ 1400 99 14217 - 1200 + 1.2 15 - 2000 + 2 2 true ENEMY @@ -660,9 +660,9 @@ 600 99 14225 - 1000 + 1 15 - 2000 + 2 2 20000 ENEMY @@ -2341,8 +2341,8 @@ 1500 99 14436 - 1200 - 2000 + 1.2 + 2 2 5000 TARGET diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14400-14499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14400-14499.xml index a1e09ce953..04895fe485 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14400-14499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14400-14499.xml @@ -555,19 +555,19 @@ 62 FIRE 20 - 1000 + 1 10-10 1 - 1000 + 1 1 ENEMY SINGLE - + 84 40 - + @@ -889,8 +889,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -911,8 +911,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -933,8 +933,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -955,8 +955,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -977,8 +977,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -999,8 +999,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1021,8 +1021,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1043,8 +1043,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14500-14599.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14500-14599.xml index c733d9deb0..a5635f3dca 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14500-14599.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14500-14599.xml @@ -205,8 +205,8 @@ 1400 85 14510 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -419,8 +419,8 @@ 1000 96 14616 - 1000 - 2000 + 1 + 2 true 2 15000 @@ -644,8 +644,8 @@ 96 FIRE 20 - 1000 - 2000 + 1 + 2 true 0;0;500;500 1 @@ -1481,8 +1481,8 @@ 1100 94 14548 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1545,8 +1545,8 @@ 1100 94 14550 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1716,8 +1716,8 @@ 400 99 14555 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -1974,8 +1974,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2001,8 +2001,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2028,8 +2028,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2055,8 +2055,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2082,8 +2082,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14600-14699.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14600-14699.xml index d56d56c580..0b6547328e 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14600-14699.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14600-14699.xml @@ -676,8 +676,8 @@ NONE -5 85 - 1200 - 2000 + 1.2 + 2 ENEMY SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14700-14799.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14700-14799.xml index 2712560e6c..0accb4c6b9 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14700-14799.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14700-14799.xml @@ -465,8 +465,8 @@ -5 2000 85 - 1200 - 2000 + 1.2 + 2 1 ENEMY SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14900-14999.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14900-14999.xml index fa46813d6a..56b5ae6e93 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14900-14999.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/14900-14999.xml @@ -2312,17 +2312,16 @@ 0 1400 85 - 1200 - 1000 + 1.2 + 1 12000 2 - 14982 + ENEMY -10 - ENEMY SINGLE @@ -2337,18 +2336,17 @@ 0 1400 90 - 1200 - 1000 + 1.2 + 1 12000 2 - 14983 + ENEMY + SINGLE -10 - ENEMY - SINGLE @@ -2362,18 +2360,17 @@ 0 1400 95 - 1200 - 1000 + 1.2 + 1 12000 2 - 14984 + ENEMY + SINGLE -10 - ENEMY - SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15100-15199.xml index 32d746cddd..8e560f5fb8 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15100-15199.xml @@ -2091,8 +2091,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2137,8 +2137,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2183,8 +2183,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2229,8 +2229,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15300-15399.xml index c76d9831d6..9173b028e2 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/15300-15399.xml @@ -1728,7 +1728,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/16000-16099.xml index 599fd9f081..8777efed96 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/16000-16099.xml @@ -523,7 +523,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/23400-23499.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/23400-23499.xml index 551bea9cd1..72ab1b4691 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/23400-23499.xml +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/23400-23499.xml @@ -2353,8 +2353,8 @@ 0 2200 85 - 1000 - 1000 + 1 + 1 1 OTHERS SINGLE diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd index 4e3c4d8d9d..9c22a79cd6 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd @@ -2497,8 +2497,8 @@ - - + + diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index a4703fce6d..a3280b6e6e 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/stats/Formulas.java index af527d2320..790bc24c2f 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00400-00499.xml index a378f66cfc..43e3af7045 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00400-00499.xml @@ -2281,8 +2281,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2308,8 +2308,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml index 5a119856f7..2cda40aca0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/00800-00899.xml @@ -2168,7 +2168,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01400-01499.xml index e7cb3309cc..f91026b2ee 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01400-01499.xml @@ -870,8 +870,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -891,23 +891,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -927,23 +926,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -963,15 +961,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -1021,8 +1018,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1042,15 +1039,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3538,7 +3534,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3555,14 +3552,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01500-01599.xml index c2edd050a7..50a0f947c8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/01500-01599.xml @@ -2989,7 +2989,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3006,14 +3007,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03300-03399.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03300-03399.xml index b254223f1d..2ce89a06bf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03300-03399.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03300-03399.xml @@ -242,7 +242,7 @@ 5000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 FORTRESS_FLAGPOLE SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03600-03699.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03600-03699.xml index 5e3d0e533c..d3fa1c851a 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03600-03699.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/03600-03699.xml @@ -1135,7 +1135,7 @@ 300 5106 - 2000 + 2 -100 500 25000 @@ -1150,7 +1150,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1167,7 +1167,7 @@ 300 5107 - 2000 + 2 -100 500 25000 @@ -1182,7 +1182,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE @@ -1199,7 +1199,7 @@ 300 5108 - 2000 + 2 -100 500 25000 @@ -1214,7 +1214,7 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 1000 + 1 15 ENEMY_ONLY SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05300-05399.xml index f31bb9865b..21d41bd0b6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05400-05499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05400-05499.xml index c095ad720c..e3ec3f8d80 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05400-05499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05400-05499.xml @@ -2103,8 +2103,8 @@ NONE;STRIDER;WYVERN;WOLF NONE -5 - 3600 - 2000 + 3.6 + 2 TARGET SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05500-05599.xml index 4778b47774..0d080fb5a5 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05700-05799.xml index 7f8bf86a8e..557a4b9e65 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE @@ -2777,8 +2777,8 @@ NONE;STRIDER;WYVERN;WOLF -1 -5 - 1000 - 5800 + 1 + 5.8 TARGET SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06200-06299.xml index 1bc2ac1bd5..e2736e3184 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06200-06299.xml @@ -1358,8 +1358,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06700-06799.xml index 6afa782d9e..c0efd47e4d 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/06700-06799.xml @@ -944,7 +944,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/07000-07099.xml index 797c29152f..9d5e46b892 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/07000-07099.xml @@ -1783,7 +1783,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/08500-08599.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/08500-08599.xml index 02577b6d14..2e8d62a740 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/08500-08599.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/08500-08599.xml @@ -2559,23 +2559,19 @@ FIRE 20 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - - 111 - 3 - - + @@ -2765,19 +2761,19 @@ 1100 81 150 - 1000 + 1 10-10 72 - 2000 + 2 1 ENEMY RANGE NOT_FRIEND - + 117 - + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11000-11099.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11000-11099.xml index 7289cf4054..57c05242b6 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11000-11099.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11000-11099.xml @@ -2262,9 +2262,8 @@ icon.skill11030 - 11030 - 1000 - 1200 + 1 + 1.2 CA1 85 @@ -4125,9 +4124,9 @@ {base + base / 100 * subIndex} NONE - 11182 - 1200 - 2000 + 11182 + 1.2 + 2 15 CA2 AIRBIND diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11100-11199.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11100-11199.xml index 40fa6c270f..3eb08b3471 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11100-11199.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/11100-11199.xml @@ -2144,9 +2144,8 @@ icon.skill0000 - 11131 - 1000 - 2000 + 1 + 2 CA1 ENEMY SINGLE @@ -2251,7 +2250,7 @@ icon.skill11134 250 11134 - 2000 + 2 FIRE 20 5 @@ -2299,9 +2298,8 @@ icon.skill11135 250 - 11135 - 1000 - 2000 + 1 + 2 DARK 20 5 @@ -2316,6 +2314,7 @@ 120000 -676 2 + 4 @@ -2343,9 +2342,8 @@ 250 1 5 - 11136 - 1000 - 2000 + 1 + 2 WATER 20 5 @@ -2360,6 +2358,7 @@ 120000 -676 2 + 4 @@ -2393,9 +2392,8 @@ icon.skill11137 250 - 11137 - 1000 - 2000 + 1 + 2 WIND 20 5 @@ -2410,6 +2408,7 @@ 120000 -676 2 + 4 @@ -2443,9 +2442,8 @@ icon.skill11138 250 - 11138 - 1000 - 2000 + 1 + 2 5 3031 CA1 @@ -2458,6 +2456,7 @@ 120000 -676 1 + 4 600 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14000-14099.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14000-14099.xml index 276c240ba4..f4776fa44b 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14000-14099.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14000-14099.xml @@ -1205,7 +1205,7 @@ 0 1000 95 - 1000 + 1 0 2 3000 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14200-14299.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14200-14299.xml index c92823267b..78261dc3c0 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14200-14299.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14200-14299.xml @@ -465,9 +465,9 @@ 1400 99 14217 - 1200 + 1.2 15 - 2000 + 2 2 true ENEMY @@ -660,9 +660,9 @@ 600 99 14225 - 1000 + 1 15 - 2000 + 2 2 20000 ENEMY @@ -2341,8 +2341,8 @@ 1500 99 14436 - 1200 - 2000 + 1.2 + 2 2 5000 TARGET diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14400-14499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14400-14499.xml index a1e09ce953..04895fe485 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14400-14499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14400-14499.xml @@ -555,19 +555,19 @@ 62 FIRE 20 - 1000 + 1 10-10 1 - 1000 + 1 1 ENEMY SINGLE - + 84 40 - + @@ -889,8 +889,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -911,8 +911,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -933,8 +933,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -955,8 +955,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -977,8 +977,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -999,8 +999,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1021,8 +1021,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY @@ -1043,8 +1043,8 @@ 85 DARK 20 - 1000 - 1000 + 1 + 1 true 1 ENEMY diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14500-14599.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14500-14599.xml index c733d9deb0..a5635f3dca 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14500-14599.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14500-14599.xml @@ -205,8 +205,8 @@ 1400 85 14510 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -419,8 +419,8 @@ 1000 96 14616 - 1000 - 2000 + 1 + 2 true 2 15000 @@ -644,8 +644,8 @@ 96 FIRE 20 - 1000 - 2000 + 1 + 2 true 0;0;500;500 1 @@ -1481,8 +1481,8 @@ 1100 94 14548 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1545,8 +1545,8 @@ 1100 94 14550 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -1716,8 +1716,8 @@ 400 99 14555 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -1974,8 +1974,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2001,8 +2001,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2028,8 +2028,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2055,8 +2055,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY @@ -2082,8 +2082,8 @@ 87 11050 14569 - 1200 - 2000 + 1.2 + 2 2 true ENEMY diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14600-14699.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14600-14699.xml index a0e735dc03..9ee7b6e6ff 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14600-14699.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14600-14699.xml @@ -676,8 +676,8 @@ NONE -5 85 - 1200 - 2000 + 1.2 + 2 ENEMY SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14700-14799.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14700-14799.xml index 2712560e6c..0accb4c6b9 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14700-14799.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14700-14799.xml @@ -465,8 +465,8 @@ -5 2000 85 - 1200 - 2000 + 1.2 + 2 1 ENEMY SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14900-14999.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14900-14999.xml index fa46813d6a..56b5ae6e93 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14900-14999.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/14900-14999.xml @@ -2312,17 +2312,16 @@ 0 1400 85 - 1200 - 1000 + 1.2 + 1 12000 2 - 14982 + ENEMY -10 - ENEMY SINGLE @@ -2337,18 +2336,17 @@ 0 1400 90 - 1200 - 1000 + 1.2 + 1 12000 2 - 14983 + ENEMY + SINGLE -10 - ENEMY - SINGLE @@ -2362,18 +2360,17 @@ 0 1400 95 - 1200 - 1000 + 1.2 + 1 12000 2 - 14984 + ENEMY + SINGLE -10 - ENEMY - SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15100-15199.xml index 32d746cddd..8e560f5fb8 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15100-15199.xml @@ -2091,8 +2091,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2137,8 +2137,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2183,8 +2183,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -2229,8 +2229,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15300-15399.xml index c76d9831d6..9173b028e2 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/15300-15399.xml @@ -1728,7 +1728,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/16000-16099.xml index 599fd9f081..8777efed96 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/16000-16099.xml @@ -523,7 +523,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/23400-23499.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/23400-23499.xml index 551bea9cd1..72ab1b4691 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/23400-23499.xml +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/23400-23499.xml @@ -2353,8 +2353,8 @@ 0 2200 85 - 1000 - 1000 + 1 + 1 1 OTHERS SINGLE diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd index 0dbdcb8d5b..22b8066d38 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd @@ -2471,8 +2471,8 @@ - - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index a4703fce6d..a3280b6e6e 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/stats/Formulas.java index 9b699720d8..cd7af5d481 100644 --- a/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_4.0_GrandCrusade/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00400-00499.xml index d67270791f..ac665d257b 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00400-00499.xml @@ -2457,8 +2457,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2484,8 +2484,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00800-00899.xml index f712618cb7..dbf718bb36 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/00800-00899.xml @@ -1781,7 +1781,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01400-01499.xml index a74828f1fa..73746c4d17 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01400-01499.xml @@ -834,8 +834,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -855,23 +855,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -891,23 +890,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -927,15 +925,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -985,8 +982,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1006,15 +1003,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3476,7 +3472,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3493,14 +3490,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01500-01599.xml index 7c61a842c7..9fcf500abe 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/01500-01599.xml @@ -2882,7 +2882,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -2899,14 +2900,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05300-05399.xml index ca75c7437b..6ff9fe2b25 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05500-05599.xml index 7985364221..9b818e3f10 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05700-05799.xml index fb6430e885..0593d4a6fa 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06200-06299.xml index b41f8e7066..c3fe2c905a 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06200-06299.xml @@ -1142,8 +1142,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06700-06799.xml index dddf259c60..cde9fb0b67 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/06700-06799.xml @@ -871,7 +871,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/07000-07099.xml index 9333917357..bae2d13d38 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/07000-07099.xml @@ -1705,7 +1705,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15100-15199.xml index 310c3cf681..16153fc395 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15100-15199.xml @@ -522,8 +522,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -564,8 +564,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -606,8 +606,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -648,8 +648,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15300-15399.xml index b4eb100f48..0732c94c48 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/15300-15399.xml @@ -1350,7 +1350,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/16000-16099.xml index cce2bb01c2..c602cf0ba7 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/16000-16099.xml @@ -499,7 +499,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd index 19ff306c2b..3abda8118e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd @@ -1765,8 +1765,8 @@ - - + + diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index 7ba50e38f8..e9b0bad907 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/stats/Formulas.java index d9a263e49a..f050e289ce 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00400-00499.xml index d67270791f..ac665d257b 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00400-00499.xml @@ -2457,8 +2457,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2484,8 +2484,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00800-00899.xml index f712618cb7..dbf718bb36 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/00800-00899.xml @@ -1781,7 +1781,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01400-01499.xml index a74828f1fa..73746c4d17 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01400-01499.xml @@ -834,8 +834,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -855,23 +855,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -891,23 +890,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -927,15 +925,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -985,8 +982,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1006,15 +1003,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3476,7 +3472,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3493,14 +3490,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01500-01599.xml index 7c61a842c7..9fcf500abe 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/01500-01599.xml @@ -2882,7 +2882,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -2899,14 +2900,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05300-05399.xml index fc0e6c7c74..2a06170617 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05500-05599.xml index 7985364221..9b818e3f10 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05700-05799.xml index 7327b749d7..c6bfd2130e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06200-06299.xml index 4ec1cfab06..ff5e9613b4 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06200-06299.xml @@ -1142,8 +1142,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06700-06799.xml index 135ff944b5..0f99f3dcec 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/06700-06799.xml @@ -871,7 +871,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/07000-07099.xml index 9333917357..bae2d13d38 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/07000-07099.xml @@ -1705,7 +1705,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15100-15199.xml index 310c3cf681..16153fc395 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15100-15199.xml @@ -522,8 +522,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -564,8 +564,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -606,8 +606,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -648,8 +648,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15300-15399.xml index b4eb100f48..0732c94c48 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/15300-15399.xml @@ -1350,7 +1350,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/16000-16099.xml index cce2bb01c2..c602cf0ba7 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/stats/skills/16000-16099.xml @@ -499,7 +499,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd index 19ff306c2b..3abda8118e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.1_Zaken/dist/game/data/xsd/skills.xsd @@ -1765,8 +1765,8 @@ - - + + diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index 7ba50e38f8..e9b0bad907 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/stats/Formulas.java index d9a263e49a..f050e289ce 100644 --- a/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_2.1_Zaken/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /** diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00400-00499.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00400-00499.xml index 12c97b6a4c..2ad588d553 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00400-00499.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00400-00499.xml @@ -2158,8 +2158,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE @@ -2185,8 +2185,8 @@ NONE;STRIDER;WYVERN;WOLF NONE 5 - 3600 - 2000 + 3.6 + 2 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00800-00899.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00800-00899.xml index 74a3f782ff..d901361a75 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00800-00899.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/00800-00899.xml @@ -1806,7 +1806,7 @@ 1000 NONE;STRIDER;WYVERN;WOLF 5 - 1000 + 1 0 ADVANCE_BASE SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01400-01499.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01400-01499.xml index 2df93a3853..6119b42c8b 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01400-01499.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01400-01499.xml @@ -891,8 +891,8 @@ 200 true 900 - 1419 - 2000 + 1 + 2 -676 FIRE 20 @@ -912,23 +912,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1420 - 2000 + 1 + 2 -676 WIND 20 @@ -948,23 +947,22 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND 15-25 200 true 900 - 1421 - 2000 + 1 + 2 -676 WATER 20 @@ -984,15 +982,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -1042,8 +1039,8 @@ 200 true 900 - 1423 - 2000 + 1 + 2 -676 DARK 20 @@ -1063,15 +1060,14 @@ 5 4 1000 - 1000 + GROUND + POINT_BLANK + NOT_FRIEND 500 - GROUND - POINT_BLANK - NOT_FRIEND true @@ -3560,7 +3556,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -3577,14 +3574,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01500-01599.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01500-01599.xml index 015c402185..6668d63971 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01500-01599.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/01500-01599.xml @@ -2891,7 +2891,8 @@ 900 - 2000 + 1 + 2 -676 1000 DARK @@ -2908,14 +2909,13 @@ true 5 4 - 1000 + ENEMY + SINGLE 30 - ENEMY - SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05300-05399.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05300-05399.xml index fc0e6c7c74..2a06170617 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05300-05399.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05300-05399.xml @@ -4527,7 +4527,7 @@ 400 5397 - 2000 + 2 15000 2 CA5 @@ -4536,7 +4536,7 @@ -5 600 77 - 3600 + 3.6 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05500-05599.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05500-05599.xml index 7985364221..9b818e3f10 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05500-05599.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05500-05599.xml @@ -372,11 +372,16 @@ FIRE 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 100 + + -1063 @@ -388,11 +393,16 @@ WATER 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -404,11 +414,16 @@ WIND 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + -1063 @@ -420,11 +435,16 @@ EARTH 180 250 - 1000 - 2000 + 1 + 2 SELF POINT_BLANK NOT_FRIEND + + + 30 + + 1 diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05700-05799.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05700-05799.xml index 7327b749d7..c6bfd2130e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05700-05799.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/05700-05799.xml @@ -311,9 +311,9 @@ -5 1700 5713 - 3600 + 3.6 15 - 2000 + 2 OTHERS SINGLE @@ -2233,9 +2233,9 @@ -5 600 5713 - 3600 + 3.6 15 - 2000 + 2 400 OTHERS SINGLE diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06200-06299.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06200-06299.xml index 4ec1cfab06..ff5e9613b4 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06200-06299.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06200-06299.xml @@ -1142,8 +1142,8 @@ 0 1400 14559 - 1200 - 2000 + 1.2 + 2 icon.skill1042 10000 30000 diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06700-06799.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06700-06799.xml index 135ff944b5..0f99f3dcec 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06700-06799.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/06700-06799.xml @@ -871,7 +871,7 @@ 0 2000 85 - 1000 + 1 0 90000 2000 diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/07000-07099.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/07000-07099.xml index 9333917357..bae2d13d38 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/07000-07099.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/07000-07099.xml @@ -1705,7 +1705,7 @@ FIRE 20 200 - 1000 + 1 0 SELF POINT_BLANK diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15100-15199.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15100-15199.xml index 310c3cf681..16153fc395 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15100-15199.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15100-15199.xml @@ -522,8 +522,8 @@ 3000 99 15175 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -564,8 +564,8 @@ 3000 99 15177 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -606,8 +606,8 @@ 3000 99 15179 - 1200 - 2000 + 1.2 + 2 2 true TARGET @@ -648,8 +648,8 @@ 3000 99 15181 - 1200 - 2000 + 1.2 + 2 2 true TARGET diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15300-15399.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15300-15399.xml index b4eb100f48..0732c94c48 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15300-15399.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/15300-15399.xml @@ -1350,7 +1350,7 @@ 0 2160 95 - 1000 + 1 0 1 TARGET diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/16000-16099.xml b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/16000-16099.xml index cce2bb01c2..c602cf0ba7 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/16000-16099.xml +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/stats/skills/16000-16099.xml @@ -499,7 +499,7 @@ 0 1100 85 - 1000 + 1 0 2 10000 diff --git a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd index 872f0901d1..7054915e6d 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.2_Antharas/dist/game/data/xsd/skills.xsd @@ -1752,8 +1752,8 @@ - - + + diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/Skill.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/Skill.java index bf0b717aa6..b314894e2e 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/Skill.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/Skill.java @@ -126,7 +126,7 @@ public final class Skill implements IIdentifiable private final int _refId; // all times in milliseconds private final int _hitTime; - // private final int _skillInterruptTime; + private final double _hitCancelTime; private final int _coolTime; private final long _reuseHashCode; private final int _reuseDelay; @@ -185,8 +185,8 @@ public final class Skill implements IIdentifiable // Channeling data private final int _channelingSkillId; - private final int _channelingTickInitialDelay; - private final int _channelingTickInterval; + private final long _channelingStart; + private final long _channelingTickInterval; // Mentoring private final boolean _isMentoring; @@ -259,6 +259,7 @@ public final class Skill implements IIdentifiable _stayAfterDeath = set.getBoolean("stayAfterDeath", false); _hitTime = set.getInt("hitTime", 0); + _hitCancelTime = set.getDouble("hitCancelTime", 0); _coolTime = set.getInt("coolTime", 0); _isDebuff = set.getBoolean("isDebuff", false); _isRecoveryHerb = set.getBoolean("isRecoveryHerb", false); @@ -391,8 +392,8 @@ public final class Skill implements IIdentifiable _icon = set.getString("icon", "icon.skill0000"); _channelingSkillId = set.getInt("channelingSkillId", 0); - _channelingTickInterval = set.getInt("channelingTickInterval", 2000); - _channelingTickInitialDelay = set.getInt("channelingTickInitialDelay", _channelingTickInterval); + _channelingTickInterval = (long) set.getFloat("channelingTickInterval", 2000f) * 1000; + _channelingStart = (long) (set.getFloat("channelingStart", 0f) * 1000); _isMentoring = set.getBoolean("isMentoring", false); @@ -478,11 +479,6 @@ public final class Skill implements IIdentifiable return false; } - public boolean isDamage() - { - return hasEffectType(L2EffectType.MAGICAL_ATTACK, L2EffectType.HP_DRAIN, L2EffectType.PHYSICAL_ATTACK, L2EffectType.PHYSICAL_ATTACK_HP_LINK); - } - public boolean isSuicideAttack() { return _isSuicideAttack; @@ -863,6 +859,11 @@ public final class Skill implements IIdentifiable return _hitTime; } + public double getHitCancelTime() + { + return _hitCancelTime; + } + /** * @return the cool time */ @@ -1355,8 +1356,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = effector.isPlayable() && effected.isAttackable() ? EffectScope.PVE : effector.isPlayable() && effected.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, instant, addContinuousEffects); - applyEffectScope(EffectScope.CHANNELING, info, instant, addContinuousEffects); - if (addContinuousEffects) { // Aura skills reset the abnormal time. @@ -1430,6 +1429,23 @@ public final class Skill implements IIdentifiable } } + /** + * Applies the channeling effects from this skill to the target. + * @param effector the caster of the skill + * @param effected the target of the effect + */ + public void applyChannelingEffects(L2Character effector, L2Character effected) + { + // null targets cannot receive any effects. + if (effected == null) + { + return; + } + + final BuffInfo info = new BuffInfo(effector, effected, this, false, null, null); + applyEffectScope(EffectScope.CHANNELING, info, true, true); + } + /** * Activates a skill for the given creature and targets. * @param caster the caster @@ -1489,8 +1505,6 @@ public final class Skill implements IIdentifiable final EffectScope pvpOrPveEffectScope = caster.isPlayable() && target.isAttackable() ? EffectScope.PVE : caster.isPlayable() && target.isPlayable() ? EffectScope.PVP : null; applyEffectScope(pvpOrPveEffectScope, info, true, false); - - applyEffectScope(EffectScope.CHANNELING, info, true, false); } else { @@ -1709,14 +1723,14 @@ public final class Skill implements IIdentifiable return _icon; } - public int getChannelingTickInterval() + public long getChannelingTickInterval() { return _channelingTickInterval; } - public int getChannelingTickInitialDelay() + public long getChannelingTickInitialDelay() { - return _channelingTickInitialDelay; + return _channelingStart; } public Set getRideState() diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java index 7ba50e38f8..e9b0bad907 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillCaster.java @@ -389,7 +389,7 @@ public class SkillCaster implements Runnable } // Start channeling if skill is channeling. - if (_skill.isChanneling() && (_skill.getChannelingSkillId() > 0)) + if (_skill.isChanneling()) { caster.getSkillChannelizer().startChanneling(_skill); } diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java index f5da8aed03..6277624daf 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/skills/SkillChannelizer.java @@ -149,82 +149,84 @@ public class SkillChannelizer implements Runnable } // Apply channeling skills on the targets. - if (skill.getChannelingSkillId() > 0) + final List targetList = new ArrayList<>(); + final L2Object target = skill.getTarget(_channelizer, false, false, false); + if (target != null) { - final List targetList = new ArrayList<>(); - final L2Object target = skill.getTarget(_channelizer, false, false, false); - if (target != null) + skill.forEachTargetAffected(_channelizer, target, o -> { - skill.forEachTargetAffected(_channelizer, target, o -> + if (o.isCharacter()) { - if (o.isCharacter()) + targetList.add((L2Character) o); + ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + } + }); + } + + if (targetList.isEmpty()) + { + return; + } + channelized = targetList; + + for (L2Character character : channelized) + { + if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) + { + continue; + } + else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) + { + continue; + } + + if (skill.getChannelingSkillId() > 0) + { + final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); + final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); + final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); + + if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + { + final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); + if (channeledSkill == null) { - targetList.add((L2Character) o); - ((L2Character) o).getSkillChannelized().addChannelizer(skill.getChannelingSkillId(), _channelizer); + LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); + _channelizer.abortCast(); + return; } - }); - } - - if (targetList.isEmpty()) - { - return; - } - channelized = targetList; - - for (L2Character character : channelized) - { - if (!Util.checkIfInRange(skill.getEffectRange(), _channelizer, character, true)) - { - continue; - } - else if (!GeoEngine.getInstance().canSeeTarget(_channelizer, character)) - { - continue; - } - else - { - final int maxSkillLevel = SkillData.getInstance().getMaxLevel(skill.getChannelingSkillId()); - final int skillLevel = Math.min(character.getSkillChannelized().getChannerlizersSize(skill.getChannelingSkillId()), maxSkillLevel); - final BuffInfo info = character.getEffectList().getBuffInfoBySkillId(skill.getChannelingSkillId()); - if ((info == null) || (info.getSkill().getLevel() < skillLevel)) + // Update PvP status + if (character.isPlayable() && _channelizer.isPlayer()) { - final Skill channeledSkill = SkillData.getInstance().getSkill(skill.getChannelingSkillId(), skillLevel); - if (channeledSkill == null) - { - LOGGER.warning(getClass().getSimpleName() + ": Non existent channeling skill requested: " + skill); - _channelizer.abortCast(); - return; - } - - // Update PvP status - if (character.isPlayable() && _channelizer.isPlayer()) - { - ((L2PcInstance) _channelizer).updatePvPStatus(character); - } - - // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try"+ +" is used in this case to avoid NPEs. - channeledSkill.applyEffects(_channelizer, character); - - // Reduce shots. - if (skill.useSpiritShot()) - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); - } - else - { - _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); - } - - // Shots are re-charged every cast. - _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); - } - if (!skill.isToggle()) - { - _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); + ((L2PcInstance) _channelizer).updatePvPStatus(character); } + + // Be warned, this method has the possibility to call doDie->abortCast->stopChanneling method. Variable cache above try{} is used in this case to avoid NPEs. + channeledSkill.applyEffects(_channelizer, character); + } + if (!skill.isToggle()) + { + _channelizer.broadcastPacket(new MagicSkillLaunched(_channelizer, skill.getId(), skill.getLevel(), SkillCastingType.NORMAL, character)); } } + else + { + skill.applyChannelingEffects(_channelizer, character); + } + + // Reduce shots. + if (skill.useSpiritShot()) + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SPIRITSHOTS) ? ShotType.BLESSED_SPIRITSHOTS : ShotType.SPIRITSHOTS); + } + else + { + _channelizer.unchargeShot(_channelizer.isChargedShot(ShotType.BLESSED_SOULSHOTS) ? ShotType.BLESSED_SOULSHOTS : ShotType.SOULSHOTS); + } + + // Shots are re-charged every cast. + _channelizer.rechargeShots(skill.useSoulShot(), skill.useSpiritShot(), false); } } catch (Exception e) diff --git a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/stats/Formulas.java b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/stats/Formulas.java index d9a263e49a..f050e289ce 100644 --- a/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/stats/Formulas.java +++ b/L2J_Mobius_Classic_2.2_Antharas/java/com/l2jmobius/gameserver/model/stats/Formulas.java @@ -484,13 +484,7 @@ public final class Formulas public static double calcSkillCancelTime(L2Character creature, Skill skill) { - // Fishing skills. - if ((skill.getId() == 1312) || (skill.getId() == 1314) || (skill.getId() == 1315)) - { - return 0; - } - // return (int) Math.max(skill.getCancelTime() / calcSkillTimeFactor(attacker, skill), 500); - return Math.max(skill.getHitTime() / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); + return Math.max((skill.getHitCancelTime() * 1000) / calcSkillTimeFactor(creature, skill), SKILL_LAUNCH_TIME); } /**