summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/battle.c18
-rw-r--r--src/map/skill.c22
-rw-r--r--src/map/status.c10
3 files changed, 38 insertions, 12 deletions
diff --git a/src/map/battle.c b/src/map/battle.c
index f2613b98b..a0ef681a1 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -2323,7 +2323,7 @@ struct Damage battle_calc_magic_attack(
skillratio -= 10;
break;
case NJ_BAKUENRYU:
- skillratio += 50*(skill_lv-1);
+ skillratio += 150 + 150*skill_lv; // It has to be MATK +(150+150*SkillLV)% so 1000% at lvl 5, not 900%. Damage is not increased by hits.
break;
case NJ_HYOUSENSOU:
skillratio -= 30;
@@ -2331,13 +2331,13 @@ struct Damage battle_calc_magic_attack(
skillratio += sc->data[SC_SUITON].val4;
break;
case NJ_HYOUSYOURAKU:
- skillratio += 50*skill_lv;
+ skillratio += 100+50*skill_lv; // correct formula (MATK + 350% = 450% at level 5) (kRO and unofficial descriptions)
break;
case NJ_RAIGEKISAI:
- skillratio += 60 + 40*skill_lv;
+ skillratio += 160 + 40*skill_lv; // idem
break;
case NJ_KAMAITACHI:
- skillratio += 100*skill_lv;
+ skillratio += 100 + 100*skill_lv; // idem
break;
}
@@ -2603,9 +2603,10 @@ struct Damage battle_calc_misc_attack(
if (tsd) md.damage>>=1;
break;
case NJ_ZENYNAGE:
- md.damage = skill_get_zeny(skill_num ,skill_lv)/2;
+ md.damage = skill_get_zeny(skill_num ,skill_lv);
if (!md.damage) md.damage = 2;
md.damage = md.damage + rand()%md.damage;
+
if(is_boss(target))
md.damage=md.damage*60/100;
break;
@@ -2695,7 +2696,12 @@ struct Damage battle_calc_misc_attack(
if (map_flag_gvg(target->m))
md.damage=battle_calc_gvg_damage(src,target,md.damage,md.div_,skill_num,skill_lv,md.flag);
- if ( sd && md.damage && skill_num == NJ_ZENYNAGE ) pc_payzeny(sd, md.damage); // conso zenys at the end of the calculation I think
+ if ( sd && md.damage && skill_num == NJ_ZENYNAGE )
+ {
+ if ( md.damage > sd->status.zeny )
+ md.damage=sd->status.zeny;
+ pc_payzeny(sd, md.damage);
+ }
return md;
}
diff --git a/src/map/skill.c b/src/map/skill.c
index 9c396eb1d..a1f02e31a 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -2748,7 +2748,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
//line of sight between caster and target.
map_foreachinpath (skill_attack_area,src->m,src->x,src->y,bl->x,bl->y,
skill_get_splash(skillid, skilllv),BL_CHAR,
- BF_WEAPON,src,src,skillid,skilllv,tick,flag,BCT_ENEMY);
+ BF_MAGIC,src,src,skillid,skilllv,tick,flag,BCT_ENEMY);
break;
case MO_INVESTIGATE:
@@ -2836,7 +2836,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
case MC_CARTREVOLUTION:
case NPC_SPLASHATTACK:
case AC_SHOWER: //Targetted skill implementation.
- case NJ_BAKUENRYU:
if(flag&1){
if(bl->id!=skill_area_temp[1]){
skill_attack(skill_get_type(skillid),src,src,bl,skillid,skilllv,tick,
@@ -3183,6 +3182,21 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_castend_damage_id);
}
break;
+ case NJ_BAKUENRYU:
+ if (flag & 1) {
+ skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
+ } else {
+ clif_skill_nodamage(src,bl,skillid,skilllv,1);
+ skill_area_temp[0] = 0;
+ map_foreachinrange(skill_area_sub, bl,
+ skill_get_splash(skillid, skilllv), BL_CHAR,
+ src, skillid, skilllv, tick, BCT_ENEMY, skill_area_sub_count);
+ map_foreachinrange(skill_area_sub, bl,
+ skill_get_splash(skillid, skilllv), BL_CHAR,
+ src, skillid, skilllv, tick, BCT_ENEMY|1,
+ skill_castend_damage_id);
+ }
+ 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));
@@ -6055,10 +6069,12 @@ int skill_castend_pos2 (struct block_list *src, int x, int y, int skillid, int s
case DC_FORTUNEKISS:
case DC_SERVICEFORYOU:
case GS_DESPERADO:
- case NJ_SUITON:
case NJ_KAENSIN:
+ case NJ_BAKUENRYU:
+ case NJ_SUITON:
case NJ_HYOUSYOURAKU:
case NJ_RAIGEKISAI:
+ case NJ_KAMAITACHI:
flag|=1;//Set flag to 1 to prevent deleting ammo (it will be deleted on group-delete).
case GS_GROUNDDRIFT: //Ammo should be deleted right away.
skill_unitsetting(src,skillid,skilllv,x,y,0);
diff --git a/src/map/status.c b/src/map/status.c
index b5298b92e..f572b6fe8 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -2967,7 +2967,7 @@ static unsigned short status_calc_agi(struct block_list *bl, struct status_chang
agi -= 2 + sc->data[SC_DECREASEAGI].val1;
if(sc->data[SC_QUAGMIRE].timer!=-1)
agi -= sc->data[SC_QUAGMIRE].val2;
- if(sc->data[SC_SUITON].timer!=-1)
+ if(sc->data[SC_SUITON].timer!=-1 && sc->data[SC_SUITON].val3) // does not affect players when not in PVP nor WoE. Does not affect Ninjas.
agi -= sc->data[SC_SUITON].val2;
if(sc->data[SC_MARIONETTE].timer!=-1)
agi -= (sc->data[SC_MARIONETTE].val3>>8)&0xFF;
@@ -4765,8 +4765,12 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
val2 = 0; //Agi penalty
val3 = 0; //Walk speed penalty
val4 = 2*val1; //NJ_HYOUSENSOU damage bonus.
- if (status_get_class(bl) != JOB_NINJA && !map_flag_vs(bl->m)) {
+
+ if (status_get_class(bl) == JOB_NINJA || ( bl->type == BL_PC && !map_flag_vs(bl->m)) )
+ break;
+ else {
val3 = 50;
+
switch ((val1+1)/3) {
case 3:
val2 = 8;
@@ -4784,7 +4788,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
val2 = 3*((val1+1)/3);
break;
}
- };
+ }
break;
case SC_ONEHAND:
case SC_TWOHANDQUICKEN: