Originally posted by [b]J.L.[/b]
http://www.eathena.ws/board/index.php?autocom=bugtracker&showbug=2140
For example when combo occur on TK_COUNTER status SC_COMBO is acquired for a time 2000 - 4*sstatus->agi - 2*sstatus->dex
trunk\src\map\skill.c
CODE
sc_start4(src,SC_COMBO, rate, TK_COUNTER, bl->id,0,0,
(2000 - 4*sstatus->agi - 2*sstatus->dex));
When status has acquired it is impossible to attack for a time tick = 2000 - 4*sstatus->agi - 2*sstatus->dex
trunk\src\map\status.c
CODE
case SC_COMBO:
{
...
if (ud && !val3)
{
ud->attackabletime = gettick()+tick;
unit_set_walkdelay(bl, gettick(), tick, 1);
}
If the right skill for combo was used then unit_cancel_combo(&sd->bl) is not occur and after combo tkboy can not strike the rest time of tick = 2000 - 4*sstatus->agi - 2*sstatus->dex
trunk\src\map\skill.c
CODE
if(sc->data[SC_COMBO]->val1 != skill)
{ //Cancel combo wait.
unit_cancel_combo(&sd->bl);
return 0;
}
unit_cancel_combo(&sd->bl) is required after usage of combo-strike;
trunk\src\map\skill.c
CODE
case TK_TURNKICK:
case TK_STORMKICK:
case TK_DOWNKICK:
case TK_COUNTER:
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER)
return 0; //Anti-Soul Linker check in case you job-changed with Stances active.
if(!(sc && sc->data[SC_COMBO]))
return 0; //Combo needs to be ready
if (pc_famerank(sd->status.char_id,MAPID_TAEKWON))
{ //Unlimited Combo
if (skill == sd->skillid_old) {
status_change_end(&sd->bl, SC_COMBO, -1);
sd->skillid_old = sd->skilllv_old = 0;
return 0; //Can't repeat previous combo skill.
}
break;
}
if(sc->data[SC_COMBO]->val1 != skill)
{ //Cancel combo wait.
unit_cancel_combo(&sd->bl);
return 0;
}
unit_cancel_combo(&sd->bl); //HERE
break; //Combo ready.
or
trunk\src\map\skill.c
CODE
int flag = 0; //Used to signal if this skill can be combo'ed later on.
if (sd->sc.data[SC_COMBO])
{ //End combo state after skill is invoked. [Skotlex]
switch (skillid) {
case TK_TURNKICK:
case TK_STORMKICK:
case TK_DOWNKICK:
case TK_COUNTER:
if (pc_famerank(sd->status.char_id,MAPID_TAEKWON))
{ //Extend combo time.
sd->skillid_old = skillid; //Set as previous so you can't repeat
sd->skilllv_old = skilllv;
sd->sc.data[SC_COMBO]->val1 = skillid; //Update combo-skill
delete_timer(sd->sc.data[SC_COMBO]->timer, status_change_timer);
sd->sc.data[SC_COMBO]->timer = add_timer(
tick+sd->sc.data[SC_COMBO]->val4,
status_change_timer, src->id, SC_COMBO);
break;
}
unit_cancel_combo(&sd->bl); //HERE
break;
default:
status_change_end(src,SC_COMBO,-1);
}
This post has been edited by J.L.: Aug 28 2008, 04:55 AM