Taekwon Kick Damage, Sprint, Flying Kick (fixes #1991)

* Taekwon Kicks no longer get a percentual damage increase from learning Sprint
* Counter Kick, Heel Drop, Storm Kick and Counter Kick now get a +10 ATK bonus per level of Sprint
-- This bonus is on top of the normal +10 ATK bonus from Sprint for fists
* Using Flying Kick as a counter will now deal 4%*baselevel damage
* Using Flying Kick while running will now deal 4%*baselevel damage regardless of skill level used
-- When having the spurt buff on top, it will deal 8%*baselevel damage instead
* Tumbling is now properly removed on logout
* Fixed a problem that sometimes caused Tumbling to become unusable
This commit is contained in:
Playtester 2017-03-02 21:23:33 +01:00
parent da23d877d1
commit 40f6b7f44a
5 changed files with 21 additions and 25 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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:

View File

@ -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);

View File

@ -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