Blood Castle GM Effect bug fix (Main 5.2 sources) - Source Mu - Mu Server Files
 

Blood Castle GM Effect bug fix (Main 5.2 sources)

Publicado por Dakosmu, Nov 15, 2025, 11:06 PM

Tema anterior - Siguiente tema

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

Dakosmu

Guía Paso a Paso: Solución al Bug del Efecto GM en Blood Castle (Fuentes 5.2)

---

Esta es la solución para corregir el error del efecto de personaje "GM Effect" al entrar a **Blood Castle** en las fuentes del cliente **5.2**.

---

¿Cuál es el Bug?

  • El efecto visual de "GM Effect" (usualmente una luz o aura especial) se aplica incorrectamente al personaje dentro del evento Blood Castle, incluso cuando el buff ya no debería estar activo o interfiere con la visualización normal del personaje/equipamiento.

Antes:


Después:


---

Instrucciones de la Solución

Esta corrección debe aplicarse en el archivo de código fuente del cliente, específicamente en **ZzzCharacter.cpp**.

  • Paso 1: Abre el archivo ZzzCharacter.cpp en tu editor de código fuente (Visual Studio, etc.).
  • Paso 2: Busca la función RenderCharacterBackItem.
  • Paso 3: Dentro de esa función, localiza la siguiente línea de código (o similar, que maneja la condición para Blood Castle):

Código Original (Antes)
Utiliza el siguiente código para encontrar la línea a reemplazar:

if (gMapManager.InBloodCastle() && c->EtcPart != 0)

  • Paso 4: Reemplaza la línea que encontraste con la siguiente versión modificada. Esta nueva condición añade una verificación (&& !g_isCharacterBuff((&c->Object),eBuff_GMEffect)) para asegurar que el efecto GM no esté activo antes de aplicar la lógica de Blood Castle.

Código Modificado (Después)
Reemplaza la línea anterior con esta:

if (gMapManager.InBloodCastle() && c->EtcPart != 0 && !g_isCharacterBuff((&c->Object),eBuff_GMEffect) )

  • Paso 5: Guarda los cambios en ZzzCharacter.cpp.
  • Paso 6: Recompila tus fuentes del cliente para generar el nuevo ejecutable.
  • Paso 7: ¡Prueba en el juego! El efecto GM ya no debería interferir visualmente dentro de Blood Castle.

---

Esta guía explica cómo modificar las fuentes del cliente para ocultar las alas (Wings) y evitar ciertos efectos visuales para los usuarios normales dentro del evento **Blood Castle**, permitiendo que solo los Personajes con Control Code 20 (GM/Operador) puedan seguir mostrándolos.

Autor del Código: GabrielC

---

Modificaciones en CSChaosCastle.h

  • Paso 1: Abre el archivo CSChaosCastle.h.
  • Paso 2: Dentro de la clase principal, generalmente en la sección de funciones públicas (public), declara la siguiente función:

bool InBloodCastleCheckingGMAndWings(int iMap);

---

Implementación en CSChaosCastle.cpp

  • Paso 3: Abre el archivo CSChaosCastle.cpp.
  • Paso 4: Agrega la definición de la función InBloodCastleCheckingGMAndWings al final del archivo. Esta función devuelve true si el mapa actual es Blood Castle y si el personaje tiene el control code CTLCODE_20OPERATOR (GM/Operador).

bool InBloodCastleCheckingGMAndWings(int iMap)
{
    switch (iMap)
    {
    case WD_11BLOODCASTLE1:
    case WD_11BLOODCASTLE1 + 1:
    case WD_11BLOODCASTLE1 + 2:
    case WD_11BLOODCASTLE1 + 3:
    case WD_11BLOODCASTLE1 + 4:
    case WD_11BLOODCASTLE1 + 5:
    case WD_11BLOODCASTLE_END:
    case WD_52BLOODCASTLE_MASTER_LEVEL:
    {
        if ((Hero->CtlCode & CTLCODE_20OPERATOR))
        {
            return true;
        }
    }
    break;
    }

    return false;
}

---

Modificación en ZzzCharacter.cpp

  • Paso 5: Abre el archivo ZzzCharacter.cpp.
  • Paso 6: Busca la línea que maneja la condición para Blood Castle, la cual controla la visualización de efectos y alas, que generalmente es algo como:

if (gMapManager.InBloodCastle() && c->EtcPart != 0)

  • Paso 7: Reemplaza toda la estructura de código que sigue a esa línea (la que renderiza las alas y efectos especiales en BC) con el siguiente bloque de código. Este bloque agrega la nueva condición para que, si es Blood Castle O es Blood Castle y el personaje es GM (gracias a la nueva función), se aplique la lógica de ocultar o mostrar las alas/efectos:

        if ((gMapManager.InBloodCastle() && c->EtcPart != 0) || (InBloodCastleCheckingGMAndWings(gMapManager.WorldActive) && c->EtcPart != 0))
        {
            PART_t *w = &c->Wing;

            int iType = 0;
            int iLevel = 0;
            int iOption1 = 0;

            w->LinkBone = 47;
            if(o->CurrentAction == PLAYER_FLY || o->CurrentAction == PLAYER_FLY_CROSSBOW)
                w->PlaySpeed = 1.f;
            else
                w->PlaySpeed = 0.25f;

            switch ( c->EtcPart )
            {
                case 1: iType = MODEL_STAFF+10; break;
                case 2: iType = MODEL_SWORD+19; break;
                case 3: iType = MODEL_BOW+18; break;
            }

            if (iType != 0)
                RenderLinkObject(0.f,0.f,15.f, c, w, iType, iLevel, iOption1, true, bTranslate);
        }

  • Paso 8: Guarda todos los cambios y recompila las fuentes de tu cliente para aplicar las correcciones.

---

¿Necesitas ayuda con otra modificación de código o tienes alguna duda sobre esta implementación?
Bon Dia

🡱 🡳
Real Time Web Analytics