Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

[Source] C++ 16 Buffs

Status
Not open for further replies.
Joined
Oct 2, 2010
Messages
1,758
Reaction score
227
Code:
    #define MAX_AFFECT 16 // limite de buffs, para usarem mais de 16 devem modificar o cliente tbm
     
    //struct dos novos buffs
    struct st_NewBuffs
    {
            struct
            {
                    WORD Index;
                    WORD Master;
                    WORD Value;
                    WORD Time;
            } Affects[MAX_AFFECT];
    };
     
    extern st_NewBuffs NewSkillBuffer[30000]; // Buffer para alocar as novas skills.
     
    //zera o buffer, e altera os addrs necessarios.
    void InitSkills()
    {
            // Zera Variaveis
            for(int i = 0; i < 30000; i++)
            {
                    for(int j = 0; j < MAX_AFFECT; j++)
                    {
                            NewSkillBuffer[i].Affects[j].Index = 0;
                            NewSkillBuffer[i].Affects[j].Master = 0;
                            NewSkillBuffer[i].Affects[j].Value = 0;
                            NewSkillBuffer[i].Affects[j].Time = 0;
                    }
            }
     
            // altera as checagens necessarias
            *(BYTE*)0x0406FB6 = MAX_AFFECT; // BASE_GetCurrentScore
            *(BYTE*)0x041AB1D = MAX_AFFECT; // GetEmptyAffect
            *(BYTE*)0x041AB55 = MAX_AFFECT; // GetEmptyAffect
            *(BYTE*)0x04260E6 = MAX_AFFECT;
            *(BYTE*)0x04505EE = MAX_AFFECT; // ProcessAffect
            *(BYTE*)0x0461CEB = MAX_AFFECT; // DoRemoveHide
            *(BYTE*)0x0461FCA = MAX_AFFECT; // SetAffect
            *(BYTE*)0x046226A = MAX_AFFECT; // SetTick
     
            //Hooks Limite de Buffs
            //0x41AB2C
            *(DWORD*)0x41AB25 = 8 * MAX_AFFECT;
            *(DWORD*)0x41AB30 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x41AB5D = 8 * MAX_AFFECT;
            *(DWORD*)0x41AB68 = (int)NewSkillBuffer; // Index
           
            //0x41C8B5
            *(DWORD*)0x41C8B1 = 8 * MAX_AFFECT;
            *(DWORD*)0x41C8B7 = (int)NewSkillBuffer; // Index
            //0x41CDAE
            *(DWORD*)0x41CDAA = 8 * MAX_AFFECT;
            *(DWORD*)0x41CDB0 = (int)NewSkillBuffer; // Index
     
            //0x4260FF
            *(DWORD*)0x4260F5 = 8 * MAX_AFFECT;
            *(DWORD*)0x426103 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x426154 = 8 * MAX_AFFECT;
            *(DWORD*)0x426162 = (int)NewSkillBuffer; // Index
     
            //0x426881
            *(DWORD*)0x42687D = 8 * MAX_AFFECT;
            *(DWORD*)0x426884 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x426892 = 8 * MAX_AFFECT;
            *(DWORD*)0x426899 = (int)NewSkillBuffer + 2; // Master
            *(DWORD*)0x4268A7 = 8 * MAX_AFFECT;
            *(DWORD*)0x4268AE = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x4268BC = 8 * MAX_AFFECT;
            *(DWORD*)0x4268C3 = (int)NewSkillBuffer + 6; // Time
     
            //0x44141F
            *(DWORD*)0x44141B = 8 * MAX_AFFECT;
            *(DWORD*)0x441421 = (int)NewSkillBuffer; // Index
     
            //0x44643B
            *(DWORD*)0x446437 = 8 * MAX_AFFECT;
            *(DWORD*)0x44643D = (int)NewSkillBuffer; // Index
     
            //0x446A74
            *(DWORD*)0x446A70 = 8 * MAX_AFFECT;
            *(DWORD*)0x446A77 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x446A82 = 8 * MAX_AFFECT;
            *(DWORD*)0x446A89 = (int)NewSkillBuffer + 2; // Master
            *(DWORD*)0x446A94 = 8 * MAX_AFFECT;
            *(DWORD*)0x446A9B = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x446AA6 = 8 * MAX_AFFECT;
            *(DWORD*)0x446AAD = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x446AC4 = 8 * MAX_AFFECT;
            *(DWORD*)0x446ACB = (int)NewSkillBuffer + 6; // Time
     
            //0x447135
            *(DWORD*)0x447131 = 8 * MAX_AFFECT;
            *(DWORD*)0x447137 = (int)NewSkillBuffer; // Index
     
            //0x447A06
            *(DWORD*)0x447A02 = 8 * MAX_AFFECT;
            *(DWORD*)0x447A07 = (int)NewSkillBuffer; // Index
     
            //0x44826F
            *(DWORD*)0x44826B = 8 * MAX_AFFECT;
            *(DWORD*)0x448271 = (int)NewSkillBuffer; // Index
     
            //0x44DAC5
            *(DWORD*)0x44DAC1 = 8 * MAX_AFFECT;
            *(DWORD*)0x44DAC7 = (int)NewSkillBuffer; // Index
     
            //0x450601
            *(DWORD*)0x4505FA = 8 * MAX_AFFECT;
            *(DWORD*)0x450605 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x45063F = 8 * MAX_AFFECT;
            *(DWORD*)0x45064A = (int)NewSkillBuffer + 2; // Master
            *(DWORD*)0x450656 = 8 * MAX_AFFECT;
            *(DWORD*)0x450661 = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x4523ED = 8 * MAX_AFFECT;
            *(DWORD*)0x4523F8 = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x452408 = 8 * MAX_AFFECT;
            *(DWORD*)0x452413 = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x452420 = 8 * MAX_AFFECT;
            *(DWORD*)0x45242B = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x452434 = 8 * MAX_AFFECT;
            *(DWORD*)0x45243F = (int)NewSkillBuffer + 6; // Time
     
            //0x452453
            *(DWORD*)0x45244C = 8 * MAX_AFFECT;
            *(DWORD*)0x452457 = (int)NewSkillBuffer; // Index
           
            //0x452473
            *(DWORD*)0x45246C = 8 * MAX_AFFECT;
            *(DWORD*)0x452477 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x452482 = 8 * MAX_AFFECT;
            *(DWORD*)0x45248D = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x452498 = 8 * MAX_AFFECT;
            *(DWORD*)0x4524A3 = (int)NewSkillBuffer + 2; // Master
     
            //0x461CFA
            *(DWORD*)0x461CF3 = 8 * MAX_AFFECT;
            *(DWORD*)0x461CFE = (int)NewSkillBuffer; // Index
            *(DWORD*)0x461D0C = 8 * MAX_AFFECT;
            *(DWORD*)0x461D17 = (int)NewSkillBuffer; // Index
     
            //0x461FDD
            *(DWORD*)0x461FD6 = 8 * MAX_AFFECT;
            *(DWORD*)0x461FE1 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x461FED = 8 * MAX_AFFECT;
            *(DWORD*)0x461FFC = (int)NewSkillBuffer; // Index
            *(DWORD*)0x46200B = 8 * MAX_AFFECT;
            *(DWORD*)0x46201D = (int)NewSkillBuffer + 2; // Master
            *(DWORD*)0x462049 = 8 * MAX_AFFECT;
            *(DWORD*)0x462054 = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x462062 = 8 * MAX_AFFECT;
            *(DWORD*)0x462071 = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x46207C = 8 * MAX_AFFECT;
            *(DWORD*)0x46208B = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x46209C = 8 * MAX_AFFECT;
            *(DWORD*)0x4620A7 = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x4620B5 = 8 * MAX_AFFECT;
            *(DWORD*)0x4620C4 = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x4620CF = 8 * MAX_AFFECT;
            *(DWORD*)0x4620DE = (int)NewSkillBuffer + 4; // Value
            *(DWORD*)0x4620F0 = 8 * MAX_AFFECT;
            *(DWORD*)0x4620FB = (int)NewSkillBuffer + 6; // Time
     
            //0x462281
            *(DWORD*)0x462276 = 8 * MAX_AFFECT;
            *(DWORD*)0x462285 = (int)NewSkillBuffer; // Index
            *(DWORD*)0x462294 = 8 * MAX_AFFECT;
            *(DWORD*)0x4622A6 = (int)NewSkillBuffer + 2; // Master
            *(DWORD*)0x4622C7 = 8 * MAX_AFFECT;
            *(DWORD*)0x4622D2 = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x4622E4 = 8 * MAX_AFFECT;
            *(DWORD*)0x4622EF = (int)NewSkillBuffer + 6; // Time
            *(DWORD*)0x4622FA = 8 * MAX_AFFECT;
            *(DWORD*)0x462309 = (int)NewSkillBuffer + 4; // Value
     
            JMP_NEAR(0x41ABD8, NKD_Buff1, 4);
            JMP_NEAR(0x44D8F8, NKD_Buff2, 4);
            JMP_NEAR(0x410EF7, NKD_Buff3, 5);
            JMP_NEAR(0x412543, NKD_Buff4, 4);
     
    }
     
    __declspec(naked) void NKD_Buff1() // 0x41ABD8 nop 4
    {
            static int clientid;
            __asm MOV EAX, DWORD PTR SS:[EBP + 0x8]
            __asm MOV clientid, EAX
     
            for(int i = 0; i < MAX_AFFECT; i++)
            {
                    static int SkillID;
                    SkillID = NewSkillBuffer[clientid].Affects[i].Index;
     
                    if(SkillID == 28)
                    {
                            __asm MOV EAX, 1
                            __asm MOV jmp_address, 0x41AC31
                            __asm JMP jmp_address
                    }
                    else
                    {
                            __asm XOR EAX, EAX
                            __asm MOV jmp_address, 0x41AC35
                            __asm JMP jmp_address
                    }
            }
    }
     
    __declspec(naked) void NKD_Buff2() // 0x44D8F8 nop 4
    {
            static int clientid;
            __asm MOV EAX, DWORD PTR SS:[EBP - 0xC]
            __asm MOV clientid, EAX
     
            for(int i = 0; i < MAX_AFFECT; i++)
            {
                    static int SkillID;
                    SkillID = NewSkillBuffer[clientid].Affects[i].Index;
     
                    SkillID = 0;
                    __asm MOV jmp_address, 0x44D940
                    __asm JMP jmp_address
            }
    }
     
    __declspec(naked) void NKD_Buff3() // 0x410EF7 nop 5
    {
            static char *name;
            __asm MOV EAX, DWORD PTR SS:[EBP - 0x4]
            __asm MOV name, EAX
     
            static int clientid;
            clientid = GetUserByName(name);
           
            static int SkillID;
            SkillID = NewSkillBuffer[clientid].Affects[0].Index;
           
            __asm MOV ECX, SkillID
            __asm MOV jmp_address, 0x410F01
            __asm JMP jmp_address
    }
     
    __declspec(naked) void NKD_Buff4() // 0x412543 nop 4
    {
            static char *name;
            __asm MOV EDX, DWORD PTR SS:[EBP - 0x4]
            __asm MOV name, EDX
     
            static int clientid;
            clientid = GetUserByName(name);
     
            static int SkillID;
            SkillID = (int)NewSkillBuffer[clientid].Affects;
     
            __asm MOV EDX, SkillID
            __asm MOV jmp_address, 0x41254C
            __asm JMP jmp_address
    }
     
    typedef struct
    {
            unsigned char Index;
            unsigned char Master;
            unsigned short Value;
            int Time;
    } p_Affect;
     
    typedef struct
    {
            PacketHeader Header;
     
            p_Affect Affect[16];
    } pCL_3B9;
     
    void SendAffect(int clientId)
    {
            pCL_3B9 pack_3B9 = *(pCL_3B9*)malloc(sizeof(pCL_3B9));
     
            pack_3B9.Header.Code = 0x3B9;
            pack_3B9.Header.Size = 140;
            pack_3B9.Header.Index = clientId;
     
            st_Mob *_mob = (st_Mob*)GetMobFromIndex(clientId);
     
            memset(&pack_3B9.Affect[0], 0x0, 140 - 12);
     
            for(short i = 0; i < MAX_AFFECT && _mob != NULL; i++)
            {
                    if(NewSkillBuffer[clientId].Affects[i].Time != 0)
                    {
                            pack_3B9.Affect[i + 1].Index = (BYTE)NewSkillBuffer[clientId].Affects[i].Index;
                            pack_3B9.Affect[i + 1].Master = (BYTE)NewSkillBuffer[clientId].Affects[i].Master;
                            pack_3B9.Affect[i + 1].Value = NewSkillBuffer[clientId].Affects[i].Value;
                            pack_3B9.Affect[i + 1].Time = (DWORD)NewSkillBuffer[clientId].Affects[i].Time;
                    }
            }
     
            SendPacket((BYTE*)&pack_3B9, clientId, 140);
            free(&pack_3B9);
    }


Credits: nieen12
 
Last edited:
Newbie Spellweaver
Joined
Nov 26, 2012
Messages
24
Reaction score
0
thanks for WYD Chaos team for this source... :)

im using it in my new server
 
Newbie Spellweaver
Joined
Nov 26, 2012
Messages
24
Reaction score
0
use ptr0x patch when you will use that..

i suggest to use just 1 dll it means combined functionsv02 and tmsrv754 .dll
 
Status
Not open for further replies.
Back
Top