That fix don't work, don't use it  ( to Viet Nam cái mã nguồn trên up là bị thiếu và lỗi tùm lum anh em sài cách fix sau đây dễ và ngon hơn )
in source main of EMU
STEP 1: in file Protocol.cpp  go to void GCCharacterInfoRecv(PMSG_CHARACTER_INFO_RECV* lpMsg) // OK
we see
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F)); 
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }
we delete it or change to
   /*switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:// Neu day la MG da duoc Fix lai trong ham void User::Refresh()   User.cpp
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F)); 
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }*/
STEP 2: go to User.cpp we see void User::Refresh()
we see
   if (gObjUser.GetActiveSkill() == 261 || gObjUser.GetActiveSkill() == 552 || gObjUser.GetActiveSkill() == 555)
   {
         //lpPlayer->AttackSpeed = (WORD)10;
         //lpPlayer->MagicSpeed = (WORD)10;
      //SetOp((LPVOID)0x007801AC, (LPVOID)lpPlayer->AttackSpeed, ASM::CALL);
      SetDouble(&pFrameSpeed1, 0.0004000);
      SetDouble(&pFrameSpeed2, 0.0002000);
   }
   else
   {
      SetDouble(&pFrameSpeed1, 0.0040000);
      SetDouble(&pFrameSpeed2, 0.0020000);
            
   }
/////////  we add code herre ////////////
and we add 
   switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
   {
      case 0:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 1:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DKMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
      case 2:
         SetByte(0x00556C38,((gProtect.m_MainInfo.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 3:
         if (gObjUser.GetActiveSkill() == 55)// 55 chem lua 56 la vay kiem run
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x11:0x0F));
         }
         else
         {
            SetByte(0x00556C38,((gProtect.m_MainInfo.MGMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         }
         break;
      case 4:
         SetByte(0x00556C38,((gProtect.m_MainInfo.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
         break;
      case 5:
         SetByte(0x00556C38,((gProtect.m_MainInfo.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F)); 
         break;
      case 6:
         SetByte(0x00556C38,((gProtect.m_MainInfo.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
         break;
   }