Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate

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

0 Miembros and 1 Guest are viewing this topic.

Offline webmonkey Posteado: June 02, 2018, 01:03:53 PM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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);


Offline seedmaker #1 Posteado: June 02, 2018, 11:08:57 PM

  • 0 puntos por ventas
  • *
  • Rank: Avanzado
  • Posts: 140
  • Gracias recibida: 573
  • ph

Offline INFIERNO #2 Posteado: June 03, 2018, 01:39:39 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 209
  • Gracias recibida: 6750
  • ar
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 Posteado: June 03, 2018, 01:57:53 PM

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 505
  • Gracias recibida: 2023
  • dz
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 Posteado: June 03, 2018, 06:48:16 PM | Modificado: June 03, 2018, 07:35:46 PM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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.

Gracias:


Offline pavon7 #5 Posteado: June 03, 2018, 11:57:47 PM

  • 0 puntos por ventas
  • *
  • Rank: Principiante
  • Posts: 10
  • Gracias recibida: 1
  • ar
Hola buenas noches hay alguna guia de comer editar dicho archivo,disculpen aun no entiendo esto!


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

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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);

Gracias:


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

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 36390
  • br
¿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...

Update 36 is ready!!!

Offline INFIERNO #8 Posteado: June 04, 2018, 07:24:36 AM | Modificado: June 04, 2018, 08:36:00 AM by martin226

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 209
  • Gracias recibida: 6750
  • ar
¿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 :)

Gracias:


Offline louis #9 Posteado: June 04, 2018, 09:06:03 AM

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 36390
  • br
¿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 ^^

Update 36 is ready!!!

Offline webmonkey #10 Posteado: June 04, 2018, 12:13:28 PM | Modificado: June 04, 2018, 12:17:04 PM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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.


Offline louis #11 Posteado: June 04, 2018, 12:27:41 PM | Modificado: June 04, 2018, 12:29:26 PM by louis

  • MAESTRO

  • US. DE HONOR

  • LEYENDA

  • C++ Coder
  • +11 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 844
  • Gracias recibida: 36390
  • br
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

Update 36 is ready!!!

Offline webmonkey #12 Posteado: June 04, 2018, 12:36:16 PM | Modificado: June 04, 2018, 12:42:11 PM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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

Gracias:


Offline nxx #13 Posteado: June 05, 2018, 01:15:38 AM

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 30
  • Gracias recibida: 482
  • ve
@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 Posteado: June 06, 2018, 01:35:18 PM | Modificado: June 06, 2018, 01:43:34 PM by Ryuno

  • C++ Coder
  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 505
  • Gracias recibida: 2023
  • dz
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


Offline webmonkey #15 Posteado: June 06, 2018, 04:15:48 PM | Modificado: June 06, 2018, 04:17:19 PM by webmonkey

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 43
  • Gracias recibida: 47
  • ar
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;
}


Offline Keko #16 Posteado: July 31, 2018, 04:19:07 PM

  • 0 puntos por ventas
  • *
  • Rank: Heroe
  • Posts: 174
  • Gracias recibida: 209
  • ar
Muy pero muy bueno, ha habido confusión entre los usuarios, pero al final está en lo cierto, se agradece este aporte a la comunidad. Me gustaría saber como arreglar el % de reflect para el RF, solo te toma un % de una sola parte del equipamiento. Yo puedo tener todo el set Sacred +Reflect pero solo refleja el 5% del daño recibido. Si alguien se anima a testearlo por si cuenta para que vea de que hablo y puede aportar un dato genial. Muchas gracias


Offline Nexus #17 Posteado: August 17, 2018, 11:31:17 PM

  • 0 puntos por ventas
  • *
  • Rank: Puto amo
  • Posts: 350
  • Gracias recibida: 1100
  • ve
Bueno estuve probando y excelente, pero he notado que ahora los personajes hacen dmg en rojo normalmente cuando deberia ser amarillo, a veces el dmg critico tambien se ve rojo, es normal?


Offline Keko #18 Posteado: November 05, 2018, 01:20:33 PM | Modificado: November 05, 2018, 01:53:49 PM by Keko

  • 0 puntos por ventas
  • *
  • Rank: Heroe
  • Posts: 174
  • Gracias recibida: 209
  • ar
Bueno estuve probando y excelente, pero he notado que ahora los personajes hacen dmg en rojo normalmente cuando deberia ser amarillo, a veces el dmg critico tambien se ve rojo, es normal?

Me pasa lo mismo, se arregla el stuck pero cuando pegas a los bichos salen dmgs en rojo a veces, esto solo pasa en el GS Normal, ya que en el GSCS no salen daños en rojo, por lo cual debe haber un conflicto por algún otro lado


Offline JoJoGy #19 Posteado: May 30, 2019, 03:45:08 PM | Modificado: May 30, 2019, 03:56:02 PM by JoJoGy

  • 0 puntos por ventas
  • *
  • Rank: Dedicado
  • Posts: 40
  • Gracias recibida: 11
  • lv
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.


I did this change in source but fliching not apear :((  something in client shud be changed to?

Code: [Select]
			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);

#if(GAMESERVER_UPDATE>=701)


Solo usuarios registrados pueden comentar y agradecer, Logueate o Registrate


 

Related Topics

  Subject / Started by Replies Last post
7 Replies
3097 Views
Last post November 08, 2018, 04:35:02 PM
by Alexander
6 Replies
1816 Views
Last post July 06, 2019, 07:43:38 PM
by kheroz95
9 Replies
2513 Views
Last post February 05, 2020, 09:23:34 AM
by denny785
5 Replies
1198 Views
Last post May 02, 2020, 12:12:50 PM
by ArgentuX
1 Replies
1092 Views
Last post July 05, 2023, 12:23:45 PM
by Hotel7