Autor Topic: Fix para el reflect no enviando el "tropezón" al atacante files MuEmu  (Visto 592 veces)

LuisXD and 1 Guest are viewing this topic.

Offline webmonkey on: June 02, 2018, 02:03:53 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
Como varios saben, los archivos mu emu no envian el "flinch/tropezón/etc" al personaje que ataca a alguien con reflect, esto es uno de los principales beneficios de tener reflect. Para agregar el efecto busquen en attack.cpp la linea
Code: [Select]
gObjectManager.CharacterLifeCheck(lpObj,lpTarget,(damage-ShieldDamage),0,flag,effect,((lpSkill==0)?0:lpSkill->m_index),ShieldDamage);

y agreguen arriba el check del skill del reflect para que quede así:
Code: [Select]
		else if (lpTarget->Inventory[8].IsItem() == 0 || (lpTarget->Inventory[8].m_Index != GET_ITEM(13, 2) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 3) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 4) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 37)))
{
if ((GetLargeRand() % 100) < gServerInfo.m_DamageStuckRate[lpTarget->Class])
{
flag = 1;
}

}

gObjectManager.CharacterLifeCheck(lpObj,lpTarget,(damage-ShieldDamage),0,flag,effect,((lpSkill==0)?0:lpSkill->m_index),ShieldDamage);

Gracias:


Offline seedmaker #1 on: June 03, 2018, 12:08:57 AM

  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 59

Offline INFIERNO #2 on: June 03, 2018, 02:39:39 PM

  • *
  • Rank: Puto amo
  • Posts: 211
  • Gracias recibida: 1162
No Funca :V,Por lo que vi solo agregaste else if pero no lo toma a los tropesones siendo full stat :V

Offline Ryuno #3 on: June 03, 2018, 02:57:53 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 296
  • Gracias recibida: 352
eso no es que controla el Reflect  en Webzen es asi:
Code: [Select]
int atd_reflect;
atd_reflect = (int)((float)AttackDamage*lpTargetObj->DamageReflect/100);

if( atd_reflect )
{
//LogAdd("µ¥¹ÌÁö ¹Ý»ç %x ", atd_reflect);

gObjAddMsgSendDelay(lpTargetObj, 10, lpObj->m_Index, 10, atd_reflect);
}

if( rand()%100 < lpObj->SetOpReflectionDamage )
{ // ¼¼Æ® ¿É¼Ç 100% µ¥¹ÌÁö ¹Ý»ç
gObjAddMsgSendDelay(lpTargetObj, 10, lpObj->m_Index, 10, AttackDamage);
}

En referencia encontre esto en mu emu:
Code: [Select]

if(damage > 0)
{
gEffectManager.DelEffect(lpTarget,EFFECT_SLEEP);

if(effect != 4 && lpTarget->Type == OBJECT_USER)
{
if((GetLargeRand()%100) < lpTarget->FullDamageReflectRate)
{
gObjAddMsgSendDelay(lpTarget,10,lpObj->Index,10,damage);
}
else if((lpTarget->DamageReflect+lpTarget->EffectOption.AddDamageReflect) > 0)
{
gObjAddMsgSendDelay(lpTarget,10,lpObj->Index,10,((damage*(lpTarget->DamageReflect+lpTarget->EffectOption.AddDamageReflect))/100));
}

con eso dejo que analisen las 2 funcionen y encuentren el problema dejo mis observaciones. Ando sin Servidor para test XD-

la solucion creo yo es que el codigo solo esta dejando que solo cumpla 1 condicion a la vez lo digo por el if y else en webzen se dejan las 2 para que sean cumplidas
Code: [Select]

if((GetLargeRand()%100) < lpTarget->FullDamageReflectRate)
{
gObjAddMsgSendDelay(lpTarget,10,lpObj->Index,10,damage);
}
if((lpTarget->DamageReflect+lpTarget->EffectOption.AddDamageReflect) > 0)
{
gObjAddMsgSendDelay(lpTarget,10,lpObj->Index,10,((damage*(lpTarget->DamageReflect+lpTarget->EffectOption.AddDamageReflect))/100));
}
Seria cuestion de testiar

Offline webmonkey #4 on: June 03, 2018, 07:48:16 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
funciona, pruebenlo, lo estoy usando y otro usuario de otro foro en el que publiqué el fix ya lo está usando sin problemas. lo que pusiste Ryuno pasa el ataque del reflect al statemachine gSMMsg, y este cuando corre ejecuta de nuevo la función atttack, el ¨tropezón" no está atado a esa función, si no al damage send que envía desde la función de ataque. básicamente es un else if porque en el código original hace if(effect != 4...), lo que significa que ignora todo el código cuando el statemachine envía el ataque del reflect.

Paso en limpio, la parte del código que pegó Ryuno funciona como corresponde y corre la función que modifiqué.


Es lógico que prueben con gServerInfo.m_DamageStuckRate en 100 en el gameserver.
« Ultima edicion: June 03, 2018, 08:35:46 PM by webmonkey »

Offline pavon7 #5 on: June 04, 2018, 12:57:47 AM

  • *
  • Rank: Principiante
  • Posts: 7
  • Gracias recibida: 1
Hola buenas noches hay alguna guia de comer editar dicho archivo,disculpen aun no entiendo esto!

Offline webmonkey #6 on: June 04, 2018, 04:26:12 AM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
agregá lo que está en rojo en attack.cpp

if(lpTarget->Inventory[8].IsItem() == 0 || (lpTarget->Inventory[8].m_Index != GET_ITEM(13,2) && lpTarget->Inventory[8].m_Index != GET_ITEM(13,3) && lpTarget->Inventory[8].m_Index != GET_ITEM(13,4) && lpTarget->Inventory[8].m_Index != GET_ITEM(13,37)))
         {
            if((GetLargeRand()%100) < gServerInfo.m_DamageStuckRate[lpTarget->Class])
            {
               flag = 1;
            }

         }
      }
      else if (lpTarget->Inventory[8].IsItem() == 0 || (lpTarget->Inventory[8].m_Index != GET_ITEM(13, 2) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 3) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 4) && lpTarget->Inventory[8].m_Index != GET_ITEM(13, 37)))
      {
         if ((GetLargeRand() % 100) < gServerInfo.m_DamageStuckRate[lpTarget->Class])
         {
            flag = 1;
         }

      }


      gObjectManager.CharacterLifeCheck(lpObj,lpTarget,(damage-ShieldDamage),0,flag,effect,((lpSkill==0)?0:lpSkill->m_index),ShieldDamage);

Offline louis #7 on: June 04, 2018, 08:08:09 AM

  • C++ Coder
  • *
  • *
  • Rank: Avanzado
  • Posts: 136
  • Gracias recibida: 1222
¿Qué fuente da muemu ustedes tienen? ahi ya tiene iso agregado ...

otra cosa,
si está usando asa o pet de montaje no es correcto enviando el "tropezón" como en lo video...

Offline INFIERNO #8 on: June 04, 2018, 08:24:36 AM

  • *
  • Rank: Puto amo
  • Posts: 211
  • Gracias recibida: 1162
¿Qué fuente da muemu ustedes tienen? ahi ya tiene iso agregado ...

otra cosa,
si está usando asa o pet de montaje no es correcto enviando el "tropezón" como en lo video...
yo uso los tuyos...por eso decia que se me hacia raro por que ya lo vi agregado...

para habilitarle el tropeson tienen que ir al lado files y configurar esto

;==================================================
; Character Stuck Rate Settings
;==================================================
DWDamageStuckRate = 0
DKDamageStuckRate = 0
FEDamageStuckRate = 0
MGDamageStuckRate = 0
DLDamageStuckRate = 0
SUDamageStuckRate = 0
RFDamageStuckRate = 0

En mi caso lo puse en 100 bueno depende lo que ustedes quieran :)
« Ultima edicion: June 04, 2018, 09:36:00 AM by martin226 »

Gracias:


Offline louis #9 on: June 04, 2018, 10:06:03 AM

  • C++ Coder
  • *
  • *
  • Rank: Avanzado
  • Posts: 136
  • Gracias recibida: 1222
¿Qué fuente da muemu ustedes tienen? ahi ya tiene iso agregado ...

otra cosa,
si está usando asa o pet de montaje no es correcto enviando el "tropezón" como en lo video...
yo uso los tuyos...por eso decia que se me hacia raro por que ya lo vi agregado...

para habilitarle el tropeson tienen que ir al lado files y configurar esto

;==================================================
; Character Stuck Rate Settings
;==================================================
DWDamageStuckRate = 0
DKDamageStuckRate = 0
FEDamageStuckRate = 0
MGDamageStuckRate = 0
DLDamageStuckRate = 0
SUDamageStuckRate = 0
RFDamageStuckRate = 0

En mi caso lo puse en 100 bueno depende lo que ustedes quieran :)

Si correcto ^^

Offline webmonkey #10 on: June 04, 2018, 01:13:28 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
Como me hacen renegar. el source de luis tampoco lo tiene, lo acabo de descargar para comprobar. creo que lo que los confunde es que el código se repite. Vamos de nuevo, más despacio.

Código original:


Código que publiqué:


Alternativa, más simple:



yo uso los tuyos...por eso decia que se me hacia raro por que ya lo vi agregado...
para habilitarle el tropeson tienen que ir al lado files y configurar esto..
en el reflect(reflect = effect ==4) el código original no ejecuta esa verificación. lo podes poner en un millón, que no lo va a correr. if effect !=4, ya lo dije arriba. 100 es una mala configuración, debería ser azar.


si está usando asa o pet de montaje no es correcto enviando el "tropezón" como en lo video...
solo las monturas. por eso el if clause. es básico. al menos que webzen lo haya modificado desde la última vez que vi el código. desconozco si la verificación del cliente sigue existiendo después de .97.

PD: ya me acordé por qué no publico código.
« Ultima edicion: June 04, 2018, 01:17:04 PM by webmonkey »

Offline louis #11 on: June 04, 2018, 01:27:41 PM

  • C++ Coder
  • *
  • *
  • Rank: Avanzado
  • Posts: 136
  • Gracias recibida: 1222
se ha modificado, hasta por qué no tropeza si está volando jaja, pero va del gusto del adm, lo aporte es bueno solo quero dicer que estas ok en los server muemu ^^


"PD: ya me acordé por qué no publico código."

No entiendo mal amigo, no estamos criticando, sólo estamos hablando, relaja xD
« Ultima edicion: June 04, 2018, 01:29:26 PM by louis »

Offline webmonkey #12 on: June 04, 2018, 01:36:16 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
no, no está ok. así estes parado en la configuración original no manda el flinch con el reflect, el flag nunca se setea en 1. No es nada personal, me refiero a que no publico código porque hay demasiada gente que no entiende como funciona y no se molesta en aprender.

si quieren evitar que el tropezón afecte a los que tienen alas, agreguen dentro de la clausa if
Code: [Select]
lpTarget->Inventory[7].IsItem() == 0
« Ultima edicion: June 04, 2018, 01:42:11 PM by webmonkey »

Gracias:


Offline nxx #13 on: June 05, 2018, 02:15:38 AM

  • *
  • Rank: Principiante
  • Posts: 10
  • Gracias recibida: 1
@webmonkey  tiene razón la función no se cumple probé colocar numero altos en los codigo fuente originales y no funciona, sale alzar como el dice.

Offline Ryuno #14 on: June 06, 2018, 02:35:18 PM

  • C++ Coder
  • *
  • Rank: Puto amo
  • Posts: 296
  • Gracias recibida: 352
no, no está ok. así estes parado en la configuración original no manda el flinch con el reflect, el flag nunca se setea en 1. No es nada personal, me refiero a que no publico código porque hay demasiada gente que no entiende como funciona y no se molesta en aprender.

si quieren evitar que el tropezón afecte a los que tienen alas, agreguen dentro de la clausa if
Code: [Select]
lpTarget->Inventory[7].IsItem() == 0
la forma que usted como la hace no es la correcta. lo mejor y recomendable es conocer el index effect del tropezon y hacer una condicion que solo entre con ese numero

para que usted pueda averigurarlo agrege en esa condicion que usas un AddLog(LOG_RED,"EffectIndex:",effect); lo mejor es conocer el index correcto yo actualmente tengo el codigo de webzen del gameserver y ps es demaseado des ordenado.  no lo hago yo porque ando alejado del mu

igual gracias por publicar con esto debatimos temas de desarrollo y pues no se vuelve monotono esto.

con esto me dio ganas de armar un OffTopic de lo que le falta mu emu respecto a Webzen
« Ultima edicion: June 06, 2018, 02:43:34 PM by Ryuno »

Offline webmonkey #15 on: June 06, 2018, 05:15:48 PM

  • *
  • Rank: Principiante
  • Posts: 16
  • Gracias recibida: 11
no, no está ok. así estes parado en la configuración original no manda el flinch con el reflect, el flag nunca se setea en 1. No es nada personal, me refiero a que no publico código porque hay demasiada gente que no entiende como funciona y no se molesta en aprender.

si quieren evitar que el tropezón afecte a los que tienen alas, agreguen dentro de la clausa if
Code: [Select]
lpTarget->Inventory[7].IsItem() == 0
la forma que usted como la hace no es la correcta. lo mejor y recomendable es conocer el index effect del tropezon y hacer una condicion que solo entre con ese numero

para que usted pueda averigurarlo agrege en esa condicion que usas un AddLog(LOG_RED,"EffectIndex:",effect); lo mejor es conocer el index correcto yo actualmente tengo el codigo de webzen del gameserver y ps es demaseado des ordenado.  no lo hago yo porque ando alejado del mu

igual gracias por publicar con esto debatimos temas de desarrollo y pues no se vuelve monotono esto.

con esto me dio ganas de armar un OffTopic de lo que le falta mu emu respecto a Webzen

lo puse en posts anteriores, 2 veces. effect = 0x04;

Code: [Select]
if(skill != SKILL_EXPLOSION)
{
effect = 0x04;
damage = (damage*((lpObj->Type==OBJECT_USER&&lpTarget->Type==OBJECT_USER)?gServerInfo.m_ReflectDamageRatePvP:gServerInfo.m_ReflectDamageRatePvM))/100;
}
« Ultima edicion: June 06, 2018, 05:17:19 PM by webmonkey »

 

Related Topics

  Subject / Started by Replies Last post
39 Replies
3857 Views
Last post July 16, 2018, 04:43:52 PM
by scgb
6 Replies
519 Views
Last post September 29, 2017, 08:11:26 AM
by Marote
6 Replies
685 Views
Last post June 30, 2017, 05:34:22 PM
by hardpower
0 Replies
215 Views
Last post October 31, 2017, 07:26:42 AM
by csestebancs
1 Replies
61 Views
Last post May 23, 2018, 01:58:04 AM
by osvaldo1811