agi/speed bug

Results 1 to 6 of 6
  1. #1
    Apprentice gonliSs is offline
    MemberRank
    Dec 2009 Join Date
    11Posts

    agi/speed bug

    hi, do you know how i can fix agi bug? season 4 episode 2 1.03l i think it's not the client-side but server files
    my files http://forum.ragezone.com/f197/kgame...-90-gs-695816/


  2. #2
    Apprentice gonliSs is offline
    MemberRank
    Dec 2009 Join Date
    11Posts

    Re: agi/speed bug

    Any chance to fix this bug?

  3. #3

    Re: agi/speed bug

    So you know its server side, but where? if its in gameserver.exe (whic his probably) u will have to fix it by coding it, else find the sources and
    fix it and recompile it.

    i'd recommend other files like ia julia etc.

  4. #4
    Apprentice gonliSs is offline
    MemberRank
    Dec 2009 Join Date
    11Posts

    Re: agi/speed bug

    I don't if it is server side, just I think that. But if it is client side, is there a way to fix it?

  5. #5

    Re: agi/speed bug

    Well i dont know either, it might be even bug in main.exe but mostly its in gameserver.exe (server side)

  6. #6
    Yes please. Wortex is offline
    MemberRank
    Nov 2008 Join Date
    268Posts

    Re: agi/speed bug

    Agility or attack speed in other words is controlled by both the client and the server.
    To fix it, you have two choices: Edit player.bmd (which I have no clue as to what values to use) or code a hook which limits the attack speed number.

    This is a fix by NaM4 @ globalextreme:
    Client.cpp
    Code:
    #include "stdafx.h" 
    //--------------------------------------------------------------------------- 
     
    ObjUser gObjUser; 
    //--------------------------------------------------------------------------- 
     
    WORD Buff_Class; 
    short Buff_Dexterity; 
    int Buff_GameState; 
    short Buff_AttackSpeed; 
    //--------------------------------------------------------------------------- 
     
    void ObjUser::GetUserInfo() 
    { 
    _asm 
    { 
    mov esi, dword ptr ds:[oGameState] 
    mov Buff_GameState, esi 
    // ---- 
    mov esi, dword ptr ds:[oObjUser] 
    // ---- 
    mov dx, word ptr ds:[esi+oClass] 
    mov Buff_Class, dx 
    // ---- 
    mov dx, word ptr ds:[esi+oDexterity] 
    mov Buff_Dexterity, dx 
    // ---- 
    mov dx, word ptr ds:[esi+oAttackSpeed] 
    mov Buff_AttackSpeed, dx 
    } 
    // ---- 
    this->SetUserInfo(); 
    } 
    //--------------------------------------------------------------------------- 
     
    void ObjUser::SetUserInfo() 
    { 
    this->Class = Buff_Class; 
    this->Dexterity = Buff_Dexterity; 
    this->AttackSpeed = Buff_AttackSpeed; 
    // -- 
    this->GameState = Buff_GameState; 
    } 
    //--------------------------------------------------------------------------- 
     
    void ObjUser::SetSpeedFrame() 
    { 
    switch(this->Class) 
    { 
    case ObjClass::DarkWizard: // [29.05.2012] Complete 100% -> 32000 Stats 
    case ObjClass::SoulMaster: 
    case ObjClass::GrandMaster: 
    { 
    if( this->AttackSpeed >= 455 && this->AttackSpeed <= 479 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0024700); 
    } 
    else if( this->AttackSpeed >= 605 && this->AttackSpeed <= 636 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0019000); 
    } 
    else if( this->AttackSpeed >= 637 && this->AttackSpeed <= 668 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0018000); 
    } 
    else if( this->AttackSpeed >= 669 && this->AttackSpeed <= 688 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0017000); 
    } 
    else if( this->AttackSpeed >= 855 && this->AttackSpeed <= 1040 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0016300); 
    } 
    else if( this->AttackSpeed >= 1041 && this->AttackSpeed <= 1104 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0015500); 
    } 
    else if( this->AttackSpeed >= 1301 && this->AttackSpeed <= 1500 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0017500); 
    } 
    else if( this->AttackSpeed >= 1501 && this->AttackSpeed <= 1524 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0015000); 
    } 
    else if( this->AttackSpeed >= 1525 && this->AttackSpeed <= 1800 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0014500); 
    } 
    else if( this->AttackSpeed >= 1801 && this->AttackSpeed <= 1999 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0013000); 
    } 
    else if( this->AttackSpeed >= 2000 && this->AttackSpeed <= 2167 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0012500); 
    } 
    else if( this->AttackSpeed >= 2168 && this->AttackSpeed <= 2354 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0011500); 
    } 
    else if( this->AttackSpeed >= 2855 && this->AttackSpeed <= 3011 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0009000); 
    } 
    else if( this->AttackSpeed >= 3011 ) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0008000); 
    } 
    else
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    } 
    break; 
    // ---- 
    case ObjClass::DarkKnight: 
    case ObjClass::BladeKnight: 
    case ObjClass::BladeMaster: 
    { 
    SetFloat((PVOID)oFrameSpeed, 0.0040000); 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    break; 
    // ---- 
    case ObjClass::Elf: // [30.05.2012] Complete 100% -> 32000 Stats 
    case ObjClass::MuseElf: 
    case ObjClass::HightElf: 
    { 
    if( this->AttackSpeed >= 509 && this->AttackSpeed <= 549 ) 
    { 
    SetFloat((PVOID)oFrameSpeed, 0.0037000); 
    } 
    else
    { 
    SetFloat((PVOID)oFrameSpeed, 0.0040000); 
    } 
    } 
    break; 
    // ---- 
    case ObjClass::MagicGladiator: 
    case ObjClass::DuelMaster: 
    { 
    if(this->Dexterity >= 5700 && this->Dexterity <= 6550) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    else if(this->Dexterity >= 8200 && this->Dexterity <= 10700) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    else if(this->Dexterity >= 13250 && this->Dexterity <= 23250) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    else if(this->Dexterity >= 28250) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0006000); 
    } 
    else
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    } 
    break; 
    // ---- 
    case ObjClass::DarkLord: 
    case ObjClass::LordEmperor: 
    { 
    if(this->Dexterity >= 2000 && this->Dexterity < 4900) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0038000); 
    } 
    else if(this->Dexterity >= 4900 && this->Dexterity < 5050) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0037000); 
    } 
    else if(this->Dexterity >= 5050 && this->Dexterity < 5200) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0036000); 
    } 
    else if(this->Dexterity >= 5200 && this->Dexterity < 5350) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0035000); 
    } 
    else if(this->Dexterity >= 5350 && this->Dexterity < 5550) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0034000); 
    } 
    else if(this->Dexterity >= 5550 && this->Dexterity < 5700) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0033000); 
    } 
    else if(this->Dexterity >= 5700 && this->Dexterity < 5900) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0032000); 
    } 
    else if(this->Dexterity >= 5900 && this->Dexterity < 6100) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0031000); 
    } 
    else if(this->Dexterity >= 6100 && this->Dexterity < 6300) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0030000); 
    } 
    else if(this->Dexterity >= 6300 && this->Dexterity < 6500) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0029000); 
    } 
    else if(this->Dexterity >= 6500 && this->Dexterity < 6750) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0028000); 
    } 
    else if(this->Dexterity >= 6750 && this->Dexterity < 7000) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0027000); 
    } 
    else if(this->Dexterity >= 7000 && this->Dexterity < 7300) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0026000); 
    } 
    else if(this->Dexterity >= 7300 && this->Dexterity < 7600) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0025000); 
    } 
    else if(this->Dexterity >= 7600 && this->Dexterity < 7900) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0024000); 
    } 
    else if(this->Dexterity >= 7900 && this->Dexterity < 8250) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0023000); 
    } 
    else if(this->Dexterity >= 8250 && this->Dexterity < 8650) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0022000); 
    } 
    else if(this->Dexterity >= 8650 && this->Dexterity < 9050) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0021000); 
    } 
    else if(this->Dexterity >= 9050 && this->Dexterity < 9500) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0020000); 
    } 
    else if(this->Dexterity >= 9500 && this->Dexterity < 10000) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0019000); 
    } 
    else if(this->Dexterity >= 10000 && this->Dexterity < 10550) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0018000); 
    } 
    else if(this->Dexterity >= 10550 && this->Dexterity < 11150) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0017000); 
    } 
    else if(this->Dexterity >= 11150 && this->Dexterity < 11850) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0016000); 
    } 
    else if(this->Dexterity >= 11850 && this->Dexterity < 12600) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0015000); 
    } 
    else if(this->Dexterity >= 12600 && this->Dexterity < 13450) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0014000); 
    } 
    else if(this->Dexterity >= 13450 && this->Dexterity < 16600) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0010000); 
    } 
    else if(this->Dexterity >= 16600) 
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0008000); 
    } 
    else
    { 
    SetFloat((PVOID)oFrameSpeed2, 0.0040000); 
    } 
    } 
    break; 
    } 
    } 
    //---------------------------------------------------------------------------
    Client.h
    Code:
    #pragma once 
    //--------------------------------------------------------------------------- 
     
    #define oFrameSpeed 0x0088B700 // float[?] 
    #define oFrameSpeed2 0x0088B494 // float[?] 
    // ---- 
    #define oGameState 0x008D6F7C // -> int[4] => Need check, maybe short or byte 
    // ---- 
    #define oObjUser 0x7AB351C // 0 -> char[11] => Object struct start 
    #define oClass 0x0B // 11 -> byte / word 
    #define oDexterity 0x1A // 26 -> short[2] 
    #define oAttackSpeed 0x60 // 96 -> short[2] => maybe int[4] 
    //--------------------------------------------------------------------------- 
     
    class ObjUser 
    { 
    public: 
    void GetUserInfo(); 
    void SetUserInfo(); 
    void SetSpeedFrame(); 
    // -- 
    int CheckPoint; 
    // -- 
    WORD Class; 
    short Dexterity; 
    short AttackSpeed; 
    int GameState; 
    // ---- 
    }; extern ObjUser gObjUser; 
    //--------------------------------------------------------------------------- 
     
    enum ObjClass // -> Complete for JPN protocol 
    { 
    DarkWizard = 0, 
    SoulMaster = 8, 
    GrandMaster = 24, 
    // ---- 
    DarkKnight = 1, 
    BladeKnight = 9, 
    BladeMaster = 25, 
    // ---- 
    Elf = 2, 
    MuseElf = 10, 
    HightElf = 26, 
    // ---- 
    MagicGladiator = 3, 
    DuelMaster = 19, 
    // ---- 
    DarkLord = 4, 
    LordEmperor = 20, 
    // ---- 
    Summoner = 5, 
    BloodySummoner = 13, 
    DimensionMaster = 29, 
    }; 
    //--------------------------------------------------------------------------- 
     
    enum ObjState // -> Complete 
    { 
    SelectServer = 2, 
    SwitchCharacter = 4, 
    GameProcess = 5, 
    }; 
    //--
    Note that this fix is only for 1.03K (Season4 4 JPN), to use it on other versions, research offsets yourself.



Advertisement