From 998c5616368212ebfd9d46d548a29bab557d84ce Mon Sep 17 00:00:00 2001 From: toms Date: Mon, 28 Aug 2006 13:40:55 +0000 Subject: Applied Mpeg's work on GS ( http://gpegon.free.fr/ea/gunslinger_08-28-06_mpeg.txt ) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@8513 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 ++ db/Changelog.txt | 3 ++ db/skill_cast_db.txt | 46 ++++++++++++-------------- db/skill_db.txt | 36 ++++++++++----------- db/skill_require_db.txt | 10 +++--- db/skill_unit_db.txt | 4 +-- src/map/battle.c | 17 +++++++--- src/map/pc.c | 3 ++ src/map/skill.c | 86 +++++++++++++++++++++++++++++++++++++------------ src/map/skill.h | 7 ++-- src/map/status.c | 5 ++- 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); -- cgit v1.2.3-70-g09d2