summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--db/Changelog.txt3
-rw-r--r--db/skill_cast_db.txt46
-rw-r--r--db/skill_db.txt36
-rw-r--r--db/skill_require_db.txt10
-rw-r--r--db/skill_unit_db.txt4
-rw-r--r--src/map/battle.c17
-rw-r--r--src/map/pc.c3
-rw-r--r--src/map/skill.c86
-rw-r--r--src/map/skill.h7
-rw-r--r--src/map/status.c5
11 files changed, 141 insertions, 79 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 30c1fcc77..93beb219e 100644
--- a/Changelog-Trunk.txt
+++ b/Changelog-Trunk.txt
@@ -3,6 +3,9 @@ Date Added
AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2006/08/28
+ * Applied Mpeg's work on GS [Toms]
+ ( http://gpegon.free.fr/ea/gunslinger_08-28-06_mpeg.txt )
2006/08/27
* Fixed undefined reference to 'malloc_set' in log.c [Toms]
* Updated svn-revision reading, now it can read the new svn file system [Toms]
diff --git a/db/Changelog.txt b/db/Changelog.txt
index ea97887dd..acc4830f4 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -19,6 +19,9 @@
-----
=========================
+08/28
+ * Applied Mpeg's work on GS [Toms]
+ ( http://gpegon.free.fr/ea/gunslinger_08-28-06_mpeg.txt )
08/26
* Reduced weapon range of all guns by 1 [Playtester]
08/25
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index 78da5124d..19060f8c5 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -843,41 +843,35 @@
//-- GS_GLITTERING
500,0,0,0,600000,0
//-- GS_FLING
-501,0,1000,0,30000,0
-//-- GS_TRIPLEACTION
-502,0,1000,0,0,0
-//-- GS_BULLSEYE
-503,0,1000,0,0,0
+501,0,0,0,30000,0
//-- GS_MADNESSCANCEL
-504,0,1000,0,15000,0
-//-- GS_ADJUSTMENT
-505,0,1000,0,30000,0
+504,0,0,0,15000,0
+//-- GS_ADJUSTMENT // Duration1 unknown
+505,0,0,0,30000,0
//-- GS_INCREASING
-506,0,1000,0,60000,0
-//-- GS_MAGICALBULLET
-507,0,1000,0,0,0
-//-- GS_CRACKER
-508,0,1000,0,0,5000
-//-- GS_TRACKING
+506,0,0,0,60000,0
+//-- GS_CRACKER // No clue for duration2 (stun time)
+508,0,0,0,0,5000
+//-- GS_TRACKING // Delay unknown
512,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,0,0
-//-- GS_DISARM
-513,0,1000,0,30000,0
-//-- GS_PIERCINGSHOT
-514,0,1000,0,0,120000
-//-- GS_RAPIDSHOWER
+//-- GS_DISARM // Cast&Delay unknown (temp values). No clue for Duration1 (Strip time)...
+513,1000,0,0,30000,0
+//-- GS_PIERCINGSHOT // Cast&Delay unknown (temp values). No clue for Duration2 (Bleeding time)
+514,1000,0,0,0,120000
+//-- GS_RAPIDSHOWER // Delay must be checked (maybe 0(ASPD)...)
515,0,1000,0,0,0
-//-- GS_DESPERADO
+//-- GS_DESPERADO // Delay must be checked (very likely to be 1s though)
516,0,1000,1000,1000,0
//-- GS_GATLINGFEVER
517,0,1000,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0
-//-- GS_DUST
-518,1000,1000,0,0,0
+//-- GS_DUST // Delay must be checked (very long with low agi, still long with full agi, so it must be correct...)
+518,1000,0,0,0,0
//-- GS_FULLBUSTER
519,1000,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000
-//-- GS_SPREADATTACK
-520,0,1000,0,0,0
-//-- GS_GROUNDDRIFT
-521,0,1000,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,0
+//-- GS_SPREADATTACK // Delay unknown (if there is one, other that aspd)
+520,1000,0,0,0,0
+//-- GS_GROUNDDRIFT // Delay unknown (if there is one, other that aspd)
+521,1000,0,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,10000
//==========================================
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 39d9ce965..87d7c3ea5 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -524,28 +524,28 @@
498,0,6,4,0,1,0,1,0,no,0,8,0,none,0 //AM_TWILIGHT3#Twilight Alchemy 3#
499,-9,8,4,-1,0,0,1,2,no,0,520,0,weapon,0 //HT_POWER#Beast Strafing#
//Temp Plugs(using bash as base)
-500,0,6,4,0,0,0,5,1,no,0,0,0,none,0 //GS_GLITTERING#Flip the Coin#
-501,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_FLING#Fling#
-502,-3,8,1,-1,0,0,1,3,no,0,0,0,weapon,0 //GS_TRIPLEACTION#Triple Action#
-503,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_BULLSEYE#Bulls Eye#
-504,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0 //GS_MADNESSCANCEL#Madness Canceler#
-505,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0 //GS_ADJUSTMENT#AdJustment#
-506,0,6,4,0,1,0,5,1,no,0,0,0,weapon,0 //GS_INCREASING#Increasing Accuracy#
-507,-3,6,1,8,0,0,1,1,no,0,0,0,weapon,0 //GS_MAGICALBULLET#Magical Bullet#
-508,-3,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_CRACKER#Cracker#
-509,-3,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SINGLEACTION#Single Action#
+500,0,6,4,0,0,0,5,1,no,0,0,0,misc,0 //GS_GLITTERING#Flip the Coin#
+501,0,6,1,-1,0,0,1,1,no,0,0,0,misc,0 //GS_FLING#Fling#
+502,0,8,1,-1,0,0,1,3,no,0,0,0,weapon,0 //GS_TRIPLEACTION#Triple Action#
+503,0,6,1,-1,0,0,1,1,no,0,0,0,weapon,0 //GS_BULLSEYE#Bulls Eye#
+504,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_MADNESSCANCEL#Madness Canceler#
+505,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_ADJUSTMENT#AdJustment#
+506,0,6,4,0,1,0,1,1,no,0,0,0,weapon,0 //GS_INCREASING#Increasing Accuracy#
+507,0,6,1,8,0,0,1,1,no,0,0,0,weapon,0 //GS_MAGICALBULLET#Magical Bullet#
+508,0,6,1,-1,1,0,1,1,no,0,0,0,weapon,0 //GS_CRACKER#Cracker#
+509,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SINGLEACTION#Single Action#
510,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //GS_SNAKEEYE#Snake Eye#
-511,-3,8,0,0,0,0,10,2,no,0,0,0,weapon,0 //GS_CHAINACTION#Chain Action#
-512,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_TRACKING#Tracking#
-513,7,6,1,-1,1,0,5,1,no,0,0,0,weapon,0 //GS_DISARM#Disarm#
-514,3,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //GS_PIERCINGSHOT#Piercing Shot#
-515,3,8,1,-1,0,0,10,5,no,0,0,0,weapon,0 //GS_RAPIDSHOWER#Rapid Shower#
+511,0,8,0,-1,0,0,10,2,no,0,0,0,weapon,0 //GS_CHAINACTION#Chain Action#
+512,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_TRACKING#Tracking#
+513,0,6,1,-1,1,0,5,1,no,0,0,0,weapon,0 //GS_DISARM#Disarm#
+514,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //GS_PIERCINGSHOT#Piercing Shot#
+515,0,8,1,-1,0,0,10,5,no,0,0,0,weapon,0 //GS_RAPIDSHOWER#Rapid Shower#
516,0,8,4,-1,2,3,10,1,no,0,0,0,weapon,0 //GS_DESPERADO#Desperado#
517,0,6,4,-1,1,0,10,1,no,0,0,0,weapon,0 //GS_GATLINGFEVER#Gatling Fever#
518,3,6,1,-1,0,0,10,1,no,0,0,0,weapon,5 //GS_DUST#Dust#
-519,3,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0 //GS_FULLBUSTER#Full Buster#
-520,3,6,1,-1,2,1:1:1:2:2:2:3:3:3:4,10,1,no,0,0,0,weapon,0 //GS_SPREADATTACK#Spread Attack#
-521,3,6,2,0,0,0,10,1,no,0,0,0,weapon,0 //GS_GROUNDDRIFT#Ground Drift#
+519,0,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0 //GS_FULLBUSTER#Full Buster#
+520,0,6,1,-1,2,1:1:1:2:2:2:3:3:3:4,10,1,no,0,0,0,weapon,0 //GS_SPREADATTACK#Spread Attack#
+521,0,6,2,-1,0,0,10,1,no,0,0,0,weapon,0 //GS_GROUNDDRIFT#Ground Drift#
522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0 //NJ_TOBIDOUGU#NJ_TOBIDOUGU#
523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_SYURIKEN#NJ_SYURIKEN#
524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0 //NJ_KUNAI#NJ_KUNAI#
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index d8c2df333..e27ee92fe 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -394,14 +394,14 @@
498,0,0,200,0,0,0,99,0,0,none,0,7134,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//AM_TWILIGHT3##
499,0,0,8,0,0,0,11,1,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HT_POWER##
500,0,0,2,0,0,1,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING
-501,0,0,10,0,0,0,17:18:19:20:21,3:5,0,none,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_FLING
-502,0,0,20,0,0,0,17:18:19:20:21,3:5,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION
-503,0,0,30,0,0,0,17:18:19:20:21,3:5,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_BULLSEYE
+501,0,0,10,0,0,0,17:18:19:20:21,0,0,none,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_FLING
+502,0,0,20,0,0,0,17:18:19:20:21,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION
+503,0,0,30,0,0,0,17:18:19:20:21,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_BULLSEYE
504,0,0,30,0,0,0,17:18:19:20:21,0,0,none,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL
505,0,0,15,0,0,0,17:18:19:20:21,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT
506,0,0,30,0,0,0,17:18:19:20:21,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_INCREASING
507,0,0,7,0,0,0,17:18:19:20:21,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET
-508,0,0,10,0,0,0,17:18:19:20:21,3:5,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_CRACKER
+508,0,0,10,0,0,0,17:18,3,1,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_CRACKER
512,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,17:18,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_TRACKING
513,0,0,15:20:25:30:35,0,0,0,17:18,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_DISARM
514,0,0,11:12:13:14:15,0,0,0,17:18,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_PIERCINGSHOT
@@ -410,7 +410,7 @@
517,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,20,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_GATLINGFEVER
518,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,19,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_DUST
519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,19,3,2:2:4:4:6:6:8:8:10:10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_FULLBUSTER
-520,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,19,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_SPREADATTACK
+520,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,19,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_SPREADATTACK
521,0,0,4:8:12:16:20:24:28:32:36:40,0,0,0,21,5,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT
523,0,0,2,0,0,0,99,6,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_SYURIKEN
524,0,0,30:25:20:15:10,0,0,0,99,7,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KUNAI
diff --git a/db/skill_unit_db.txt b/db/skill_unit_db.txt
index 822bce4ab..077aac090 100644
--- a/db/skill_unit_db.txt
+++ b/db/skill_unit_db.txt
@@ -88,7 +88,7 @@
484,0xb8, , 2, 0,1000,enemy, 0x808 //HW_GRAVITATION
488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE
516,0xba, , 0, 3, 100,enemy, 0x000 //GS_DESPERADO
-521,0xc2, , 0, 1,1000,enemy, 0x006 //GS_GROUNDDRIFT
+538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x000 //NJ_SUITON
527,0xbc, , -1, 0,2000,enemy, 0x000 //NJ_TATAMIGAESHI
535,0xbd, , -1, 0, 200,enemy, 0x008 //NJ_KAENSIN
-538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x000 //NJ_SUITON
+521,0xbe, , 0, 1,1000,enemy, 0x006 //GS_GROUNDDRIFT
diff --git a/src/map/battle.c b/src/map/battle.c
index 4289b76b2..28c8e4c4c 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -857,7 +857,6 @@ static struct Damage battle_calc_weapon_attack(
}
wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG;
break;
- case GS_MAGICALBULLET:
case HT_PHANTASMIC:
//Since these do not consume ammo, they need to be explicitly set as arrow attacks.
flag.arrow = 1;
@@ -881,6 +880,10 @@ static struct Damage battle_calc_weapon_attack(
case NPC_GRANDDARKNESS:
case NJ_HUUMA:
case NJ_TATAMIGAESHI:
+ case GS_FLING:
+ case GS_TRIPLEACTION:
+ case GS_BULLSEYE:
+ case GS_MAGICALBULLET:
wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG;
break;
@@ -1505,13 +1508,17 @@ static struct Damage battle_calc_weapon_attack(
break;
case GS_BULLSEYE:
skillratio += 400;
+ flag.cardfix = 0;
break;
case GS_TRACKING:
- skillratio += 60*skill_lv;
+ // Where does this damage calculation come from ? Reverse the changes if necessary (or else delete me)
+ /*skillratio += 60*skill_lv;
if (skill_lv == 2) skillratio += 20;
if (skill_lv == 3) skillratio += 80;
if (skill_lv >= 4) skillratio += 60*(skill_lv-3);
if (skill_lv == 10) skillratio += 80;
+ break;*/
+ skillratio += 100 *(skill_lv+1);
break;
case GS_PIERCINGSHOT:
skillratio += 20*skill_lv;
@@ -1520,16 +1527,16 @@ static struct Damage battle_calc_weapon_attack(
skillratio += 10*skill_lv;
break;
case GS_DESPERADO:
- skillratio += 50*skill_lv - 50;
+ skillratio += 50*(skill_lv-1);
break;
case GS_DUST:
skillratio += 50*skill_lv;
break;
case GS_FULLBUSTER:
- skillratio += 200 + 100*skill_lv;
+ skillratio += 100*(skill_lv+2);
break;
case GS_SPREADATTACK:
- skillratio += 20*skill_lv-20;
+ skillratio += 20*(skill_lv-1);
break;
case NJ_HUUMA:
skillratio += 50 + 150*skill_lv;
diff --git a/src/map/pc.c b/src/map/pc.c
index bde039c83..6883e7c4c 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -4822,6 +4822,9 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
npc_script_event(sd,NPCE_DIE);
}
+ if ( sd && sd->spiritball && (sd->class_&MAPID_BASEMASK)==MAPID_GUNSLINGER ) // maybe also monks' spiritballs ?
+ pc_delspiritball(sd,sd->spiritball,0);
+
if (src)
switch (src->type) {
case BL_MOB:
diff --git a/src/map/skill.c b/src/map/skill.c
index c8526160e..b8f869c7c 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -758,9 +758,13 @@ int skill_get_range2 (struct block_list *bl, int id, int lv)
range *=-1;
}
- //Use attack range.
- if(!range && !(skill_get_inf(id)&INF_SELF_SKILL))
- return status_get_range(bl);
+ //Some skills take in count weapon range (without passive skills bonuses)
+ if(!range && !(skill_get_inf(id)&INF_SELF_SKILL))
+ {
+ if (bl->type == BL_PC) // Only get the weapon range (if skill is influenced by AC_VULTURE or GS_SNAKEEYE, bonus will be re-added in the part left of the function)
+ range = status_get_range(bl)-pc_checkskill((TBL_PC*)bl, AC_VULTURE)-pc_checkskill((TBL_PC*)bl, GS_SNAKEEYE);
+ else range = status_get_range(bl);
+ }
//TODO: Find a way better than hardcoding the list of skills affected by AC_VULTURE
switch (id) {
@@ -1357,10 +1361,6 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int
case GS_BULLSEYE: //0.1% coma rate.
status_change_start(bl,SC_COMA,10,skilllv,0,0,0,0,0);
break;
- case GS_CRACKER:
- if (!dstsd) // according to latest patch, should not work on players [Reddozen]
- sc_start(bl,SC_STUN,(100 - 10*distance_bl(src, bl)),skilllv,skill_get_time2(skillid,skilllv)); //Temp stun rate
- break;
case GS_PIERCINGSHOT:
sc_start(bl,SC_BLEEDING,(skilllv*3),skilllv,skill_get_time2(skillid,skilllv));
break;
@@ -1529,7 +1529,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
sc_start(src,SkillStatusChangeTable(skillid),100,skilllv,skill_get_time2(skillid,skilllv));
break;
case GS_FULLBUSTER:
- sc_start(src,SC_BLIND,(2*skilllv),skilllv,skill_get_time2(skillid,skilllv));
+ status_change_start(src,SC_BLIND,200*skilllv,skilllv,0,0,0,skill_get_time2(skillid,skilllv),10);
break;
}
@@ -2763,7 +2763,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case TK_COUNTER:
case GS_TRIPLEACTION:
case GS_MAGICALBULLET:
- case GS_CRACKER:
case GS_TRACKING:
case GS_PIERCINGSHOT:
case GS_RAPIDSHOWER:
@@ -3146,7 +3145,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break;
case GS_BULLSEYE:
- if(tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN)
+ if((tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN) && !(tstatus->mode&MD_BOSS))
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
else if (sd)
clif_skill_fail(sd,skillid,0,0);
@@ -3728,7 +3727,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case GS_MADNESSCANCEL:
case GS_ADJUSTMENT:
case GS_INCREASING:
- case GS_CRACKER:
case NJ_KASUMIKIRI:
case NJ_UTSUSEMI:
case NJ_NEN:
@@ -5493,6 +5491,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
}
break;
+ case GS_CRACKER:
+ if (!dstsd) // according to latest patch, should not work on players [Reddozen]
+ {
+ int rate=10+(skill_get_range2(src,skillid,skilllv)-distance_bl(src,bl))*20;
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ sc_start(bl,SC_STUN,(rate>100)?100:rate,skilllv,skill_get_time2(skillid,skilllv)); //New temp stun rate (by RockmanEXE)
+ }
+ else
+ clif_skill_fail(sd,skillid,0,0);
+ break;
case AM_REST:
if (sd)
{
@@ -6483,6 +6491,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
struct status_data *status;
struct status_change *sc;
int active_flag=1;
+ int subunt=0;
nullpo_retr(0, src);
@@ -6689,17 +6698,36 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
break;
case GS_GROUNDDRIFT:
- { //Take on the base element, not the elemental one.
- struct status_data *bstatus = status_get_base_status(src);
- val1 = bstatus?bstatus->rhw.ele:status->rhw.ele;
- if (sd) sd->state.arrow_atk = 0; //Disable consumption right away.
- else if (!val1) val1 = ELE_WATER+rand()%(ELE_WIND-ELE_WATER);
- break;
+ {
+ int element[5]={ELE_WIND,ELE_DARK,ELE_POISON,ELE_WATER,ELE_FIRE};
+
+ if (src->type == BL_PC)
+ val1=sd->arrow_ele;
+ else val1=element[rand()%5];
+
+ switch (val1)
+ {
+ case ELE_FIRE:
+ subunt++;
+ case ELE_WATER:
+ subunt++;
+ case ELE_POISON:
+ subunt++;
+ case ELE_DARK:
+ subunt++;
+ case ELE_WIND:
+ break;
+ default:
+ subunt=rand()%5;
+ break;
+ }
+
+ break;
}
}
nullpo_retr(NULL, group=skill_initunitgroup(src,(count > 0 ? count : layout->count),
- skillid,skilllv,skill_get_unit_id(skillid,flag&1), limit, interval));
+ skillid,skilllv,skill_get_unit_id(skillid,flag&1)+subunt, limit, interval));
group->val1=val1;
group->val2=val2;
group->val3=val3;
@@ -7288,8 +7316,26 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break;
- case UNT_GROUNDDRIFT:
+ case UNT_GROUNDDRIFT_WIND:
+ case UNT_GROUNDDRIFT_DARK:
+ case UNT_GROUNDDRIFT_POISON:
+ case UNT_GROUNDDRIFT_WATER:
+ case UNT_GROUNDDRIFT_FIRE:
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,sg->val1);
+
+ switch (sg->val1)
+ {
+ case ELE_WATER:
+ sc_start(bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+ break;
+ case ELE_POISON:
+ sc_start(bl,SC_POISON,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+ break;
+ case ELE_DARK:
+ sc_start(bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
+ break;
+ }
+
sg->unit_id = UNT_USED_TRAPS;
clif_changetraplook(&src->bl, UNT_FIREPILLAR_ACTIVE);
sg->limit=DIFF_TICK(tick,sg->tick)+1500;
@@ -7798,7 +7844,7 @@ int skill_isammotype (TBL_PC *sd, int skill)
{
return (
(sd->status.weapon == W_BOW || (sd->status.weapon >= W_REVOLVER && sd->status.weapon <= W_GRENADE)) &&
- skill != HT_PHANTASMIC && skill != GS_MAGICALBULLET &&
+ skill != HT_PHANTASMIC &&
skill_get_type(skill) == BF_WEAPON &&
!(skill_get_nk(skill)&NK_NO_DAMAGE) &&
!skill_get_spiritball(skill,1) //Assume spirit spheres are used as ammo instead.
diff --git a/src/map/skill.h b/src/map/skill.h
index 0619088d8..ccc611fa2 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -947,8 +947,11 @@ enum {
UNT_SUITON = 0xbb,
UNT_TATAMIGAESHI,
UNT_KAENSIN,
- //0xbe, 0xc0, 0xc1 //Maybe the other elements of Ground Drift?
- UNT_GROUNDDRIFT = 0xc2,
+ UNT_GROUNDDRIFT_WIND,
+ UNT_GROUNDDRIFT_DARK,
+ UNT_GROUNDDRIFT_POISON,
+ UNT_GROUNDDRIFT_WATER,
+ UNT_GROUNDDRIFT_FIRE,
};
#endif
diff --git a/src/map/status.c b/src/map/status.c
index ffa243604..b4ef9a506 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -354,6 +354,9 @@ void initChangeTables(void) {
set_sc(SL_HIGH, SC_SPIRIT, SI_SPIRIT, SCB_PC);
set_sc(KN_ONEHAND, SC_ONEHAND, SI_ONEHAND, SCB_ASPD);
set_sc(GS_FLING, SC_FLING, SI_BLANK, SCB_DEF|SCB_DEF2);
+ add_sc(GS_CRACKER, SC_STUN);
+ set_sc(GS_DISARM, SC_STRIPWEAPON, SI_STRIPWEAPON, SCB_WATK);
+ add_sc(GS_PIERCINGSHOT, SC_BLEEDING);
set_sc(GS_MADNESSCANCEL, SC_MADNESSCANCEL, SI_MADNESSCANCEL, SCB_BATK|SCB_ASPD);
set_sc(GS_ADJUSTMENT, SC_ADJUSTMENT, SI_ADJUSTMENT, SCB_HIT|SCB_FLEE);
set_sc(GS_INCREASING, SC_INCREASING, SI_ACCURACY, SCB_AGI|SCB_DEX|SCB_HIT);
@@ -363,7 +366,7 @@ void initChangeTables(void) {
add_sc(NJ_HYOUSYOURAKU, SC_FREEZE);
set_sc(NJ_NEN, SC_NEN, SI_NEN, SCB_STR|SCB_INT);
set_sc(NJ_UTSUSEMI, SC_UTSUSEMI, SI_UTSUSEMI,SCB_NONE);
- set_sc(NJ_BUNSINJYUTSU, SC_BUNSINJYUTSU, SI_BUNSINJYUTSU, SCB_DYE);
+ set_sc(NJ_BUNSINJYUTSU, SC_BUNSINJYUTSU, SI_BUNSINJYUTSU, SCB_NONE);
set_sc(CR_SHRINK, SC_SHRINK, SI_SHRINK, SCB_NONE);
set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE2, SI_CLOSECONFINE2, SCB_NONE);
set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE, SI_CLOSECONFINE, SCB_FLEE);