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);
}
/**