WhatsApp Discord
Fixing Shadows: Personajes, Armaduras, Alas y Pets en Client 5.2 - Source Mu - Mu Server Files
 

Fixing Shadows: Personajes, Armaduras, Alas y Pets en Client 5.2

Publicado por Dakosmu, Mar 20, 2026, 05:35 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Dakosmu

Fixing Shadows: Personajes, Armaduras, Alas y Pets en Client 5.2


¡Hagamos que la comunidad de MU vuelva a estar activa! Hoy comparto una solución técnica para un problema visual común en el Client 5.2: la falta de sombras o su renderizado incorrecto en elementos clave. Este fix mejora notablemente la profundidad visual del juego.

¿Qué corrige este fix de sombras?
  • Renderizado de sombras para Custom Pets y helpers (Panda, Unicornio, etc.).
  • Sombras dinámicas para todas las Alas (Wings) y capas, incluyendo físicas de tela.
  • Corrección de sombras en armaduras y partes del cuerpo del personaje.
  • Lógica inteligente para desactivar sombras en zonas específicas (SafeZone) o mapas como Heaven/Hellas.

Este fix requiere conocimientos básicos de C++ ya que se aplica directamente en el Source Code del cliente (Main).

Guía de Implementación Paso a Paso:

1. Configuración de Objetos (GOBoid.cpp)
Busca la función bool RenderBug y añade la lógica para detectar al dueño del Pet y aplicar la sombra solo si no estás en zona segura.

// 1) Buscar el dueño del objeto
CHARACTER* ownerChar = nullptr;
for (int i = 0; i < MAX_CHARACTERS_CLIENT; ++i) {
CHARACTER* c = &CharactersClient[i];
if (&c->Object == o->Owner) { ownerChar = c; break; }
}

// 2) Determinar si necesita sombra (Custom Pets o Helpers)
bool isCustomPet = (gCustomPet2.CheckCustomPetByItem(o->Type - 1171) == 1);
bool needShadow = false;

if (isCustomPet) needShadow = true;

if (needShadow && gMapManager.WorldActive != WD_10HEAVEN) {
BMD* b = &Models[o->Type];
vec3_t ShadowPos;
VectorCopy(o->Position, ShadowPos);
ShadowPos[2] = RequestTerrainHeight(ShadowPos[0], ShadowPos[1]);
VectorCopy(ShadowPos, b->BodyOrigin);
EnableAlphaTest();
glColor4f(0.f, 0.f, 0.f, 0.3f * o->Alpha);
b->RenderBodyShadow();
glColor4f(1.f, 1.f, 1.f, 1.f);
}

2. Renderizado de Alas y Capas (ZzzCharacter.cpp)
Para que las alas proyecten sombra, localiza void RenderLinkObject e inserta el switch de modelos:

switch (Type) {
case MODEL_WINGS_OF_ELF:
case MODEL_WINGS_OF_DRAGON:
case MODEL_WINGS_OF_SOUL:
// ... incluir todos los modelos de alas ...
b->RenderBodyShadow();
handled = true;
break;
case MODEL_CAPE_OF_LORD:
case MODEL_CAPE_OF_EMPEROR:
b->RenderBodyShadow(-1, -1, -1, -1, o->m_pCloth, o->m_byNumCloth);
handled = true;
break;
}

3. Lógica del Personaje (ZzzCharacter.cpp)
Busca void RenderCharacter y reemplaza el bloque de HideShadow para forzar la activación de o->EnableShadow = true; mientras se renderizan las partes del cuerpo.

Es fundamental respetar las condiciones de gMapManager para evitar que las sombras "vuelen" en mapas sin terreno sólido como Icarus (Heaven).

Una vez aplicados estos cambios y recompilado el Main, las sombras aparecerán automáticamente siguiendo el relieve del terreno.

Opcionalmente, puedes vincular este código a un switch en tu menú de configuración (tecla O) para que los usuarios puedan activar o desactivar las sombras según su PC.

Capturas del Fix en Acción




Gracias a todos los que comparten sus correcciones de forma desinteresada. ¡Espero que este aporte les sirva para mejorar sus servidores!

¿Tienes problemas con algún modelo de ala específico que no proyecta sombra? ¡Comenta abajo y lo revisamos!
Bon Dia

🡱 🡳
Real Time Web Analytics