Thank You Posts

Show post that are related to the Thank-O-Matic. It will show the messages where you give a Thank You to an other users.


Messages - Zero10

on: January 18, 2024, 02:09:28 AM 1 Mu Online / Sources Generales / Source WideScreen 2024 By Dakosmu

Source WideScreen 2024 By Dakosmu




[warning]Este Wide Fue Sacado de los Source ZonaMu season 6 + grow lancer[/warning]


[okay]Interface.cpp[/okay]

[info]Agregas[/info]



[info]Buscas[/info]


[info]Agregas[/info]



[okay]Descargar los .OZT[/okay]


[okay]Colocar Dentro del CLiente en la Ruta[/okay]
Quote
Data\Custom\DakosmuWide


[info]Buscas[/info]


[info]Agregas[/info]



[okay]Main.cpp[/okay]

[info]Agregas[/info]




[info]Buscas[/info]


[info]Agregas[/info]



[okay]DakosmuBytes.cpp[/okay]



[okay]DakosmuBytes.h[/okay]



[okay]Dakosmudefine.h[/okay]



[okay]
import.cpp[/okay]



[okay]DakosmuS6.cpp[/okay]



[okay]DakosmuS6.h[/okay]



[okay]DakosmuWide.cpp[/okay]



[okay]DakosmuWide.h[/okay]






Creditos
Asura
Dakosmu


on: October 03, 2023, 05:27:26 AM 2 Mu Online / Sources Generales / LTP-Team last sources


LTP-Team.com emulator sources and some tools sources

Include in source package:
  • LTP.dll sources
  • ConnectServer sources
  • DataServer sources
  • JoinServer sources
  • GameServer sources
  • MHP sources
  • Launcher sources
  • GetMainInfo sources
  • LTPEditor sources
  • LTPShopEditor sources

Last update released : 18.02.2022 0:24 (version 1.6.11)

If anyone have crash client on start, recompile all server binaries, LTP.dll and GetMainInfo
Also, you need run all .sql scripts in DB/scripts/ folder.

Changelog in discord "dev-blog" channel. Link: https://discord.gg/3GmFysQYjf

on: August 26, 2023, 12:28:58 AM 3 Mu Online / Sources Generales / Antihack MAIN

aqui le dejo el Windows Server 2008 R2 enterprice para algunos lo deseen.
sin mas que hablar dejo el link

Descarga


www.guiaservermu.com

By. Matias

on: August 13, 2023, 10:04:35 PM 5 Mu Online / SQL Servers / SQL Server 2000 Full

Aqui les dejo el SQL_2000_SP4.
sin mas que hablar les dejo el link.

Descarga


By: Matias

on: August 13, 2023, 10:01:04 PM 6 Mu Online / SQL Servers / SQL Server 2012 Full

Aqui les dejo el SQL_2012R2_EXPRESS_x64.
sin mas que hablar les dejo el link.

Descarga


By: Matias

on: August 13, 2023, 09:56:34 PM 7 Mu Online / SQL Servers / SQL Server 2008 Full

Aqui les dejo el SQLEXPRWT_x64_ENU 2008.
sin mas que hablar les dejo el link.

Descarga
 

By: Matias



on: August 10, 2023, 10:23:40 AM 8 Mu Online / Sources Generales / Source DailyReward

Source DailyReward






Agregar en interface.cpp
Code: [Select]
    if (gProtect.m_MainInfo.DailyReward == 1)
    {
    DailyReward.Draw();
    }

Agregar en interface.cpp Protocol.cpp Controller.cpp
Code: [Select]
#include "DailyReward.h"

DailyReward.h


DailyReward.cpp
Code: [Select]
#include "stdafx.h"
#if(DAILY)
#include "DailyReward.h"
#include "Import.h"
#include "NewFont.h"
#include <ctime>
#include "Interface.h"
#include "Defines.h"
cDailyReward DailyReward;

cDailyReward::cDailyReward()
{
    this->Init();
}

cDailyReward::~cDailyReward()
{
}

void cDailyReward::Init()
{
    this->SetWindow(false);
    this->SetRect(120, 70, 400, 255);
    this->SetTitle("Daily Reward", 0xc1c1c1ff, 0x0, 1);
    this->SelectedDay = 1;
}

unsigned char last_day_of_month(int year, unsigned char month) {
    return month != 2 ? ((month ^ (month >> 3))) | 30 :
        year % 4 ? 29 : 28;
}

void cDailyReward::ClearDayGift()
{
    this->DayInfo = false;
    this->Type = -1;
    this->Level = 0;
    this->Ex = 0;
    this->Zen = 0;
    this->Wcoin = 0;
}
int ImgTag100 = 0;
void cDailyReward::DrawIcon() //focus move box daily
{

    if (gInterface.CheckWindow(CashShop)
        || gInterface.CheckWindow(SkillTree)
        || gInterface.CheckWindow(FullMap)
        || gInterface.CheckWindow(MoveList)
        || gInterface.CheckWindow(Inventory)
        || gInterface.CheckWindow(ExpandInventory)
        || gInterface.CheckWindow(Store)
        || gInterface.CheckWindow(Inventory)
        || gInterface.CheckWindow(Party)
        || gInterface.CheckWindow(Trade)
        || gInterface.CheckWindow(Warehouse)
        || gInterface.CheckWindow(ExpandWarehouse))
    {
        return;
    }
    int j;

    if (!Blink)
    {
        return;
    }

    CustomFont.Draw(CustomFont.FontNormal, 73, 60, 0xffffffff, 0x00000050, 0, 0, 3, "Daily Reward"); //Move Daily Reward - 70 lados - 60 arriba
    int speed = 2, r = 0;
    if (ImgTag100 >= 25 * speed) ImgTag100 = 0;

    r = floor((float)ImgTag100 / (float)speed);

    RenderBitmap(531026, 80, 30, 102.4 / 2, 93.4 / 2, (r % 5) * 102.4 / 512.0, (r - (r % 5)) / 5 * 93.4 / 512.0, 102.4 / 512.0, 93.4 / 512.0, 0, 1, 0.0);
    ImgTag100++; //Move Box Daily -- 80 lados -- 30 Ariba+Abajo


    if (IsWorkZone(80, 30,40, 40, false))
    {
        if (pIsKeyRelease(VK_LBUTTON) && IsOnWindow())
            DailyReward.ToggleWindow(true);

    }


    if (IsWorkZone(80, 30,40, 40, false))
    {
        pSetCursorFocus = true;
    }
    else pSetCursorFocus = false;

}

void cDailyReward::Draw()
{
    if (pPlayerState < GameProcess)
    {
        return;
    }
    if (gInterface.CheckWindow(ObjWindow::CashShop)
        || gInterface.CheckWindow(ObjWindow::FriendList)
        || gInterface.CheckWindow(ObjWindow::MoveList)
        || gInterface.CheckWindow(ObjWindow::Party)
        || gInterface.CheckWindow(ObjWindow::Quest)
        || gInterface.CheckWindow(ObjWindow::NPC_Devin)
        || gInterface.CheckWindow(ObjWindow::Guild)
        || gInterface.CheckWindow(ObjWindow::Trade)
        || gInterface.CheckWindow(ObjWindow::Warehouse)
        || gInterface.CheckWindow(ObjWindow::ChaosBox)
        || gInterface.CheckWindow(ObjWindow::CommandWindow)
        || gInterface.CheckWindow(ObjWindow::PetInfo)
        || gInterface.CheckWindow(ObjWindow::Shop)
        || gInterface.CheckWindow(ObjWindow::Inventory)
        || gInterface.CheckWindow(ObjWindow::Store)
        || gInterface.CheckWindow(ObjWindow::OtherStore)
        || gInterface.CheckWindow(ObjWindow::Character)
        || gInterface.CheckWindow(ObjWindow::DevilSquare)
        || gInterface.CheckWindow(ObjWindow::BloodCastle)
        || gInterface.CheckWindow(ObjWindow::CreateGuild)
        || gInterface.CheckWindow(ObjWindow::GuardNPC)
        || gInterface.CheckWindow(ObjWindow::SeniorNPC)
        || gInterface.CheckWindow(ObjWindow::GuardNPC2)
        || gInterface.CheckWindow(ObjWindow::CastleGateSwitch)
        || gInterface.CheckWindow(ObjWindow::CatapultNPC)
        || gInterface.CheckWindow(ObjWindow::CrywolfGate)
        || gInterface.CheckWindow(ObjWindow::IllusionTemple)
        || gInterface.CheckWindow(ObjWindow::HeroList)
        || gInterface.CheckWindow(ObjWindow::ChatWindow)
        || gInterface.CheckWindow(ObjWindow::FastMenu)
        || gInterface.CheckWindow(ObjWindow::Options)
        || gInterface.CheckWindow(ObjWindow::Help)
        || gInterface.CheckWindow(ObjWindow::FastDial)
        || gInterface.CheckWindow(ObjWindow::SkillTree)
        || gInterface.CheckWindow(ObjWindow::GoldenArcher1)
        || gInterface.CheckWindow(ObjWindow::GoldenArcher2)
        || gInterface.CheckWindow(ObjWindow::LuckyCoin1)
        || gInterface.CheckWindow(ObjWindow::LuckyCoin2)
        || gInterface.CheckWindow(ObjWindow::NPC_Duel)
        || gInterface.CheckWindow(ObjWindow::NPC_Titus)
        || gInterface.CheckWindow(ObjWindow::CashShop)
        || gInterface.CheckWindow(ObjWindow::Lugard)
        || gInterface.CheckWindow(ObjWindow::QuestList1)
        || gInterface.CheckWindow(ObjWindow::QuestList2)
        || gInterface.CheckWindow(ObjWindow::Jerint)
        || gInterface.CheckWindow(ObjWindow::FullMap)
        || gInterface.CheckWindow(ObjWindow::NPC_Dialog)
        || gInterface.CheckWindow(ObjWindow::GensInfo)
        || gInterface.CheckWindow(ObjWindow::NPC_Julia)
        || gInterface.CheckWindow(ObjWindow::NPC_ChaosMix)
        || gInterface.CheckWindow(ObjWindow::ExpandInventory)
        || gInterface.CheckWindow(ObjWindow::ExpandWarehouse)
        || gInterface.CheckWindow(ObjWindow::MuHelper)
        )
    {

        this->CloseWindow(true);
    }

    if (!CheckWindow())
    {
        DrawIcon();
        return;
    }
    this->DrawBase();

    tm today;
    time_t ltime;
    time(&ltime);
    localtime_s(&today, &ltime);

    char* DoW[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };

    float sW = 35, sH = 38;
    int i, v1, v2, v3, v4, v5;
    v3 = this->FWday;
    v4 = this->MaxDay;
    for (i = 0; i < 7; i++)
    {
        CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * i, y + 35, 0xffffffff, 0xc1c1c150, sW - 2, 0, 3, DoW[i]);
    }
    if (Loaded)
    {
        for (i = v3; i < (v3 + v4); i++)
        {
            v1 = i % cDR_SPLIT_DAY;
            v2 = (i - v1) / cDR_SPLIT_DAY;
            v5 = i - v3 + 1;
            //
            if (SelectedDay == v5)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * v1, y + 52 + v2 * sH, 0xffffffff, 0x00000050, sW - 2, sH - 2, 3, " ");
            }
            if (SelectedDay == v5 && State[v5 - 1] == 0) //selecting
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            else if (IsWorkZone(x + 15 + sW * v1, y + 52 + v2 * sH, sW - 2, sH - 2, true))
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
                if (pIsKeyRelease(VK_LBUTTON))
                {
                    SelectedDay = v5;
                    if (State[v5 - 1] == 0)
                    {
                        this->SendRequest(0x01, SelectedDay);
                        this->ClearDayGift();
                    }
                }
            }
            else if (State[v5 - 1] == 0) //
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            else
            {
                RenderBitmap(531021, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * v1, y + 52 + v2 * sH + sH - 13, 0xffffffff, (v5) != today.tm_mday ? 0x00000050 : 0x00ff007f, sW - 2, 12, 3, "%d", v5);
        }

        if (SelectedDay != 0)
        {
            if (State[SelectedDay - 1] != 0)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "Complete", Wcoin);
            }
            else if (DayInfo)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "Wcoin : %d", Wcoin);
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 65, 0xffffffff, 0x00000050, 130, 0, 3, "Zen : %d", Zen);

                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 80, 0xffffffff, 0x00000050, 130, 0, 3, Text);

                if (SelectedDay <= today.tm_mday)
                {
                    this->DrawButton(32331, x - 5 + 75 * 4, y + h - 50, 73, 27, 128.0, 128.0, DailyReward.RecvGiftAction);
                    CustomFont.Draw(CustomFont.FontNormal, x - 5 + 75 * 4, y + h - 42.5, 0xffffffff, 0x0, 73, 0, 3, "Rewarded");
                }

                CustomFont.Draw(CustomFont.FontNormal, x + 280, y + 100, 0xffffffff, 0x00000050, 90, 90, 3, " ");

                gInterface.DrawItem2(x + 280, y + 100, 90, 90, this->Type, this->Level, this->Ex, 0, 0);


                if (IsWorkZone(x + 280, y + 100, 90, 90, true))
                {
                    gInterface.DrawItemToolTipText((void*)&Item, *(int*)0x879340C, *(int*)0x8793410 + 25);
                    glColor3f(1, 1, 1);
                    pSetBlend(false);
                }
            }
            else
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "No Data...", Wcoin);
            }
        }
    }
    else
    {
        CustomFont.Draw(CustomFont.FontNormal, x + 60, y + 50, 0xffffffff, 0x00000050, 200, 0, 3, "No Data...");
    }
}

bool cDailyReward::AllowedGift()
{
    return Loaded && State[SelectedDay - 1] == 0 && SelectedDay <= CurDay;
}
void cDailyReward::SendRequest(BYTE type, int value)
{
    PMSG_DAILY_REWARD_SEND pRequest;
    pRequest.h.set((LPBYTE)&pRequest, 0xFB, 0x02, sizeof(pRequest));
    pRequest.Type = type;
    pRequest.Value = value;
    DataSend((LPBYTE)&pRequest, pRequest.h.size);
}

void cDailyReward::RecvGiftAction(LPVOID pClass)
{
    cDailyReward* This = (cDailyReward*)pClass;

    if (This->AllowedGift())
    {
        This->SendRequest(0x02, This->SelectedDay);
    }
}

void cDailyReward::OnOpen()
{
    this->Loaded = false;
    this->DayInfo = false;
    this->SendRequest(0x0, 0x0);
}
void cDailyReward::OnClose()
{
}

void cDailyReward::ToggleWindow(bool mode)
{
    SetWindow(!CheckWindow(), mode);
}
void cDailyReward::OpenWindow(bool mode)
{
    SetWindow(true, mode);
}
void cDailyReward::CloseWindow(bool mode)
{
    SetWindow(false, mode);
}
void cDailyReward::SetWindow(bool state, bool mode)
{
    this->Drawing = state;
    if (mode)
        CheckWindow() ? OnOpen() : OnClose();
}

void cDailyReward::GCRecvUserInfo(BYTE* a)
{
    PMSG_DAILY_REWARD_USER_INFO_RECV* Data = (PMSG_DAILY_REWARD_USER_INFO_RECV*)a;
    this->CurDay = Data->CurDay;
    this->MaxDay = Data->MaxDay;
    this->FWday = Data->FWday;
    this->Timer = Data->Timer;

    for (int i = 0; i < 31; i++)
    {
        this->State[i] = Data->State[i];
    }

    if (State[CurDay - 1] == 0)
    {
        Blink = true;
    }
    else
    {
        Blink = false;
    }

    Loaded = true;
}
int cDailyReward::CheckItemInfo(signed int a1)
{
    if (a1 > 3092)
    {
        if (a1 > 4661)
        {
            if (a1 > 5685 || a1 < 5676 && (a1 < 5164 || a1 > 5173))
                return 0;
        }
        else if (a1 < 4652 && (a1 > 4149 || a1 < 4140 && (a1 < 3628 || a1 > 3637)))
        {
            return 0;
        }

        return 1;
    }

    if (a1 >= 3089)
        return 1;

    if (a1 > 2071)
    {
        if (a1 != 2580 && (a1 <= 2589 || a1 > 2592))
            return 0;
        return 1;
    }

    if (a1 == 2071 || a1 <= 1041 && (a1 >= 1040 || a1 >= 26 && a1 <= 28))
        return 1;

    return 0;
}

void cDailyReward::GCRecvDayInfo(BYTE* a)
{
    PMSG_DAILY_REWARD_DAY_INFO_RECV* Data = (PMSG_DAILY_REWARD_DAY_INFO_RECV*)a;

    DayInfo = true;
    if (Data->Type != -1)
    {
        this->Type = Data->Type;

        DWORD dwAddress;
        int a5;
        int a6;
        int a7;
        int a8;
        int a9;
        DWORD a10;

        dwAddress = (DWORD)&this->Item;

        *(WORD *)dwAddress = Data->Type;
        a5 = Data->Dur;
        *(BYTE *)(dwAddress + 22) = a5;
        a6 = Data->Item[3];
        *(BYTE *)(dwAddress + 23) = a6;
        a7 = Data->Item[4];
        *(BYTE *)(dwAddress + 24) = a7;
        a8 = Data->Item[5];
        *(BYTE *)(dwAddress + 97) = (a8 & 2) >> 1 > 0;
        *(BYTE *)(dwAddress + 98) = (a8 & 4) >> 2 > 0;
        *(BYTE *)(dwAddress + 73) = 16 * (a8 & 8) >> 7 > 0;
        a9 = Data->Item[6];
        *(WORD *)(dwAddress + 69) = (a9 & 0xF0) >> 4;
        *(WORD *)(dwAddress + 71) = a9 & 0xF;

        a10 = (DWORD)&Data->Item[7];

        if (a10)
        {
            *(BYTE *)(dwAddress + 79) = 5;

            for (int i = 0; i < 5; ++i)
                *(BYTE *)(i + dwAddress + 74) = *(BYTE *)(i + a10);

            for (int j = 0; j < 5; ++j)
            {
                if (*(BYTE *)(j + a10) == 255)
                {
                    *(BYTE *)(dwAddress + 79) = j;
                    break;
                }

                if (*(BYTE *)(j + a10) == 254)
                {
                    *(BYTE *)(j + dwAddress + 80) = -1;
                }
                else
                {
                    *(BYTE *)(j + dwAddress + 80) = *(BYTE *)(j + a10) % 50;
                    *(BYTE *)(j + dwAddress + 85) = *(BYTE *)(j + a10) / 50 + 1;
                }
            }

            if (this->CheckItemInfo(*(WORD *)dwAddress))
            {
                *(BYTE *)(dwAddress + 90) = a9;
                *(WORD *)(dwAddress + 69) = 0;
                *(WORD *)(dwAddress + 71) = 0;
            }
            else
            {
                *(BYTE *)(dwAddress + 90) = -1;
            }
        }
        else
        {
            *(BYTE *)(dwAddress + 79) = 0;
        }

        *(BYTE *)(dwAddress + 96) = 0;
        *(DWORD *)(dwAddress + 103) = 1;

        if (Data->PeriodTime)
        {
            this->Item.PeriodItem = 1;
            this->Item.ExpireDateConvert = Data->PeriodTime;
        }

        ((void(__cdecl*)(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value)) 0x58B910)(&this->Item, Data->Item[1], Data->Item[3], Data->Item[4]);
    }
    this->Zen = Data->Zen;
    this->Wcoin = Data->Wcoin;
    memcpy_s(Text, 100, Data->Text, 100);
}
#endif

Interface.cpp
Code: [Select]
pLoadImage("Custom\\Desig\\giftboxnotice.tga", 531026, GL_LINEAR, GL_REPEAT, 1, 0);

on: August 10, 2023, 10:20:07 AM 9 Mu Online / Sources Generales / SOURCE RentSkin Lado Main

SOURCE RentSkin Lado Main






Agregar nuevo elementos RentSkin

Quote
RentSkin.cpp



Quote
RentSkin.h




Agreagr en Interface.cpp



Quote
Agregar al Final




Agregar en Protocol.cpp



Agregar en BOOL ProtocolCoreEx(BYTE head,BYTE* lpMsg,int size,int key) // OK




Code: [Select]
#if SKIN
            case 0x09:
                RentSkin.RecvData(lpMsg);
                break;
#endif



Character.cpp




Character.h




CustomMonster.cpp

Quote
Agregar en lpViewObj CCustomMonster::ShowMonster(int MonsterID, int a2, int a3, int a4)




Quote
Agregar al Final en el mismo CustomMonster.cpp




Quote
CustomMonster.h

Agregar en class CCustomMonster




Agregar en stdafx.h

Code: [Select]
#define SKIN            1


on: August 10, 2023, 08:23:06 AM 10 Mu Online / Sources Generales / Source ThueFlag Lado Main

Source ThueFlag Lado Main







Agrear Nuevos elementos  ThueFlag.h y ThueFlag.cpp


Quote
ThueFlag.h




Quote
ThueFlag.cpp




Quote
Interface.cpp

Agregar en void Interface::Load()





Agregar en interface.cpp
Agregar en

Quote
void Interface::Work()






Agregar en los siguientes .cpp
Quote
Interface.cpp
Protocol.cpp

Agregar esto
Code: [Select]
#include "ThueFlag.h"

Buscar void Interface::SetCursorFocus()

Agregar


Quote
Interface.h

Agregar en enum ObjectID
Code: [Select]
eMAIN_ThueFlag,
Quote
Protocol.cpp

Quote
Agregar dentro de BOOL ProtocolCoreEx(BYTE head,BYTE* lpMsg,int size,int key) // OK







stdafx.h



Central.cpp

Quote
Agregar dentro de int Centralizado::MoveRenderCameraDefault()

Code: [Select]
|| gInterface.Data[eMAIN_ThueFlag].OnShow


Creditos
Dakosmu Por la Guia
Source Cambiar o quitar el Copyright al Main




En Main.cpp


Code: [Select]
    SetCompleteHook(0xE9, 0x004D7D13, &CopyrightDakosmu); //Copyright SelectServer
    MemorySet(0x004D7E33, 0x90, 0x0F); //Remover Text Versión SelectServer

Interface.h

Code: [Select]
#define MAX_WIN_Dakosmu_WIDTH 640
Common.h

Code: [Select]
void CopyrightDakosmu();
Common.cpp





Quote
eYellow: un valor que especifica el color del texto a dibujar (en este caso, amarillo).

(MAX_WIN_WIDTH / 2) - 74: la coordenada X en la que se dibujará el texto. MAX_WIN_WIDTH es una constante que representa el ancho máximo de la ventana de juego, y se está dividiendo entre 2 para centrar el texto horizontalmente. Luego se le resta 74 para desplazarlo un poco hacia la izquierda.

470: la coordenada Y en la que se dibujará el texto. En este caso, se está dibujando cerca de la parte inferior de la ventana.

100: el ancho máximo que tendrá el texto. Si el texto es más largo que esto, se ajustará para caber dentro de los límites.

3: el número de líneas que tendrá el texto. Si el texto es más largo que esto, se ajustará para caber dentro de los límites.

"Servidor Completamente Gratis": el texto que se va a dibujar en la pantalla.




Esto no tiene nada que Ver con la guia.
solo son codigos de prueba los dejo aqui por si quieren mejorarlo o agregar


Efecto neon en la letras
Code: [Select]
// Dibuja el texto con efecto de neón
for (int i = 0; i < 5; i++) {
    gInterface.DrawFormat(eYellow, (MAX_WIN_WIDTH / 2) - 74 - i, 470 - i, 100, 3, "Servidor Completamente Gratis");
    gInterface.DrawFormat(eYellow, (MAX_WIN_WIDTH / 2) - 74 + i, 470 + i, 100, 3, "Servidor Completamente Gratis");
    gInterface.DrawFormat(eYellow, (MAX_WIN_WIDTH / 2) - 74 - i, 470 + i, 100, 3, "Servidor Completamente Gratis");
    gInterface.DrawFormat(eYellow, (MAX_WIN_WIDTH / 2) - 74 + i, 470 - i, 100, 3, "Servidor Completamente Gratis");
}
gInterface.DrawFormat(eYellow, (MAX_WIN_WIDTH / 2) - 74, 470, 100, 3, "Servidor Completamente Gratis");



Creditos
dakosmu Por la Guia

on: July 12, 2023, 06:56:03 PM 12 Mu Online / Sources Generales / Source DailyReward Side Main

Source DailyReward Lado Cliente






Code: [Select]
    if (gProtect.m_MainInfo.DailyReward == 1)
    {
    DailyReward.Draw();
    }


Code: [Select]
#include "DailyReward.h"

DailyReward.h


DailyReward.cpp
Code: [Select]
#include "stdafx.h"
#if(DAILY)
#include "DailyReward.h"
#include "Import.h"
#include "NewFont.h"
#include <ctime>
#include "Interface.h"
#include "Defines.h"
cDailyReward DailyReward;

cDailyReward::cDailyReward()
{
    this->Init();
}

cDailyReward::~cDailyReward()
{
}

void cDailyReward::Init()
{
    this->SetWindow(false);
    this->SetRect(120, 70, 400, 255);
    this->SetTitle("Daily Reward", 0xc1c1c1ff, 0x0, 1);
    this->SelectedDay = 1;
}

unsigned char last_day_of_month(int year, unsigned char month) {
    return month != 2 ? ((month ^ (month >> 3))) | 30 :
        year % 4 ? 29 : 28;
}

void cDailyReward::ClearDayGift()
{
    this->DayInfo = false;
    this->Type = -1;
    this->Level = 0;
    this->Ex = 0;
    this->Zen = 0;
    this->Wcoin = 0;
}
int ImgTag100 = 0;
void cDailyReward::DrawIcon() //focus move box daily
{

    if (gInterface.CheckWindow(CashShop)
        || gInterface.CheckWindow(SkillTree)
        || gInterface.CheckWindow(FullMap)
        || gInterface.CheckWindow(MoveList)
        || gInterface.CheckWindow(Inventory)
        || gInterface.CheckWindow(ExpandInventory)
        || gInterface.CheckWindow(Store)
        || gInterface.CheckWindow(Inventory)
        || gInterface.CheckWindow(Party)
        || gInterface.CheckWindow(Trade)
        || gInterface.CheckWindow(Warehouse)
        || gInterface.CheckWindow(ExpandWarehouse))
    {
        return;
    }
    int j;

    if (!Blink)
    {
        return;
    }

    CustomFont.Draw(CustomFont.FontNormal, 73, 60, 0xffffffff, 0x00000050, 0, 0, 3, "Daily Reward"); //Move Daily Reward - 70 lados - 60 arriba
    int speed = 2, r = 0;
    if (ImgTag100 >= 25 * speed) ImgTag100 = 0;

    r = floor((float)ImgTag100 / (float)speed);

    RenderBitmap(531026, 80, 30, 102.4 / 2, 93.4 / 2, (r % 5) * 102.4 / 512.0, (r - (r % 5)) / 5 * 93.4 / 512.0, 102.4 / 512.0, 93.4 / 512.0, 0, 1, 0.0);
    ImgTag100++; //Move Box Daily -- 80 lados -- 30 Ariba+Abajo


    if (IsWorkZone(80, 30,40, 40, false))
    {
        if (pIsKeyRelease(VK_LBUTTON) && IsOnWindow())
            DailyReward.ToggleWindow(true);

    }


    if (IsWorkZone(80, 30,40, 40, false))
    {
        pSetCursorFocus = true;
    }
    else pSetCursorFocus = false;

}

void cDailyReward::Draw()
{
    if (pPlayerState < GameProcess)
    {
        return;
    }
    if (gInterface.CheckWindow(ObjWindow::CashShop)
        || gInterface.CheckWindow(ObjWindow::FriendList)
        || gInterface.CheckWindow(ObjWindow::MoveList)
        || gInterface.CheckWindow(ObjWindow::Party)
        || gInterface.CheckWindow(ObjWindow::Quest)
        || gInterface.CheckWindow(ObjWindow::NPC_Devin)
        || gInterface.CheckWindow(ObjWindow::Guild)
        || gInterface.CheckWindow(ObjWindow::Trade)
        || gInterface.CheckWindow(ObjWindow::Warehouse)
        || gInterface.CheckWindow(ObjWindow::ChaosBox)
        || gInterface.CheckWindow(ObjWindow::CommandWindow)
        || gInterface.CheckWindow(ObjWindow::PetInfo)
        || gInterface.CheckWindow(ObjWindow::Shop)
        || gInterface.CheckWindow(ObjWindow::Inventory)
        || gInterface.CheckWindow(ObjWindow::Store)
        || gInterface.CheckWindow(ObjWindow::OtherStore)
        || gInterface.CheckWindow(ObjWindow::Character)
        || gInterface.CheckWindow(ObjWindow::DevilSquare)
        || gInterface.CheckWindow(ObjWindow::BloodCastle)
        || gInterface.CheckWindow(ObjWindow::CreateGuild)
        || gInterface.CheckWindow(ObjWindow::GuardNPC)
        || gInterface.CheckWindow(ObjWindow::SeniorNPC)
        || gInterface.CheckWindow(ObjWindow::GuardNPC2)
        || gInterface.CheckWindow(ObjWindow::CastleGateSwitch)
        || gInterface.CheckWindow(ObjWindow::CatapultNPC)
        || gInterface.CheckWindow(ObjWindow::CrywolfGate)
        || gInterface.CheckWindow(ObjWindow::IllusionTemple)
        || gInterface.CheckWindow(ObjWindow::HeroList)
        || gInterface.CheckWindow(ObjWindow::ChatWindow)
        || gInterface.CheckWindow(ObjWindow::FastMenu)
        || gInterface.CheckWindow(ObjWindow::Options)
        || gInterface.CheckWindow(ObjWindow::Help)
        || gInterface.CheckWindow(ObjWindow::FastDial)
        || gInterface.CheckWindow(ObjWindow::SkillTree)
        || gInterface.CheckWindow(ObjWindow::GoldenArcher1)
        || gInterface.CheckWindow(ObjWindow::GoldenArcher2)
        || gInterface.CheckWindow(ObjWindow::LuckyCoin1)
        || gInterface.CheckWindow(ObjWindow::LuckyCoin2)
        || gInterface.CheckWindow(ObjWindow::NPC_Duel)
        || gInterface.CheckWindow(ObjWindow::NPC_Titus)
        || gInterface.CheckWindow(ObjWindow::CashShop)
        || gInterface.CheckWindow(ObjWindow::Lugard)
        || gInterface.CheckWindow(ObjWindow::QuestList1)
        || gInterface.CheckWindow(ObjWindow::QuestList2)
        || gInterface.CheckWindow(ObjWindow::Jerint)
        || gInterface.CheckWindow(ObjWindow::FullMap)
        || gInterface.CheckWindow(ObjWindow::NPC_Dialog)
        || gInterface.CheckWindow(ObjWindow::GensInfo)
        || gInterface.CheckWindow(ObjWindow::NPC_Julia)
        || gInterface.CheckWindow(ObjWindow::NPC_ChaosMix)
        || gInterface.CheckWindow(ObjWindow::ExpandInventory)
        || gInterface.CheckWindow(ObjWindow::ExpandWarehouse)
        || gInterface.CheckWindow(ObjWindow::MuHelper)
        )
    {

        this->CloseWindow(true);
    }

    if (!CheckWindow())
    {
        DrawIcon();
        return;
    }
    this->DrawBase();

    tm today;
    time_t ltime;
    time(&ltime);
    localtime_s(&today, &ltime);

    char* DoW[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" };

    float sW = 35, sH = 38;
    int i, v1, v2, v3, v4, v5;
    v3 = this->FWday;
    v4 = this->MaxDay;
    for (i = 0; i < 7; i++)
    {
        CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * i, y + 35, 0xffffffff, 0xc1c1c150, sW - 2, 0, 3, DoW[i]);
    }
    if (Loaded)
    {
        for (i = v3; i < (v3 + v4); i++)
        {
            v1 = i % cDR_SPLIT_DAY;
            v2 = (i - v1) / cDR_SPLIT_DAY;
            v5 = i - v3 + 1;
            //
            if (SelectedDay == v5)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * v1, y + 52 + v2 * sH, 0xffffffff, 0x00000050, sW - 2, sH - 2, 3, " ");
            }
            if (SelectedDay == v5 && State[v5 - 1] == 0) //selecting
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            else if (IsWorkZone(x + 15 + sW * v1, y + 52 + v2 * sH, sW - 2, sH - 2, true))
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
                if (pIsKeyRelease(VK_LBUTTON))
                {
                    SelectedDay = v5;
                    if (State[v5 - 1] == 0)
                    {
                        this->SendRequest(0x01, SelectedDay);
                        this->ClearDayGift();
                    }
                }
            }
            else if (State[v5 - 1] == 0) //
            {
                RenderBitmap(531020, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            else
            {
                RenderBitmap(531021, x + 8 + sW * v1 + (sW - 16) / 2, y + 50 + v2 * sH, 45, 45, 0.0, 0.0, 1.0, 1.0, 1, 1, 0.0);
            }
            CustomFont.Draw(CustomFont.FontNormal, x + 15 + sW * v1, y + 52 + v2 * sH + sH - 13, 0xffffffff, (v5) != today.tm_mday ? 0x00000050 : 0x00ff007f, sW - 2, 12, 3, "%d", v5);
        }

        if (SelectedDay != 0)
        {
            if (State[SelectedDay - 1] != 0)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "Complete", Wcoin);
            }
            else if (DayInfo)
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "Wcoin : %d", Wcoin);
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 65, 0xffffffff, 0x00000050, 130, 0, 3, "Zen : %d", Zen);

                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 80, 0xffffffff, 0x00000050, 130, 0, 3, Text);

                if (SelectedDay <= today.tm_mday)
                {
                    this->DrawButton(32331, x - 5 + 75 * 4, y + h - 50, 73, 27, 128.0, 128.0, DailyReward.RecvGiftAction);
                    CustomFont.Draw(CustomFont.FontNormal, x - 5 + 75 * 4, y + h - 42.5, 0xffffffff, 0x0, 73, 0, 3, "Rewarded");
                }

                CustomFont.Draw(CustomFont.FontNormal, x + 280, y + 100, 0xffffffff, 0x00000050, 90, 90, 3, " ");

                gInterface.DrawItem2(x + 280, y + 100, 90, 90, this->Type, this->Level, this->Ex, 0, 0);


                if (IsWorkZone(x + 280, y + 100, 90, 90, true))
                {
                    gInterface.DrawItemToolTipText((void*)&Item, *(int*)0x879340C, *(int*)0x8793410 + 25);
                    glColor3f(1, 1, 1);
                    pSetBlend(false);
                }
            }
            else
            {
                CustomFont.Draw(CustomFont.FontNormal, x + 260, y + 50, 0xffffffff, 0x00000050, 130, 0, 3, "No Data...", Wcoin);
            }
        }
    }
    else
    {
        CustomFont.Draw(CustomFont.FontNormal, x + 60, y + 50, 0xffffffff, 0x00000050, 200, 0, 3, "No Data...");
    }
}

bool cDailyReward::AllowedGift()
{
    return Loaded && State[SelectedDay - 1] == 0 && SelectedDay <= CurDay;
}
void cDailyReward::SendRequest(BYTE type, int value)
{
    PMSG_DAILY_REWARD_SEND pRequest;
    pRequest.h.set((LPBYTE)&pRequest, 0xFB, 0x02, sizeof(pRequest));
    pRequest.Type = type;
    pRequest.Value = value;
    DataSend((LPBYTE)&pRequest, pRequest.h.size);
}

void cDailyReward::RecvGiftAction(LPVOID pClass)
{
    cDailyReward* This = (cDailyReward*)pClass;

    if (This->AllowedGift())
    {
        This->SendRequest(0x02, This->SelectedDay);
    }
}

void cDailyReward::OnOpen()
{
    this->Loaded = false;
    this->DayInfo = false;
    this->SendRequest(0x0, 0x0);
}
void cDailyReward::OnClose()
{
}

void cDailyReward::ToggleWindow(bool mode)
{
    SetWindow(!CheckWindow(), mode);
}
void cDailyReward::OpenWindow(bool mode)
{
    SetWindow(true, mode);
}
void cDailyReward::CloseWindow(bool mode)
{
    SetWindow(false, mode);
}
void cDailyReward::SetWindow(bool state, bool mode)
{
    this->Drawing = state;
    if (mode)
        CheckWindow() ? OnOpen() : OnClose();
}

void cDailyReward::GCRecvUserInfo(BYTE* a)
{
    PMSG_DAILY_REWARD_USER_INFO_RECV* Data = (PMSG_DAILY_REWARD_USER_INFO_RECV*)a;
    this->CurDay = Data->CurDay;
    this->MaxDay = Data->MaxDay;
    this->FWday = Data->FWday;
    this->Timer = Data->Timer;

    for (int i = 0; i < 31; i++)
    {
        this->State[i] = Data->State[i];
    }

    if (State[CurDay - 1] == 0)
    {
        Blink = true;
    }
    else
    {
        Blink = false;
    }

    Loaded = true;
}
int cDailyReward::CheckItemInfo(signed int a1)
{
    if (a1 > 3092)
    {
        if (a1 > 4661)
        {
            if (a1 > 5685 || a1 < 5676 && (a1 < 5164 || a1 > 5173))
                return 0;
        }
        else if (a1 < 4652 && (a1 > 4149 || a1 < 4140 && (a1 < 3628 || a1 > 3637)))
        {
            return 0;
        }

        return 1;
    }

    if (a1 >= 3089)
        return 1;

    if (a1 > 2071)
    {
        if (a1 != 2580 && (a1 <= 2589 || a1 > 2592))
            return 0;
        return 1;
    }

    if (a1 == 2071 || a1 <= 1041 && (a1 >= 1040 || a1 >= 26 && a1 <= 28))
        return 1;

    return 0;
}

void cDailyReward::GCRecvDayInfo(BYTE* a)
{
    PMSG_DAILY_REWARD_DAY_INFO_RECV* Data = (PMSG_DAILY_REWARD_DAY_INFO_RECV*)a;

    DayInfo = true;
    if (Data->Type != -1)
    {
        this->Type = Data->Type;

        DWORD dwAddress;
        int a5;
        int a6;
        int a7;
        int a8;
        int a9;
        DWORD a10;

        dwAddress = (DWORD)&this->Item;

        *(WORD *)dwAddress = Data->Type;
        a5 = Data->Dur;
        *(BYTE *)(dwAddress + 22) = a5;
        a6 = Data->Item[3];
        *(BYTE *)(dwAddress + 23) = a6;
        a7 = Data->Item[4];
        *(BYTE *)(dwAddress + 24) = a7;
        a8 = Data->Item[5];
        *(BYTE *)(dwAddress + 97) = (a8 & 2) >> 1 > 0;
        *(BYTE *)(dwAddress + 98) = (a8 & 4) >> 2 > 0;
        *(BYTE *)(dwAddress + 73) = 16 * (a8 & 8) >> 7 > 0;
        a9 = Data->Item[6];
        *(WORD *)(dwAddress + 69) = (a9 & 0xF0) >> 4;
        *(WORD *)(dwAddress + 71) = a9 & 0xF;

        a10 = (DWORD)&Data->Item[7];

        if (a10)
        {
            *(BYTE *)(dwAddress + 79) = 5;

            for (int i = 0; i < 5; ++i)
                *(BYTE *)(i + dwAddress + 74) = *(BYTE *)(i + a10);

            for (int j = 0; j < 5; ++j)
            {
                if (*(BYTE *)(j + a10) == 255)
                {
                    *(BYTE *)(dwAddress + 79) = j;
                    break;
                }

                if (*(BYTE *)(j + a10) == 254)
                {
                    *(BYTE *)(j + dwAddress + 80) = -1;
                }
                else
                {
                    *(BYTE *)(j + dwAddress + 80) = *(BYTE *)(j + a10) % 50;
                    *(BYTE *)(j + dwAddress + 85) = *(BYTE *)(j + a10) / 50 + 1;
                }
            }

            if (this->CheckItemInfo(*(WORD *)dwAddress))
            {
                *(BYTE *)(dwAddress + 90) = a9;
                *(WORD *)(dwAddress + 69) = 0;
                *(WORD *)(dwAddress + 71) = 0;
            }
            else
            {
                *(BYTE *)(dwAddress + 90) = -1;
            }
        }
        else
        {
            *(BYTE *)(dwAddress + 79) = 0;
        }

        *(BYTE *)(dwAddress + 96) = 0;
        *(DWORD *)(dwAddress + 103) = 1;

        if (Data->PeriodTime)
        {
            this->Item.PeriodItem = 1;
            this->Item.ExpireDateConvert = Data->PeriodTime;
        }

        ((void(__cdecl*)(ObjectItem * lpItem, BYTE Option, BYTE Special, BYTE Value)) 0x58B910)(&this->Item, Data->Item[1], Data->Item[3], Data->Item[4]);
    }
    this->Zen = Data->Zen;
    this->Wcoin = Data->Wcoin;
    memcpy_s(Text, 100, Data->Text, 100);
}
#endif

Creditos Dakosmu


on: July 10, 2023, 05:32:23 PM 13 Mu Online / Sources Generales / Source Registro By OBBY Season 6

Source  Registro en Main, JoinServer, Gameserver By OBBY Season 6





les compartos la guia completa para agregar el sistema de Registro en Main... Recuerden que las todas las beses no son iguales...

Espero que les funciones a todos  rebote


Protocol.h

Code: [Select]
typedef struct
{
  #pragma pack(1)
  PSBMSG_HEAD Header;
  char lpszID[10];
  char lpszPass[20];
  char lpszPCode[20];
  char lpszEmail[50];
  DWORD TickCount;
  BYTE Versión[5];
  Serie BYTE[16];
  #pragma pack()
} PBMSG_REGISTER_ACCOUNT, * LPPBMSG_REGISTER_ACCOUNT;


Protocol.cpp

Code: [Select]
#include "LoginMainWin.h"
Code: [Select]
// Dentro de:

case 0xF1:
        switch(((lpMsg[0 ]==0xC1)?lpMsg[3]:lpMsg[4]))
        {
                                .
            .
            .
                  .
            caso 0x12:
            g_pLoginMainWin.ReciveCreateAccount(((lpMsg[0]==0xC1)?lpMsg[4]:lpMsg[5]));
            romper;
        }
        break;


Interface.cpp


Code: [Select]
// Agregar Seccion IMAGEN

// AutoLogin / Register
  LoadBitmapA("Custom\\Desig\\login_auto.tga", 531141, GL_NEAREST, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\login_auto.tga", 531141, GL_NEAREST, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\Login.tga", 71621, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\1.tga", 71622, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\2.tga", 71623, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\3.tga", 71624, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\4.tga", 71625, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\5.tga", 71626, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\6.tga", 71627, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\8.tga", 71629, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\9.tga", 71630, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\10.tga", 71630, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\login_back.tga", 71631, GL_LINEAR, GL_CLAMP, 1, 0);
  LoadBitmapA("Personalizado\\Diseño\\reloadcap.jpg", 71632, GL_LINEAR, GL_CLAMP, 1, 0);


Main.cpp

Code: [Select]
#include "LoginMainWin.h"
#include "AutoLoginWin.h"

Code: [Select]
// Agregar dentro de:

extern "C" _declspec(dllexport) void EntryProc() / / Aceptar
{     
//
//
//
//
   
      g_pLoginMainWin.Init(); // Inicio de sesión automático / Registro
      AutoLogin.Load(); // Auto Login / Register
   
}


Seguimos con SRC JOINSERVE

stdafx.h

Code: [Select]
// Abajo de

#define JOINSERVER_VERSION

// Agregar:

#define OBBY 1

JoinServerProtocol.cpp
Code: [Select]
// Abajo de :

      caso 0x30:
        GJExternalDisconnectAccountRecv((SDHP_EXTERNAL_DISCONNECT_ACCOUNT_RECV*)lpMsg,index);
        romper;

// Agregar:

#if(OBBY)
      case 0x40:
        GJRegisterAccountRecv((SDHP_REGISTER_ACCOUNT_SEND*)lpMsg,index);
        romper;
#endif

Code: [Select]
// Abajo de:

  gLog.Output(LOG_ACCOUNT,"[AccountInfo] Cuenta conectada (Cuenta: %s, IpAddress: %s, GameServerCode: %d)",AccountInfo.Account,AccountInfo. Dirección IP, Información de la cuenta. Código del servidor del juego);
}

// Agregar:

#if(OBBY)
void GJRegisterAccountRecv(SDHP_REGISTER_ACCOUNT_SEND* lpMsg,int index)
{
  SDHP_CONNECT_ACCOUNT_SEND pMsg;

  pMsg.header.set(0x40,sizeof(pMsg));

  pMsj.index = lpMsg->index;
 
  memcpy(pMsg.cuenta,lpMsg->cuenta,tamaño(pMsg.cuenta));

  pMsg.result = CREATE_ACCOUNT_FAIL_ID;

  if(CheckTextSyntax(lpMsg->cuenta,tamaño(lpMsg->cuenta)) == 0)
  {
      pMsg.result = CREATE_ACCOUNT_FAIL_RESIDENT;
      gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
      LogAdd(LOG_RED,"Cuenta %s Registrar falla en la sintaxis!");
      devolver;
  }

    if(gAccountManager.GetAccountCount() >=
#if PROTECT_STATE
        gJoinServerMaxAccount[gProtect.m_AuthInfo.PackageType][gProtect.m_AuthInfo.PlanType]
#else
        MAX_ACCOUNT
#endif
        )
  if(gAccountManager.GetAccountCount() >= gJoinServerMaxAccount[gProtect.m_AuthInfo.PackageType][gProtect.m_AuthInfo.PlanType])
  {
      pMsg.result = CREATE_ACCOUNT_FAIL_RESIDENT;
      gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
      LogAdd(LOG_RED,"Error en el registro de la cuenta %s, ¡¡¡CONEXIÓN!!!");
      devolver;
  }
  if(MD5Encryption == 0)
  {
      if(gQueryManager.ExecQuery("SELECT memb__pwd FROM MEMB_INFO WHERE memb___id='%s' COLLATE Latin1_General_BIN",lpMsg->account) == 0 || gQueryManager.Fetch() == SQL_NO_DATA)
      {
        gQueryManager.Cerrar();
        if (gQueryManager.ExecQuery("INSERT INTO dbo.MEMB_INFO(memb___id, memb__pwd, memb_name, sno__numb, mail_addr, mail_chek, block_code, ctl1_code) VALORES ('%s', '%s', '%s', '%s' , '%s', 1, 0, 1)",
            lpMsg->cuenta,
            lpMsg->contraseña,
            "JoinServer",
            lpMsg->código personal,
            lpMsg->Email) == TRUE)
        {
            gQueryManager.Close();
            pMsg.result = CREAR_CUENTA_ÉXITO;
            gLog.Output(LOG_ACCOUNT, "[AccountInfo] Cuenta creada (Cuenta: %s, Contraseña: %s )", lpMsg->cuenta, lpMsg->contraseña);
        }
      }
      else
      {
        pMsg.result = CREATE_ACCOUNT_FAIL_ID;
        gQueryManager.Cerrar();
      }
  }
  else
  {
      if(gQueryManager.ExecQuery("SELECT memb__pwd FROM MEMB_INFO WHERE memb___id='%s'",lpMsg->account) == 0 || gQueryManager.Fetch() == SQL_NO_DATA) { gQueryManager.Close(
      )
        ;
        if (gQueryManager.ExecQuery("INSERT INTO dbo.MEMB_INFO(memb___id, memb__pwd, memb_name, sno__numb, mail_addr, mail_chek, block_code, ctl1_code) VALORES ('%s', '%s', '%s', '%s' , '%s', 1, 0, 1)",
            lpMsg->cuenta,
            lpMsg->contraseña,
            "JoinServer",
            lpMsg->códigopersonal,



            pMsg.result = CREAR_CUENTA_ÉXITO;
            gLog.Output(LOG_ACCOUNT, "[AccountInfo] Cuenta creada (Cuenta: %s, Contraseña: %s )", lpMsg->cuenta, lpMsg->contraseña);
        }
      }
      else
      {
        pMsg.result = CREATE_ACCOUNT_FAIL_ID;
        gQueryManager.Cerrar();
      }
   
  }
  gSocketManager.DataSend(índice,(BYTE*)&pMsg,pMsg.header.size);
}
#endif


JoinServerProtocol.h

Code: [Select]
//Abajo de
#pragma once

//Agregar Esto

#define CREATE_ACCOUNT_FAIL_ID 0
#define CREATE_ACCOUNT_SUCCESS 1
#define CREATE_ACCOUNT_FAIL_RESIDENT 2

Code: [Select]
// Abajo de:
char IpAddress[16];
};

// Agregar:

#if(OBBY)
struct SDHP_REGISTER_ACCOUNT_SEND
{
  PBMSG_HEAD header; // C1:01
  índice de PALABRA;
  cuenta char[11];
  contraseña de char[11];
  char código personal[11];
  char Correo electrónico[50];
};
#endif [code]

[code] // Abajo de:

void GJAccountLockSaveRecv(SDHP_LOCK_SAVE_RECV* lpMsg,int index);

// Agregar:

#if(OBBY)
void GJRegisterAccountRecv(SDHP_REGISTER_ACCOUNT_SEND* lpMsg,int index);
#endif



Seguimos con SRC GAMERSERVE

stdafx.h
Code: [Select]
// Agregar:

#define OBBY 1

JSProtocol.cpp

Code: [Select]
// Abajo de:

      case 0x30:
        JGAccountAlreadyConnectedRecv((SDHP_ACCOUNT_ALREADY_CONNECTED_RECV*)lpMsg);
        romper;
       
// Agregar:

#if(OBBY)
      case 0x40:
        JGRegisterAccountRecv((SDHP_CONNECT_ACCOUNT_RECV*)lpMsg);
        romper;
#endif


Code: [Select]
// Abajo de:

void JGServerInfoRecv(SDHP_JOIN_SERVER_INFO_RECV* lpMsg) // OK
{

}

// Agregar:

#if(OBBY)
void JGRegisterAccountRecv(SDHP_CONNECT_ACCOUNT_RECV* lpMsg) // OK
{
  if(OBJECT_RANGE( lpMsg->index) == 0)
  {
      volver;
  }

  if((gObj[lpMsg->index].LoginMessageSend--) == 0)
  {
      CloseClient(lpMsg->index);
      devolver;
  }

  if(gObj[lpMsg->index].Connected != OBJECT_CONNECTED)
  {
      GJDisconnectAccountSend(lpMsg->index,lpMsg->account,gObj[lpMsg->index].IpAddr);
      devolver;
  }

  GCRegisterAccountSend(lpMsg->índice, lpMsg->resultado);
  devolver;
}
#endif [code]


[code]// Abajo de:

gJoinServerConnection.DataSend((BYTE*)&pMsg,pMsg.header.size);
}

// Agregar:

#if(OBBY)
void GJRegisterAccountSend(int aIndex,char* cuenta,char* contraseña,char* código personal,char* Email)
{
  SDHP_REGISTER_ACCOUNT_SEND pMsj;

  pMsg.header.set(0x40,sizeof(pMsg));

  pMsg.index = aIndex;

  memcpy(pMsg.cuenta,cuenta,tamaño(pMsg.cuenta));

  memcpy(pMsg.contraseña,contraseña,tamaño(pMsg.contraseña));

  memcpy(pMsg.personalcode,personalcode,sizeof(pMsg.personalcode));

  memcpy(pMsg.Email,Email,sizeof(pMsg.Email));

  gJoinServerConnection.DataSend((BYTE*)&pMsg,pMsg.header.size);
}
#endif [code]


JSProtocol.h

[code]// Abajo de:

char IpAddress[16];
};

// Agregar:

#if(OBBY)
struct SDHP_REGISTER_ACCOUNT_SEND
{
  PBMSG_HEAD header; // C1:01
  índice de PALABRA;
  cuenta char[11];
  contraseña de char[11];
  char código personal[11];
  char Correo electrónico[50];
};
#endif


Code: [Select]
// Abajo de:

void GJAccountLockSaveSend(int aIndex,int Lock);

// Agregar:

#if(OBBY)
void JGRegisterAccountRecv(SDHP_CONNECT_ACCOUNT_RECV* lpMsg);
void GJRegisterAccountSend(int aIndex,char* cuenta,char* contraseña,char* código personal,char* IpAddress);
#endif

Protocol.cpp
Code: [Select]
// Abajo de:

            case 0x02:
              CGCloseClientRecv((PMSG_CLOSE_CLIENT_RECV*)lpMsg,aIndex);
              romper;

// Agregar:
#if(OBBY)
            caso 0x12:
              CGRegisterAccountRecv((PMSG_REGISTER_ACCOUNT_RECV*)lpMsg,aIndex);
              devolver;
#endif

Code: [Select]
// Abajo de:

GJConnectAccountSend(aIndex, cuenta, contraseña, lpObj->IpAddr);
  }

#endif
}

// Agregar:

#if(OBBY)
void CGRegisterAccountRecv(PMSG_REGISTER_ACCOUNT_RECV* lpMsg,int aIndex)
{
  LPOBJ lpObj = &gObj[aIndex];

  if(lpObj->Connected != OBJECT_CONNECTED)
  {
      CloseClient(aIndex);
      devolver;
  }

  if(memcmp(gServerInfo.m_ServerVersion,lpMsg->ClientVersion,sizeof(lpMsg->ClientVersion)) != 0)
  {
      GCConnectAccountSend(aIndex,6);
      devolver;
  }

  if(memcmp(gServerInfo.m_ServerSerial,lpMsg->ClientSerial,sizeof(lpMsg->ClientSerial)) != 0)
  {
      GCConnectAccountSend(aIndex,6);
      devolver;
  }

  if(lpObj->LoginMessageSend == 0)
  {
      lpObj->LoginMessageSend++;
      lpObj->LoginMessageCount++;
      lpObj->ConnectTickCount = GetTickCount();
      lpObj->ClientTickCount = lpMsg->TickCount;
      lpObj->ServerTickCount = GetTickCount();

      cuenta char[11] = {0};

      PacketArgumentDecrypt(cuenta,lpMsg->cuenta,(tamañode(cuenta)-1));

      char contraseña[11] = {0};

      PacketArgumentDecrypt(contraseña,lpMsg->contraseña,(tamañode(contraseña)-1));

      char CódigoPersonal[11] = {0};

      PacketArgumentDecrypt(PersonalCode,lpMsg->PersonalCode,(sizeof(PersonalCode)-1));

      char Correo electrónico personal[50] = {0};

      PacketArgumentDecrypt(Correo electrónico personal, lpMsg->szEmail, (tamaño de (Correo electrónico personal)-1));

      lpObj->MapServerMoveRequest = 0;
      lpObj->ÚltimoCódigoServidor = -1;
      lpObj->DestMap = -1;
      lpObj->DestX = 0;
      lpObj->DestY = 0;

      GJRegisterAccountSend(aIndex,cuenta,contraseña,PersonalCode, PersonalEmail);
  }
}
#endif [code]


[code]// Abajo de:

DataSend(aIndex,(BYTE*)&pMsg,pMsg.header.size);
}

// Agregar:

#if(OBBY)
void GCRegisterAccountSend(int aIndex,BYTE result) // OK
{
  PMSG_CONNECT_ACCOUNT_SEND pMsg;

  pMsg.header.set(0xF1,0x12,sizeof(pMsg));

  pMsj.resultado = resultado;

  DataSend(aIndex,(BYTE*)&pMsg,pMsg.header.size);
}
#endif

Protocol.h

Code: [Select]
// Abajo de:

BYTE ClientSerial[16];
  #pragma pack()
  #endif
};

// Agregar:

#if(OBBY)
struct PMSG_REGISTER_ACCOUNT_RECV
{
  #pragma pack(1)
  PSBMSG_HEAD header; // C3:F1:01
  cuenta char[10];
  contraseña char[20];
  char CódigoPersonal[20];
  char szEmail[50];
  DWORD TickCount;
  BYTE ClientVersion[5];
  BYTE ClientSerial[16];
  #paquete pragmático()
};
#endif
Code: [Select]
// Abajo de:

  void CGReqCastleHuntZoneEntrance(PMSG_REQ_MOVE_TO_CASTLE_HUNTZONE * aRecv, int iIndex);

// Agregar:

#if(OBBY)
  void GCRegisterAccountSend(int aIndex,BYTE result);
  void CGRegisterAccountRecv(PMSG_REGISTER_ACCOUNT_RECV* lpMsg,int aIndex);
#endif



Creditos
OBBY

on: July 10, 2023, 05:20:50 PM 14 Mu Online / Season6 / Files S6 Upgrade pyke 2023 V0.6 By OBBY

Files S6 Upgrade pyke 2023 V 0.6
7 de Junio del 2023

ChangeLog

Quote
=======================
V 1 Dakosmu / OBBY
=======================
ADD: REGISTRO EN MAIN
FIX: MASTER SKIL LVL
ADD: DATA/CHARACTER/DefaultClassInfo  //Balance De pj: Vida & Energia
ADD: GAMESERVER/GameServerInfo - Character  & GameServerInfo - Skill //En proceso : Balances de skill, pvp
ADD: DATA/COMMAND // Ordenado y modificado
ADD: Sulepan Lo e modificado su drop
ADD: FIX CONSUMO MAIN
ADD: INFORMACION MAIN
FIX: TAMAÑO ITEMS
FIX: TESTE LETRA C
ADD: Enable y Disable MAIN INFO: Fenrir, Horse y Dinorant // SafeZone


Imagenes








Descargas

Update del V.0.1 hasta el V.0.6


VirusTotal
https://www.virustotal.com/gui/file/dfaf9afc5bb82d3b9da3454e20217435481676c2fe760fe4357f84ceb6c14b74?nocache=1

Creditos
Dakosmu / OBBY
Buenas Noches o Buenos días. Aqui les dejo estos increíbles Files y son estables para levantar un server Mu

Algunas Imágenes de este grandioso trabajo

























Descarga de Files

MuServer

Cliente

Tools


Contraseñas: guiaservermu.com

Creditos: webzen
              xteam
              muemu
              Exteam
              Pyke
              ainz
Pages: [1] 2