Colocar Custom Flag Con un item
Análisis del Código de User.cpp
y User.h
en MU Online
Contexto del Código
El código presentado es parte del archivo User.cpp
en un proyecto de MU Online, un juego de rol en línea. Este archivo se encarga de manejar la lógica relacionada con los personajes de los jugadores.
Estructura del User.cpp
- Modificación de Funciones:
- La línea
SetOp
redirige una función existente aUser::HoolCreateManyFlay
, lo que indica que se están implementando cambios en la lógica del juego.
- La línea
- Funciones Clave:
UseHasMagicRing
:- Verifica si el personaje tiene uno de varios anillos mágicos. Esto es importante para determinar si el personaje puede acceder a ciertas habilidades o efectos dentro del juego.
- Utiliza un bucle para comprobar los ítems en el inventario del personaje.
CreateManyFlag
:- Se encarga de crear un efecto (flag) en el personaje, dependiendo de ciertas condiciones.
- Utiliza direcciones de memoria para asignar y modificar propiedades del objeto
pChar
.
HoolCreateManyFlay
:- Llama a
CreateManyFlag
y aplica efectos al objetopChar
, posiblemente para personalizar la experiencia del jugador.
- Llama a
Consideraciones
- Uso de Direcciones de Memoria:
- La manipulación directa de direcciones de memoria permite a los desarrolladores personalizar el comportamiento del juego.
- Condiciones de Juego:
- Las verificaciones en
UseHasMagicRing
yCreateManyFlag
son esenciales para la jugabilidad, ya que determinan cómo los ítems pueden afectar las habilidades de los personajes.
- Las verificaciones en
Desglose del User.h
static bool UseHasMagicRing();
- Verifica si el personaje tiene un anillo mágico.
static bool CreateManyFlag(ObjectPreview * pChar);
- Crea un efecto en un objeto
ObjectPreview
.
- Crea un efecto en un objeto
static void __cdecl HoolCreateManyFlay(ObjectPreview * pChar);
- Aplica efectos adicionales o invoca la creación de múltiples flags en el objeto
pChar
.
- Aplica efectos adicionales o invoca la creación de múltiples flags en el objeto
Resumen
El archivo User.cpp
es fundamental para la lógica del personaje en MU Online, permitiendo la personalización y modificación de la experiencia del jugador. Las funciones definidas en User.h
son clave para verificar la posesión de ítems y aplicar efectos, contribuyendo a la jugabilidad.
Aqui un Ejemplo
https://giphy.com/gifs/gZA7r2b3D1vg9H1SzH
User.cpp
SetOp((LPVOID)0x00588511, (LPVOID)User::HoolCreateManyFlay, ASM::CALL); bool User::UseHasMagicRing() { DWORD pCharData = *(DWORD*)MAIN_CHARACTER_STRUCT; if (pCharData) { for (size_t i = 0; i < 2; i++) { ObjectItem2* VuKhiRong = (ObjectItem2*)GetCharacterItem(i); if (VuKhiRong->ItemID == ITEM(0, 51) || VuKhiRong->ItemID == ITEM(0, 53) || VuKhiRong->ItemID == ITEM(0, 106) || VuKhiRong->ItemID == ITEM(2, 25) || VuKhiRong->ItemID == ITEM(4, 30) || VuKhiRong->ItemID == ITEM(4, 33) || VuKhiRong->ItemID == ITEM(5, 49) || VuKhiRong->ItemID == ITEM(5, 50)) { return true; } } } return false; } bool User::CreateManyFlag(ObjectPreview * pChar) { if (!pChar->Unknown764 && (pChar == (ObjectPreview *)*(DWORD*)MAIN_VIEWPORT_STRUCT && UseHasMagicRing() || PlayerHasManyFlag(pChar->aIndex))) { void* pMem = ((void*(__cdecl*)(int))(0x9D00C5))(668); pChar->Unknown764 = (DWORD)((void*(__thiscall*)(void *this1, int modeType, int ParentBoneIndex, bool bFllowParentRotate, float ox, float oy, float oz, float rx, float ry, float rz))(0x4EFFF0)) ( pMem, 348, 20, 0, -45.0, -5.0, -0.0, 0.0, 0.0, 1); return true; } return false; } void User::HoolCreateManyFlay(ObjectPreview* pChar) { User::CreateManyFlag(pChar); ((void(__cdecl*)(ObjectPreview*))(0x4EF9A0))(pChar); }
User.h
static bool UseHasMagicRing(); static bool CreateManyFlag(ObjectPreview * pChar); static void __cdecl HoolCreateManyFlay(ObjectPreview * pChar);