Recommended Servers - Topics UP (790x150)



Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Autor Topic: Files MuEmu 0.97k ORIGINAL + FULL SOURCE - kayito  (Visto 153549 veces)

0 Miembros and 1 Guest are viewing this topic.

Offline Genius05 #640 Posteado: September 18, 2023, 03:59:17 PM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 91
  • Gracias recibida: 35
  • ve
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza

Gracias:


Offline KropaPL #641 Posteado: September 19, 2023, 08:02:25 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 56
  • Gracias recibida: 3
  • pl
@kayito Hola, todavía veo que las texturas se están estropeando, ¿sabes cómo arreglarlo? (Sabes, cuando elimino el archivo axe05,06bmd de Data/Item, se arreglan, pero el límite sigue ahí :(

https://prnt.sc/PDb2-7C2gCxM

Y una pregunta más, ¿cuál es el RGB original para, por ejemplo, el estado de Kundun o cualquier otro objeto con un color dorado?


Online kayito #642 Posteado: September 19, 2023, 08:09:56 AM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 968
  • Gracias recibida: 12732
  • ar
@kayito Hola, todavía veo que las texturas se están estropeando, ¿sabes cómo arreglarlo? (Sabes, cuando elimino el archivo axe05,06bmd de Data/Item, se arreglan, pero el límite sigue ahí :(

https://prnt.sc/PDb2-7C2gCxM

Y una pregunta más, ¿cuál es el RGB original para, por ejemplo, el estado de Kundun o cualquier otro objeto con un color dorado?

Estás utilizando el sistema de Custom Item que yo agregué? Colocando los items en la ubicación que yo le asigné a los items custom? Si no lo estás haciendo de esa manera, entonces no estás utilizando mi sistema ni mi main sino el main editado que publicaron en este post, el cual no tiene nada que ver con mis desarrollos.


Offline KropaPL #643 Posteado: September 19, 2023, 08:22:33 AM | Modificado: September 19, 2023, 08:34:07 AM by KropaPL

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 56
  • Gracias recibida: 3
  • pl
Solamente de la manera que mencionaste en Custom Item, todos los archivos se trasladan al índice tal como mencionaste en Custom Item.

https://prnt.sc/fQlpDo2EvsAg

El 21 y el 31 son solo versiones de prueba, porque quería verificar si al mover elementos de una carpeta normal a una carpeta personalizada, las texturas cambian.

Solo modifiqué 2 funciones para obtener el Glow original del cliente cuando ingreso RGB 0,0,0) porque no sé cuáles son los colores originales del Glow en RGB, pero como dije, el resto es original, todo está tomado de las últimas actualizaciones.

LoadModels.cpp

Citar
void CLoadModels::PartObjectColorHook(int Type, float Alpha, float Bright, float Light[3], bool ExtraMon)
{
    bool isInactive = gCustomItem.GetCustomItemColor((Type - ITEM_BASE_MODEL), Light);
   
    if (!isInactive)
    {
        PartObjectColor(Type, Alpha, Bright, Light, ExtraMon);
    }
 
}


CustomItem.cpp

Citar
bool CCustomItem::GetCustomItemColor(int ItemIndex, float* ItemColor)
{
    CUSTOM_ITEM_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

    if (lpInfo == nullptr)
    {
        return false;
    }

    ItemColor[0] = (lpInfo->ColorR / 255.0f);
    ItemColor[1] = (lpInfo->ColorG / 255.0f);
    ItemColor[2] = (lpInfo->ColorB / 255.0f);

   
    if (lpInfo->ColorR == 0 && lpInfo->ColorG == 0 && lpInfo->ColorB == 0)
    {
        return false;
    }

    return true;
}


Offline Zeus #644 Posteado: September 19, 2023, 11:17:30 AM | Modificado: September 19, 2023, 11:21:46 PM by Zeus

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 55
  • Gracias recibida: 1219
  • ar
Solamente de la manera que mencionaste en Custom Item, todos los archivos se trasladan al índice tal como mencionaste en Custom Item.

https://prnt.sc/fQlpDo2EvsAg

El 21 y el 31 son solo versiones de prueba, porque quería verificar si al mover elementos de una carpeta normal a una carpeta personalizada, las texturas cambian.

Solo modifiqué 2 funciones para obtener el Glow original del cliente cuando ingreso RGB 0,0,0) porque no sé cuáles son los colores originales del Glow en RGB, pero como dije, el resto es original, todo está tomado de las últimas actualizaciones.

LoadModels.cpp

Citar
void CLoadModels::PartObjectColorHook(int Type, float Alpha, float Bright, float Light[3], bool ExtraMon)
{
    bool isInactive = gCustomItem.GetCustomItemColor((Type - ITEM_BASE_MODEL), Light);
   
    if (!isInactive)
    {
        PartObjectColor(Type, Alpha, Bright, Light, ExtraMon);
    }
 
}

CustomItem.cpp

Citar
bool CCustomItem::GetCustomItemColor(int ItemIndex, float* ItemColor)
{
    CUSTOM_ITEM_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

    if (lpInfo == nullptr)
    {
        return false;
    }

    ItemColor[0] = (lpInfo->ColorR / 255.0f);
    ItemColor[1] = (lpInfo->ColorG / 255.0f);
    ItemColor[2] = (lpInfo->ColorB / 255.0f);

   
    if (lpInfo->ColorR == 0 && lpInfo->ColorG == 0 && lpInfo->ColorB == 0)
    {
        return false;
    }

    return true;
}

Yo creo que lo ideal es tener el Glow separado de los ítems nuevos, para así poder aplicarle color a cualquier ítem. Así que vamos a modificar algunas cosas, espero que les sirva.


Gracias:


Offline Genius05 #645 Posteado: September 19, 2023, 12:45:25 PM | Modificado: September 21, 2023, 06:25:10 PM by Genius05

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 91
  • Gracias recibida: 35
  • ve
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza


Bueno aca les comparto las sources con el agregado de custom attack offattack y pick mas el arrow infinity creditos a @kayito por dicho files Gracias. aca dejo el enlace

Gracias:


Offline Genius05 #646 Posteado: September 19, 2023, 05:09:00 PM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 91
  • Gracias recibida: 35
  • ve
Solamente de la manera que mencionaste en Custom Item, todos los archivos se trasladan al índice tal como mencionaste en Custom Item.

https://prnt.sc/fQlpDo2EvsAg

El 21 y el 31 son solo versiones de prueba, porque quería verificar si al mover elementos de una carpeta normal a una carpeta personalizada, las texturas cambian.

Solo modifiqué 2 funciones para obtener el Glow original del cliente cuando ingreso RGB 0,0,0) porque no sé cuáles son los colores originales del Glow en RGB, pero como dije, el resto es original, todo está tomado de las últimas actualizaciones.

LoadModels.cpp

Citar
void CLoadModels::PartObjectColorHook(int Type, float Alpha, float Bright, float Light[3], bool ExtraMon)
{
    bool isInactive = gCustomItem.GetCustomItemColor((Type - ITEM_BASE_MODEL), Light);
   
    if (!isInactive)
    {
        PartObjectColor(Type, Alpha, Bright, Light, ExtraMon);
    }
 
}

CustomItem.cpp

Citar
bool CCustomItem::GetCustomItemColor(int ItemIndex, float* ItemColor)
{
    CUSTOM_ITEM_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

    if (lpInfo == nullptr)
    {
        return false;
    }

    ItemColor[0] = (lpInfo->ColorR / 255.0f);
    ItemColor[1] = (lpInfo->ColorG / 255.0f);
    ItemColor[2] = (lpInfo->ColorB / 255.0f);

   
    if (lpInfo->ColorR == 0 && lpInfo->ColorG == 0 && lpInfo->ColorB == 0)
    {
        return false;
    }

    return true;
}

Yo creo que lo ideal es tener el Glow separado de los ítems nuevos, para así poder aplicarle color a cualquier ítem. Así que vamos a modificar algunas cosas, espero que les sirva.

En la solución de GetMainInfo creamos los siguientes archivos:

CustomItemGlow.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_ITEM_GLOW 255

#define MAX_ITEM_TYPE 32
#define GET_ITEM(x,y) (((x)*MAX_ITEM_TYPE)+(y))

struct CUSTOM_ITEM_GLOW_INFO
{
int Index;
int ItemIndex;
int ColorR;
int ColorG;
int ColorB;
};

class CCustomItemGlow
{
public:

CCustomItemGlow();

~CCustomItemGlow();

void Init();

void Load(char* path);

void SetInfo(CUSTOM_ITEM_GLOW_INFO info);

public:

CUSTOM_ITEM_GLOW_INFO m_CustomItemGlowInfo[MAX_CUSTOM_ITEM_GLOW];
};
extern CCustomItemGlow gCustomItemGlow;

CustomItemGlow.cpp

Code: [Select]
#include "stdafx.h"
#include "CustomItemGlow.h"
#include "MemScript.h"

CCustomItemGlow gCustomItemGlow;

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

CCustomItemGlow::~CCustomItemGlow()
{

}

void CCustomItemGlow::Init()
{
for (int n = 0; n < MAX_CUSTOM_ITEM_GLOW; n++)
{
this->m_CustomItemGlowInfo[n].Index = -1;
}
}

void CCustomItemGlow::Load(char* path)
{
    CMemScript* lpMemScript = new CMemScript;

    if (lpMemScript == nullptr)
    {
        std::cerr << "Error: No se pudo asignar memoria para CMemScript" << std::endl;
        return;
    }

    if (!lpMemScript->SetBuffer(path))
    {
        std::cerr << "Error: No se pudo abrir el archivo " << path << std::endl;
        delete lpMemScript;
        return;
    }

    int Index = 0;

    try
    {
        while (true)
        {
            if (lpMemScript->GetToken() == TOKEN_END)
            {
                break;
            }

            if (strcmp("end", lpMemScript->GetString()) == 0)
            {
                break;
            }

            CUSTOM_ITEM_GLOW_INFO info;

            info.Index = Index;

            info.ItemIndex = GET_ITEM(lpMemScript->GetNumber(), lpMemScript->GetAsNumber());

            info.ColorR = lpMemScript->GetAsNumber();
            info.ColorG = lpMemScript->GetAsNumber();
            info.ColorB = lpMemScript->GetAsNumber();

            Index++;

            SetInfo(info);
        }
    }
    catch (...)
    {
        std::cerr << "Error: Excepción al leer CustomGlow.txt" << std::endl;
    }

    delete lpMemScript;
}

void CCustomItemGlow::SetInfo(CUSTOM_ITEM_GLOW_INFO info)
{
    if (info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM_GLOW)
    {
        return;
    }

    this->m_CustomItemGlowInfo[info.Index] = info;
}

Ahora vamos a modificar los siguientes archivos dejándolos de esta forma:

CustomItem.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_ITEM 255

#define MAX_ITEM_TYPE 32
#define GET_ITEM(x,y) (((x)*MAX_ITEM_TYPE)+(y))

struct CUSTOM_ITEM_INFO
{
int Index;
int ItemIndex;
char ModelName[32];
};

class CCustomItem
{
public:

CCustomItem();

~CCustomItem();

void Init();

void Load(char* path);

void SetInfo(CUSTOM_ITEM_INFO info);

public:

CUSTOM_ITEM_INFO m_CustomItemInfo[MAX_CUSTOM_ITEM];
};

extern CCustomItem gCustomItem;

CustomItem.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomItem.h"
#include "MemScript.h"

CCustomItem gCustomItem;

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

CCustomItem::~CCustomItem()
{

}

void CCustomItem::Init()
{
for (int n = 0; n < MAX_CUSTOM_ITEM; n++)
{
this->m_CustomItemInfo[n].Index = -1;
}
}

void CCustomItem::Load(char* path)
{
CMemScript* lpMemScript = new CMemScript;

if (lpMemScript == 0)
{
printf(MEM_SCRIPT_ALLOC_ERROR, path);

return;
}

if (lpMemScript->SetBuffer(path) == 0)
{
printf(lpMemScript->GetLastError());

delete lpMemScript;

return;
}

int Index = 0;

try
{
while (true)
{
if (lpMemScript->GetToken() == TOKEN_END)
{
break;
}

if (strcmp("end", lpMemScript->GetString()) == 0)
{
break;
}

CUSTOM_ITEM_INFO info;

info.Index = Index;

info.ItemIndex = GET_ITEM(lpMemScript->GetNumber(), lpMemScript->GetAsNumber());

strcpy_s(info.ModelName, lpMemScript->GetAsString());

Index++;

this->SetInfo(info);
}
}
catch (...)
{
printf(lpMemScript->GetLastError());
}

delete lpMemScript;
}

void CCustomItem::SetInfo(CUSTOM_ITEM_INFO info)
{
if (info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM)
{
return;
}

this->m_CustomItemInfo[info.Index] = info;
}

GetMainInfo.cpp

Code: [Select]
#include "stdafx.h"
#include "CCRC32.H"
#include "MapManager.h"
#include "CustomItem.h"
#include "CustomItemGlow.h"

struct MAIN_FILE_INFO
{
BYTE LauncherType;
char LauncherName[32];
char CustomerName[32];
char IpAddress[32];
WORD IpAddressPort;
char ClientVersion[8];
char ClientSerial[17];
char WindowName[32];
char ScreenShotPath[50];
char ClientName[32];
char PluginName[32];
DWORD ClientCRC32;
DWORD PluginCRC32;
DWORD DWMaxAttackSpeed;
DWORD DKMaxAttackSpeed;
DWORD FEMaxAttackSpeed;
DWORD MGMaxAttackSpeed;
DWORD ReconnectTime;
BYTE HealthBarType;
BYTE EnableSky;
BYTE EnableMinimap;
BYTE EnableMoveList;
MAP_MANAGER_INFO MapManager[MAX_MAPS];
CUSTOM_ITEM_INFO CustomItemInfo[MAX_CUSTOM_ITEM];
CUSTOM_ITEM_GLOW_INFO CustomItemGlowInfo[MAX_CUSTOM_ITEM_GLOW];
};

int main()
{
MAIN_FILE_INFO info;

memset(&info, 0, sizeof(info));

info.LauncherType = GetPrivateProfileInt("MainInfo", "LauncherType", 0, ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "LauncherName", "XTLauncherExecutable", info.LauncherName, sizeof(info.LauncherName), ".\\MainInfo.ini");

info.IpAddressPort = GetPrivateProfileInt("MainInfo", "IpAddressPort", 44405, ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "CustomerName", "", info.CustomerName, sizeof(info.CustomerName), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "IpAddress", "", info.IpAddress, sizeof(info.IpAddress), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "ClientVersion", "", info.ClientVersion, sizeof(info.ClientVersion), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "ClientSerial", "", info.ClientSerial, sizeof(info.ClientSerial), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "WindowName", "", info.WindowName, sizeof(info.WindowName), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "ScreenShotPath", "", info.ScreenShotPath, sizeof(info.ScreenShotPath), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "ClientName", "", info.ClientName, sizeof(info.ClientName), ".\\MainInfo.ini");

GetPrivateProfileString("MainInfo", "PluginName", "", info.PluginName, sizeof(info.PluginName), ".\\MainInfo.ini");

info.DWMaxAttackSpeed = GetPrivateProfileInt("CharacterInfo", "DWMaxAttackSpeed", 65535, ".\\MainInfo.ini");

info.DKMaxAttackSpeed = GetPrivateProfileInt("CharacterInfo", "DKMaxAttackSpeed", 65535, ".\\MainInfo.ini");

info.FEMaxAttackSpeed = GetPrivateProfileInt("CharacterInfo", "FEMaxAttackSpeed", 65535, ".\\MainInfo.ini");

info.MGMaxAttackSpeed = GetPrivateProfileInt("CharacterInfo", "MGMaxAttackSpeed", 65535, ".\\MainInfo.ini");

info.ReconnectTime = GetPrivateProfileInt("ReconnectInfo", "ReconnectTime", 0, ".\\MainInfo.ini");

/*=================================================================
CUSTOM
==================================================================*/

info.HealthBarType = GetPrivateProfileInt("Systems", "HealthBarType", 0, ".\\MainInfo.ini");

info.EnableSky = GetPrivateProfileInt("Systems", "EnableSky", 0, ".\\MainInfo.ini");

info.EnableMinimap = GetPrivateProfileInt("Systems", "EnableMinimap", 0, ".\\MainInfo.ini");

info.EnableMoveList = GetPrivateProfileInt("Systems", "EnableMoveList", 0, ".\\MainInfo.ini");

gMapManager.Load("MapManager.txt");

gCustomItem.Load("CustomItem.txt");

gCustomItemGlow.Load("CustomItemGlow.txt");

/*================================================================*/

memcpy(info.MapManager, gMapManager.m_MapManager, sizeof(info.MapManager));

memcpy(info.CustomItemInfo, gCustomItem.m_CustomItemInfo, sizeof(info.CustomItemInfo));

memcpy(info.CustomItemGlowInfo, gCustomItemGlow.m_CustomItemGlowInfo, sizeof(info.CustomItemGlowInfo));

/*=================================================================*/

CCRC32 CRC32;

if (CRC32.FileCRC(info.ClientName, &info.ClientCRC32, 1024) == 0)
{
info.ClientCRC32 = 0;
}

if (CRC32.FileCRC(info.PluginName, &info.PluginCRC32, 1024) == 0)
{
info.PluginCRC32 = 0;
}

BYTE XorKey[20] = { 0x9E, 0x98, 0x12, 0x2B, 0xB6, 0x76, 0xF6, 0x5B, 0x76, 0x4D, 0x08, 0xF2, 0xAB, 0xDF, 0x91, 0xB6, 0x4C, 0x1C, 0x93, 0x2F };

for (int n = 0; n < sizeof(MAIN_FILE_INFO); n++)
{
((BYTE*)&info)[n] ^= (BYTE)(XorKey[n % 20] ^ LOBYTE(n));

((BYTE*)&info)[n] -= (BYTE)(XorKey[n % 20] ^ HIBYTE(n));

((BYTE*)&info)[n] += (BYTE)(XorKey[n % 20] ^ HIBYTE(n));
}

HANDLE file = CreateFile(".\\Data\\Local\\ClientInfo.bmd", GENERIC_WRITE, FILE_SHARE_READ, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);

if (file == INVALID_HANDLE_VALUE)
{
std::cout << "ERROR: Couldn't create the file." << std::endl;

system("pause");

return 1;
}

DWORD OutSize = 0;

if (WriteFile(file, &info, sizeof(MAIN_FILE_INFO), &OutSize, 0) == 0)
{
CloseHandle(file);

std::cout << "ERROR: Couldn't create the file." << std::endl;

system("pause");

return 1;
}

CloseHandle(file);

std::cout << "SUCCESS: File created." << std::endl;

system("pause");

return 0;
}

Perfecto, hasta el momento terminamos con los cambios de la solución GetMainInfo, ahora vamos a crear tambien dos archivos en la solución del Main.dll

CustomItemGlow.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_ITEM_GLOW 255

struct CUSTOM_ITEM_GLOW_INFO
{
int Index;
int ItemIndex;
int ColorR;
int ColorG;
int ColorB;
};

class CCustomItemGlow
{
public:

CCustomItemGlow();

virtual ~CCustomItemGlow();

void Load(CUSTOM_ITEM_GLOW_INFO* info);

void SetInfo(CUSTOM_ITEM_GLOW_INFO info);

CUSTOM_ITEM_GLOW_INFO* GetInfo(int index);

CUSTOM_ITEM_GLOW_INFO* GetInfoByItem(int ItemIndex);

bool GetCustomItemGlow(int ItemIndex, float* ItemColor);

public:

CUSTOM_ITEM_GLOW_INFO m_CustomItemGlowInfo[MAX_CUSTOM_ITEM_GLOW];
};
extern CCustomItemGlow gCustomItemGlow;

CustomItemGlow.cpp
Code: [Select]
#include "stdafx.h"
#include "CustomItemGlow.h"

CCustomItemGlow gCustomItemGlow;

CCustomItemGlow::CCustomItemGlow()
{
for (int n = 0; n < MAX_CUSTOM_ITEM_GLOW; n++)
{
this->m_CustomItemGlowInfo[n].Index = -1;
}
}

CCustomItemGlow::~CCustomItemGlow()
{

}

void CCustomItemGlow::Load(CUSTOM_ITEM_GLOW_INFO* info)
{
for (int n = 0; n < MAX_CUSTOM_ITEM_GLOW; n++)
{
this->SetInfo(info[n]);
}
}

void CCustomItemGlow::SetInfo(CUSTOM_ITEM_GLOW_INFO info)
{
if (info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM_GLOW)
{
return;
}

this->m_CustomItemGlowInfo[info.Index] = info;
}

CUSTOM_ITEM_GLOW_INFO* CCustomItemGlow::GetInfo(int index)
{
if (index < 0 || index >= MAX_CUSTOM_ITEM_GLOW)
{
return 0;
}

if (this->m_CustomItemGlowInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomItemGlowInfo[index];
}

CUSTOM_ITEM_GLOW_INFO* CCustomItemGlow::GetInfoByItem(int ItemIndex)
{
for (int n = 0; n < MAX_CUSTOM_ITEM_GLOW; n++)
{
CUSTOM_ITEM_GLOW_INFO* lpInfo = this->GetInfo(n);

if (lpInfo == 0)
{
continue;
}

if (lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

bool CCustomItemGlow::GetCustomItemGlow(int ItemIndex, float* ItemColor)
{
CUSTOM_ITEM_GLOW_INFO* lpInfo = this->GetInfoByItem(ItemIndex);

if (lpInfo == 0)
{
return false;
}

ItemColor[0] = (lpInfo->ColorR / 255.0f);

ItemColor[1] = (lpInfo->ColorG / 255.0f);

ItemColor[2] = (lpInfo->ColorB / 255.0f);

return true;
}

También vamos a modificamos algunos archivos:

CustomItem.h
Code: [Select]
#pragma once

#define MAX_CUSTOM_ITEM 255

struct CUSTOM_ITEM_INFO
{
int Index;
int ItemIndex;
char ModelName[32];
};

class CCustomItem
{
public:

CCustomItem();

virtual ~CCustomItem();

void Load(CUSTOM_ITEM_INFO* info);

void SetInfo(CUSTOM_ITEM_INFO info);

CUSTOM_ITEM_INFO* GetInfo(int index);

CUSTOM_ITEM_INFO* GetInfoByItem(int ItemIndex);

public:

CUSTOM_ITEM_INFO m_CustomItemInfo[MAX_CUSTOM_ITEM];
};

extern CCustomItem gCustomItem;

CustomItem.cpp

Code: [Select]
#include "stdafx.h"
#include "CustomItem.h"

CCustomItem gCustomItem;

CCustomItem::CCustomItem()
{
for (int n = 0; n < MAX_CUSTOM_ITEM; n++)
{
this->m_CustomItemInfo[n].Index = -1;
}
}

CCustomItem::~CCustomItem()
{

}

void CCustomItem::Load(CUSTOM_ITEM_INFO* info)
{
for (int n = 0; n < MAX_CUSTOM_ITEM; n++)
{
this->SetInfo(info[n]);
}
}

void CCustomItem::SetInfo(CUSTOM_ITEM_INFO info)
{
if (info.Index < 0 || info.Index >= MAX_CUSTOM_ITEM)
{
return;
}

this->m_CustomItemInfo[info.Index] = info;
}

CUSTOM_ITEM_INFO* CCustomItem::GetInfo(int index)
{
if (index < 0 || index >= MAX_CUSTOM_ITEM)
{
return 0;
}

if (this->m_CustomItemInfo[index].Index != index)
{
return 0;
}

return &this->m_CustomItemInfo[index];
}

CUSTOM_ITEM_INFO* CCustomItem::GetInfoByItem(int ItemIndex)
{
for (int n = 0; n < MAX_CUSTOM_ITEM; n++)
{
CUSTOM_ITEM_INFO* lpInfo = this->GetInfo(n);

if (lpInfo == 0)
{
continue;
}

if (lpInfo->ItemIndex == ItemIndex)
{
return lpInfo;
}
}

return 0;
}

Protect.h

Code: [Select]
#pragma once

#include "MapManager.h"
#include "CustomItem.h"
#include "CustomItemGlow.h"

struct MAIN_FILE_INFO
{
BYTE LauncherType;
char LauncherName[32];
char CustomerName[32];
char IpAddress[32];
WORD IpAddressPort;
char ClientVersion[8];
char ClientSerial[17];
char WindowName[32];
char ScreenShotPath[50];
char ClientName[32];
char PluginName[32];
DWORD ClientCRC32;
DWORD PluginCRC32;
DWORD DWMaxAttackSpeed;
DWORD DKMaxAttackSpeed;
DWORD FEMaxAttackSpeed;
DWORD MGMaxAttackSpeed;
DWORD ReconnectTime;
BYTE HealthBarType;
BYTE EnableSky;
BYTE EnableMinimap;
BYTE EnableMoveList;
MAP_MANAGER_INFO MapManager[MAX_MAPS];
CUSTOM_ITEM_INFO CustomItemInfo[MAX_CUSTOM_ITEM];
CUSTOM_ITEM_GLOW_INFO CustomItemGlowInfo[MAX_CUSTOM_ITEM_GLOW];
};

class CProtect
{
public:

CProtect();

virtual ~CProtect();

bool ReadMainFile(char* name);

void CheckLauncher();

void CheckInstance();

void CheckClientFile();

void CheckPluginFile();

public:

MAIN_FILE_INFO m_MainInfo;

DWORD m_ClientFileCRC;
};

extern CProtect gProtect;

Ya casi terminamos, en el archivo LoadModels.cpp vamos a dejar la siguiente función de esta forma:

Code: [Select]
void CLoadModels::PartObjectColorHook(int Type, float Alpha, float Bright, float Light[3], bool ExtraMon)
{
if (gCustomItemGlow.GetCustomItemGlow((Type - ITEM_BASE_MODEL), Light) == false)
{
PartObjectColor(Type, Alpha, Bright, Light, ExtraMon);
}
}

Bien, ahora por ultimo en el archivo Main.cpp debajo del Load de CustomItem, agregamos la siguiente linea:

Code: [Select]
gCustomItemGlow.Load(gProtect.m_MainInfo.CustomItemGlowInfo);

Compilamos todas las soluciones y listo ahora tienen que crear o modificar sus .txt de esta forma:

CustomItem.txt

Code: [Select]
// CUSTOM ITEM
// Developer: Nico
//
// SET EQUIPMENT PARTS WILL BE STORED IN: CLIENT/DATA/PLAYER/CUSTOM/<INDEX>/
// Example: Custom Set Brave Index 45 -> Client/Data/Player/Custom/45/[Helm.bmd | Armor.bmd | Gloves.bmd | Pants.bmd | Boots.bmd]
//
// ALL CUSTOM ITEMS WILL BE STORED IN: CLIENT/DATA/ITEM/CUSTOM/<ITEM_INDEX>/
// Example: Custom Spear Brova Index 03,011 -> Client/Data/Item/Custom/107/Spear.bmd
// 107 because -> 03 * 32 + 011 = 107
//========================================================================================================
//========================================================================================================
//========================================================================================================

//========================================================================================================
//========================================================================================================
//========================================================================================================
//Index | ModelName | Comment
//========================================================================================================
00,020 "Sword21" // Knight Blade
07,021 "HelmMale22" // Flaming Phoenix Helm
08,021 "ArmorMale22" // Flaming Phoenix Armor
09,021 "PantMale22" // Flaming Phoenix Pants
10,021 "GloveMale22" // Flaming Phoenix Gloves
11,021 "BootMale22" // Flaming Phoenix Boots
end

CustomItemGlow.txt
En este archivo si por ejemplo no queres agregarle glow a ningun item, simplemente los comentas al inicio // , o los eliminas.
Code: [Select]
// CUSTOM ITEM GLOW
//========================================================================================================
//Index | R G B | Comment
//========================================================================================================
00,020 191 165 127 // Knight Blade
07,021 153 77 26 // Flaming Phoenix Helm
08,021 153 77 26 // Flaming Phoenix Armor
09,021 153 77 26 // Flaming Phoenix Pants
10,021 153 77 26 // Flaming Phoenix Gloves
11,021 153 77 26 // Flaming Phoenix Boots
end

Por ultimo quiero enviar un afectuoso abrazo desde la distancia a @kayito y a todos los contribuyentes, quienes siguen trabajando con dedicación en este proyecto increíble, manteniendo a flote a los amantes de la vieja escuela.


en donde va este codigo le incluyen

#include "CustomItemGlow.h"

void CLoadModels::PartObjectColorHook(int Type, float Alpha, float Bright, float Light[3], bool ExtraMon)
{
   if (gCustomItemGlow.GetCustomItemGlow((Type - ITEM_BASE_MODEL), Light) == false)
   {
      PartObjectColor(Type, Alpha, Bright, Light, ExtraMon);
   }
}

Gracias @Zeus

Gracias:


Offline Pescado #647 Posteado: September 19, 2023, 07:22:01 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 5
  • eg
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza


Bueno aca les comparto las sources con el agregado de custom attack offattack y pick mas el arrow infinity creditos a @kayito por dicho files Gracias. aca dejo el enlace 

A probar se ha dicho, esperemos que funcione bien, a cruzar los dedos :D

Gracias.


Offline Pescado #648 Posteado: September 19, 2023, 08:00:16 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 5
  • eg
@Genius05

Igual bro, todo funciona bien, pero al darle /offattack el pj queda atacando supuestamente pero no saca nada de daño a los mob que lo rodean



este es el problema que tienen todos los files que tienen ese comando.


Online gohancs #649 Posteado: September 19, 2023, 09:44:02 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 19
  • Gracias recibida: 12
  • ve
Instalo la web Webengine y no registra cuenta.. Si Alguien tiene un fix ?

esta el web https://mu97.mywire.org/

 please


Offline xXSiniestroXx #650 Posteado: September 19, 2023, 09:52:46 PM

  • +2 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 216
  • Gracias recibida: 926
  • ve
Instalo la web Webengine y no registra cuenta.. Si Alguien tiene un fix ?

esta el web https://mu97.mywire.org/

 please

Debes modificar las tablas en la db


Offline Part1zanBelarus #651 Posteado: September 21, 2023, 01:12:01 PM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 123
  • Gracias recibida: 294
  • by
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza


Bueno aca les comparto las sources con el agregado de custom attack offattack y pick mas el arrow infinity creditos a @kayito por dicho files Gracias. aca dejo el enlace 
By any chance, do you need SQL scripts to add to the database?


Offline Part1zanBelarus #652 Posteado: September 21, 2023, 02:15:39 PM | Modificado: September 21, 2023, 02:51:10 PM by Part1zanBelarus

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 123
  • Gracias recibida: 294
  • by
@kayito Hola, todavía veo que las texturas se están estropeando, ¿sabes cómo arreglarlo? (Sabes, cuando elimino el archivo axe05,06bmd de Data/Item, se arreglan, pero el límite sigue ahí :(

https://prnt.sc/PDb2-7C2gCxM

Y una pregunta más, ¿cuál es el RGB original para, por ejemplo, el estado de Kundun o cualquier otro objeto con un color dorado?
Work Fine
@kayito Your R.G.B system works well, without third-party code. Thank you for your work !



Offline Genius05 #653 Posteado: September 21, 2023, 04:45:22 PM

  • 0 puntos por ventas
  • *
  • Rank: Destacado
  • Posts: 91
  • Gracias recibida: 35
  • ve
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza


Bueno aca les comparto las sources con el agregado de custom attack offattack y pick mas el arrow infinity creditos a @kayito por dicho files Gracias. aca dejo el enlace 
By any chance, do you need SQL scripts to add to the database?

he actualizado el enlace de descargar con el código compartido de @Zeus ya integrado a la source mas el SQL scripts del customattack


Offline Part1zanBelarus #654 Posteado: September 21, 2023, 05:32:53 PM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 123
  • Gracias recibida: 294
  • by
UPDATE

- Se añadió el sistema de Texturas para los items custom. Créditos: @SetecSoft [Main.dll]

- Se añadió el sistema de Click Derecho para Equipar/Desequipar items. [Main.dll]

- Se añadió un sistema de empaquetamiento sincronizado con el ItemStack.txt del servidor que permite armar packs de cualquier item (ideal para jewels) [Main.dll][GameServer.exe][MuServer/Data/Item/ItemStack.txt]

- Se añadió un sistema de click derecho para desempaquetar de a uno los items empaquetados (ideal para jewels) [Main.dll]

- Se optimizó el sistema de protocolos del lado cliente para poder procesar y recibir todos los tipos de protocolos desde el servidor [Main.dll]

- Se optimizó el viewport de buffs y efectos del lado servidor, haciéndolo más rápido y eficiente [GameServer.exe]

- Se modificó la ubicación de los items custom, ahora permitiendo organizarlos y separarlos por carpetas individuales [Main.dll]
   - Ahora las partes de set se ubicarán en: Cliente/Data/Player/Custom/<Index>/[Helm.bmd | Armor.bmd | Pants.bmd | Gloves.bmd | Boots.bmd]
      - Aclaración: El Index es simplemente el numerito correspondiente dentro de cada categoría. Por ejemplo: Casco Brave es 07,045 , Pecho Brave es 08,045, etc. entonces Index será 45 y por lo tanto todas las bmd correspondientes al set custom brave se guardarán en Cliente/Data/Player/Custom/45/

   - Ahora los items se ubicarán en: Cliente/Data/Item/Custom/<ItemIndex>/[*.bmd]
      - Aclaración: El ItemIndex se calcula haciendo (Grupo * 32 + Item). Por ejemplo: Custom Spear Brova es 03,011 por lo que el cálculo sería 03 * 32 + 011 = 107, entonces ItemIndex será 107 y por lo tanto la bmd correspondiente a la custom spear brova se guardará en Cliente/Data/Item/Custom/107/


- Se corrigió un error que hacía que ciertos buffs y efectos desaparezcan al moverse de mapa o al desaparecer de la vista y reaparecer [Main.dll]

- Se corrigió un error que al intentar hacer Grand Reset, no se podía utilizar ningún otro comando y no se aplicaba el Grand Reset [DataServer.exe]

- Se corrigió un error que no se verificaba correctamente el nivel requerido para crear un MG [Main.dll][GameServer.exe]
   
- Se corrigió un error que calculaba mal el daño de la elfa cuando utilizaba Bows/Crossbows sin durabilidad [GameServer.exe]

Excelente que aún sigan con el proyecto campeón, ojala y se anime en poner el /offattack, /attack y /pick  con esto estaría completo este excelente proyecto.

pero ahi estan las sources amigo aplicarlo

Pero no sé hacerlo he descargado varios archivos que supuestamente lo tienen implementado pero no funciona bien

uy.. jaja veamos que se realiza


Bueno aca les comparto las sources con el agregado de custom attack offattack y pick mas el arrow infinity creditos a @kayito por dicho files Gracias. aca dejo el enlace 
By any chance, do you need SQL scripts to add to the database?

he actualizado el enlace de descargar con el código compartido de @Zeus ya integrado a la source mas el SQL scripts del customattack
The link is still the same old. not updated


Online gohancs #655 Posteado: September 23, 2023, 05:33:59 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 19
  • Gracias recibida: 12
  • ve
TENGO HOSTING + VPS (ALGUIEN QUE SE QUIERA SUMAR AL PROJECTO) ???



FALTA METERLE MANO AL A WEB PARA QUE SEA COMPATIBLE CON LOS FILES.
RECOMENDARON WEBENGINECMS PERO NO CREA LAS CUENTAS.

Gracias:


Offline gega #656 Posteado: September 23, 2023, 08:24:29 PM | Modificado: September 23, 2023, 08:37:37 PM by gega

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 20
  • Gracias recibida: 30
  • ar
Con ayuda de @kayito solucionamos el tema del registro para la WebEngine y la dejamos 100% funcional para los files.





Offline lobinhopk #657 Posteado: September 25, 2023, 03:09:34 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 54
  • Gracias recibida: 419
  • br
TENGO HOSTING + VPS (ALGUIEN QUE SE QUIERA SUMAR AL PROJECTO) ???



FALTA METERLE MANO AL A WEB PARA QUE SEA COMPATIBLE CON LOS FILES.
RECOMENDARON WEBENGINECMS PERO NO CREA LAS CUENTAS.

que vps é essa?


Offline magnumclinic #658 Posteado: September 26, 2023, 09:00:37 AM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 1
  • Gracias recibida: 0
  • ae
Home remedies for dental cavities offer natural alternatives to support oral health. These remedies often include oil pulling with coconut oil for its potential antimicrobial properties, using aloe vera gel to soothe irritated gums, and maintaining good oral hygiene practices like regular brushing and flossing. While these methods can be helpful in managing cavity symptoms, it's essential to seek professional dental care for a thorough examination and appropriate treatment, especially for advanced cavities. https://www.magnumclinic.ae/blog/home-remedies-for-dental-cavity


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

Recommended Servers - Topics Bottom (790x150)



 

Related Topics

  Subject / Started by Replies Last post
20 Replies
3547 Views
Last post August 01, 2022, 09:40:38 AM
by stopk
1 Replies
288 Views
Last post January 16, 2023, 10:41:57 PM
by ntcong295810
0 Replies
158 Views
Last post March 27, 2023, 04:06:42 PM
by rulay
4 Replies
737 Views
Last post May 04, 2023, 09:47:42 PM
by ntcong295810
12 Replies
287 Views
Last post August 30, 2023, 02:22:56 PM
by Pescado