WhatsApp Discord
Solución Definitiva: Fix para Errores de Efectos Source 5.2 Pegasus/Mudream - Source Mu - Mu Server Files
 

Solución Definitiva: Fix para Errores de Efectos Source 5.2 Pegasus/Mudream

Publicado por Dakosmu, Mar 19, 2026, 06:46 AM

Tema anterior - Siguiente tema

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

Dakosmu

Solución Definitiva: Fix para Errores de Efectos en Habilidades de Rage Fighter (RF)

Si estás teniendo problemas con la visualización de los efectos de las habilidades del Rage Fighter en tu servidor, este fix corrige errores en el manejo de buffers y visuales de la clase.

Este parche optimiza la función RageCreateEffect para asegurar que habilidades como Dragon Kick, Darkside y los buffs de grupo se ejecuten con los efectos visuales correctos y sin duplicidad de procesos.

Instrucciones de Instalación:

  • Abre el código fuente de tu cliente (Source Code).
  • Busca el archivo donde se gestiona el sistema del Monk/Rage Fighter (comúnmente CMonkSystem.cpp).
  • Localiza la función: bool CMonkSystem::RageCreateEffect(OBJECT* _pObj, int _nSkill)
  • Reemplaza toda la función existente por el código que se presenta a continuación.
  • Compila tu proyecto y asegúrate de guardar el archivo con codificación UTF-8 (sin BOM) o ANSI para evitar errores de caracteres.

Asegúrate de realizar una copia de seguridad de tus archivos antes de aplicar cualquier cambio en el código fuente.

bool CMonkSystem::RageCreateEffect(OBJECT* _pObj, int _nSkill)
{
switch (_nSkill)
{
case AT_SKILL_THRUST:
case MASTER_SKILL_ADD_LARGE_RING_BLOWER_IMPROVED:
case MASTER_SKILL_ADD_LARGE_RING_BLOWER_ENHANCED:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;
  vec3_t vPosition;
  VectorCopy(CharactersClient[_pObj->m_sTargetIndex].Object.Position, vPosition);
  _pObj->Angle[2] = CreateAngle2D(_pObj->Position, vPosition);
  CreateEffect(MODEL_WOLF_HEAD_EFFECT, _pObj->Position, _pObj->Angle, _pObj->Light, 0, _pObj);
  CreateEffect(BITMAP_SBUMB, vPosition, _pObj->Angle, _pObj->Light, 0, _pObj, -1, 0, 0, 0, 2.1f);

  PlayBuffer(SOUND_RAGESKILL_THRUST);
}
return true;
case AT_SKILL_STAMP:
case MASTER_SKILL_ADD_UPPER_BEAST_IMPROVED:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;
  CreateEffect(MODEL_DOWN_ATTACK_DUMMY_R, _pObj->Position, _pObj->Angle, _pObj->Light, 0, _pObj);

  PlayBuffer(SOUND_RAGESKILL_STAMP);
}
return true;
case AT_SKILL_GIANTSWING:
case MASTER_SKILL_ADD_CHAIN_DRIVER_IMPROVED:
case MASTER_SKILL_ADD_CHAIN_DRIVER_ENHANCED:
{
CreateEffect(BITMAP_SWORDEFF, _pObj->Position, _pObj->Angle, _pObj->Light, 0, _pObj);

  PlayBuffer(SOUND_RAGESKILL_GIANTSWING);
}
return true;
case AT_SKILL_ATT_UP_OURFORCES:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(0.2f, 0.4f, 1.0f, vLight);

  vec3_t _vAngle;
  VectorCopy(_pObj->Angle, _vAngle);
  CreateEffect(BITMAP_SWORD_EFFECT_MONO, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);

  for (int i = 0; i < 3; ++i)
  {
     Vector(0.6f, 0.65f, 1.0f, vLight);
     CreateEffect(MODEL_SHOCKWAVE_GROUND01, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f - (i * 0.15f));

     Vector(0.65f, 0.8f, 1.0f, vLight);
     CreateEffect(BITMAP_EVENT_CLOUD, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);
  }
  Vector(0.5f, 0.55f, 1.0f, vLight);
  CreateEffect(MODEL_WINDFOCE, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);

  Vector(0.5f, 0.55f, 0.9f, vLight);
  CreateEffect(BITMAP_MAGIC, _pObj->Position, _pObj->Angle, vLight, 13);
}
return true;
case AT_SKILL_HP_UP_OURFORCES:
case MASTER_SKILL_ADD_FITNESS_IMPROVED:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(0.5f, 0.28f, 1.0f, vLight);
  vec3_t _vAngle;
  VectorCopy(_pObj->Angle, _vAngle);
  CreateEffect(BITMAP_SWORD_EFFECT_MONO, _pObj->Position, _pObj->Angle, vLight, 1, _pObj, -1, 0, 0, 0, 1.0f);
  for (int i = 0; i < 3; ++i)
  {
     Vector(1.0f, 0.35f, 1.0f, vLight);
     CreateEffect(MODEL_SHOCKWAVE_GROUND01, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f - (i * 0.15f));

     Vector(0.8f, 0.4f, 1.0f, vLight);
     CreateEffect(BITMAP_EVENT_CLOUD, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);
  }
  Vector(0.85f, 0.2f, 1.0f, vLight);
  CreateEffect(MODEL_WINDFOCE, _pObj->Position, _pObj->Angle, vLight, 4, _pObj, -1, 0, 0, 0, 1.0f);

  Vector(0.78f, 0.2f, 1.0f, vLight);
  CreateEffect(BITMAP_MAGIC, _pObj->Position, _pObj->Angle, vLight, 13);
}
return true;
case AT_SKILL_DEF_UP_OURFORCES:
case MASTER_SKILL_ADD_GREATER_DEFENSE_SUCCESS_RATE_IMPROVED:
case MASTER_SKILL_ADD_GREATER_DEFENSE_SUCCESS_RATE_ENHANCED:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(1.0f, 0.15f, 0.0f, vLight);
  vec3_t _vAngle;
  VectorCopy(_pObj->Angle, _vAngle);
  CreateEffect(BITMAP_SWORD_EFFECT_MONO, _pObj->Position, _pObj->Angle, vLight, 2, _pObj, -1, 0, 0, 0, 1.0f);

  for (int i = 0; i < 3; ++i)
  {
     Vector(1.0f, 0.1f, 0.0f, vLight);
     CreateEffect(MODEL_SHOCKWAVE_GROUND01, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f - (i * 0.15f));

     Vector(1.0f, 0.3f, 0.2f, vLight);
     CreateEffect(BITMAP_EVENT_CLOUD, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);
  }
  Vector(1.0f, 0.2f, 0.0f, vLight);
  CreateEffect(MODEL_WINDFOCE, _pObj->Position, _pObj->Angle, vLight, 5, _pObj, -1, 0, 0, 0, 1.0f);

  Vector(1.0f, 0.15f, 0.0f, vLight);
  CreateEffect(BITMAP_MAGIC, _pObj->Position, _pObj->Angle, vLight, 13);
}
return true;

case AT_SKILL_DRAGON_KICK:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(0.7f, 0.7f, 1.0f, vLight);
  CreateEffect(MODEL_DRAGON_KICK_DUMMY, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);

  vec3_t Light, Position, P, dp, vAngle;

  if (_pObj->m_sTargetIndex < 0)
     return true;

  VectorCopy(CharactersClient[_pObj->m_sTargetIndex].Object.Position, Position);
  VectorCopy(_pObj->Angle, vAngle);
  vAngle[2] = CreateAngle2D(_pObj->Position, Position);

  float Matrix[3][4];
  Vector(0.f, 20.f, 0.f, P);
  AngleMatrix(vAngle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);
  Vector(0.8f, 0.9f, 1.6f, Light);
  CreateEffect(MODEL_MULTI_SHOT3, Position, vAngle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT3, Position, vAngle, Light, 0);

  Vector(0.f, 0.f, 0.f, P);
  AngleMatrix(vAngle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);

  CreateEffect(MODEL_MULTI_SHOT1, Position, vAngle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT1, Position, vAngle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT1, Position, vAngle, Light, 0);

  Vector(0.f, 20.f, 0.f, P);
  AngleMatrix(vAngle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);
  CreateEffect(MODEL_MULTI_SHOT2, Position, vAngle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT2, Position, vAngle, Light, 0);

  PlayBuffer(SOUND_RAGESKILL_DRAGONKICK);
}
return true;

case AT_SKILL_DRAGON_LOWER:
case MASTER_SKILL_ADD_DRAGON_LORE_IMPROVED:
case MASTER_SKILL_ADD_DRAGON_LORE_ENHANCED:
{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(1.0f, 1.0f, 1.0f, vLight);
  CreateEffectFpsChecked(BITMAP_LAVA, _pObj->Position, _pObj->Angle, vLight, 0, _pObj, -1, 0, 0, 0, 1.0f);

  CreateEffect(MODEL_BLOW_OF_DESTRUCTION, _pObj->Position, _pObj->Angle, vLight, 2, _pObj);

  InitLower();

  PlayBuffer(SOUND_RAGESKILL_DRAGONLOWER);
}
break;
case AT_SKILL_DARKSIDE:
case MASTER_SKILL_ADD_DARK_SIDE_IMPROVED:

case MASTER_SKILL_ADD_DARK_SIDE_ENHANCED:

{
if (m_bUseEffectOnce)
return false;

  m_bUseEffectOnce = true;

  vec3_t vLight;
  Vector(1.0f, 0.6f, 0.6f, vLight);
  CreateEffect(BITMAP_EVENT_CLOUD, _pObj->Position, _pObj->Angle, vLight, 1, _pObj, -1, 0, 0, 0, 1.0f);

  Vector(1.0f, 0.4f, 0.0f, vLight);
  CreateEffect(BITMAP_MAGIC, _pObj->Position, _pObj->Angle, vLight, 14);

  Vector(1.0f, 0.5f, 0.2f, vLight);
  CreateEffect(MODEL_WINDFOCE, _pObj->Position, _pObj->Angle, vLight, 2, _pObj, -1, 0, 0, 0, 1.0f);

  InitDummyCal();

  PlayBuffer(SOUND_RAGESKILL_DARKSIDE);
}
break;
case AT_SKILL_OCCUPY:
{
vec3_t Light, Position, P, dp;

  float Matrix[3][4];
  Vector(0.f, 20.f, 0.f, P);
  AngleMatrix(_pObj->Angle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);
  Vector(0.8f, 0.9f, 1.6f, Light);
  CreateEffect(MODEL_MULTI_SHOT3, Position, _pObj->Angle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT3, Position, _pObj->Angle, Light, 0);

  Vector(0.f, 0.f, 0.f, P);
  AngleMatrix(_pObj->Angle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);

  CreateEffect(MODEL_MULTI_SHOT1, Position, _pObj->Angle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT1, Position, _pObj->Angle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT1, Position, _pObj->Angle, Light, 0);

  Vector(0.f, 20.f, 0.f, P);
  AngleMatrix(_pObj->Angle, Matrix);
  VectorRotate(P, Matrix, dp);
  VectorAdd(dp, _pObj->Position, Position);
  CreateEffect(MODEL_MULTI_SHOT2, Position, _pObj->Angle, Light, 0);
  CreateEffect(MODEL_MULTI_SHOT2, Position, _pObj->Angle, Light, 0);
}
break;
default:
break;
}
return false;
}

¡Fix aplicado con éxito! Con estos cambios, la densidad de efectos visuales será constante y resolverá los crasheos visuales leves en las habilidades maestras del Rage Fighter.

¿Tienes alguna duda o te surgió un error al compilar? Deja tu comentario abajo para ayudarte a solucionarlo. ¡No olvides compartir si te funcionó!
Bon Dia

🡱 🡳
Real Time Web Analytics