Mostrar posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Shrimp

Paginas: [1] 2 3 ... 5
1
Launcher / Re: BSTeam Launcher
« Posteado: April 11, 2025, 02:09:02 PM »
Acabei de baixar pelo link do Discord e está acusando vírus. =(
I had sent a different submission to microsoft it was stolen to remove the false/positive warning now and wait :D

2
Launcher / Re: BSTeam Launcher
« Posteado: April 10, 2025, 11:39:01 AM »
Link for download please, thanks!
discord link has been added :D

3
Launcher / LAUNCHER BSTeam Launcher
« Posteado: April 09, 2025, 03:46:17 AM »
🚀 MuOnline - Launcher by BSTeam: The Ultimate Launcher for Mu Online with Auto Updates and Modern Design!
Are you tired of outdated, complicated launchers with clunky interfaces? Introducing MuOnline - Launcher , a cutting-edge solution brought to you by BSTeam , designed for Mu Online players who value efficiency, simplicity, and style!

✨ Why Choose MuOnline - Launcher?
✅ Smart Auto-Update System: Say goodbye to outdated versions! Our launcher automatically checks for updates and downloads everything you need in seconds. Plus, it uses an intelligent system that verifies if the update has already been downloaded, saving you time and bandwidth.
🎨 Customize Your Background: Want to personalize your launcher? With our exclusive feature, you can easily change the background of the launcher, making your experience more immersive and unique.
⚙️ Simple and Intuitive Settings: No need to waste time figuring out complex systems. Our launcher is designed to be user-friendly, even for beginners. Everything is organized clearly and logically.
⚡ Modern and Attractive Design: Ditch outdated interfaces! MuOnline - Launcher features a sleek, modern, and professional design, offering an incredible visual experience while you manage your game.
🔒 Free Trial License Available: Want to try all the features before committing? Simply join our official Discord server and request your free trial license. It's quick, easy, and hassle-free!
🌟 Why is MuOnline - Launcher the Smart Choice?
Our goal is to provide the best possible experience for Mu Online players. With automatic updates, customization options, and a modern design, MuOnline - Launcher is the perfect tool for those seeking convenience and quality.

🔗 How to Get Your Free Trial License?
It’s simple! Just follow these steps:

Join our official Discord server: https://discord.gg/4d3jzePstJ 👈
Head to the #licenses channel and follow the instructions to generate your free trial license.
Download the launcher and start enjoying all its features right away!
📢 Join Our Community Today!
We’re constantly working to improve MuOnline - Launcher and add new features. Your feedback is incredibly valuable to us! Join our Discord community, share your thoughts, and help us grow.

👉 Download now and experience the future of launchers for Mu Online!
Scan Files - https://www.virustotal.com/gui/file/f1796929ba09fc0914d29dd8a0ebe42c3f00cb16c2478f567abce47ca997531c

4
Compra / Venta de archivos / Re: Launcher Source
« Posteado: April 06, 2025, 12:18:50 PM »
New release adapted for MuOnline and now we have an options button.

5
Compra / Venta de archivos / Vendo Launcher Source
« Posteado: April 04, 2025, 10:00:38 PM »

7
Compra / Venta de archivos / Vendo Source Launcher - License + Aunth Panel
« Posteado: January 24, 2025, 02:56:40 PM »
Hello, last year I was developing this launcher, but I won’t be continuing with it anymore. The launcher's interface was based on the Webzen launcher. However, you can customize it as you wish since it was programmed in WPF XAML, making it easier to redesign. I chose WPF because I intended to create a license system to commercialize it. A simple license panel was developed in MySQL, along with a panel where you can define the update URL and button URLs. Additionally, a registration button was added to the launcher, which is configurable via the launcher panel. The update generator is also integrated into the launcher panel to make it easier for clients. The license management and creation panel is quite simple, as it wasn’t fully completed—it was only made to fulfill the purpose of making the license system work.
Launcher Designer




Launcher Panel





Auth Panel



HWID Generator

The launcher has no update limits.
It’s easy to configure.
The sources are organized and commented for easy understanding.
Any type of layout can be customized since it’s in XAML, allowing the use of PNG images.
The license configuration is done through the auth panel, with options for lifetime or monthly licenses, and you can define the dates—day, month, year, hour, minute, and second.
The news system has been redesigned so that it opens in the user's default browser. For example, if you have set Google Chrome as your primary browser on Windows, it will open the configured news page in Google Chrome. It works with any browser that the user has set as their default on Windows.
Suport all versions Season 0 - 20

8
Archivos desarrollo / Re: MU Online Launcher Development
« Posteado: October 09, 2024, 05:17:42 PM »
Si es un archivo en desarollo debe ir en la seccion correcta:
https://tuservermu.com.ve/index.php?board=21.0

o es una liberacion?

Is this under development, can you transfer it to the correct topic?

9
Archivos desarrollo / Re: MU Online Launcher Development
« Posteado: October 08, 2024, 05:09:02 AM »
RESERVED FOR NEW UPDATES !

10
Archivos desarrollo / EN DESARROLLO MU Online Launcher Development
« Posteado: October 08, 2024, 05:02:45 AM »
MU Online Launcher Development
I am developing a new launcher for MU Online, focused on practicality and performance. The project is still in progress, but it already includes several important features:

Automatic game updates to ensure all players have the latest version.
Account registration directly through the launcher, making it easier for new players to join.
Customizable game settings that allow for resolution adjustments and other parameters.
A panel with quick links to Discord, YouTube, and the website.
Integration with SQL settings for account registration directly in the launcher.
More updates coming soon!



11
Season12 / Re: EMU.IGC.Server Suite.x12 12.1.1.0(4) + Sources
« Posteado: August 10, 2024, 03:37:15 AM »
we are waiting for joão to release the source IGC.dll :P let's go jorge releases it for us there

12
Sources Generales / Re: LAUNCHER MU WEBZEN SOURCES
« Posteado: August 06, 2024, 07:17:56 PM »
It's very easy guys, I made my modifications to the source, some corrections, the result is in the video below 😁

13
Sources Generales / SOURCES Camera 3D Ogocx Season 2
« Posteado: August 03, 2024, 07:22:46 PM »
I was browsing the source files for season 2 of ogocx and I saw that in the main there was the camera.cpp, but I couldn't activate it in the game. So I decided to activate the camera again, I increased the zoom a little more and the shortcut keys were a bit meme, but if anyone wants to change the source, here it is
F7 - Turns the Camera On
F8 - Turns the Camera Off
F12 - Resets the Camera

Print


Camera.cpp and the download if you don't want to compile in your main


14
Sources Generales / SOURCES New HealtBar Ogocx Season 6
« Posteado: August 02, 2024, 11:39:21 PM »
Hi Guys Today i'am share with you my modification on source main on the Ogocx X601

Old HealtBar



New HealtBar



source and download fix hp missing in right corner



Now Sources  grin2

HealtBar.cpp
Code: [Select]
#include "stdafx.h"
#include "HealthBar.h"
#include "Util.h"
#include "Interface.h"
#include "AntiHack.h"
#include "MenuWindow.h"
#include "Patente.h"

CHealthBar gHealthBar;

CHealthBar::CHealthBar()
{
    ClearNewHealthBar();
}

CHealthBar::~CHealthBar()
{

}

void CHealthBar::Init()
{
    SetCompleteHook(0xE8, 0x005B96E8, &this->DrawNewHealthBar);
}

void CHealthBar::ClearNewHealthBar()
{
    for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
    {
        gNewHealthBar[n].index = 0xFFFF;
        gNewHealthBar[n].type = 0;
        gNewHealthBar[n].rate = 0;
        gNewHealthBar[n].rate2 = 0;
    }
}

void CHealthBar::InsertNewHealthBar(WORD index, BYTE type, BYTE rate, BYTE rate2)
{
    for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
    {
        if (gNewHealthBar[n].index == 0xFFFF)
        {
            gNewHealthBar[n].index = index;
            gNewHealthBar[n].type = type;
            gNewHealthBar[n].rate = rate;
            gNewHealthBar[n].rate2 = rate2;
            return;
        }
    }
}

NEW_HEALTH_BAR* CHealthBar::GetNewHealthBar(WORD index, BYTE type)
{
    for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
    {
        if (gNewHealthBar[n].index != 0xFFFF)
        {
            if (gNewHealthBar[n].index == index && gNewHealthBar[n].type == type)
            {
                return &gNewHealthBar[n];
            }
        }
    }

    return 0;
}

void CHealthBar::DrawNewHealthBar()
{
    ((void(*)())0x005BA770)(); // Chama a função original para desenhar a barra de saúde

    if (gMenuWindow.m_HealthBarDisabled == 0)
    {
        int PosX, PosY, LifeProgress, ShieldProgress;
        float LifeBarWidth = 80.0f;
        char MonsterName[50];
        vec3_t Angle;

        for (int n = 0; n < MAX_MAIN_VIEWPORT; n++)
        {
            DWORD ViewportAddress = ((DWORD(__thiscall*)(void*, DWORD))0x0096A4C0)(((void* (*)())0x00402BC0)(), n);

            if (!ViewportAddress || *(BYTE*)(ViewportAddress + 0x30C) == 0)
            {
                continue;
            }

            NEW_HEALTH_BAR* lpNewHealthBar = gHealthBar.GetNewHealthBar(*(WORD*)(ViewportAddress + 0x7E), *(BYTE*)(ViewportAddress + 0x320));
            char* name = (char*)(ViewportAddress + 0x38);

            if (lpNewHealthBar == 0 || !name)
            {
                continue;
            }

            int LifePercent = lpNewHealthBar->rate / 10;
            int ShieldPercent = lpNewHealthBar->rate2 / 10;

            Angle[0] = *(float*)(ViewportAddress + 0x404);
            Angle[1] = *(float*)(ViewportAddress + 0x408);
            Angle[2] = *(float*)(ViewportAddress + 0x40C) + *(float*)(ViewportAddress + 0x3E8) + 100.0f;

            pGetPosFromAngle(&Angle, &PosX, &PosY);

            PosX -= (int)floor(LifeBarWidth / 2.0);
            PosY -= 16;

            // Ajuste a largura da caixa de fundo preta para coincidir com a barra de saúde
            float backgroundWidth = LifeBarWidth + 8.0f; // Ajustado para LifeBarWidth + 8.0f

            // Desenhe o fundo da barra de vida
            pSetBlend(true);
            glColor4f(0.0, 0.0, 0.0, 0.5); // Ajuste a opacidade da caixa preta grande
            pDrawBarForm((float)(PosX - 4), (float)(PosY - 10), backgroundWidth, 20.0f, 0.0f, 0);
            pGLSwitchBlend();
            pGLSwitch();

            // Desenhe a barra de vida
            glColor3f(0.2f, 0.0, 0.0); // Vermelho escuro
            pDrawBarForm((float)PosX, (float)PosY, LifeBarWidth, 5.0f, 0.0, 0);

            glColor3f(0.19607843f, 0.039215688f, 0.0);
            pDrawBarForm((float)(PosX + 2), (float)(PosY + 2), LifeBarWidth - 4.0f, 1.0f, 0.0, 0);

            if (LifePercent > 10)
            {
                LifeProgress = 10;
            }
            else
            {
                LifeProgress = LifePercent;
            }

            if (ShieldPercent > 10)
            {
                ShieldProgress = 10;
            }
            else
            {
                ShieldProgress = ShieldPercent;
            }

            glColor3f(0.98039216f, 0.039215688f, 0.0); // Vermelho brilhante
            for (int i = 0; i < LifeProgress; i++)
            {
                pDrawBarForm((float)(i * 8 + PosX + 0), (float)(PosY + 2), 8.0, 2.0, 0.0, 0);
            }

            if (ShieldPercent > 0)
            {
                glColor3f(0.98039216f, 0.5f, 0.0); // Amarelo brilhante para escudo
                for (int i = 0; i < ShieldProgress; i++)
                {
                    pDrawBarForm((float)(i * 8 + PosX + 0), (float)(PosY + 6), 8.0, 2.0, 0.0, 0);
                }
            }

            // Desenhe o nome do monstro
            wsprintf(MonsterName, "%s", name);

            // Estimativa da largura e altura do texto
            int textWidth = strlen(MonsterName) * 10; // Ajuste o multiplicador conforme a largura média dos caracteres
            int textHeight = 20; // Ajuste conforme a altura do texto

            // Calcule a posição centralizada do texto
            int textPosX = PosX + (int)(LifeBarWidth / 2 - textWidth / 7); // Corrigido para centralizar horizontalmente
            int textPosY = PosY - 8 + (int)(20 / 2 - textHeight / 2); // Ajusta a posição vertical para centralizar

            // Defina a cor do texto (branco claro)
            pSetTextColor(pTextThis(), 0xFF, 0xE6, 0xD2, 0xFF); // Cor do texto

            // Desenhe o texto
            pDrawText(pTextThis(), textPosX, textPosY, MonsterName, 0, 0, 1, 0); // Ajuste as coordenadas e parâmetros conforme necessário

            pGLSwitch();
        }

        pGLSwitch();
        glColor3f(1.0, 1.0, 1.0);
    }

    gPatente.MainProc();

    if (gAntiHack.LicenseChecked)
    {
        gInterface.m_Lua.Generic_Call("MainPlayerDraw", ">");
    }
}

HealtBar.h
Code: [Select]
#pragma once

#include "Lua.h"

struct NEW_HEALTH_BAR
{
WORD index;
BYTE type;
BYTE rate;
BYTE rate2; // Adicionando rate2 aqui
};

struct VAngle
{
float X;
float Y;
float Z;
};

class CHealthBar {
public:
    CHealthBar();
    ~CHealthBar();

    void Init();
    void InsertNewHealthBar(WORD index, BYTE type, BYTE rate, BYTE rate2);
    void ClearNewHealthBar();
    NEW_HEALTH_BAR* GetNewHealthBar(WORD index, BYTE type);
    static void DrawNewHealthBar();

private:
    NEW_HEALTH_BAR gNewHealthBar[MAX_MAIN_VIEWPORT];
};

extern CHealthBar gHealthBar;

Protocol.cpp
Code: [Select]
#include "stdafx.h"
#include "Protocol.h"
#include "Common.h"
#include "HealthBar.h"
#include "AntiHack.h"
#include "Offset.h"
#include "PacketManager.h"
#include "PrintPlayer.h"
#include "Reconnect.h"
#include "Util.h"
#include "LoadFiles.h"
#include "LuaSocket.h"
#include "CustomPreview.h"
#include "ItemMove.h"
#include "Structs.h"
#include "CustomWing.h"
#include "HelperSystem.h"
#include "HelperManager.h"
#include "Item.h"
#include "TradeX.h"
#include "ChaosBoxGenesis.h"
#include "Camera.h"
#include "CounterItem.h"
#include "Patente.h"
#include "PersonalShop.h"
#include "CharacterList.h"
#include "Console.h"
#include "ElementSlots.h"
#include "ElementPet.h"
#include "VisualInventory.h"
#include "AutoLogin.h"
#include "Hunting.h"
#include <VMProtect\VMProtectSDK.h>

BOOL ProtocolCoreEx(BYTE head,BYTE* lpMsg,int size,int key) // OK
{
if ((DWORD)(timeGetTime() - gAntiHack.m_LastTickThread / 1000) > (DWORD)3500) {
gAntiHack.SendCloseServer();
}

switch(head)
{
case 0x11:
GCDamageRecv((PMSG_DAMAGE_RECV*)lpMsg);
break;
case 0x14:
GCViewportDestroyRecv((PMSG_VIEWPORT_DESTROY_RECV *)lpMsg);
break;
case 0x16:
GCMonsterDieRecv((PMSG_MONSTER_DIE_RECV*)lpMsg);
break;
case 0x17:
GCUserDieRecv((PMSG_USER_DIE_RECV*)lpMsg);
break;
case 0x1C:
gPatente.Clear();
break;
case 0x24:
GCItemMoveRecv((PMSG_ITEM_MOVE_RECV*)lpMsg);
break;
case 0x26:
GCLifeRecv((PMSG_LIFE_RECV*)lpMsg);
break;
case 0x27:
GCManaRecv((PMSG_MANA_RECV*)lpMsg);
break;
case 0x37:
gTradeX.GCTradeResponseRecv((PMSG_TRADE_RESPONSE_RECV*)lpMsg);
break;
case 0x3C:
gTradeX.TradeXOkButtonRecv((PMSG_TRADE_OK_BUTTON_RECV*)lpMsg);
break;
case 0x2C:
GCFruitResultRecv((PMSG_FRUIT_RESULT_RECV*)lpMsg);
break;
case 0x9C:
GCRewardExperienceRecv((PMSG_REWARD_EXPERIENCE_RECV*)lpMsg);
break;
case 0xA3:
GCQuestRewardRecv((PMSG_QUEST_REWARD_RECV*)lpMsg);
break;
case 0x3F:
switch (((lpMsg[0] == 0xC1) ? lpMsg[3] : lpMsg[4]))
{
case 0x27:
gPersonalShop.GCPShopItemPrinceListRecv((PMSG_PSHOP_ITEM_LIST_RECV*)lpMsg);
return 1;
}
break;
case 0xB1:
switch(((lpMsg[0]==0xC1)?lpMsg[3]:lpMsg[4]))
{
case 0x00:
GCMapServerMoveRecv((PMSG_MAP_SERVER_MOVE_RECV*)lpMsg);
break;
case 0x01:
GCMapServerMoveAuthRecv((PMSG_MAP_SERVER_MOVE_AUTH_RECV*)lpMsg);
break;
case 0x15:
gTradeX.TradeXItemAddRecv((PMSG_TRADEX_ITEM_ADD_RECV*)lpMsg);
return 1;
}
break;
case 0xF1:
switch(((lpMsg[0]==0xC1)?lpMsg[3]:lpMsg[4]))
{
case 0x00:
GCConnectClientRecv((PMSG_CONNECT_CLIENT_RECV*)lpMsg);
break;
case 0x01:
GCConnectAccountRecv((PMSG_CONNECT_ACCOUNT_RECV*)lpMsg);
break;
case 0x02:
GCCloseClientRecv((PMSG_CLOSE_CLIENT_RECV*)lpMsg);
break;
}
break;
case 0xF3:
switch(((lpMsg[0]==0xC1)?lpMsg[3]:lpMsg[4]))
{
case 0x00:
GCCharacterListRecv((PMSG_CHARACTER_LIST_RECV*)lpMsg);
return 1;
case 0x03:
GCCharacterInfoRecv((PMSG_CHARACTER_INFO_RECV*)lpMsg);
break;
case 0x04:
GCCharacterRegenRecv((PMSG_CHARACTER_REGEN_RECV*)lpMsg);
break;
case 0x05:
GCLevelUpRecv((PMSG_LEVEL_UP_RECV*)lpMsg);
break;
case 0x06:
GCLevelUpPointRecv((PMSG_LEVEL_UP_POINT_RECV*)lpMsg);
break;
case 0x07:
GCMonsterDamageRecv((PMSG_MONSTER_DAMAGE_RECV*)lpMsg);
break;
/*case 0x10:
GCItemListRecv((PMSG_ITEM_LIST_RECV*)lpMsg);
break;*/
case 0x50:
GCMasterInfoRecv((PMSG_MASTER_INFO_RECV*)lpMsg);
break;
case 0x51:
GCMasterLevelUpRecv((PMSG_MASTER_LEVEL_UP_RECV*)lpMsg);
break;
case 0x70:
GCCustomPreviewCharListRecv((PMSG_CUSTOM_PREVIEW_CHAR_LIST_RECV*)lpMsg);
return 1;
case 0x72:
GCCustomPreviewCharRecv((PMSG_CUSTOM_PREVIEW_CHARSET_RECV*)lpMsg);
return 1;
case 0xA9:
CGItemMoveRecv((PMSG_ITEM_MOVE_RECV2*)lpMsg);
return 1;
case 0xE0:
GCNewCharacterInfoRecv((PMSG_NEW_CHARACTER_INFO_RECV*)lpMsg);
return 1;
case 0xE1:
GCNewCharacterCalcRecv((PMSG_NEW_CHARACTER_CALC_RECV*)lpMsg);
return 1;
case 0xE2:
GCNewHealthBarRecv((PMSG_NEW_HEALTH_BAR_RECV*)lpMsg);
return 1;
case 0xE3:
GCNewGensBattleInfoRecv((PMSG_NEW_GENS_BATTLE_INFO_RECV*)lpMsg);
return 1;
case 0xE4:
GCNewMessageRecv((PMSG_NEW_MESSAGE_RECV*)lpMsg);
return 1;
case 0xE9:
gPatente.GCPatentePlayerRecv((PMSG_VIEWPORT_RECV *)lpMsg);
return 1;
}
break;
case 0xEF:
switch (((lpMsg[0] == 0xC1) ? lpMsg[3] : lpMsg[4]))
{
case 0x20:
gChaosBoxGenesis.Open((SDHP_CHAOS_BOX_GENESIS_OPEN_CLIENT_RECV*) lpMsg);
return 1;
case 0x21:
gChaosBoxGenesis.ChaosBoxGenesisListItemRecv((PMSG_CHAOS_BOX_GENESIS_LIST_RECV*)lpMsg);
return 1;
case 0x23:
gChaosBoxGenesis.ChaosBoxGenesisStateRecv((PMSG_CHAOS_BOX_GENESIS_STATE_RECV*)lpMsg);
return 1;
}
break;
case 0xFA:
gSocket.RecvCustomPacket(lpMsg[4], (PMSG_CUSTOM_SOCKET_SEND*)lpMsg, size);
return 1;
case 0xFB:
switch (((lpMsg[0] == 0xC1) ? lpMsg[3] : lpMsg[4]))
{
case 0x2C:
GCItemCounterRecv((PMSG_ITEM_COUNTER_RECV *)lpMsg);
return 1;
case 0x10:
gTradeX.TradeXStateRecv((PMSG_TRADEX_STATE_RECV*)lpMsg);
return 1;
case 0x11:
gTradeX.TradeXListRecv((PMSG_TRADEX_ITEM_LIST_RECV*)lpMsg);
return 1;
case 0x13:
gTradeX.TradeXDelItemTarget((PMSG_TRADEX_ITEM_DEL_RECV*)lpMsg);
return 1;
case 0x16:
gHunting.ReceiveHunting((PMSG_CHARACTER_HUNTING_INFO_RECV*)lpMsg);
return 1;
}
return 1;
}

gAntiHack.m_TickCountProtocol = GetTickCount();

return ProtocolCore(head,lpMsg,size,key);
}

void GCDamageRecv(PMSG_DAMAGE_RECV* lpMsg) // OK
{
int aIndex = MAKE_NUMBERW(lpMsg->index[0],lpMsg->index[1]) & 0x7FFF;

if(ViewIndex == aIndex)
{
ViewCurHP = lpMsg->ViewCurHP;
ViewCurSD = lpMsg->ViewCurSD;
}

ViewDamageHP = lpMsg->ViewDamageHP;
ViewDamageSD = lpMsg->ViewDamageSD;

if((lpMsg->type & 0x10) != 0)
{
if(ViewDamageCount < 3)
{
ViewDamageTable[ViewDamageCount++] = lpMsg->ViewDamageHP;
ViewDamageValue = ViewDamageCount;
}
}

if((lpMsg->type & 0x20) != 0)
{
if(ViewDamageCount < 4)
{
ViewDamageTable[ViewDamageCount++] = lpMsg->ViewDamageHP;
ViewDamageValue = ViewDamageCount;
}
}
}

void GCViewportDestroyRecv(PMSG_VIEWPORT_DESTROY_RECV * lpMsg)
{
for (int n = 0; n < lpMsg->count; n++)
{
PMSG_VIEWPORT_DESTROY* lpInfo = (PMSG_VIEWPORT_DESTROY*)(((BYTE*)lpMsg) + sizeof(PMSG_VIEWPORT_DESTROY_RECV) + (sizeof(PMSG_VIEWPORT_DESTROY)*n));

gCustomPreview.DeleteCustomPreview(MAKE_NUMBERW(lpInfo->index[0], lpInfo->index[1]));
gPatente.DeletePlayer(MAKE_NUMBERW(lpInfo->index[0], lpInfo->index[1]));
}
}

void GCMonsterDieRecv(PMSG_MONSTER_DIE_RECV* lpMsg) // OK
{
ViewDamageHP = lpMsg->ViewDamageHP;
}

void GCUserDieRecv(PMSG_USER_DIE_RECV* lpMsg) // OK
{
int aIndex = MAKE_NUMBERW(lpMsg->index[0],lpMsg->index[1]) & 0x7FFF;

if(ViewIndex == aIndex)
{
ViewCurHP = 0;
}
}

void GCItemMoveRecv(PMSG_ITEM_MOVE_RECV * lpMsg)
{
if (lpMsg->result != 255) {
if (!gTradeX.isVisible() && !gChaosBoxGenesis.isVisible()) {
if (gItemMove.checkAutoItemMove()) {
if (gItemMove.m_DeleteInventoryCtrl) {
if (gItemMove.m_InventoryCtrlMix == 1) {
auto pItemObj = pInventoryCtrlFindItem(pMixGetMyInventoryCtrl(pMixInventoryThis(pWindowThis())), gItemMove.m_BackupMouseX, gItemMove.m_BackupMouseY);

if (pItemObj) {
pInventoryCtrlDeleteItem(pMixGetMyInventoryCtrl(pMixInventoryThis(pWindowThis())), pItemObj);
}

gItemMove.m_InventoryCtrlMix = false;
}
else {
DWORD InventoryCtrl = -1;
ITEM* pItemObj = pInventoryCtrlFindItemAtPt(pInventoryThis(pWindowThis()), gItemMove.m_BackupMouseX, gItemMove.m_BackupMouseY, &InventoryCtrl);

if (pItemObj) {
pInventoryCtrlDeleteItem(pInventoryGetMyInventoryCtrl(pInventoryThis(pWindowThis()), InventoryCtrl), pItemObj);
}
}
}
else {
auto item = gItemMove.getItem(gItemMove.m_BackupSlot);

if (item) {
if (item->Type != -1) {
pInventoryUnequipItem(pInventoryThis(pWindowThis()), gItemMove.m_BackupSlot);

item->Type = -1;
item->Level = 0;
item->Number = -1;
item->Option1 = 0;
item->ExtOption = 0;
}
}
}

gItemMove.SetAutoItemMove(false);
}

if (lpMsg->slot >= 236 && lpMsg->slot <= 239) {
gElementSlots.AddItem(lpMsg->slot, lpMsg->ItemInfo);
}
else if (lpMsg->slot >= 240 && lpMsg->slot <= 248) {
gVisualInventory.AddItem(lpMsg->slot, lpMsg->ItemInfo);
gVisualInventory.MainSetCharacterClass(Hero);
}
}
}
else {
if (!gTradeX.isVisible()) {
gItemMove.SetAutoItemMove(false);
}
}
}

void GCLifeRecv(PMSG_LIFE_RECV* lpMsg) // OK
{
if(lpMsg->type == 0xFE)
{
ViewMaxHP = lpMsg->ViewHP;
ViewMaxSD = lpMsg->ViewSD;
}

if(lpMsg->type == 0xFF)
{
ViewCurHP = ((ViewCurHP==0)?ViewCurHP:lpMsg->ViewHP);
ViewCurSD = lpMsg->ViewSD;
}
}

void GCManaRecv(PMSG_MANA_RECV* lpMsg) // OK
{
if(lpMsg->type == 0xFE)
{
ViewMaxMP = lpMsg->ViewMP;
ViewMaxBP = lpMsg->ViewBP;
}

if(lpMsg->type == 0xFF)
{
ViewCurMP = lpMsg->ViewMP;
ViewCurBP = lpMsg->ViewBP;
}
}

void GCFruitResultRecv(PMSG_FRUIT_RESULT_RECV* lpMsg) // OK
{
if(lpMsg->result == 0 || lpMsg->result == 3 || lpMsg->result == 6 || lpMsg->result == 17)
{
ViewValue = lpMsg->ViewValue;
ViewPoint = lpMsg->ViewPoint;
ViewStrength = lpMsg->ViewStrength;
ViewDexterity = lpMsg->ViewDexterity;
ViewVitality = lpMsg->ViewVitality;
ViewEnergy = lpMsg->ViewEnergy;
ViewLeadership = lpMsg->ViewLeadership;
}
}

void GCRewardExperienceRecv(PMSG_REWARD_EXPERIENCE_RECV* lpMsg) // OK
{
ViewDamageHP = lpMsg->ViewDamageHP;
}

void GCQuestRewardRecv(PMSG_QUEST_REWARD_RECV* lpMsg) // OK
{
int aIndex = MAKE_NUMBERW(lpMsg->index[0],lpMsg->index[1]) & 0x7FFF;

if(ViewIndex == aIndex)
{
ViewPoint = lpMsg->ViewPoint;
}
}

void GCMapServerMoveRecv(PMSG_MAP_SERVER_MOVE_RECV* lpMsg) // OK
{
ReconnectOnMapServerMove(lpMsg->IpAddress,lpMsg->ServerPort);
}

void GCMapServerMoveAuthRecv(PMSG_MAP_SERVER_MOVE_AUTH_RECV* lpMsg) // OK
{
ReconnectOnMapServerMoveAuth(lpMsg->result);
}

void GCConnectClientRecv(PMSG_CONNECT_CLIENT_RECV* lpMsg) // OK
{
VMProtectBegin("Main_RecvLicense");

ViewIndex = MAKE_NUMBERW(lpMsg->index[0],lpMsg->index[1]);

if (lpMsg->PackNothing != lpMsg->PacketNumber || lpMsg->PacketSend == 0)
{
gAntiHack.CloseApp();
return;
}

gAntiHack.LicenseChecked = 1;

gAntiHack.GetMac();

VMProtectEnd();
}

void GCConnectAccountRecv(PMSG_CONNECT_ACCOUNT_RECV* lpMsg) // OK
{
ReconnectOnConnectAccount(lpMsg->result);
}

void GCCloseClientRecv(PMSG_CLOSE_CLIENT_RECV* lpMsg) // OK
{
ReconnectOnCloseClient(lpMsg->result);
}

void GCCharacterListRecv(PMSG_CHARACTER_LIST_RECV* lpMsg) // OK
{
ReconnectOnCharacterList();

gAntiHack.ClientSendMac();

gCamera.Restore();

gCharacterList.CGCharacterListRecv(lpMsg);

gAutoLogin.CGCharacterListRecv(lpMsg);

gElementSlots.Release();

gVisualInventory.Release();
}

void GCCharacterInfoRecv(PMSG_CHARACTER_INFO_RECV* lpMsg) // OK
{
if (!gAutoLogin.m_ConnectingAutoLogin) {
ReconnectOnCharacterInfo();
}

ViewReset = lpMsg->ViewReset;
ViewPoint = lpMsg->ViewPoint;
ViewCurHP = lpMsg->ViewCurHP;
ViewMaxHP = lpMsg->ViewMaxHP;
ViewCurMP = lpMsg->ViewCurMP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewCurBP = lpMsg->ViewCurBP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewCurSD = lpMsg->ViewCurSD;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewStrength = lpMsg->ViewStrength;
ViewDexterity = lpMsg->ViewDexterity;
ViewVitality = lpMsg->ViewVitality;
ViewEnergy = lpMsg->ViewEnergy;
ViewLeadership = lpMsg->ViewLeadership;

*(WORD*)(*(DWORD*)(MAIN_VIEWPORT_STRUCT)+0x07E) = 0;

*(BYTE*)(*(DWORD*)(MAIN_VIEWPORT_STRUCT)+0x30C) = 0;

switch(((*(BYTE*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0B)) & 7))
{
case 0:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.DWMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 1:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.DKMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 2:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.FEMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 3:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.MGMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 4:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.DLMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 5:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.SUMaxAttackSpeed>=0xFFFF)?0x02:0x0F));
break;
case 6:
SetByte(0x00556C38,((gLoadFiles.m_LoadFiles.RFMaxAttackSpeed>=0xFFFF)?0x0F:0x0F));
break;
}

gTradeX.ClearTradeX();

gCamera.Restore();
}

void GCCharacterRegenRecv(PMSG_CHARACTER_REGEN_RECV* lpMsg) // OK
{
ViewCurHP = lpMsg->ViewCurHP;
ViewCurMP = lpMsg->ViewCurMP;
ViewCurBP = lpMsg->ViewCurBP;
ViewCurSD = lpMsg->ViewCurSD;
}

void GCLevelUpRecv(PMSG_LEVEL_UP_RECV* lpMsg) // OK
{
ViewPoint = lpMsg->ViewPoint;
ViewMaxHP = lpMsg->ViewMaxHP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewExperience = lpMsg->ViewExperience;
ViewNextExperience = lpMsg->ViewNextExperience;
}

void GCLevelUpPointRecv(PMSG_LEVEL_UP_POINT_RECV* lpMsg) // OK
{
if(lpMsg->result >= 16 && lpMsg->result <= 20)
{
ViewPoint = lpMsg->ViewPoint;
ViewMaxHP = lpMsg->ViewMaxHP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewStrength = lpMsg->ViewStrength;
ViewDexterity = lpMsg->ViewDexterity;
ViewVitality = lpMsg->ViewVitality;
ViewEnergy = lpMsg->ViewEnergy;
ViewLeadership = lpMsg->ViewLeadership;
}
}

void GCMonsterDamageRecv(PMSG_MONSTER_DAMAGE_RECV* lpMsg) // OK
{
ViewCurHP = lpMsg->ViewCurHP;
ViewCurSD = lpMsg->ViewCurSD;
ViewDamageHP = lpMsg->ViewDamageHP;
ViewDamageSD = lpMsg->ViewDamageSD;
}

void GCMasterInfoRecv(PMSG_MASTER_INFO_RECV* lpMsg) // OK
{
ViewMaxHP = lpMsg->ViewMaxHP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewMaxSD = lpMsg->ViewMaxSD;
}

void GCMasterLevelUpRecv(PMSG_MASTER_LEVEL_UP_RECV* lpMsg) // OK
{
ViewMaxHP = lpMsg->ViewMaxHP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewMasterExperience = lpMsg->ViewMasterExperience;
ViewMasterNextExperience = lpMsg->ViewMasterNextExperience;
}

void GCCustomPreviewCharListRecv(PMSG_CUSTOM_PREVIEW_CHAR_LIST_RECV * lpMsg)
{
gCustomPreview.ClearCustomPreviewCharList();

for (int n = 0; n < lpMsg->count; n++) {
PMSG_CUSTOM_PREVIEW_CHAR_LIST* lpInfo = (PMSG_CUSTOM_PREVIEW_CHAR_LIST*)(((BYTE*)lpMsg) + sizeof(PMSG_CUSTOM_PREVIEW_CHAR_LIST_RECV) + (sizeof(PMSG_CUSTOM_PREVIEW_CHAR_LIST)*n));
gCustomPreview.InsertCustomPreviewCharList(n, lpInfo->Name, lpInfo->PetIndex, lpInfo->WingIndex);
}
}

void GCCustomPreviewCharRecv(PMSG_CUSTOM_PREVIEW_CHARSET_RECV * lpMsg)
{
if (lpMsg->Viewport == 1) {
gCustomPreview.ClearCustomPreviewList(1);

for (int n = 0; n < lpMsg->count; n++) {
PMSG_CUSTOM_PREVIEW_CHARSET_LIST* lpInfo = (PMSG_CUSTOM_PREVIEW_CHARSET_LIST*)(((BYTE*)lpMsg) + sizeof(PMSG_CUSTOM_PREVIEW_CHARSET_RECV) + (sizeof(PMSG_CUSTOM_PREVIEW_CHARSET_LIST)*n));
gCustomPreview.InsertCustomPreviewList(n + 1, lpInfo->Name, lpInfo->PetIndex, lpInfo->WingIndex, lpInfo->index, lpInfo->SecondPetIndex, lpInfo->ElementSlot);
}
}
else {
gCustomPreview.ClearCustomPreviewList(0);

for (int n = 0; n < lpMsg->count; n++) {
PMSG_CUSTOM_PREVIEW_CHARSET_LIST* lpInfo = (PMSG_CUSTOM_PREVIEW_CHARSET_LIST*)(((BYTE*)lpMsg) + sizeof(PMSG_CUSTOM_PREVIEW_CHARSET_RECV) + (sizeof(PMSG_CUSTOM_PREVIEW_CHARSET_LIST)*n));
gCustomPreview.InsertCustomPreviewList(n, lpInfo->Name, lpInfo->PetIndex, lpInfo->WingIndex, lpInfo->index, lpInfo->SecondPetIndex, lpInfo->ElementSlot);
}
}
}

void CGItemMoveRecv(PMSG_ITEM_MOVE_RECV2 * lpMsg)
{
if (lpMsg->result != 0xFF) {
if (gTradeX.isVisible() || gChaosBoxGenesis.isVisible()) {
if (lpMsg->SourceFlag == MovePosition::Inventory)
{
if (gItemMove.checkAutoItemMove()) {
if (gItemMove.m_DeleteInventoryCtrl) {
if (gItemMove.m_InventoryCtrlMix == 1) {
auto pItemObj = pInventoryCtrlFindItem(pMixGetMyInventoryCtrl(pMixInventoryThis(pWindowThis())), gItemMove.m_BackupMouseX, gItemMove.m_BackupMouseY);

if (pItemObj) {
pInventoryCtrlDeleteItem(pMixGetMyInventoryCtrl(pMixInventoryThis(pWindowThis())), pItemObj);
}

gItemMove.m_InventoryCtrlMix = false;
}
else {
DWORD InventoryCtrl = -1;
ITEM* pItemObj = pInventoryCtrlFindItemAtPt(pInventoryThis(pWindowThis()), gItemMove.m_BackupMouseX, gItemMove.m_BackupMouseY, &InventoryCtrl);

if (pItemObj) {
pInventoryCtrlDeleteItem(pInventoryGetMyInventoryCtrl(pInventoryThis(pWindowThis()), InventoryCtrl), pItemObj);
}
}
}
else {
auto item = gItemMove.getItem(gItemMove.m_BackupSlot);

if (item) {
if (item->Type != -1) {
pInventoryUnequipItem(pInventoryThis(pWindowThis()), gItemMove.m_BackupSlot);

item->Type = -1;
item->Level = 0;
item->Number = -1;
item->Option1 = 0;
item->ExtOption = 0;
}
}
}

gItemMove.SetAutoItemMove(false);

((void(__thiscall*)(LPVOID))0x7DA5A0)(pTradeGetMyInventoryCtrl(pTradeInventoryThis(pWindowThis())));

}

if (lpMsg->TargetFlag == 0) {
if (lpMsg->TargetSlot >= 236 && lpMsg->TargetSlot <= 239) {
gElementSlots.AddItem(lpMsg->TargetSlot, lpMsg->ItemInfo);
}
else if (lpMsg->TargetSlot >= 240 && lpMsg->TargetSlot <= 248) {
gVisualInventory.AddItem(lpMsg->TargetSlot, lpMsg->ItemInfo);
gVisualInventory.MainSetCharacterClass(Hero);
}
}
}
else if (lpMsg->SourceFlag == MovePosition::TradeX) {
gTradeX.DelItemSource(lpMsg->SourceSlot);
gTradeX.CalcLinesRenderSource();
gItemMove.m_ItemMove = 0;
}
else if (lpMsg->SourceFlag == MovePosition::ChaosBoxGenesis) {
gChaosBoxGenesis.DelItem(lpMsg->SourceSlot);
gChaosBoxGenesis.CalcLinesRender();
gItemMove.m_ItemMove = 0;
}

if (lpMsg->TargetFlag == MovePosition::TradeX) {
gTradeX.SourceInserItens(lpMsg->TargetSlot, lpMsg->ItemInfo);
gTradeX.CalcLinesRenderSource();
}
else if (lpMsg->TargetFlag == MovePosition::ChaosBoxGenesis) {
gChaosBoxGenesis.InsertItemChaosMachine(lpMsg->TargetSlot, lpMsg->ItemInfo);
}
}

gItemMove.m_ItemMove = 0;
}
else {
gItemMove.m_ItemMove = 0;
}
}

void GCNewCharacterInfoRecv(PMSG_NEW_CHARACTER_INFO_RECV* lpMsg) // OK
{
*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x0E) = lpMsg->Level;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x74) = lpMsg->LevelUpPoint;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x18) = lpMsg->Strength;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x1A) = lpMsg->Dexterity;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x1C) = lpMsg->Vitality;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x1E) = lpMsg->Energy;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x20) = lpMsg->Leadership;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x22) = lpMsg->Life;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x26) = lpMsg->MaxLife;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x24) = lpMsg->Mana;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x28) = lpMsg->MaxMana;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x40) = lpMsg->BP;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x42) = lpMsg->MaxBP;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x2A) = lpMsg->Shield;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x2C) = lpMsg->MaxShield;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x4C) = lpMsg->FruitAddPoint;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x4E) = lpMsg->MaxFruitAddPoint;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x50) = lpMsg->FruitSubPoint;

*(WORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x52) = lpMsg->MaxFruitSubPoint;

*(DWORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x10) = lpMsg->Experience;

*(DWORD*)(*(DWORD*)(MAIN_CHARACTER_STRUCT)+0x14) = lpMsg->NextExperience;

//EXTRA
ViewReset = lpMsg->ViewReset;
ViewPoint = lpMsg->ViewPoint;
ViewCurHP = lpMsg->ViewCurHP;
ViewMaxHP = lpMsg->ViewMaxHP;
ViewCurMP = lpMsg->ViewCurMP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewCurBP = lpMsg->ViewCurBP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewCurSD = lpMsg->ViewCurSD;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewStrength = lpMsg->ViewStrength;
ViewDexterity = lpMsg->ViewDexterity;
ViewVitality = lpMsg->ViewVitality;
ViewEnergy = lpMsg->ViewEnergy;
ViewLeadership = lpMsg->ViewLeadership;
}

void GCNewCharacterCalcRecv(PMSG_NEW_CHARACTER_CALC_RECV* lpMsg) // OK
{
ViewCurHP = lpMsg->ViewCurHP;
ViewMaxHP = lpMsg->ViewMaxHP;
ViewCurMP = lpMsg->ViewCurMP;
ViewMaxMP = lpMsg->ViewMaxMP;
ViewCurBP = lpMsg->ViewCurBP;
ViewMaxBP = lpMsg->ViewMaxBP;
ViewCurSD = lpMsg->ViewCurSD;
ViewMaxSD = lpMsg->ViewMaxSD;
ViewAddStrength = lpMsg->ViewAddStrength;
ViewAddDexterity = lpMsg->ViewAddDexterity;
ViewAddVitality = lpMsg->ViewAddVitality;
ViewAddEnergy = lpMsg->ViewAddEnergy;
ViewAddLeadership = lpMsg->ViewAddLeadership;
ViewPhysiDamageMin = lpMsg->ViewPhysiDamageMin;
ViewPhysiDamageMax = lpMsg->ViewPhysiDamageMax;
ViewMagicDamageMin = lpMsg->ViewMagicDamageMin;
ViewMagicDamageMax = lpMsg->ViewMagicDamageMax;
ViewCurseDamageMin = lpMsg->ViewCurseDamageMin;
ViewCurseDamageMax = lpMsg->ViewCurseDamageMax;
ViewMulPhysiDamage = lpMsg->ViewMulPhysiDamage;
ViewDivPhysiDamage = lpMsg->ViewDivPhysiDamage;
ViewMulMagicDamage = lpMsg->ViewMulMagicDamage;
ViewDivMagicDamage = lpMsg->ViewDivMagicDamage;
ViewMulCurseDamage = lpMsg->ViewMulCurseDamage;
ViewDivCurseDamage = lpMsg->ViewDivCurseDamage;
ViewMagicDamageRate = lpMsg->ViewMagicDamageRate;
ViewCurseDamageRate = lpMsg->ViewCurseDamageRate;
ViewPhysiSpeed = lpMsg->ViewPhysiSpeed;
ViewMagicSpeed = lpMsg->ViewMagicSpeed;
ViewAttackSuccessRate = lpMsg->ViewAttackSuccessRate;
ViewAttackSuccessRatePvP = lpMsg->ViewAttackSuccessRatePvP;
ViewDefense = lpMsg->ViewDefense;
ViewDefenseSuccessRate = lpMsg->ViewDefenseSuccessRate;
ViewDefenseSuccessRatePvP = lpMsg->ViewDefenseSuccessRatePvP;
ViewDamageMultiplier = lpMsg->ViewDamageMultiplier;
ViewRFDamageMultiplierA = lpMsg->ViewRFDamageMultiplierA;
ViewRFDamageMultiplierB = lpMsg->ViewRFDamageMultiplierB;
ViewRFDamageMultiplierC = lpMsg->ViewRFDamageMultiplierC;
ViewDarkSpiritAttackDamageMin = lpMsg->ViewDarkSpiritAttackDamageMin;
ViewDarkSpiritAttackDamageMax = lpMsg->ViewDarkSpiritAttackDamageMax;
ViewDarkSpiritAttackSpeed = lpMsg->ViewDarkSpiritAttackSpeed;
ViewDarkSpiritAttackSuccessRate = lpMsg->ViewDarkSpiritAttackSuccessRate;
}

void GCNewHealthBarRecv(PMSG_NEW_HEALTH_BAR_RECV* lpMsg) // OK
{
gHealthBar.ClearNewHealthBar();

for (int n = 0; n < lpMsg->count; n++)
{
PMSG_NEW_HEALTH_RECV* lpInfo = (PMSG_NEW_HEALTH_RECV*)(((BYTE*)lpMsg) + sizeof(PMSG_NEW_HEALTH_BAR_RECV) + (sizeof(PMSG_NEW_HEALTH_RECV) * n));

// Use apenas os campos disponíveis na estrutura
gHealthBar.InsertNewHealthBar(lpInfo->index, lpInfo->type, lpInfo->rate, 0); // Use um valor padrão para rate2
}
}

void GCNewGensBattleInfoRecv(PMSG_NEW_GENS_BATTLE_INFO_RECV* lpMsg) // OK
{
GensBattleMapCount = lpMsg->GensBattleMapCount;

GensMoveIndexCount = lpMsg->GensMoveIndexCount;

memcpy(GensBattleMap,lpMsg->GensBattleMap,sizeof(GensBattleMap));

memcpy(GensMoveIndex,lpMsg->GensMoveIndex,sizeof(GensMoveIndex));
}

void GCNewMessageRecv(PMSG_NEW_MESSAGE_RECV* lpMsg) // OK
{

}

void GCItemCounterRecv(PMSG_ITEM_COUNTER_RECV * lpMsg)
{
gCounterItem.ClearById(lpMsg->Type);

for (int n = 0; n < lpMsg->count; n++)
{
auto lpInfo = (PMSG_ITEM_COUNTER_INFO*)(((BYTE*)lpMsg) + sizeof(PMSG_ITEM_COUNTER_RECV) + (sizeof(PMSG_ITEM_COUNTER_INFO)*n));
gCounterItem.InserCounterItem(lpInfo->ItemIndex, lpInfo->Slot, lpMsg->Type, lpInfo->kills);
}
}

void GCChatSend(char* name, char* text)
{
PMSG_CHAT_SEND pMsg;

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

strcpy_s(pMsg.name, name);

strcpy_s(pMsg.message, text);

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

void SendItemMove(int SourceSlot, int SourceFlag, int TargetSlot, int TargetFlag)
{
PMSG_ITEM_MOVE_SEND pMsg;

pMsg.header.setE(0x24, sizeof(pMsg));

pMsg.SourceFlag = SourceFlag;

pMsg.TargetFlag = TargetFlag;

pMsg.SourceSlot = SourceSlot;

pMsg.TargetSlot = TargetSlot;

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

void SendRequestTrade(int index) {
PMSG_TRADE_REQUEST_SEND pMsg;

pMsg.header.setE(0x36, sizeof(pMsg));

pMsg.index[0] = SET_NUMBERHB(index);

pMsg.index[1] = SET_NUMBERLB(index);

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

char Text[100];
lpViewObj lpObj = &*(ObjectPreview*)((DWORD(__thiscall*)(void*, DWORD))0x0096A4C0)(((void* (*)())0x00402BC0)(), ((int(*)(int))0x57D9A0)(index));
sprintf_s(Text, pGetTextLine(pTextLineThis, 475), lpObj->Name);
SendMessageClient(Text);
}

void SendRequestParty(WORD index) {
PMSG_PARTY_REQUEST_SEND pMsg;

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

pMsg.index[0] = SET_NUMBERHB(index);

pMsg.index[1] = SET_NUMBERLB(index);

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

char Text[100];
lpViewObj lpObj = &*(ObjectPreview*)((DWORD(__thiscall*)(void*, DWORD))0x0096A4C0)(((void* (*)())0x00402BC0)(), ((int(*)(int))0x57D9A0)(index));
sprintf_s(Text, pGetTextLine(pTextLineThis, 476), lpObj->Name);
SendMessageClient(Text);
}

void SendRequestGuild(WORD index) {
//GuildPlayerKey = index;

PMSG_GUILD_REQUEST_SEND pMsg;

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

pMsg.index[0] = SET_NUMBERHB(index);

pMsg.index[1] = SET_NUMBERLB(index);

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

char Text[100];
lpViewObj lpObj = &*(ObjectPreview*)((DWORD(__thiscall*)(void*, DWORD))0x0096A4C0)(((void* (*)())0x00402BC0)(), ((int(*)(int))0x57D9A0)(index));
sprintf_s(Text, pGetTextLine(pTextLineThis, 477), lpObj->Name);
SendMessageClient(Text);
}

void SendRequestOpenPersonalShop(WORD index, char* name) {
PMSG_PSHOP_ITEM_LIST_SEND pMsg;

pMsg.header.setE(0x3F, 0x05, sizeof(pMsg));

pMsg.index[0] = SET_NUMBERHB(index);
pMsg.index[1] = SET_NUMBERLB(index);

std::memcpy(pMsg.name, name, sizeof(pMsg.name));

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

void DataSend(BYTE* lpMsg,DWORD size) // OK
{
BYTE EncBuff[2048];

if(gPacketManager.AddData(lpMsg,size) != 0 && gPacketManager.ExtractPacket(EncBuff) != 0)
{
BYTE send[2048];

memcpy(send,EncBuff,size);

if(EncBuff[0] == 0xC3 || EncBuff[0] == 0xC4)
{
if(EncBuff[0] == 0xC3)
{
BYTE save = EncBuff[1];

EncBuff[1] = (*(BYTE*)(MAIN_PACKET_SERIAL))++;

size = gPacketManager.Encrypt(&send[2],&EncBuff[1],(size-1))+2;

EncBuff[1] = save;

send[0] = 0xC3;
send[1] = LOBYTE(size);
}
else
{
BYTE save = EncBuff[2];

EncBuff[2] = (*(BYTE*)(MAIN_PACKET_SERIAL))++;

size = gPacketManager.Encrypt(&send[3],&EncBuff[2],(size-2))+3;

EncBuff[2] = save;

send[0] = 0xC4;
send[1] = HIBYTE(size);
send[2] = LOBYTE(size);
}
}

((void(__thiscall*)(void*,BYTE*,DWORD))0x00405110)((void*)0x08793750,send,size);
}
}

below the main.dll has already been compiled for testing or those who do not want to modify the code  comiendo



15
Season2 / Re: MuEmu Season 2 (1.02r) + Lua Instável
« Posteado: July 28, 2024, 11:28:27 AM »
configured connect server and data/mapaserverinfo and MainInfo but when entering the disconnected password

https://ibb.co/q5jC5vD

16
Intros / INTRO RealMU - Season19 Intro
« Posteado: March 12, 2024, 04:32:34 AM »


17
Sources Generales / Re: Liberacion Camera Source
« Posteado: October 01, 2023, 09:52:32 PM »
Estoy usando la temporada 18 parte2 de xteam, compilé el único botón que funcionó fue F9 y está funcionando como si fuera un antlag >.< si alguien conoce los offsets de la temporada season 18 parte2 y quiere compartir <3

18
Papelera de reciclaje General / Re: Logo Fantoma Premium FREE
« Posteado: August 28, 2023, 02:36:40 PM »
link off

19
Herramientas / Re: Advanced EventItembag Creator
« Posteado: May 23, 2023, 04:49:15 PM »
source ?

20
Compra / Venta de archivos / Re: Servidor Xteam Temporada 2 Vendo o permuto
« Posteado: January 26, 2023, 05:18:19 PM »
up

Paginas: [1] 2 3 ... 5