Issue information

Issue ID
#2140
Status
Duplicate
Severity
None
Started
Hercules Elf Bot
Aug 28, 2008 11:52
Last Post
Hercules Elf Bot
Mar 5, 2012 16:43
Confirmation
N/A

Hercules Elf Bot - Aug 28, 2008 11:52

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