Cómo Colocar Custom Flag Usando un Ítem en MU Online

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

  1. Modificación de Funciones:
    • La línea SetOp redirige una función existente a User::HoolCreateManyFlay, lo que indica que se están implementando cambios en la lógica del juego.
  2. 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 objeto pChar, posiblemente para personalizar la experiencia del jugador.

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 y CreateManyFlag son esenciales para la jugabilidad, ya que determinan cómo los ítems pueden afectar las habilidades de los personajes.

Desglose del User.h

  1. static bool UseHasMagicRing();
    • Verifica si el personaje tiene un anillo mágico.
  2. static bool CreateManyFlag(ObjectPreview * pChar);
    • Crea un efecto en un objeto ObjectPreview.
  3. static void __cdecl HoolCreateManyFlay(ObjectPreview * pChar);
    • Aplica efectos adicionales o invoca la creación de múltiples flags en el objeto pChar.

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);

 

Creditos
mediodas20

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *