From 3241a51ac2689e7ffa63e01bf9e81ec08d0b0187 Mon Sep 17 00:00:00 2001 From: Vicious Date: Thu, 9 Mar 2006 18:39:57 +0000 Subject: more ninja/gs update git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5535 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/battle.c | 9 ++++++--- src/map/skill.c | 42 ++++++++++++++++++++++++++++++++---------- src/map/skill.h | 1 + src/map/status.c | 15 ++++++++++----- 4 files changed, 49 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/map/battle.c b/src/map/battle.c index 4fc5fb72f..992ed62e3 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1256,10 +1256,12 @@ static struct Damage battle_calc_weapon_attack( case NJ_SYURIKEN: case NJ_KUNAI: case NJ_HUUMA: + wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG; flag.arrow = 1; break; case GS_MAGICALBULLET: + wd.flag=(wd.flag&~BF_RANGEMASK)|BF_LONG; flag.arrow = 0; break; } @@ -2267,8 +2269,9 @@ static struct Damage battle_calc_weapon_attack( wd.div_=skill_get_num(TF_DOUBLE,skill_lv?skill_lv:1); wd.type = 0x08; } - } else if (( (skill_lv = 5*pc_checkskill(sd,GS_CHAINACTION)) > 0 && sd->weapontype1 == 0x11) || - sd->double_rate > 0) // Copied double attack + } else if (( (skill_lv = 5*pc_checkskill(sd,GS_CHAINACTION)) > 0 && + (sd->weapontype1 == 0x11 || sd->weapontype1 == 0x12 || sd->weapontype1 == 0x13 + || sd->weapontype1 == 0x14 || sd->weapontype1 == 0x15)) || sd->double_rate > 0) // Copied double attack if (rand()%100 < (skill_lv>sd->double_rate?skill_lv:sd->double_rate)) { wd.damage *=2; @@ -2946,7 +2949,7 @@ struct Damage battle_calc_misc_attack( break; case NJ_ZENYNAGE: damage=1000*skill_lv; - if(skill_lv == 0) damage -= 1; + if(skill_lv == 10) damage -= 1; if(map_flag_vs(bl->m) || is_boss(bl)) damage=damage/2; //temp value break; diff --git a/src/map/skill.c b/src/map/skill.c index f06e3d860..72865d9c0 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -3102,7 +3102,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s case GS_RAPIDSHOWER: case GS_DUST: case GS_FULLBUSTER: - case GS_SPREADATTACK: + case NJ_SYURIKEN: case NJ_KUNAI: case NJ_HUUMA: @@ -3112,6 +3112,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s //race check skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); break; + case GS_DESPERADO: + clif_skill_nodamage(src,bl,skillid,skilllv,1); + map_foreachinrange(skill_attack_area, src, + skill_get_splash(skillid, skilllv), BL_CHAR, + BF_WEAPON, src, src, skillid, skilllv, tick, flag, BCT_ENEMY); + break; + case GS_SPREADATTACK: + map_foreachinrange(skill_area_sub, bl, + skill_get_splash(skillid, skilllv),BL_CHAR, + src,skillid,skilllv,tick, flag|BCT_ENEMY|1, + skill_castend_damage_id); + break; case NJ_ZENYNAGE: skill_attack(BF_MISC,src,src,bl,skillid,skilllv,tick,flag); break; @@ -3124,13 +3136,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); break; case NJ_KOUENKA: - case NJ_BAKUENRYU: case NJ_HYOUSENSOU: case NJ_HYOUSYOURAKU: case NJ_HUUJIN: case NJ_RAIGEKISAI: skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); break; + case NJ_KAMAITACHI: + // Does it stop if touch an obstacle? it shouldn't shoot trough walls + 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); // varargs + break; //Not implemented yet [Vicious] case GS_FLING: //case GS_TRIPLEACTION: @@ -3141,7 +3158,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s case GS_DISARM: //case GS_PIERCINGSHOT: //case GS_RAPIDSHOWER: - case GS_DESPERADO: + //case GS_DESPERADO: //case GS_DUST: //case GS_FULLBUSTER: //case GS_SPREADATTACK: @@ -3156,12 +3173,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl,int s //case NJ_KIRIKAGE: //case NJ_KOUENKA: case NJ_KAENSIN: - //case NJ_BAKUENRYU: //case NJ_HYOUSENSOU: //case NJ_HYOUSYOURAKU: //case NJ_HUUJIN: //case NJ_RAIGEKISAI: - case NJ_KAMAITACHI: + //case NJ_KAMAITACHI: case NJ_ISSEN: skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); break; @@ -5688,6 +5704,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in clif_skill_nodamage(src,bl,skillid,skilllv,1); if(rand()%100 < (50+10*skilllv)) pc_addspiritball(sd,skill_get_time(skillid,skilllv),skilllv); + else if(sd->spiritball > 0) + pc_delspiritball(sd,1,0); } break; case GS_MADNESSCANCEL: @@ -6073,6 +6091,7 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil case SA_DELUGE: /* ƒfƒŠƒ…?ƒW */ case SA_VIOLENTGALE: /* ƒoƒCƒIƒŒƒ“ƒgƒQƒCƒ‹ */ case SA_LANDPROTECTOR: /* ƒ‰ƒ“ƒhƒvƒ?ƒeƒNƒ^? */ + case NJ_SUITON: skill_unitsetting(src,skillid,skilllv,x,y,0); break; @@ -6251,6 +6270,7 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil //Until they're at right position - gs_unit- [Vicious] case NJ_KAENSIN: + case NJ_BAKUENRYU: case NJ_HYOUSYOURAKU: case NJ_RAIGEKISAI: skill_unitsetting(src,skillid,skilllv,x,y,0); @@ -6760,6 +6780,7 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int case UNT_VOLCANO: case UNT_DELUGE: case UNT_VIOLENTGALE: + case UNT_SUITON: if(sc && sc->data[type].timer==-1) sc_start4(bl,type,100,sg->skill_lv,sg->group_id,0,0, skill_get_time2(sg->skill_id,sg->skill_lv)); @@ -7286,6 +7307,7 @@ static int skill_unit_onleft(int skill_id, struct block_list *bl,unsigned int ti case SA_VIOLENTGALE: case CG_HERMODE: case HW_GRAVITATION: + case NJ_SUITON: if (sc && sc->data[type].timer != -1) status_change_end(bl, type, -1); break; @@ -8194,7 +8216,7 @@ int skill_check_condition(struct map_session_data *sd,int type) } break; case GS_ADJUSTMENT: - if(sd->sc.data[SC_MADNESSCANCEL].timer == -1) { + if(sd->spiritball < 2 || sd->sc.data[SC_MADNESSCANCEL].timer == -1) { clif_skill_fail(sd,skill,0,0); return 0; } @@ -8349,7 +8371,7 @@ int skill_check_condition(struct map_session_data *sd,int type) case ST_WATER: //?…?ê”»’è //(!map[sd->bl.m].flag.rain) && //they have removed RAIN effect. [Lupus] - if ( (sd->sc.data[SC_DELUGE].timer == -1) && + if ( (sd->sc.data[SC_DELUGE].timer == -1 || sd->sc.data[SC_SUITON].timer == -1) && (!map_getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKWATER))) { clif_skill_fail(sd,skill,0,0); @@ -9568,7 +9590,7 @@ int skill_clear_element_field(struct block_list *bl) for (i=0;iskillunit[i].skill_id; - if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR) + if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR||skillid==NJ_SUITON) return &sd->skillunit[i]; }else if(md){ skillid=md->skillunit[i].skill_id; - if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR) + if(skillid==SA_DELUGE||skillid==SA_VOLCANO||skillid==SA_VIOLENTGALE||skillid==SA_LANDPROTECTOR||skillid==NJ_SUITON) return &md->skillunit[i]; } } diff --git a/src/map/skill.h b/src/map/skill.h index bd40a8382..141d465a5 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -928,6 +928,7 @@ enum { UNT_HERMODE, UNT_KAENSIN, + UNT_SUITON, }; diff --git a/src/map/status.c b/src/map/status.c index 2d8080811..1142f6810 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -281,10 +281,10 @@ void initChangeTables(void) { //Until they're at right position - gs_set_sc- [Vicious] / some of these don't seem to have a status icon adequate [blackhole89] set_sc(GS_MADNESSCANCEL, SC_MADNESSCANCEL, SI_MADNESSCANCEL); set_sc(GS_ADJUSTMENT, SC_ADJUSTMENT, SI_ADJUSTMENT); - set_sc(GS_INCREASING, SC_INCREASING, SI_BLANK); + set_sc(GS_INCREASING, SC_INCREASING, SI_ACCURACY); set_sc(GS_GATLINGFEVER, SC_GATLINGFEVER, SI_GATLINGFEVER); set_sc(NJ_TATAMIGAESHI, SC_TATAMIGAESHI, SI_BLANK); - set_sc(NJ_UTSUSEMI, SC_UTSUSEMI, SI_BLANK); + set_sc(NJ_UTSUSEMI, SC_UTSUSEMI, SI_MAEMI); set_sc(NJ_KAENSIN, SC_KAENSIN, SI_BLANK); set_sc(NJ_SUITON, SC_SUITON, SI_BLANK); set_sc(NJ_NEN, SC_NEN, SI_NEN); @@ -1721,6 +1721,9 @@ int status_calc_agi(struct block_list *bl, int agi) agi -= 2 + sc->data[SC_DECREASEAGI].val1; if(sc->data[SC_QUAGMIRE].timer!=-1) agi -= sc->data[SC_QUAGMIRE].val1*(bl->type==BL_PC?5:10); + int class = status_get_class(bl); + if(sc->data[SC_SUITON].timer!=-1 || class != JOB_NINJA) + agi -= (((sc->data[SC_SUITON].val1 - 1) / 3) + 1) * 3; } return agi; @@ -1992,7 +1995,7 @@ int status_calc_flee(struct block_list *bl, int flee) if(sc->data[SC_ADJUSTMENT].timer!=-1) flee += 30; if(sc->data[SC_GATLINGFEVER].timer!=-1) - flee -= sc->data[SC_GATLINGFEVER].val2*5; + flee -= sc->data[SC_GATLINGFEVER].val1*5; } if (bl->type == BL_PC && map_flag_gvg(bl->m)) //GVG grounds flee penalty, placed here because it's "like" a status change. [Skotlex] @@ -2230,7 +2233,7 @@ int status_calc_aspd_rate(struct block_list *bl, int aspd_rate) if(sc->data[SC_MADNESSCANCEL].timer!=-1) aspd_rate -= 20; if(sc->data[SC_GATLINGFEVER].timer!=-1) - aspd_rate -= sc->data[SC_GATLINGFEVER].val2*2; + aspd_rate -= sc->data[SC_GATLINGFEVER].val1*2; } return aspd_rate; @@ -3854,6 +3857,9 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val calc_flag = 1; val3 = val1*3; break; + case SC_SUITON: + calc_flag = 1; + break; case SC_SPEARSQUICKEN: /* ƒXƒsƒAƒNƒCƒbƒPƒ“ */ calc_flag = 1; @@ -4449,7 +4455,6 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val calc_flag = 1; break; case SC_UTSUSEMI: - case SC_SUITON: case SC_NEN: break; -- cgit v1.2.3-70-g09d2