diff --git a/src/map/battle.c b/src/map/battle.c index 84df6be4c7..d6e6acfd28 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -3625,21 +3625,23 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s break; case TK_DOWNKICK: case TK_STORMKICK: - skillratio += 60 + 20 * skill_lv + 10 * pc_checkskill(sd,TK_RUN); //+Dmg (to Kick skills, %) + skillratio += 60 + 20 * skill_lv; break; case TK_TURNKICK: case TK_COUNTER: - skillratio += 90 + 30 * skill_lv + 10 * pc_checkskill(sd,TK_RUN); + skillratio += 90 + 30 * skill_lv; break; case TK_JUMPKICK: - skillratio += -70 + 10 * skill_lv + 10 * pc_checkskill(sd,TK_RUN); + //Different damage formulas depending on damage trigger if (sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == skill_id) - skillratio += 10 * status_get_lv(src) / 3; //Tumble bonus - if (wd.miscflag) { - skillratio += 10 * status_get_lv(src) / 3; //Running bonus (TODO: What is the real bonus?) - if (sc && sc->data[SC_SPURT]) // Spurt bonus + skillratio += -100 + 4 * status_get_lv(src); //Tumble formula [4%*baselevel] + else if (wd.miscflag) { + skillratio += -100 + 4 * status_get_lv(src); //Running formula [4%*baselevel] + if (sc && sc->data[SC_SPURT]) //Spurt formula [8%*baselevel] skillratio *= 2; } + else + skillratio += -70 + 10 * skill_lv; break; case GS_TRIPLEACTION: skillratio += 50 * skill_lv; @@ -5375,19 +5377,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl case TK_STORMKICK: case TK_TURNKICK: case TK_COUNTER: - case TK_JUMPKICK: - if(sd && pc_checkskill(sd,TK_RUN)) { - uint8 i; - uint16 skill = pc_checkskill(sd,TK_RUN); - - switch(skill) { - case 1: case 4: case 7: case 10: i = 1; break; - case 2: case 5: case 8: i = 2; break; - default: i = 0; break; - } - if(sd->weapontype1 == W_FIST && sd->weapontype2 == W_FIST) - ATK_ADD(wd.damage, wd.damage2, 10 * skill - i); - } + if(sd && sd->weapontype1 == W_FIST && sd->weapontype2 == W_FIST) + ATK_ADD(wd.damage, wd.damage2, 10 * pc_checkskill(sd, TK_RUN)); break; case SR_TIGERCANNON: // (Tiger Cannon skill level x 240) + (Target Base Level x 40) diff --git a/src/map/map.c b/src/map/map.c index a385d5aae9..c7e326b3b8 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -2033,6 +2033,7 @@ int map_quit(struct map_session_data *sd) { status_change_end(&sd->bl, SC_READYDOWN, INVALID_TIMER); status_change_end(&sd->bl, SC_READYTURN, INVALID_TIMER); status_change_end(&sd->bl, SC_READYCOUNTER, INVALID_TIMER); + status_change_end(&sd->bl, SC_DODGE, INVALID_TIMER); status_change_end(&sd->bl, SC_CBC, INVALID_TIMER); status_change_end(&sd->bl, SC_EQC, INVALID_TIMER); status_change_end(&sd->bl, SC_SPRITEMABLE, INVALID_TIMER); diff --git a/src/map/skill.c b/src/map/skill.c index 7a837fd458..7347bc8ffb 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2695,7 +2695,7 @@ int skill_is_combo(uint16 skill_id) { /* * Combo handler, start stop combo status */ -void skill_combo_toogle_inf(struct block_list* bl, uint16 skill_id, int inf){ +void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int inf){ TBL_PC *sd = BL_CAST(BL_PC, bl); switch (skill_id) { case MH_MIDNIGHT_FRENZY: diff --git a/src/map/skill.h b/src/map/skill.h index e302fc61e5..6e6cd6b95c 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -2134,7 +2134,7 @@ int skill_changematerial(struct map_session_data *sd, int n, unsigned short *ite int skill_get_elemental_type(uint16 skill_id, uint16 skill_lv); int skill_is_combo(uint16 skill_id); -void skill_combo_toogle_inf(struct block_list* bl, uint16 skill_id, int inf); +void skill_combo_toggle_inf(struct block_list* bl, uint16 skill_id, int inf); void skill_combo(struct block_list* src,struct block_list *dsrc, struct block_list *bl, uint16 skill_id, uint16 skill_lv, int tick); void skill_reveal_trap_inarea(struct block_list *src, int range, int x, int y); diff --git a/src/map/status.c b/src/map/status.c index ddf75dd607..d804a85968 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -11314,19 +11314,23 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_COMBO: switch(sce->val1) { case TK_STORMKICK: + skill_combo_toggle_inf(bl, TK_JUMPKICK, 0); clif_skill_nodamage(bl,bl,TK_READYSTORM,1,1); break; case TK_DOWNKICK: + skill_combo_toggle_inf(bl, TK_JUMPKICK, 0); clif_skill_nodamage(bl,bl,TK_READYDOWN,1,1); break; case TK_TURNKICK: + skill_combo_toggle_inf(bl, TK_JUMPKICK, 0); clif_skill_nodamage(bl,bl,TK_READYTURN,1,1); break; case TK_COUNTER: + skill_combo_toggle_inf(bl, TK_JUMPKICK, 0); clif_skill_nodamage(bl,bl,TK_READYCOUNTER,1,1); break; - default: // Rest just toogle inf to enable autotarget - skill_combo_toogle_inf(bl,sce->val1,INF_SELF_SKILL); + default: // Rest just toggle inf to enable autotarget + skill_combo_toggle_inf(bl,sce->val1,INF_SELF_SKILL); break; } break; @@ -11840,7 +11844,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const } break; case SC_COMBO: - skill_combo_toogle_inf(bl,sce->val1,0); + skill_combo_toggle_inf(bl,sce->val1,0); break; case SC_MARIONETTE: case SC_MARIONETTE2: // Marionette target