- Applied most of Mpeg's work on Ninja Skills. For information see: http://gpegon.free.fr/ea/ninja_10-15-06_mpeg.txt

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8999 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
skotlex 2006-10-16 19:07:24 +00:00
parent 6326212fda
commit d99bf3c795
10 changed files with 111 additions and 112 deletions

View File

@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/10/16
* Applied most of Mpeg's work on Ninja Skills. For information see:
http://gpegon.free.fr/ea/ninja_10-15-06_mpeg.txt [Skotlex]
* When reinvoking a combo-time, the previous combo time will be terminated.
This could fix the ongoing difficulties pulling off Monk combos. [Skotlex]
* Fixed Esma-state not ending after casting it. [Skotlex]

View File

@ -20,6 +20,8 @@
========================
10/16
* Applied most of Mpeg's work on Ninja Skills. For information see:
http://gpegon.free.fr/ea/ninja_10-15-06_mpeg.txt [Skotlex]
* Small Kiel MVP drop rate increase [Playtester]
10/14
* Fixed Bacsojin's and Chung E's stats [Playtester]

View File

@ -54,7 +54,7 @@
// Gunslinger
24, 27000,75 ,300 ,600, 500 ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 ,1500 , 700 ,1500 ,2000
// Ninja
25, 24000,60 ,700 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000, 750
25, 26000,80 ,150 ,500 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000, 550
// Novice High
4001, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Swordman High

View File

@ -878,45 +878,47 @@
//===== Ninja ==============================
//-- NJ_HUUMA // Unknown casting time. temp value (taken from jA)
525,1000,1000,0,0,0
//-- NJ_KUNAI
525,0,1000,0,0,0
//-- NJ_HUUMA
525,3000,2000,0,0,0
//-- NJ_ZENYNAGE
526,0,5000,0,0,0
//-- NJ_TATAMIGAESHI // Duration1 is land-effect, Duration2 is range-inmunity effect.
//-- NJ_TATAMIGAESHI
527,0,3000,0,3000,3000
//-- NJ_KASUMIKIRI // Delay unknown (if there is one)
528,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
//-- NJ_SHADOWJUMP // Delay unknown (if there is one)
529,0,0,0,0,0
//-- NJ_KASUMIKIRI
528,0,1000,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
//-- NJ_SHADOWJUMP
529,0,1000,0,0,0
//-- NJ_KIRIKAGE // Seems to have no delay (English Translation Project)
530,0,0,0,0,0
//-- NJ_UTSUSEMI
531,0,0,0,20000:30000:40000:50000:60000,0
//-- NJ_BUNSINJYUTSU // Cast and Delay unknown (temp > random cast)
532,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
531,0,1000,0,20000:30000:40000:50000:60000,0
//-- NJ_BUNSINJYUTSU
532,4000:3500:3000:2500:2000:1500:1000:1000:1000:1000,1000,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
//-- NJ_KOUENKA
534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
//-- NJ_KAENSIN
535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0,
//-- NJ_BAKUENRYU // Cast and Delay taken from lvl5 (need to confirm it's not influenced by lvl)
//-- NJ_BAKUENRYU
536,3000,2000,0,0,0
//-- NJ_HYOUSENSOU
537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
//-- NJ_SUITON // Delay unknown (if there is one)
//-- NJ_SUITON
538,3000,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
//-- NJ_HYOUSYOURAKU // Cast time and Delay taken from jA (not reliable, must be checked)
539,3000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
//-- NJ_HYOUSYOURAKU
539,2000:2500:3000:3500:4000,2000,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
//-- NJ_HUUJIN
540,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
//-- NJ_RAIGEKISAI // Cast and Delay must be checked (Seems to be more 4s at lvl1. Don't have other lvls)
541,3700:3400:3100:2800:2500,0,0,0,0
//-- NJ_KAMAITACHI // Cast and delay unknown > temp values taken from NJ_BAKUENRYU
542,3000,2000,0,0,0
540,1000:1500:2000:2500:3000:3500:4000:5000:5500:6000,1000,0,0,0
//-- NJ_RAIGEKISAI
541,4000,0,0,0,0
//-- NJ_KAMAITACHI
542,4000,0,0,0,0
//-- NJ_NEN
543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,30000:45000:60000:75000:90000
//-- NJ_ISSEN // cast and delay unknown > temp values taken from MO_EXTREMITYFIST
544,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,0,0
//-- NJ_ISSEN
544,0,3000,0,0,0
//==========================================

View File

@ -549,14 +549,14 @@
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#
525,9,8,1,-1,4,1,5,-1:-2:-3:-4:-5,yes,0,0,0,weapon,0 //NJ_HUUMA#NJ_HUUMA#
525,9,8,1,-1,4,1,5,-3:-3:-4:-4:-5,yes,0,0,0,weapon,0 //NJ_HUUMA#NJ_HUUMA#
526,9,6,1,0,0,0,10,1,no,0,0,0,misc,0 //NJ_ZENYNAGE#NJ_ZENYNAGE#
527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3 //NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_KASUMIKIRI#NJ_KASUMIKIRI#
529,7:9:11:13:15,6,2,0,1,0,5,1,no,0,0,0,none,0 //NJ_SHADOWJUMP#NJ_SHADOWJUMP#
530,-1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //NJ_KIRIKAGE#NJ_KIRIKAGE#
531,0,6,4,0,1,0,5,1,no,0,0,0,none,7 //NJ_UTSUSEMI#NJ_UTSUSEMI#
532,0,6,4,0,1,0,10,1,no,0,0,0,none,0 //NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU#
532,0,6,4,0,1,0,10,1,yes,0,0,0,magic,0 //NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU#
533,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //NJ_NINPOU#NJ_NINPOU#
534,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //NJ_KOUENKA#NJ_KOUENKA#
535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,0 //NJ_KAENSIN#NJ_KAENSIN#
@ -564,11 +564,11 @@
537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0 //NJ_HYOUSENSOU#NJ_HYOUSENSOU#
538,9,6,2,0,1,0,10,1,yes,0,0,0,magic,0 //NJ_SUITON#NJ_SUITON#
539,0,6,4,1,2,3,5,1,yes,0,0,0,magic,0 //NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU#
540,9,8,1,4,0,0,10,-1:-2:-2:-3:-3:-4:-4:-5:-5:-6,yes,0,0,0,magic,0 //NJ_HUUJIN#NJ_HUUJIN#
540,9,8,1,4,0,0,10,1:2:2:3:3:4:4:5:5:6,yes,0,0,0,magic,0 //NJ_HUUJIN#NJ_HUUJIN#
541,9,6,4,4,2,2:2:3:3:4,5,1,yes,0,0,0,magic,0 //NJ_RAIGEKISAI#NJ_RAIGEKISAI#
542,5:6:7:8:9,8,1,4,0,2,5,1,yes,0,0,0,magic,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
543,0,6,4,0,1,0,5,1,no,0,0,0,none,0 //NJ_NEN#NJ_NEN#
544,-2,6,1,0,0,0,10,1,yes,0,0,0,weapon,0 //NJ_ISSEN#NJ_ISSEN#
542,5:6:7:8:9,8,1,4,0,1,5,1,yes,0,0,0,magic,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
543,0,6,4,0,1,0,5,1,yes,0,0,0,none,0 //NJ_NEN#NJ_NEN#
544,-4,6,1,0,0,0,10,1,no,0,0,0,weapon,0 //NJ_ISSEN#NJ_ISSEN#
1001,9,6,1,-1,0,0,1,1,no,0,1,0,weapon,0 //KN_CHARGEATK#Charge Attack#
1002,0,6,4,0,1,0,1,0,no,0,1,0,weapon,2 //CR_SHRINK#Shrink#

View File

@ -56,4 +56,3 @@
//Zone 2 - Jail
421,64 //TK_JUMPKICK#Flying Side Kick#
426,64 //TK_HIGHJUMP#Taekwon Jump#
529,64 //NJ_SHADOWJUMP#NJ_SHADOWJUMP#

View File

@ -431,7 +431,7 @@
540,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,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 //NJ_HUUJIN
541,0,0,16:20:24:28:32,0,0,0,99,0,0,none,0,7523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_RAIGEKISAI
542,0,0,24:28:32:36:40,0,0,0,99,0,0,none,0,7523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NJ_KAMAITACHI
543,80,0,20:30:40:50:60,0,0,0,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 //NJ_NEN
543,0,0,20:30:40:50:60,-5,0,0,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 //NJ_NEN
544,0,0,55:60:65:70:75:80:85:90:95:100,0,0,0,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 //NJ_ISSEN
1001,0,0,40,0,0,0,99,0,0,move_enable,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KN_CHARGEATK#ƒ`ƒƒ?[ƒWƒAƒ^ƒbƒN#

View File

@ -322,9 +322,31 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
return 0;
}
if(sc->data[SC_BUNSINJYUTSU].timer != -1 && (flag&(BF_WEAPON|BF_MISC)) )
if ((sc->data[SC_UTSUSEMI].timer != -1 || sc->data[SC_BUNSINJYUTSU].timer != -1)
&& (flag&(BF_WEAPON|BF_MISC))
/* FIXME: This check is awful, there has to be some kind of logic behind this!
&& (
// there is no rule for that, only some exceptions.. which I listed according to many tests and says
skill_num != ASC_BREAKER &&
skill_num != NJ_KUNAI &&
skill_num != SN_FALCONASSAULT &&
skill_num != MO_BALKYOUNG &&
skill_num != HT_BLITZBEAT &&
skill_num != NJ_SYURIKEN
)
*/
)
{
if (--sc->data[SC_BUNSINJYUTSU].val2 <= 0)
if (sc->data[SC_UTSUSEMI].timer != -1) {
clif_specialeffect(bl, 462, AREA);
skill_blown (src, bl, sc->data[SC_UTSUSEMI].val3);
};
//Both need to be consumed if they are active.
if (sc->data[SC_UTSUSEMI].timer != -1 &&
--sc->data[SC_UTSUSEMI].val2 <= 0)
status_change_end(bl, SC_UTSUSEMI, -1);
if (sc->data[SC_BUNSINJYUTSU].timer != -1 &&
--sc->data[SC_BUNSINJYUTSU].val2 <= 0)
status_change_end(bl, SC_BUNSINJYUTSU, -1);
return 0;
}
@ -497,6 +519,7 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
//Skills with no damage reduction.
case PA_PRESSURE:
case HW_GRAVITATION:
case NJ_ZENYNAGE:
break;
default:
if (md && md->guardian_data) {
@ -877,7 +900,7 @@ static struct Damage battle_calc_weapon_attack(
case CR_GRANDCROSS:
case NPC_GRANDDARKNESS:
case NJ_HUUMA:
case GS_FLING:
case NJ_ISSEN:
case GS_TRIPLEACTION:
case GS_BULLSEYE:
case GS_MAGICALBULLET:
@ -1048,7 +1071,8 @@ static struct Damage battle_calc_weapon_attack(
case NPC_ENERGYDRAIN:
case NPC_MENTALBREAKER:
case GS_GROUNDDRIFT:
case NJ_TATAMIGAESHI:
case NJ_SYURIKEN:
case NJ_KUNAI:
case NJ_ISSEN:
flag.hit = 1;
break;
@ -1151,7 +1175,7 @@ static struct Damage battle_calc_weapon_attack(
switch (skill_num)
{ //Calc base damage according to skill
case NJ_ISSEN:
wd.damage = 80*sstatus->str +skill_lv*sstatus->hp*8/100;
wd.damage = 40*sstatus->str +skill_lv*(sstatus->hp/10 + 35);
wd.damage2 = 0;
status_set_hp(src, 1, 0);
break;
@ -1781,11 +1805,10 @@ static struct Damage battle_calc_weapon_attack(
skillratio /= 12-3*skill;
ATK_ADDRATE(skillratio);
}
// Added Tobidougu bonus on throwing weapon ninja skills if not wearing a Fuuma shuriken (bonus already added in battle_addmastery)
if ((skill_num == NJ_SYURIKEN || skill_num == NJ_KUNAI) &&
sd->status.weapon != W_HUUMA &&
(skill = pc_checkskill(sd,NJ_TOBIDOUGU)) > 0)
if (skill_num == NJ_SYURIKEN && (skill = pc_checkskill(sd,NJ_TOBIDOUGU)) > 0)
ATK_ADD(3*skill);
if (skill_num == NJ_KUNAI)
ATK_ADD(60);
}
} //Here ends flag.hit section, the rest of the function applies to both hitting and missing attacks
else if(wd.div_ < 0) //Since the attack missed...
@ -2098,7 +2121,6 @@ struct Damage battle_calc_magic_attack(
struct map_session_data *sd, *tsd;
struct Damage ad;
struct status_change *tsc;
struct status_data *sstatus = status_get_status_data(src);
struct status_data *tstatus = status_get_status_data(target);
struct {
@ -2212,8 +2234,6 @@ struct Damage battle_calc_magic_attack(
//Adds an absolute value to damage. 100 = +100 damage
#define MATK_ADD( a ) { ad.damage+= a; }
tsc= status_get_sc(target); // used for NJ_SUITON increasing NJ_HYOUSENSOU damages
switch (skill_num)
{ //Calc base damage according to skill
case AL_HEAL:
@ -2321,27 +2341,19 @@ struct Damage battle_calc_magic_attack(
skillratio -= 10;
break;
case NJ_KAENSIN:
skillratio -= 40; // extrapolation from a vid (seems correct +/- 10%)
skillratio -= 50;
break;
case NJ_BAKUENRYU:
skillratio += 50*(skill_lv-1); // recorrected after calculation from vids
break;
case NJ_HYOUSENSOU:
skillratio -= 30;
if (tsc && tsc->data[SC_SUITON].timer != -1)
skillratio += tsc->data[SC_SUITON].val4;
skillratio += 50*(skill_lv-1);
break;
case NJ_HYOUSYOURAKU:
skillratio += 50*skill_lv; // recorrected after calculation from vids
break;
case NJ_HUUJIN:
skillratio += 50 + 50*skill_lv; // extrapolation from a vid (unsure)
skillratio += 50*skill_lv;
break;
case NJ_RAIGEKISAI:
skillratio += 60 + 40*skill_lv; // idem
skillratio += 60 + 40*skill_lv;
break;
case NJ_KAMAITACHI:
skillratio += 100*skill_lv; // idem
skillratio += 100*skill_lv;
break;
}
@ -2621,8 +2633,8 @@ struct Damage battle_calc_misc_attack(
pc_payzeny(sd, md.damage);
}
if(is_boss(target) || tsd)
md.damage=md.damage*60/100;
if(is_boss(target) || tsd || map_flag_gvg2(target->m))
md.damage=md.damage/3;
break;
case GS_FLING:
md.damage = sd?sd->status.job_level:status_get_lv(src);
@ -2947,13 +2959,6 @@ int battle_weapon_attack( struct block_list *src,struct block_list *target,
return 0;
}
}
if (tsc->data[SC_UTSUSEMI].timer != -1) {
clif_specialeffect(target, 462, AREA);
skill_blown (src, target, tsc->data[SC_UTSUSEMI].val3);
if (--tsc->data[SC_UTSUSEMI].val2 <= 0)
status_change_end(target, SC_UTSUSEMI, -1);
return 0;
}
}
//Recycled the damage variable rather than use a new one... [Skotlex]
if(sd && (damage = pc_checkskill(sd,MO_TRIPLEATTACK)) > 0)

View File

@ -2834,8 +2834,15 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
status_change_end(src,SC_BLADESTOP,-1);
break;
case NJ_ISSEN:
if (sc) {
if (sc->data[SC_NEN].timer != -1)
status_change_end(src,SC_NEN,-1);
if (sc->data[SC_HIDING].timer != -1)
status_change_end(src,SC_HIDING,-1);
}
case MO_EXTREMITYFIST:
if (sc)
if (sc && skillid == MO_EXTREMITYFIST)
{
if (sc->data[SC_EXPLOSIONSPIRITS].timer != -1)
status_change_end(src, SC_EXPLOSIONSPIRITS, -1);
@ -2847,13 +2854,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
struct unit_data *ud = unit_bl2ud(src);
short dx,dy;
int i,speed;
i = skillid == MO_EXTREMITYFIST?1:2; //Move 2 cells for Issen, 1 for Asura
dx = bl->x - src->x;
dy = bl->y - src->y;
if (dx < 0) dx--;
else if (dx > 0) dx++;
if (dy < 0) dy--;
else if (dy > 0) dy++;
if (dx < 0) dx-=i;
else if (dx > 0) dx+=i;
if (dy < 0) dy-=i;
else if (dy > 0) dy+=i;
if (!dx && !dy) dy++;
if (map_getcell(src->m, src->x+dx, src->y+dy, CELL_CHKNOPASS))
{
@ -3151,23 +3158,19 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break;
case NJ_KASUMIKIRI:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
sc_start(src,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv));
if (skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag) > 0)
sc_start(src,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv));
break;
case NJ_KIRIKAGE:
{
int dir = map_calc_dir(src,bl->x,bl->y);
short x, y;
map_search_freecell(bl, 0, &x, &y, 1, 1, 0);
status_change_end(src, SC_HIDING, -1);
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (unit_movepos(src, bl->x - dirx[dir], bl->y - diry[dir], 0, 0))
if (unit_movepos(src, x, y, 0, 0))
clif_slide(src,src->x,src->y);
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
}
break;
case NJ_ISSEN:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
if (sc && sc->data[SC_NEN].timer != -1)
status_change_end(src,SC_NEN,-1);
break;
case 0:
if(sd) {
if (flag & 3){
@ -6089,7 +6092,6 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
case NJ_SHADOWJUMP:
{
unit_movepos(src, x, y, 1, 0);
unit_setdir(src, (unit_getdir(src) + 4)%8);
clif_slide(src,x,y);
if (sc && sc->data[SC_HIDING].timer != -1)
@ -8304,6 +8306,10 @@ int skill_check_condition (struct map_session_data *sd, int skill, int lv, int t
break;
case NJ_ISSEN:
if (status->hp < 2) {
clif_skill_fail(sd,skill,0,0);
return 0;
}
case NJ_BUNSINJYUTSU:
if (!sc || sc->data[SC_NEN].timer==-1) {
clif_skill_fail(sd,skill,0,0);
@ -9307,15 +9313,16 @@ int skill_landprotector (struct block_list *bl, va_list ap)
case SA_VOLCANO:
case SA_DELUGE:
case SA_VIOLENTGALE:
case NJ_SUITON:
case NJ_KAENSIN:
// Suiton/Kaensin CAN super-impose on each another.
// case NJ_SUITON:
// case NJ_KAENSIN:
switch (unit->group->skill_id)
{ //These cannot override each other.
case SA_VOLCANO:
case SA_DELUGE:
case SA_VIOLENTGALE:
case NJ_SUITON:
case NJ_KAENSIN:
// case NJ_SUITON:
// case NJ_KAENSIN:
(*alive) = 0;
return 1;
}

View File

@ -1060,7 +1060,8 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
{
if(!skill_num && !(status->mode&MD_BOSS) && tsc->data[SC_TRICKDEAD].timer != -1)
return 0;
if(skill_num == WZ_STORMGUST && tsc->data[SC_FREEZE].timer != -1)
if((skill_num == WZ_STORMGUST || skill_num == NJ_HYOUSYOURAKU)
&& tsc->data[SC_FREEZE].timer != -1)
return 0;
if(skill_num == PR_LEXAETERNA && (tsc->data[SC_FREEZE].timer != -1 || (tsc->data[SC_STONE].timer != -1 && tsc->opt1 == OPT1_STONE)))
return 0;
@ -4923,33 +4924,14 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
val2 = 0;
break;
case SC_SUITON:
val2 = 0; //Agi penalty
val2 = 0; //Agi penalty
val3 = 0; //Walk speed penalty
val4 = 2*val1; //NJ_HYOUSENSOU damage bonus.
if (status_get_class(bl) == JOB_NINJA || ( bl->type == BL_PC && !map_flag_vs(bl->m)) )
if (status_get_class(bl) == JOB_NINJA ||
(sd && !map_flag_vs(bl->m)))
break;
else {
val3 = 50;
switch ((val1+1)/3) {
case 3:
val2 = 8;
break;
case 2:
val2 = 5;
break;
case 1:
val2 = 3;
break;
case 0:
val2 = 0;
break;
default:
val2 = 3*((val1+1)/3);
break;
}
}
val3 = 50;
val2 = 3*((val1+1)/3);
if (val1 > 4) val2--;
break;
case SC_ONEHAND:
case SC_TWOHANDQUICKEN:
@ -6788,7 +6770,7 @@ int status_change_timer_sub(struct block_list *bl, va_list ap )
case SC_SIGHTBLASTER:
if (battle_check_target( src, bl, BCT_ENEMY ) > 0 &&
status_check_skilluse(src, bl, WZ_SIGHTBLASTER, 2))
{
{
skill_attack(BF_MAGIC,src,src,bl,WZ_SIGHTBLASTER,1,tick,0);
if (sc) sc->data[type].val2 = 0; //This signals it to end.
}