Resultados 1 a 5 de 5
  1. #1
    Developer C++ romariols's Avatar
    Data de Ingresso
    Jun 2017
    Posts
    128
    Thanks Thanks Given 
    33
    Thanks Thanks Received 
    293
    Thanked in
    36 Posts
    Mencionado
    22 Post(s)
    País
    Brazil

    Source Códigos Para Liberar Novas Wings [Main / GameServer]

    Salve... Recentemente depois de vários dias de trabalho, consegui liberar novas Wings para as versões 97d e 99z. Como aqui no Brasil as pessoas quase nunca contribuem com nada em Mu Online, aqui deixo uma contribuição para quem busca fazer seus updates e Custons em versões clássicas de Mu Online.

    Claro que isso não é o código completo para vc liberar estes itens, mas pode poupar vários dias de trabalho para quem já está trabalhando nisso.

    Função MakePreviewCharSet Completa Main 99z ou 1.0

    Código:
    #define Func_0x41E1C0 ((int(__cdecl*)(int a1)) 0x0041E1C0)
    #define Func_0x4340A0 ((void(__cdecl*)(int a1)) 0x004340A0)
    #define Func_0x4342F0 ((char(__cdecl*)(int a1, int a2, int a3, int a4)) 0x004342F0)
    #define Func_0x4340D0 ((char(__cdecl*)(__int16 a1, int a2, int a3, int a4, int a5)) 0x004340D0)
    #define Func_0x412530 ((void(__cdecl*)(int a1)) 0x00412530)
    #define Func_0x4FA8D0 ((signed int(__cdecl*)(char a1)) 0x004FA8D0)
    #define Func_0x4038A0 ((int(__cdecl*)(int a1)) 0x004038A0)
    #define Func_0x4F9EC0 ((int(__cdecl*)(int a1)) 0x004F9EC0)
    
    
    void __cdecl MakePreviwCharSet(int aIndex, BYTE* CharSet, int PreviewObject, BYTE* Mode)
    {
        int pPreviewObject; // esi@1
        char v5; // al@7
        unsigned __int8 Wings; // al@14
        unsigned __int8 v7; // al@23
        int v8; // eax@32
        unsigned __int8 v9; // al@43
        signed int v10; // ebx@50
        char v11; // al@50
        char v12; // dl@51
        unsigned __int8 v13; // al@54
        char v14; // cl@57
        char v15; // dl@60
        char v16; // cl@63
        __int16 v17; // [sp-18h] [bp-24h]@27
        int v18; // [sp-14h] [bp-20h]@27
        int v19; // [sp-10h] [bp-1Ch]@27
        int v20; // [sp-Ch] [bp-18h]@27
        char v21; // [sp+1Ch] [bp+10h]@23
        BYTE NewWing; // al@23
    
        pPreviewObject = PreviewObject;
        if (!PreviewObject)
            pPreviewObject = *(DWORD*)0x73C81E4 + 1068 * aIndex;
    
        if (*(WORD*)(pPreviewObject + 2) == 497)
        {
            // Preview Itens das mãos
            if (*(BYTE*)CharSet == -1)
            {
                *(BYTE*)(pPreviewObject + 691) = 0;
                *(WORD*)(pPreviewObject + 688) = -1;
                *(BYTE*)(pPreviewObject + 692) = 0;
            }
            else
            {
                *(WORD*)(pPreviewObject + 688) = *(BYTE*)CharSet + 505;
            }
    
            v5 = *(BYTE*)(CharSet + 1);
    
            if (v5 == -1)
            {
                *(WORD*)(pPreviewObject + 720) = -1;
                *(BYTE*)(pPreviewObject + 723) = 0;
                *(BYTE*)(pPreviewObject + 724) = 0;
            }
            else if ((*(BYTE*)(pPreviewObject + 452) & 7) != 4 || v5 != -91)
            {
                *(WORD*)(pPreviewObject + 720) = *(BYTE*)(CharSet + 1) + 505;
            }
            else
            {
                *(WORD*)(pPreviewObject + 720) = 926;
                Func_0x41E1C0(pPreviewObject);
            }
    
            // Preview Wings na SeletChar
            if (((*(BYTE*)(CharSet + 4) >> 2) & 3) == 3)
            {
                
            }
    
            if (Mode)
                *Mode = 0;
            else
                Func_0x4340A0(pPreviewObject);
    
            v7 = *(BYTE*)(CharSet + 4) & 3;
            v21 = *(BYTE*)(CharSet + 4) & 3;
    
    
            if (v7 == 3)
            {
                if ((*(BYTE*)(CharSet + 9) & 1) != 1)
                {
                    *(WORD*)(pPreviewObject + 784) = -1;
                    *(BYTE*)(pPreviewObject + 787) = 0;
                    *(BYTE*)(pPreviewObject + 788) = 0;
                    goto LABEL_39;
                }
    
                *(WORD*)(pPreviewObject + 784) = 924;
    
                if (!Mode)
                {
                    Func_0x4342F0(269, pPreviewObject + 16, pPreviewObject, 0);
                LABEL_39:
                    if ((*(BYTE*)(CharSet + 11) & 1) == 1)
                    {
                        *(WORD*)(pPreviewObject + 784) = 925;
                        if (Mode)
                            Func_0x4340D0(191, pPreviewObject + 16, pPreviewObject, (int)Mode, 0);
                        else
                            Func_0x4342F0(191, pPreviewObject + 16, pPreviewObject, 0);
                    }
    
                    Func_0x412530(pPreviewObject);
                    v9 = *(BYTE*)(pPreviewObject + 856);
    
                    if ((*(BYTE*)(CharSet + 11) & 2) == 2)
                    {
                        if (!v9 || v9 > 3u)
                            *(BYTE*)(pPreviewObject + 856) = 4;
                    }
                    else if (!v9 || v9 > 3u)
                    {
                        *(BYTE*)(pPreviewObject + 856) = 0;
                    }
    
                    v10 = *(BYTE*)(CharSet + 7) + ((*(BYTE*)(CharSet + 6) + (*(BYTE*)(CharSet + 5) << 8)) << 8);
                    *(BYTE*)(pPreviewObject + 690) = Func_0x4FA8D0(*(BYTE*)(CharSet + 7) & 7);
                    *(BYTE*)(pPreviewObject + 722) = Func_0x4FA8D0((v10 >> 3) & 7);
    
                    v11 = *(BYTE*)(pPreviewObject + 987);
                    *(BYTE*)(pPreviewObject + 754) = 0;
                    *(BYTE*)(pPreviewObject + 786) = 0;
    
                    if (!v11)
                    {
                        v12 = *(BYTE*)(CharSet + 2) >> 4;
                        if (v12 + 16 * (*(BYTE*)(CharSet + 8) >> 7) == 31)
                            *(WORD*)(pPreviewObject + 528) = 5 * (unsigned __int8)(*(BYTE*)(pPreviewObject + 452) >> 3) + (*(BYTE*)(pPreviewObject + 452) & 7) + 1017;
                        else
                            *(WORD*)(pPreviewObject + 528) = (unsigned __int8)(v12 + 16 * (*(BYTE*)(CharSet + 8) >> 7)) + 729;
                        v13 = (*(BYTE*)(CharSet + 2) & 0xF) + 16 * ((*(BYTE*)(CharSet + 8) >> 6) & 1);
                        if (v13 == 31)
                            *(WORD*)(pPreviewObject + 560) = (*(BYTE*)(pPreviewObject + 452) & 7) + 5 * ((unsigned __int8)(*(BYTE*)(pPreviewObject + 452) >> 3) + 205);
                        else
                            *(WORD*)(pPreviewObject + 560) = v13 + 761;
                        v14 = *(BYTE*)(CharSet + 3) >> 4;
                        if (v14 + 16 * ((*(BYTE*)(CharSet + 8) >> 5) & 1) == 31)
                            *(WORD*)(pPreviewObject + 592) = 5 * (unsigned __int8)(*(BYTE*)(pPreviewObject + 452) >> 3) + (*(BYTE*)(pPreviewObject + 452) & 7) + 1033;
                        else
                            *(WORD*)(pPreviewObject + 592) = (unsigned __int8)(v14 + 16 * ((*(BYTE*)(CharSet + 8) >> 5) & 1)) + 793;
                        v15 = *(BYTE*)(CharSet + 3) & 0xF;
                        if (v15 + 16 * ((*(BYTE*)(CharSet + 8) >> 4) & 1) == 31)
                            *(WORD*)(pPreviewObject + 624) = 5 * (unsigned __int8)(*(BYTE*)(pPreviewObject + 452) >> 3) + (*(BYTE*)(pPreviewObject + 452) & 7) + 1041;
                        else
                            *(WORD*)(pPreviewObject + 624) = (unsigned __int8)(v15 + 16 * ((*(BYTE*)(CharSet + 8) >> 4) & 1)) + 825;
                        v16 = *(BYTE*)(CharSet + 4) >> 4;
                        if (v16 + 16 * ((*(BYTE*)(CharSet + 8) >> 3) & 1) == 31)
                            *(WORD*)(pPreviewObject + 656) = 5 * (unsigned __int8)(*(BYTE*)(pPreviewObject + 452) >> 3) + (*(BYTE*)(pPreviewObject + 452) & 7) + 1049;
                        else
                            *(WORD*)(pPreviewObject + 656) = (unsigned __int8)(v16 + 16 * ((*(BYTE*)(CharSet + 8) >> 3) & 1)) + 857;
    
                        //-- Preview Itens do Corpo do Char
                        *(BYTE*)(pPreviewObject + 530) = Func_0x4FA8D0((v10 >> 6) & 7);
                        *(BYTE*)(pPreviewObject + 562) = Func_0x4FA8D0((v10 >> 9) & 7);
                        *(BYTE*)(pPreviewObject + 594) = Func_0x4FA8D0((v10 >> 12) & 7);
                        *(BYTE*)(pPreviewObject + 626) = Func_0x4FA8D0((v10 >> 15) & 7);
                        *(BYTE*)(pPreviewObject + 658) = Func_0x4FA8D0((v10 >> 18) & 7);
                        *(BYTE*)(pPreviewObject + 531) = *(BYTE*)(CharSet + 9) >> 7;
                        *(BYTE*)(pPreviewObject + 563) = (*(BYTE*)(CharSet + 9) >> 6) & 1;
                        *(BYTE*)(pPreviewObject + 595) = (*(BYTE*)(CharSet + 9) >> 5) & 1;
                        *(BYTE*)(pPreviewObject + 627) = (*(BYTE*)(CharSet + 9) >> 4) & 1;
                        *(BYTE*)(pPreviewObject + 659) = (*(BYTE*)(CharSet + 9) >> 3) & 1;
                        *(BYTE*)(pPreviewObject + 532) = *(BYTE*)(CharSet + 10) >> 7;
                        *(BYTE*)(pPreviewObject + 564) = (*(BYTE*)(CharSet + 10) >> 6) & 1;
                        *(BYTE*)(pPreviewObject + 596) = (*(BYTE*)(CharSet + 10) >> 5) & 1;
                        *(BYTE*)(pPreviewObject + 628) = (*(BYTE*)(CharSet + 10) >> 4) & 1;
                        *(BYTE*)(pPreviewObject + 660) = (*(BYTE*)(CharSet + 10) >> 3) & 1;
                        *(BYTE*)(pPreviewObject + 691) = (*(BYTE*)(CharSet + 9) >> 2) & 1;
                        *(BYTE*)(pPreviewObject + 723) = (*(BYTE*)(CharSet + 9) >> 1) & 1;
                        *(BYTE*)(pPreviewObject + 692) = (*(BYTE*)(CharSet + 10) >> 2) & 1;
                        *(BYTE*)(pPreviewObject + 724) = (*(BYTE*)(CharSet + 10) >> 1) & 1;
                        *(BYTE*)(pPreviewObject + 848) = *(BYTE*)(CharSet + 10) & 1;
    
                        Func_0x4038A0(pPreviewObject);
                        Func_0x4F9EC0(pPreviewObject);
                    }
                    return;
                }
                v20 = (int)Mode;
                v19 = pPreviewObject;
                v18 = pPreviewObject + 16;
                v17 = 269;
            }
            else
            {
                *(WORD*)(pPreviewObject + 784) = v7 + 921;
                if (v21)
                {
                    if (v21 == 2)
                    {
                        v8 = 198;
                    }
                    else
                    {
                        if (v21 != 3)
                            goto LABEL_39;
                        v8 = 269;
                    }
                }
                else
                {
                    v8 = 921;
                }
                if (!Mode)
                {
                    Func_0x4342F0(v8, pPreviewObject + 16, pPreviewObject, 0);
                    goto LABEL_39;
                }
                v20 = (int)Mode;
                v19 = pPreviewObject;
                v18 = pPreviewObject + 16;
                v17 = v8;
            }
            Func_0x4340D0(v17, v18, v19, v20, 0);
            goto LABEL_39;
        }
    }
    Source Liberar Options das Wings no GameServer 0.97.00
    Código:
    void __declspec(naked) LiberarOptionsNewWingsFix()
    {
        static DWORD Retornar = 0x0047F0B9;
        static DWORD JmpReturn = 0x0047F05D;
    
        __asm
        {
            CMP DWORD PTR SS : [EBP - 0x8] , 0x186
                JNZ ITEM1
            JMP JmpReturn
                ITEM1 :
            CMP DWORD PTR SS : [EBP - 0x8] , 0x199        //NEW Wing 01
                JNZ ITEM2
                JMP JmpReturn
                ITEM2 :
            CMP DWORD PTR SS : [EBP - 0x8] , 0x19A        //NEW Wing 02
                JNZ ITEM3
                JMP JmpReturn
                ITEM3 :
            CMP DWORD PTR SS : [EBP - 0x8] , 0x19B        //NEW Wing 03
                JNZ ITEM4
                JMP JmpReturn
                ITEM4 :
            CMP DWORD PTR SS : [EBP - 0x8] , 0x19C        //NEW Wing 04
                JNZ ITEM5
                JMP JmpReturn
                ITEM5 :
            CMP DWORD PTR SS : [EBP - 0x8] , 0x19D        //NEW Wing 05
                JNZ EXIT
                JMP JmpReturn            
                EXIT :
            JMP Retornar;
        }
    }
    Créditos: Romário Leite
    Last edited by romariols; 16/09/2020 at 12:37 AM.

  2. The Following 6 Users Say Thank You to romariols For This Useful Post:


  3. #2
    Fundador PerfectZone Mentor's Avatar


    Data de Ingresso
    Jun 2013
    Posts
    2,850
    Thanks Thanks Given 
    784
    Thanks Thanks Received 
    2,193
    Thanked in
    355 Posts
    Mencionado
    804 Post(s)
    MEU HUMOR
    Twisted
    País
    Brazil
    Ótima contribuição @[Somente membros podem ver os links. ]
    Perfect Zone Brasil



    Inscreva-se no meu canal clicando [Somente membros podem ver os links. ]

  4. The Following User Says Thank You to Mentor For This Useful Post:


  5. #3
    Membro AnDeR's Avatar
    Data de Ingresso
    Nov 2014
    Posts
    194
    Thanks Thanks Given 
    70
    Thanks Thanks Received 
    13
    Thanked in
    11 Posts
    Mencionado
    23 Post(s)
    MEU HUMOR
    Fine
    País
    Brazil
    Parabéns por sua atitude, pena que a mentalidade do brasileiro não é passar conhecimento é cada 1 por si
    Use o fórum para tirar suas dúvidas, dúvidas no privado eu cobro!

  6. The Following 2 Users Say Thank You to AnDeR For This Useful Post:


  7. #4
    Developer C++ Mr.Haziel's Avatar


    Data de Ingresso
    Apr 2015
    Posts
    67
    Thanks Thanks Given 
    77
    Thanks Thanks Received 
    23
    Thanked in
    10 Posts
    Mencionado
    57 Post(s)
    MEU HUMOR
    Cold
    Parabéns Jovem!!Ótimo Programador.
    Last edited by Mr.Haziel; 15/09/2020 at 10:11 AM.

  8. The Following User Says Thank You to Mr.Haziel For This Useful Post:


  9. #5
    Membro VIP MFalmeida's Avatar
    Data de Ingresso
    Dec 2014
    Posts
    59
    Thanks Thanks Given 
    48
    Thanks Thanks Received 
    24
    Thanked in
    16 Posts
    Mencionado
    2 Post(s)
    MEU HUMOR
    Twisted
    País
    Brazil
    Parabéns pelo esforço e dedicação
    Nova Era; chega em Breve
    MuOnline é Paixão

  10. The Following User Says Thank You to MFalmeida For This Useful Post:


Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  
Sobre nós
Somos uma comunidade em atividade a 8 anos que aborda assuntos relacionados a games em geral, principalmente games MMORPG. e que busca sempre ajudar os membros através de conteúdos, tutoriais e suporte...
Nossos anunciantes
Hinetworks
VelozHost
InovHost
Rede Sociais