Doom Eternal recibe su primera actualización con demonios potenciados y añade Denuvo como requisi...

Ya lleva más de 3000 reviews negativas en Steam en poco más de dos días.
jimi escribió:
djlogan83 escribió:
jimi escribió:No hace falta ningun anticheat en el competitivo... ningun jugador profesional de dota con 2 dedos de frente se va a arriesgar a hacer trampas cuando cualquier persona puede bajar el replay (o verlo en directo incluso) y que lo baneen de por vida. Esos "anticheat" solo valen para hacer el paripe y todos se saltan facilmente, no sirven de absolutamente nada.

Joder que exijan a la gente identificar sus cuentas a una persona real si quieren jugar competitivo, que publiquen la partida para que cualquier persona pueda revisarla si tiene la minima sospecha y baneos de por vida y ya esta... no se necesita instalar absolutamente nada extra en tu ordenador.

Tan dificil es de entender, lo de faceit y todas esas plataformas son escusas y no sirven absolutamente de nada. Una cuenta anonima puede perfectamente hacer trampas sin que lo detecten, y luego cuando lo pillen con el replay simplemente crearse otra cuenta y vuelta a empezar... es una perdida de tiempo absurda y una molestia para todo el mundo.

P.D.: Tengo mis dudas de que valve en el international (por poner de ejemplo el e-sport donde mas dinero se gana todos los años) use faceit o cualquiera de los que nombras... usaran el VAC porque es el que viene con steam y punto. Pero vamos como si no quieren usar ninguno... va a ser complicado encontrar a alguien haciendo trampas.

Vale, ya me acabas de aclarar lo que me quedaba por confirmar de que no sabes ni de lo que hablas xD.

Me quedo con la frase de "ningun jugador profesional de dota con 2 dedos de frente se va a arriesgar a hacer trampas".

Y sobre todo con esta otra frase "Esos "anticheat" solo valen para hacer el paripe y todos se saltan facilmente, no sirven de absolutamente nada"

Un saludo, y cuando juegues en esos mundos vovleremos a hablar y comentar estas cosas

P.D.: Antes de que vuelvas a decir cualquier tontería sin ni siquiera informarte... para ponerte un ejemplo... NINGUN evento gordo de CS:GO lo hace steam o valve, re repito.... NINGUN torneo de e-sport lo organiza valve ni steam con su VAC, reitero, para que quede claro NINGUN torneo de e-sport lo organiza valve y, por supuesto, participa su todopoderoso anti-cheat VAC...

Dreamhack: https://www.faceit.com/es/organizers/6c ... /Dreamhack
ESL: https://pro.eslgaming.com/csgo/proleague/
IEM Katowice 2020: https://www.intelextrememasters.com/season-14/katowice/
El próximo major mas importante del año de RIO: https://www.esl-one.com/csgo/rio/road-to-rio/

Lo dicho... cuando tengas un mínimo de conocimiento de estos temas, si quieres hablamos sobre el tema ;)

Quieres hablar de DOTA2 también? https://esportsobserver.com/cheating-in-esports/

Antes de decir que el anticheat de FaceIT es un paripe o el de ESEA.... por favor, explica el por qué y el funcionamiento a nivel de kernel de dichos anticheats por favor

Aun no he visto un enlace donde me pongas que anticheat que no sea el VAC que viene por defecto (y por lo menos no es tan intrusivo) usan en el international (el mayor evento e-sports del mundo y SI esta organizado por VALVE).
Que yo sepa no usan nada externo (y no le veo ningun sentido a usarlo). Por supuesto que no lo se, porque simplemente no pertenezco a los organizadores, ni he participado como equipo, y supongo que tu tampoco por lo que veo.

Porque te digo que no tiene ningun sentido? porque no hace falta, si un jugador profesional del que se sabe su nombre hace trampas en el internacional se comprueba facilmente en los replays que estan abiertos para todo el mundo y valve solo tiene que banear a esa persona de por vida (como ya hizo con alguno por dejarse ganar), nadie en su sano juicio que se dedique a eso se va arriesgar a perder el sustento simplemente por hacer trampas.
Y ademas valve no puede arriesgarse a instalar un software del que no son autores y encima a nivel de kernel... porque tan facil puede hacer eso como minar bitcoin o robar datos (que si no me equivoco ya ha pasado anteriormente).

Los anticheat se saltan todos por la sencilla razon de que es software corriendo en tu ordenador y al mismo nivel que el cheat... es el juego del gato y el raton continuamente y sin ningun sentido.
En mi opinion no merece la pena joder a la mayoria de jugadores que no hacen trampas, ni instalan mierdas en el kernel para.... para nada porque los anticheat tampoco hacen su supuesto trabajo. Si me dices que los anticheat funcionan perfectamente y no hay manera de saltarselos hasta podria pasartelo (yo no los instalaria igualmente ni loco, pero les veria el sentido), pero si me dices que tampoco te garantizan que van a cazar al que hace trampas, que solo dificultan un poco... pues macho, es joder a la gente normal para una supuesta seguridad que no me garantizas.

Eventos de terceros usaran rootkits de terceros para una supuesta proteccion? pues no te digo que no, es mas si son ellos los que los desarrollan el software pues mejor que mejor para ellos, quien no quiere ese acceso de gratis?
Yo si desarrollo una app para windows y mis usuarios me permiten acceso al kernel... porque no lo iba a hacer? para mi mejor, menos restricciones, para que me voy a limitar a usar la api de usermode de windows y solo acceder a donde me dejan? para que pasar mas trabajo? vaya cachondeo iba a ser si cada applicacion que se descargue para windows se instalara a ese nivel, pero bueno sigamos esa ruta que es la idonea, la escusa al menos parece que esta calando aunque no garantice absolutamente nada ;). Cuando sea tarde os echareis la mano a la cabeza de como se ha llegado a esta situacion.

Lo dicho, pegame algun evento organizado por valve, como el international por ejemplo, donde usen un anticheat de terceros de tipo rootkit. Me sorprenderia de narices verlo.

Pero tu eres consciente realmente de lo que estás diciendo??

Ya te he puesto los 3 enlaces de los torneos mas importantes de CS:GO. Ninguno lo organiza Valve. Para poder jugar tienes que tener en anticheat de ESEA o de FaceIT ya que el torneo te llama através de esas plataformas.

Puedes meterte en los twitch de los mejores jugadores del mundo y ver donde juegan los torneos (s1mple, Zywoo, KennyS...) y comprobar si se utiliza los anticheat de valve o los de FaceIT o ESEA...

A muchos profesionales le han pillado justo cambiando de la partida al archivo para ponerlo en marcha, no es tan facil como descargarte la partida y ver si ha usado o no. Te puedo pasar partidas y no te enteresas si esa persona ha usado chetos o no.
Miunuto 11: https://www.youtube.com/watch?v=7cMcCzBVhvc

Los últimos chetos van impresos en el firmware de los ratones o in cluso de las tarjetas gráficas y conllevan una ayuda al AIM muy logrados la que es imperceptible darte cuenta por mucho que descargues la partida.

Ya ni siquiera a nivel profesional. La mayoría que no use chetos se va a FaceIT para jugar sin ellos. Puedes comprobarlo tu mismo en la misma plataforma eh? no hace falt ainstalar el anti cheat
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Vale, ya me acabas de aclarar lo que me quedaba por confirmar de que no sabes ni de lo que hablas xD.

Me quedo con la frase de "ningun jugador profesional de dota con 2 dedos de frente se va a arriesgar a hacer trampas".

Y sobre todo con esta otra frase "Esos "anticheat" solo valen para hacer el paripe y todos se saltan facilmente, no sirven de absolutamente nada"

Un saludo, y cuando juegues en esos mundos vovleremos a hablar y comentar estas cosas

P.D.: Antes de que vuelvas a decir cualquier tontería sin ni siquiera informarte... para ponerte un ejemplo... NINGUN evento gordo de CS:GO lo hace steam o valve, re repito.... NINGUN torneo de e-sport lo organiza valve ni steam con su VAC, reitero, para que quede claro NINGUN torneo de e-sport lo organiza valve y, por supuesto, participa su todopoderoso anti-cheat VAC...

Dreamhack: https://www.faceit.com/es/organizers/6c ... /Dreamhack
ESL: https://pro.eslgaming.com/csgo/proleague/
IEM Katowice 2020: https://www.intelextrememasters.com/season-14/katowice/
El próximo major mas importante del año de RIO: https://www.esl-one.com/csgo/rio/road-to-rio/

Lo dicho... cuando tengas un mínimo de conocimiento de estos temas, si quieres hablamos sobre el tema ;)

Quieres hablar de DOTA2 también? https://esportsobserver.com/cheating-in-esports/

Antes de decir que el anticheat de FaceIT es un paripe o el de ESEA.... por favor, explica el por qué y el funcionamiento a nivel de kernel de dichos anticheats por favor

Aun no he visto un enlace donde me pongas que anticheat que no sea el VAC que viene por defecto (y por lo menos no es tan intrusivo) usan en el international (el mayor evento e-sports del mundo y SI esta organizado por VALVE).
Que yo sepa no usan nada externo (y no le veo ningun sentido a usarlo). Por supuesto que no lo se, porque simplemente no pertenezco a los organizadores, ni he participado como equipo, y supongo que tu tampoco por lo que veo.

Porque te digo que no tiene ningun sentido? porque no hace falta, si un jugador profesional del que se sabe su nombre hace trampas en el internacional se comprueba facilmente en los replays que estan abiertos para todo el mundo y valve solo tiene que banear a esa persona de por vida (como ya hizo con alguno por dejarse ganar), nadie en su sano juicio que se dedique a eso se va arriesgar a perder el sustento simplemente por hacer trampas.
Y ademas valve no puede arriesgarse a instalar un software del que no son autores y encima a nivel de kernel... porque tan facil puede hacer eso como minar bitcoin o robar datos (que si no me equivoco ya ha pasado anteriormente).

Los anticheat se saltan todos por la sencilla razon de que es software corriendo en tu ordenador y al mismo nivel que el cheat... es el juego del gato y el raton continuamente y sin ningun sentido.
En mi opinion no merece la pena joder a la mayoria de jugadores que no hacen trampas, ni instalan mierdas en el kernel para.... para nada porque los anticheat tampoco hacen su supuesto trabajo. Si me dices que los anticheat funcionan perfectamente y no hay manera de saltarselos hasta podria pasartelo (yo no los instalaria igualmente ni loco, pero les veria el sentido), pero si me dices que tampoco te garantizan que van a cazar al que hace trampas, que solo dificultan un poco... pues macho, es joder a la gente normal para una supuesta seguridad que no me garantizas.

Eventos de terceros usaran rootkits de terceros para una supuesta proteccion? pues no te digo que no, es mas si son ellos los que los desarrollan el software pues mejor que mejor para ellos, quien no quiere ese acceso de gratis?
Yo si desarrollo una app para windows y mis usuarios me permiten acceso al kernel... porque no lo iba a hacer? para mi mejor, menos restricciones, para que me voy a limitar a usar la api de usermode de windows y solo acceder a donde me dejan? para que pasar mas trabajo? vaya cachondeo iba a ser si cada applicacion que se descargue para windows se instalara a ese nivel, pero bueno sigamos esa ruta que es la idonea, la escusa al menos parece que esta calando aunque no garantice absolutamente nada ;). Cuando sea tarde os echareis la mano a la cabeza de como se ha llegado a esta situacion.

Lo dicho, pegame algun evento organizado por valve, como el international por ejemplo, donde usen un anticheat de terceros de tipo rootkit. Me sorprenderia de narices verlo.

Pero tu eres consciente realmente de lo que estás diciendo??

Ya te he puesto los 3 enlaces de los torneos mas importantes de CS:GO. Ninguno lo organiza Valve. Para poder jugar tienes que tener en anticheat de ESEA o de FaceIT ya que el torneo te llama através de esas plataformas.

Puedes meterte en los twitch de los mejores jugadores del mundo y ver donde juegan los torneos (s1mple, Zywoo, KennyS...) y comprobar si se utiliza los anticheat de valve o los de FaceIT o ESEA...

A muchos profesionales le han pillado justo cambiando de la partida al archivo para ponerlo en marcha, no es tan facil como descargarte la partida y ver si ha usado o no. Te puedo pasar partidas y no te enteresas si esa persona ha usado chetos o no.
Miunuto 11: https://www.youtube.com/watch?v=7cMcCzBVhvc

Los últimos chetos van impresos en el firmware de los ratones o in cluso de las tarjetas gráficas y conllevan una ayuda al AIM muy logrados la que es imperceptible darte cuenta por mucho que descargues la partida.

Ya ni siquiera a nivel profesional. La mayoría que no use chetos se va a FaceIT para jugar sin ellos. Puedes comprobarlo tu mismo en la misma plataforma eh? no hace falt ainstalar el anti cheat

Cuando un torneo lo organiza una third party puede requerir que instales lo que le venga en gana (como si quieren que todo dios instale un rootkit o un virus, la gente que lo acepte pues bien y la que no pues tambien... es su decision). Pero torneos first party (vamos organizados por Valve) que ademas son los que mas dinero mueven con diferencia (si pones los 10 torneos de e-Sports donde mas dinero se reparte del mundo seguramente el 90% o mas son organizados por valve), no veras que usen rootkits o movidas raras... y me gustaria ver videos de gente haciendo trampas en esos torneos...

Instalar un rootkit para una supuesta proteccion anticheat que no funciona para nada (de hecho los primeros baneos en valorant fueron por reportes y no por el rootkit). Pues es una estupidez, y sobretodo cuando es obligatorio.

Lo que hagan organizadores third party con sus torneos es decision propia de ellos, como si quieren meterle troyanos a todo el mundo, pero puedes perfectamente jugar al juego sin tener que instalar esas mierdas ;).

Cuando me demuestres que:
1- El rootkit es infalible y no permite hacer trampas a nadie por el mero hecho de ser rootkit.
2- Sin rootkit es imposible tener un torneo sin poder evitar que la gente haga trampas sin castigo.

Pues lo podria llegar a entender (aunque yo a nivel particular jamas lo utilizase). Pero mientras esas dos cuestiones no se confirmen no le encuentro ninguna razon a instalar un rootkit para proteger un juego de tramposos ;).

Es como intentar matar moscas a cañonazos, a lo mejor alguna matas seguramente, pero sentido no tiene ninguno.
jimi escribió:
djlogan83 escribió:
jimi escribió:Aun no he visto un enlace donde me pongas que anticheat que no sea el VAC que viene por defecto (y por lo menos no es tan intrusivo) usan en el international (el mayor evento e-sports del mundo y SI esta organizado por VALVE).
Que yo sepa no usan nada externo (y no le veo ningun sentido a usarlo). Por supuesto que no lo se, porque simplemente no pertenezco a los organizadores, ni he participado como equipo, y supongo que tu tampoco por lo que veo.

Porque te digo que no tiene ningun sentido? porque no hace falta, si un jugador profesional del que se sabe su nombre hace trampas en el internacional se comprueba facilmente en los replays que estan abiertos para todo el mundo y valve solo tiene que banear a esa persona de por vida (como ya hizo con alguno por dejarse ganar), nadie en su sano juicio que se dedique a eso se va arriesgar a perder el sustento simplemente por hacer trampas.
Y ademas valve no puede arriesgarse a instalar un software del que no son autores y encima a nivel de kernel... porque tan facil puede hacer eso como minar bitcoin o robar datos (que si no me equivoco ya ha pasado anteriormente).

Los anticheat se saltan todos por la sencilla razon de que es software corriendo en tu ordenador y al mismo nivel que el cheat... es el juego del gato y el raton continuamente y sin ningun sentido.
En mi opinion no merece la pena joder a la mayoria de jugadores que no hacen trampas, ni instalan mierdas en el kernel para.... para nada porque los anticheat tampoco hacen su supuesto trabajo. Si me dices que los anticheat funcionan perfectamente y no hay manera de saltarselos hasta podria pasartelo (yo no los instalaria igualmente ni loco, pero les veria el sentido), pero si me dices que tampoco te garantizan que van a cazar al que hace trampas, que solo dificultan un poco... pues macho, es joder a la gente normal para una supuesta seguridad que no me garantizas.

Eventos de terceros usaran rootkits de terceros para una supuesta proteccion? pues no te digo que no, es mas si son ellos los que los desarrollan el software pues mejor que mejor para ellos, quien no quiere ese acceso de gratis?
Yo si desarrollo una app para windows y mis usuarios me permiten acceso al kernel... porque no lo iba a hacer? para mi mejor, menos restricciones, para que me voy a limitar a usar la api de usermode de windows y solo acceder a donde me dejan? para que pasar mas trabajo? vaya cachondeo iba a ser si cada applicacion que se descargue para windows se instalara a ese nivel, pero bueno sigamos esa ruta que es la idonea, la escusa al menos parece que esta calando aunque no garantice absolutamente nada ;). Cuando sea tarde os echareis la mano a la cabeza de como se ha llegado a esta situacion.

Lo dicho, pegame algun evento organizado por valve, como el international por ejemplo, donde usen un anticheat de terceros de tipo rootkit. Me sorprenderia de narices verlo.

Pero tu eres consciente realmente de lo que estás diciendo??

Ya te he puesto los 3 enlaces de los torneos mas importantes de CS:GO. Ninguno lo organiza Valve. Para poder jugar tienes que tener en anticheat de ESEA o de FaceIT ya que el torneo te llama através de esas plataformas.

Puedes meterte en los twitch de los mejores jugadores del mundo y ver donde juegan los torneos (s1mple, Zywoo, KennyS...) y comprobar si se utiliza los anticheat de valve o los de FaceIT o ESEA...

A muchos profesionales le han pillado justo cambiando de la partida al archivo para ponerlo en marcha, no es tan facil como descargarte la partida y ver si ha usado o no. Te puedo pasar partidas y no te enteresas si esa persona ha usado chetos o no.
Miunuto 11: https://www.youtube.com/watch?v=7cMcCzBVhvc

Los últimos chetos van impresos en el firmware de los ratones o in cluso de las tarjetas gráficas y conllevan una ayuda al AIM muy logrados la que es imperceptible darte cuenta por mucho que descargues la partida.

Ya ni siquiera a nivel profesional. La mayoría que no use chetos se va a FaceIT para jugar sin ellos. Puedes comprobarlo tu mismo en la misma plataforma eh? no hace falt ainstalar el anti cheat

Cuando un torneo lo organiza una third party puede requerir que instales lo que le venga en gana (como si quieren que todo dios instale un rootkit o un virus, la gente que lo acepte pues bien y la que no pues tambien... es su decision). Pero torneos first party (vamos organizados por Valve) que ademas son los que mas dinero mueven con diferencia (si pones los 10 torneos de e-Sports donde mas dinero se reparte del mundo seguramente el 90% o mas son organizados por valve), no veras que usen rootkits o movidas raras... y me gustaria ver videos de gente haciendo trampas en esos torneos...

Instalar un rootkit para una supuesta proteccion anticheat que no funciona para nada (de hecho los primeros baneos en valorant fueron por reportes y no por el rootkit). Pues es una estupidez, y sobretodo cuando es obligatorio.

Lo que hagan organizadores third party con sus torneos es decision propia de ellos, como si quieren meterle troyanos a todo el mundo, pero puedes perfectamente jugar al juego sin tener que instalar esas mierdas ;).

Cuando me demuestres que:
1- El rootkit es infalible y no permite hacer trampas a nadie por el mero hecho de ser rootkit.
2- Sin rootkit es imposible tener un torneo sin poder evitar que la gente haga trampas sin castigo.

Pues lo podria llegar a entender (aunque yo a nivel particular jamas lo utilizase). Pero mientras esas dos cuestiones no se confirmen no le encuentro ninguna razon a instalar un rootkit para proteger un juego de tramposos ;).

Es como intentar matar moscas a cañonazos, a lo mejor alguna matas seguramente, pero sentido no tiene ninguno.

Te hablo de CS:GO, VALVE no organiza ningún torneo importante de CS:GO, todo pasa por las ligas de FaceIT y ESEA.

Quieres pruebas? Prueba el Charlatano, que es un cheat muy conocido en la escene en el matchmaking de CS:GO, a ver cuando su VAC te banea... Intenta usarlo en FaceIT o ESEA.

Quieres otra prueba? El VAC unicamente mira ciertos hooks en la memoria para detectar cheats y eso lo que hace es detectar un 1% ya que puedes inyectar en una app el propio dll, como por ejemplo en Discord. Cosa que si no es con un rootkit no puedes detectar eso.

Como tu dices... demuestrame como tu has dicho en tu primer post, que el VAC es mas eficaz que cualquier otro cliente con permisos de level 0 (rootkit), y te copio tu frase "Lo de los anticheat es la escusa perfecta y la gente se lo cree."
Te invito a que demuestres que es una excusa perfecta y que nos los creemos... demuestranos que el VAC, siendo menos intrusivo es bastante mejor....

Es que cualquiera que se mueva en ese mundo se va a reir sobretodo de eso, ya que el VAC es de las mayores ponzoñas que hay a nivel de seguridad anti-cheats.

En CS:GO solamente te pilla la famosa peonza y porque el cheat necesita de unas llamadas obligatorias de cierta parte de la memoria. Pero vamos, ni wh, ni trigger, ni aimbot los pilla. De eso puedes estar seguro
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Pero tu eres consciente realmente de lo que estás diciendo??

Ya te he puesto los 3 enlaces de los torneos mas importantes de CS:GO. Ninguno lo organiza Valve. Para poder jugar tienes que tener en anticheat de ESEA o de FaceIT ya que el torneo te llama através de esas plataformas.

Puedes meterte en los twitch de los mejores jugadores del mundo y ver donde juegan los torneos (s1mple, Zywoo, KennyS...) y comprobar si se utiliza los anticheat de valve o los de FaceIT o ESEA...

A muchos profesionales le han pillado justo cambiando de la partida al archivo para ponerlo en marcha, no es tan facil como descargarte la partida y ver si ha usado o no. Te puedo pasar partidas y no te enteresas si esa persona ha usado chetos o no.
Miunuto 11: https://www.youtube.com/watch?v=7cMcCzBVhvc

Los últimos chetos van impresos en el firmware de los ratones o in cluso de las tarjetas gráficas y conllevan una ayuda al AIM muy logrados la que es imperceptible darte cuenta por mucho que descargues la partida.

Ya ni siquiera a nivel profesional. La mayoría que no use chetos se va a FaceIT para jugar sin ellos. Puedes comprobarlo tu mismo en la misma plataforma eh? no hace falt ainstalar el anti cheat

Cuando un torneo lo organiza una third party puede requerir que instales lo que le venga en gana (como si quieren que todo dios instale un rootkit o un virus, la gente que lo acepte pues bien y la que no pues tambien... es su decision). Pero torneos first party (vamos organizados por Valve) que ademas son los que mas dinero mueven con diferencia (si pones los 10 torneos de e-Sports donde mas dinero se reparte del mundo seguramente el 90% o mas son organizados por valve), no veras que usen rootkits o movidas raras... y me gustaria ver videos de gente haciendo trampas en esos torneos...

Instalar un rootkit para una supuesta proteccion anticheat que no funciona para nada (de hecho los primeros baneos en valorant fueron por reportes y no por el rootkit). Pues es una estupidez, y sobretodo cuando es obligatorio.

Lo que hagan organizadores third party con sus torneos es decision propia de ellos, como si quieren meterle troyanos a todo el mundo, pero puedes perfectamente jugar al juego sin tener que instalar esas mierdas ;).

Cuando me demuestres que:
1- El rootkit es infalible y no permite hacer trampas a nadie por el mero hecho de ser rootkit.
2- Sin rootkit es imposible tener un torneo sin poder evitar que la gente haga trampas sin castigo.

Pues lo podria llegar a entender (aunque yo a nivel particular jamas lo utilizase). Pero mientras esas dos cuestiones no se confirmen no le encuentro ninguna razon a instalar un rootkit para proteger un juego de tramposos ;).

Es como intentar matar moscas a cañonazos, a lo mejor alguna matas seguramente, pero sentido no tiene ninguno.

Te hablo de CS:GO, VALVE no organiza ningún torneo importante de CS:GO, todo pasa por las ligas de FaceIT y ESEA.

Quieres pruebas? Prueba el Charlatano, que es un cheat muy conocido en la escene en el matchmaking de CS:GO, a ver cuando su VAC te banea... Intenta usarlo en FaceIT o ESEA.

Quieres otra prueba? El VAC unicamente mira ciertos hooks en la memoria para detectar cheats y eso lo que hace es detectar un 1% ya que puedes inyectar en una app el propio dll, como por ejemplo en Discord. Cosa que si no es con un rootkit no puedes detectar eso.

Como tu dices... demuestrame como tu has dicho en tu primer post, que el VAC es mas eficaz que cualquier otro cliente con permisos de level 0 (rootkit), y te copio tu frase "Lo de los anticheat es la escusa perfecta y la gente se lo cree."
Te invito a que demuestres que es una excusa perfecta y que nos los creemos... demuestranos que el VAC, siendo menos intrusivo es bastante mejor....

Es que cualquiera que se mueva en ese mundo se va a reir sobretodo de eso, ya que el VAC es de las mayores ponzoñas que hay a nivel de seguridad anti-cheats.

En CS:GO solamente te pilla la famosa peonza y porque el cheat necesita de unas llamadas obligatorias de cierta parte de la memoria. Pero vamos, ni wh, ni trigger, ni aimbot los pilla. De eso puedes estar seguro

Donde he dicho yo que el VAC sea mas eficaz que el rootkit de marras?, he dicho que son exactamente igual de malos pero al menos el VAC no te instala un puto rootkit...

A ver, imaginate que me dedico a la vigilancia privada y te digo que si me pagas 50€ al dia me paso por tu casa de vez en cuando y miro si alguien esta robando en tu casa.
Pero luego viene mi competencia y te dice que si les pagas tambien 50€ pero ademas les das las llaves de tu casa y de tu caja fuerte tambien se van a pasar de vez en cuando por tu casa y miraran si alguien te esta robando.
Que sistema eliges? los dos son exactamente igual de inutiles (que si alguna vez pillan a alguien, pero no es lo normal xD), pero en el segundo ademas les das acceso a tu casa y tu caja fuerte para algo que no es necesario y que no te garantiza que no te roben encima (de hecho lo mas probable es que el que te robe sea el de la seguridad privada XD).

Y como ya te dije lo que organicen las third parties es cosa de las third parties... ellos como organizadores pueden hacer lo que les salga de las narices. Pero que yo sepa valve no usa ningun rootkit y organiza los mayores torneos del mundo de los e-Sports sin problemas de tramposos, me parece mucho mas inteligente la solucion de valve que quieres que te diga.

Y si el rootkit no garantiza que no se pueden usar trampas (que ya te digo yo que no lo garantiza en absoluto, se pueden usar chetos con rootkit y sin el, y sino dime como un rootkit va a impedir que el cheto que yo me haga sea detectado por el mero hecho de ser un rootkit?.
Al final lo unico que garantiza que no les compense a los profesionales hacer trampas es que a la primera que los pillen los baneen de por vida y no puedan jugar mas. Y la manera de hacer eso es que la gente que quiera jugar en un cierto nivel competitivo se le exija una identificacion con una persona real (que por supuesto deberian dejar la opcion de jugar de manera casual a gente que no quiera identificarse).
Poner rootkits y tonterias que te baneen una cuenta de un juego gratuito y donde no esta la persona real identificada lo unico que hace es que se creen otra cuenta, actualicen el cheto para saltarse la deteccion y a seguir haciendo trampas... y si los pillan vuelta a empezar... no sirve absolutamente para nada.
@Benzo Tendríais que cambiar el titular, que aunque es correcto, porque requiere Denuvo para jugar al multijugador y además para poder ejecutar el juego tanto para la campaña en solitario como para el modo batalla.
Ya uno no está seguro ni esperando a ver como vienen los juegos de salida. Las sorpresas pueden venir en cualquier momento. [facepalm]
jimi escribió:
djlogan83 escribió:
jimi escribió:Cuando un torneo lo organiza una third party puede requerir que instales lo que le venga en gana (como si quieren que todo dios instale un rootkit o un virus, la gente que lo acepte pues bien y la que no pues tambien... es su decision). Pero torneos first party (vamos organizados por Valve) que ademas son los que mas dinero mueven con diferencia (si pones los 10 torneos de e-Sports donde mas dinero se reparte del mundo seguramente el 90% o mas son organizados por valve), no veras que usen rootkits o movidas raras... y me gustaria ver videos de gente haciendo trampas en esos torneos...

Instalar un rootkit para una supuesta proteccion anticheat que no funciona para nada (de hecho los primeros baneos en valorant fueron por reportes y no por el rootkit). Pues es una estupidez, y sobretodo cuando es obligatorio.

Lo que hagan organizadores third party con sus torneos es decision propia de ellos, como si quieren meterle troyanos a todo el mundo, pero puedes perfectamente jugar al juego sin tener que instalar esas mierdas ;).

Cuando me demuestres que:
1- El rootkit es infalible y no permite hacer trampas a nadie por el mero hecho de ser rootkit.
2- Sin rootkit es imposible tener un torneo sin poder evitar que la gente haga trampas sin castigo.

Pues lo podria llegar a entender (aunque yo a nivel particular jamas lo utilizase). Pero mientras esas dos cuestiones no se confirmen no le encuentro ninguna razon a instalar un rootkit para proteger un juego de tramposos ;).

Es como intentar matar moscas a cañonazos, a lo mejor alguna matas seguramente, pero sentido no tiene ninguno.

Te hablo de CS:GO, VALVE no organiza ningún torneo importante de CS:GO, todo pasa por las ligas de FaceIT y ESEA.

Quieres pruebas? Prueba el Charlatano, que es un cheat muy conocido en la escene en el matchmaking de CS:GO, a ver cuando su VAC te banea... Intenta usarlo en FaceIT o ESEA.

Quieres otra prueba? El VAC unicamente mira ciertos hooks en la memoria para detectar cheats y eso lo que hace es detectar un 1% ya que puedes inyectar en una app el propio dll, como por ejemplo en Discord. Cosa que si no es con un rootkit no puedes detectar eso.

Como tu dices... demuestrame como tu has dicho en tu primer post, que el VAC es mas eficaz que cualquier otro cliente con permisos de level 0 (rootkit), y te copio tu frase "Lo de los anticheat es la escusa perfecta y la gente se lo cree."
Te invito a que demuestres que es una excusa perfecta y que nos los creemos... demuestranos que el VAC, siendo menos intrusivo es bastante mejor....

Es que cualquiera que se mueva en ese mundo se va a reir sobretodo de eso, ya que el VAC es de las mayores ponzoñas que hay a nivel de seguridad anti-cheats.

En CS:GO solamente te pilla la famosa peonza y porque el cheat necesita de unas llamadas obligatorias de cierta parte de la memoria. Pero vamos, ni wh, ni trigger, ni aimbot los pilla. De eso puedes estar seguro

Donde he dicho yo que el VAC sea mas eficaz que el rootkit de marras?, he dicho que son exactamente igual de malos pero al menos el VAC no te instala un puto rootkit...

A ver, imaginate que me dedico a la vigilancia privada y te digo que si me pagas 50€ al dia me paso por tu casa de vez en cuando y miro si alguien esta robando en tu casa.
Pero luego viene mi competencia y te dice que si les pagas tambien 50€ pero ademas les das las llaves de tu casa y de tu caja fuerte tambien se van a pasar de vez en cuando por tu casa y miraran si alguien te esta robando.
Que sistema eliges? los dos son exactamente igual de inutiles (que si alguna vez pillan a alguien, pero no es lo normal xD), pero en el segundo ademas les das acceso a tu casa y tu caja fuerte para algo que no es necesario y que no te garantiza que no te roben encima (de hecho lo mas probable es que el que te robe sea el de la seguridad privada XD).

Y como ya te dije lo que organicen las third parties es cosa de las third parties... ellos como organizadores pueden hacer lo que les salga de las narices. Pero que yo sepa valve no usa ningun rootkit y organiza los mayores torneos del mundo de los e-Sports sin problemas de tramposos, me parece mucho mas inteligente la solucion de valve que quieres que te diga.

Y si el rootkit no garantiza que no se pueden usar trampas (que ya te digo yo que no lo garantiza en absoluto, se pueden usar chetos con rootkit y sin el, y sino dime como un rootkit va a impedir que el cheto que yo me haga sea detectado por el mero hecho de ser un rootkit?.
Al final lo unico que garantiza que no les compense a los profesionales hacer trampas es que a la primera que los pillen los baneen de por vida y no puedan jugar mas. Y la manera de hacer eso es que la gente que quiera jugar en un cierto nivel competitivo se le exija una identificacion con una persona real (que por supuesto deberian dejar la opcion de jugar de manera casual a gente que no quiera identificarse).
Poner rootkits y tonterias que te baneen una cuenta de un juego gratuito y donde no esta la persona real identificada lo unico que hace es que se creen otra cuenta, actualicen el cheto para saltarse la deteccion y a seguir haciendo trampas... y si los pillan vuelta a empezar... no sirve absolutamente para nada.

De verdad, que voy a dejar la conversación aquí porque cuando no se está en el mundillo se habla sin conocimientos...sobre todo cuando has dicho lo de que te baneen en un juego gratuito cuando FaceIT y ESEA son plataformas de pago...

Claro que no sirve de nada... mas de 15 millones de jugadores en FaceIT (plataforma de pago para que te instale un "rootkit") y otros tantos en ESEA para que sea "igual" de eficaz que el VAC [qmparto]

Lo dicho, aquí termina mi conversación porque ya es absurda
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Te hablo de CS:GO, VALVE no organiza ningún torneo importante de CS:GO, todo pasa por las ligas de FaceIT y ESEA.

Quieres pruebas? Prueba el Charlatano, que es un cheat muy conocido en la escene en el matchmaking de CS:GO, a ver cuando su VAC te banea... Intenta usarlo en FaceIT o ESEA.

Quieres otra prueba? El VAC unicamente mira ciertos hooks en la memoria para detectar cheats y eso lo que hace es detectar un 1% ya que puedes inyectar en una app el propio dll, como por ejemplo en Discord. Cosa que si no es con un rootkit no puedes detectar eso.

Como tu dices... demuestrame como tu has dicho en tu primer post, que el VAC es mas eficaz que cualquier otro cliente con permisos de level 0 (rootkit), y te copio tu frase "Lo de los anticheat es la escusa perfecta y la gente se lo cree."
Te invito a que demuestres que es una excusa perfecta y que nos los creemos... demuestranos que el VAC, siendo menos intrusivo es bastante mejor....

Es que cualquiera que se mueva en ese mundo se va a reir sobretodo de eso, ya que el VAC es de las mayores ponzoñas que hay a nivel de seguridad anti-cheats.

En CS:GO solamente te pilla la famosa peonza y porque el cheat necesita de unas llamadas obligatorias de cierta parte de la memoria. Pero vamos, ni wh, ni trigger, ni aimbot los pilla. De eso puedes estar seguro

Donde he dicho yo que el VAC sea mas eficaz que el rootkit de marras?, he dicho que son exactamente igual de malos pero al menos el VAC no te instala un puto rootkit...

A ver, imaginate que me dedico a la vigilancia privada y te digo que si me pagas 50€ al dia me paso por tu casa de vez en cuando y miro si alguien esta robando en tu casa.
Pero luego viene mi competencia y te dice que si les pagas tambien 50€ pero ademas les das las llaves de tu casa y de tu caja fuerte tambien se van a pasar de vez en cuando por tu casa y miraran si alguien te esta robando.
Que sistema eliges? los dos son exactamente igual de inutiles (que si alguna vez pillan a alguien, pero no es lo normal xD), pero en el segundo ademas les das acceso a tu casa y tu caja fuerte para algo que no es necesario y que no te garantiza que no te roben encima (de hecho lo mas probable es que el que te robe sea el de la seguridad privada XD).

Y como ya te dije lo que organicen las third parties es cosa de las third parties... ellos como organizadores pueden hacer lo que les salga de las narices. Pero que yo sepa valve no usa ningun rootkit y organiza los mayores torneos del mundo de los e-Sports sin problemas de tramposos, me parece mucho mas inteligente la solucion de valve que quieres que te diga.

Y si el rootkit no garantiza que no se pueden usar trampas (que ya te digo yo que no lo garantiza en absoluto, se pueden usar chetos con rootkit y sin el, y sino dime como un rootkit va a impedir que el cheto que yo me haga sea detectado por el mero hecho de ser un rootkit?.
Al final lo unico que garantiza que no les compense a los profesionales hacer trampas es que a la primera que los pillen los baneen de por vida y no puedan jugar mas. Y la manera de hacer eso es que la gente que quiera jugar en un cierto nivel competitivo se le exija una identificacion con una persona real (que por supuesto deberian dejar la opcion de jugar de manera casual a gente que no quiera identificarse).
Poner rootkits y tonterias que te baneen una cuenta de un juego gratuito y donde no esta la persona real identificada lo unico que hace es que se creen otra cuenta, actualicen el cheto para saltarse la deteccion y a seguir haciendo trampas... y si los pillan vuelta a empezar... no sirve absolutamente para nada.

De verdad, que voy a dejar la conversación aquí porque cuando no se está en el mundillo se habla sin conocimientos...sobre todo cuando has dicho lo de que te baneen en un juego gratuito cuando FaceIT y ESEA son plataformas de pago...

Claro que no sirve de nada... mas de 15 millones de jugadores en FaceIT (plataforma de pago para que te instale un "rootkit") y otros tantos en ESEA para que sea "igual" de eficaz que el VAC [qmparto]

Lo dicho, aquí termina mi conversación porque ya es absurda

Solo tienes que demostrar 2 cosas sencillas que son que el sistema de rootkit evita que los chetos funcionen o pasen desapercibidos (que ya te aseguro yo que no lo hace), y que es imposible que un sistema sin rootkit sea mas tanto o mas efectivo (que ya te digo yo que tambien lo es, el ejemplo es el The International de todos los años donde no se usa ningun rootkit y es el que mas dinero reparte con diferencia, o tambien me niegas esto?).

Pero claro, es mas facil decir que la gente esta equivocada y tu tienes la razon absoluta porque estas en el "mundillo" pareces el gobierno con lo de que las decisiones las toman "expertos" y cuando les preguntan que expertos, pues no te lo podemos decir, pero ojo que son expertos... en fin.

Mejor dejalo que es mas fecil que demostrar algo tan simple como que el sistema es absolutamente necesario para el fin y que no hay otra opcion menos invasiva que funcione, donde vamos a parar.

P.D.: Al parecer el ESEA ese se dedico a minar bitcoins en los ordenadores de la gente que se lo instalo... no me sorprende absolutamente nada xD.
jimi escribió:
djlogan83 escribió:
jimi escribió:Donde he dicho yo que el VAC sea mas eficaz que el rootkit de marras?, he dicho que son exactamente igual de malos pero al menos el VAC no te instala un puto rootkit...

A ver, imaginate que me dedico a la vigilancia privada y te digo que si me pagas 50€ al dia me paso por tu casa de vez en cuando y miro si alguien esta robando en tu casa.
Pero luego viene mi competencia y te dice que si les pagas tambien 50€ pero ademas les das las llaves de tu casa y de tu caja fuerte tambien se van a pasar de vez en cuando por tu casa y miraran si alguien te esta robando.
Que sistema eliges? los dos son exactamente igual de inutiles (que si alguna vez pillan a alguien, pero no es lo normal xD), pero en el segundo ademas les das acceso a tu casa y tu caja fuerte para algo que no es necesario y que no te garantiza que no te roben encima (de hecho lo mas probable es que el que te robe sea el de la seguridad privada XD).

Y como ya te dije lo que organicen las third parties es cosa de las third parties... ellos como organizadores pueden hacer lo que les salga de las narices. Pero que yo sepa valve no usa ningun rootkit y organiza los mayores torneos del mundo de los e-Sports sin problemas de tramposos, me parece mucho mas inteligente la solucion de valve que quieres que te diga.

Y si el rootkit no garantiza que no se pueden usar trampas (que ya te digo yo que no lo garantiza en absoluto, se pueden usar chetos con rootkit y sin el, y sino dime como un rootkit va a impedir que el cheto que yo me haga sea detectado por el mero hecho de ser un rootkit?.
Al final lo unico que garantiza que no les compense a los profesionales hacer trampas es que a la primera que los pillen los baneen de por vida y no puedan jugar mas. Y la manera de hacer eso es que la gente que quiera jugar en un cierto nivel competitivo se le exija una identificacion con una persona real (que por supuesto deberian dejar la opcion de jugar de manera casual a gente que no quiera identificarse).
Poner rootkits y tonterias que te baneen una cuenta de un juego gratuito y donde no esta la persona real identificada lo unico que hace es que se creen otra cuenta, actualicen el cheto para saltarse la deteccion y a seguir haciendo trampas... y si los pillan vuelta a empezar... no sirve absolutamente para nada.

De verdad, que voy a dejar la conversación aquí porque cuando no se está en el mundillo se habla sin conocimientos...sobre todo cuando has dicho lo de que te baneen en un juego gratuito cuando FaceIT y ESEA son plataformas de pago...

Claro que no sirve de nada... mas de 15 millones de jugadores en FaceIT (plataforma de pago para que te instale un "rootkit") y otros tantos en ESEA para que sea "igual" de eficaz que el VAC [qmparto]

Lo dicho, aquí termina mi conversación porque ya es absurda

Solo tienes que demostrar 2 cosas sencillas que son que el sistema de rootkit evita que los chetos funcionen o pasen desapercibidos (que ya te aseguro yo que no lo hace), y que es imposible que un sistema sin rootkit sea mas tanto o mas efectivo (que ya te digo yo que tambien lo es, el ejemplo es el The International de todos los años donde no se usa ningun rootkit y es el que mas dinero reparte con diferencia, o tambien me niegas esto?).

Pero claro, es mas facil decir que la gente esta equivocada y tu tienes la razon absoluta porque estas en el "mundillo" pareces el gobierno con lo de que las decisiones las toman "expertos" y cuando les preguntan que expertos, pues no te lo podemos decir, pero ojo que son expertos... en fin.

Mejor dejalo que es mas fecil que demostrar algo tan simple como que el sistema es absolutamente necesario para el fin y que no hay otra opcion menos invasiva que funcione, donde vamos a parar.

P.D.: Al parecer el ESEA ese se dedico a minar bitcoins en los ordenadores de la gente que se lo instalo... no me sorprende absolutamente nada xD.

Un torneo en LAN que es en directo y con n arbitro por cada equipo? Muy buena esa xD.
Un rootkit puede monitorizar la memoria en tiempo real y los hash de las propias app para ver si han sido modificadas y si esas app tienen hooks hacia las referencias de aim en los offsets de memoria del CS. El VAC no lo hace. Simple y llanamente.

Demostrar? Ya te he demostrado suficiente. Coge unos cuantos chetos y pruebalos en matchmaking y en csgo... vamos a ver si son igual de efectivos XD.

No tengo la verdad universal... pero si juego en ese mundillo y se de lo que hablo...

Ahora demuestrame TÚ con pruebas como haces pasar un mismo cheto por el VAC y por FaceIT igualmente
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:De verdad, que voy a dejar la conversación aquí porque cuando no se está en el mundillo se habla sin conocimientos...sobre todo cuando has dicho lo de que te baneen en un juego gratuito cuando FaceIT y ESEA son plataformas de pago...

Claro que no sirve de nada... mas de 15 millones de jugadores en FaceIT (plataforma de pago para que te instale un "rootkit") y otros tantos en ESEA para que sea "igual" de eficaz que el VAC [qmparto]

Lo dicho, aquí termina mi conversación porque ya es absurda

Solo tienes que demostrar 2 cosas sencillas que son que el sistema de rootkit evita que los chetos funcionen o pasen desapercibidos (que ya te aseguro yo que no lo hace), y que es imposible que un sistema sin rootkit sea mas tanto o mas efectivo (que ya te digo yo que tambien lo es, el ejemplo es el The International de todos los años donde no se usa ningun rootkit y es el que mas dinero reparte con diferencia, o tambien me niegas esto?).

Pero claro, es mas facil decir que la gente esta equivocada y tu tienes la razon absoluta porque estas en el "mundillo" pareces el gobierno con lo de que las decisiones las toman "expertos" y cuando les preguntan que expertos, pues no te lo podemos decir, pero ojo que son expertos... en fin.

Mejor dejalo que es mas fecil que demostrar algo tan simple como que el sistema es absolutamente necesario para el fin y que no hay otra opcion menos invasiva que funcione, donde vamos a parar.

P.D.: Al parecer el ESEA ese se dedico a minar bitcoins en los ordenadores de la gente que se lo instalo... no me sorprende absolutamente nada xD.

Un torneo en LAN que es en directo y con n arbitro por cada equipo? Muy buena esa xD.
Un rootkit puede monitorizar la memoria en tiempo real y los hash de las propias app para ver si han sido modificadas y si esas app tienen hooks hacia las referencias de aim en los offsets de memoria del CS. El VAC no lo hace. Simple y llanamente.

Demostrar? Ya te he demostrado suficiente. Coge unos cuantos chetos y pruebalos en matchmaking y en csgo... vamos a ver si son igual de efectivos XD.

No tengo la verdad universal... pero si juego en ese mundillo y se de lo que hablo...

Ahora demuestrame TÚ con pruebas como haces pasar un mismo cheto por el VAC y por FaceIT igualmente

Te digo que en la practica son exactamente igual de efectivos cuando a dia de hoy se puede hacer perfectamente un cheto que se salte las comprobaciones del rootkit ya que al fin y al cabo es software, o me aseguras que es imposible hacer un cheto que se lo salte? yo te aseguro que si, macho que llevo años dedicandome a desarrollar software y te digo que es perfectamente posible. Y ya no solo es que yo te aseguro que es perfectamente posible, es que solo tienes que ver que todos los juegos (incluso el famoso vagrant con su rootkit al inicio del sistema y a los 2 dias ya habia aimbots a saco xD).
Es como si me dices que los antivirus son infalibles por ejecutarse a nivel de kernel yo te digo que no, que no sirven de absolutamente nada contra virus creados a conciencia, que solo detectan a posteriori, cuando el virus se ha analizado y se añadido su firma... los sistemas heuristicos jamas van a funcionar bien porque el que desarrolla un virus obviamente lo prueba con los antivirus primero para comprobar que es indetectable ;).

Y si, jamas he usadado un antivirus en mis ordenadores y jamas me he infectado con un virus en 25 años que llevo usando ordenadores.

Obviamente lo que no voy es a ir a internet buscar en google "chetos de X juego" bajarme la primera mierda y ala me han baneado (aunque mientras no se implemente un sistema de identificacion tampoco me joderia mucho porque me crearia otra cuenta xD). Pero te aseguro que cojo y desarrollo un cheto yo, lo arranco con los mismos permisos que el rootkit y hago y deshago lo que me venga en gana con el rootkit, y funcionaria indetectable :P. Es que os pensais que el software es infalible y que un programa software es imposible de saltarse... si fuera asi ni habria chetos, ni habria cracks, ni habria virus, y sintiendolo mucho en el mundo real si hay de todo eso y siempre lo habra.

La unica manera eficaz de evitar los chetos es que a una persona no le merezca la pena usarlos y para mi la mas efectiva es identificar la cuenta a una persona real y baneos de por vida en el juego, y para detectar que alguien hace trampas no necesitas mas que un replay, ademas es mil veces mas facil de justificar el baneo que simplemente decir que el "anticheat" salto, porque anda que no hacen falsos positivos a saco ;). Si un jugador profesional que ya tiene su reputacion y dinero tiene la opcion de usar un cheto y el riesgo es grande (baneo de por vida y no hay posibilidad de hacerse otra cuenta), te aseguro que no lo va a usar.

El tema de los rootkits no sabeis hasta que punto es problematico en un sistema y el problema de seguridad y estabilidad que conlleva cada uno.
Lo dicho, cuando dejes a tus hijos con la niñera le das tambien la llave de tu caja fuerte porque obviamente es esencial para realizar su trabajo como niñera... en fin.
jimi escribió:
djlogan83 escribió:
jimi escribió:Solo tienes que demostrar 2 cosas sencillas que son que el sistema de rootkit evita que los chetos funcionen o pasen desapercibidos (que ya te aseguro yo que no lo hace), y que es imposible que un sistema sin rootkit sea mas tanto o mas efectivo (que ya te digo yo que tambien lo es, el ejemplo es el The International de todos los años donde no se usa ningun rootkit y es el que mas dinero reparte con diferencia, o tambien me niegas esto?).

Pero claro, es mas facil decir que la gente esta equivocada y tu tienes la razon absoluta porque estas en el "mundillo" pareces el gobierno con lo de que las decisiones las toman "expertos" y cuando les preguntan que expertos, pues no te lo podemos decir, pero ojo que son expertos... en fin.

Mejor dejalo que es mas fecil que demostrar algo tan simple como que el sistema es absolutamente necesario para el fin y que no hay otra opcion menos invasiva que funcione, donde vamos a parar.

P.D.: Al parecer el ESEA ese se dedico a minar bitcoins en los ordenadores de la gente que se lo instalo... no me sorprende absolutamente nada xD.

Un torneo en LAN que es en directo y con n arbitro por cada equipo? Muy buena esa xD.
Un rootkit puede monitorizar la memoria en tiempo real y los hash de las propias app para ver si han sido modificadas y si esas app tienen hooks hacia las referencias de aim en los offsets de memoria del CS. El VAC no lo hace. Simple y llanamente.

Demostrar? Ya te he demostrado suficiente. Coge unos cuantos chetos y pruebalos en matchmaking y en csgo... vamos a ver si son igual de efectivos XD.

No tengo la verdad universal... pero si juego en ese mundillo y se de lo que hablo...

Ahora demuestrame TÚ con pruebas como haces pasar un mismo cheto por el VAC y por FaceIT igualmente

Te digo que en la practica son exactamente igual de efectivos cuando a dia de hoy se puede hacer perfectamente un cheto que se salte las comprobaciones del rootkit ya que al fin y al cabo es software, o me aseguras que es imposible hacer un cheto que se lo salte? yo te aseguro que si, macho que llevo años dedicandome a desarrollar software y te digo que es perfectamente posible. Y ya no solo es que yo te aseguro que es perfectamente posible, es que solo tienes que ver que todos los juegos (incluso el famoso vagrant con su rootkit al inicio del sistema y a los 2 dias ya habia aimbots a saco xD).
Es como si me dices que los antivirus son infalibles por ejecutarse a nivel de kernel yo te digo que no, que no sirven de absolutamente nada contra virus creados a conciencia, que solo detectan a posteriori, cuando el virus se ha analizado y se añadido su firma... los sistemas heuristicos jamas van a funcionar bien porque el que desarrolla un virus obviamente lo prueba con los antivirus primero para comprobar que es indetectable ;).

Y si, jamas he usadado un antivirus en mis ordenadores y jamas me he infectado con un virus en 25 años que llevo usando ordenadores.

Obviamente lo que no voy es a ir a internet buscar en google "chetos de X juego" bajarme la primera mierda y ala me han baneado (aunque mientras no se implemente un sistema de identificacion tampoco me joderia mucho porque me crearia otra cuenta xD). Pero te aseguro que cojo y desarrollo un cheto yo, lo arranco con los mismos permisos que el rootkit y hago y deshago lo que me venga en gana con el rootkit, y funcionaria indetectable :P. Es que os pensais que el software es infalible y que un programa software es imposible de saltarse... si fuera asi ni habria chetos, ni habria cracks, ni habria virus, y sintiendolo mucho en el mundo real si hay de todo eso y siempre lo habra.

La unica manera eficaz de evitar los chetos es que a una persona no le merezca la pena usarlos y para mi la mas efectiva es identificar la cuenta a una persona real y baneos de por vida en el juego, y para detectar que alguien hace trampas no necesitas mas que un replay, ademas es mil veces mas facil de justificar el baneo que simplemente decir que el "anticheat" salto, porque anda que no hacen falsos positivos a saco ;). Si un jugador profesional que ya tiene su reputacion y dinero tiene la opcion de usar un cheto y el riesgo es grande (baneo de por vida y no hay posibilidad de hacerse otra cuenta), te aseguro que no lo va a usar.

El tema de los rootkits no sabeis hasta que punto es problematico en un sistema y el problema de seguridad y estabilidad que conlleva cada uno.
Lo dicho, cuando dejes a tus hijos con la niñera le das tambien la llave de tu caja fuerte porque obviamente es esencial para realizar su trabajo como niñera... en fin.

Yo también llevo años desarrollando, y ni de coña se peude hacer lo mismo con el VAC que un el AC de FaceIT ya que sin permisos no puedes analizar las inyecciones en diferentes aplicaciones.... Ya eso te da una ventaja enorme. Puedes colar un aimbot? Mucho mas dificil pero sí... Pero vamos, que compares un sistema con otro es, y de verdad que no te lo tomes a mal, pero no tener ni puta idea de lo que estás hablando sobre el sistema de VAC, ya que es una pedazo de ponzoña de proporciones biblicas, y la mayoría de baneos vienen por el Overwatch y no por el VAC.... creo que eso ya te lo dice todo
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Un torneo en LAN que es en directo y con n arbitro por cada equipo? Muy buena esa xD.
Un rootkit puede monitorizar la memoria en tiempo real y los hash de las propias app para ver si han sido modificadas y si esas app tienen hooks hacia las referencias de aim en los offsets de memoria del CS. El VAC no lo hace. Simple y llanamente.

Demostrar? Ya te he demostrado suficiente. Coge unos cuantos chetos y pruebalos en matchmaking y en csgo... vamos a ver si son igual de efectivos XD.

No tengo la verdad universal... pero si juego en ese mundillo y se de lo que hablo...

Ahora demuestrame TÚ con pruebas como haces pasar un mismo cheto por el VAC y por FaceIT igualmente

Te digo que en la practica son exactamente igual de efectivos cuando a dia de hoy se puede hacer perfectamente un cheto que se salte las comprobaciones del rootkit ya que al fin y al cabo es software, o me aseguras que es imposible hacer un cheto que se lo salte? yo te aseguro que si, macho que llevo años dedicandome a desarrollar software y te digo que es perfectamente posible. Y ya no solo es que yo te aseguro que es perfectamente posible, es que solo tienes que ver que todos los juegos (incluso el famoso vagrant con su rootkit al inicio del sistema y a los 2 dias ya habia aimbots a saco xD).
Es como si me dices que los antivirus son infalibles por ejecutarse a nivel de kernel yo te digo que no, que no sirven de absolutamente nada contra virus creados a conciencia, que solo detectan a posteriori, cuando el virus se ha analizado y se añadido su firma... los sistemas heuristicos jamas van a funcionar bien porque el que desarrolla un virus obviamente lo prueba con los antivirus primero para comprobar que es indetectable ;).

Y si, jamas he usadado un antivirus en mis ordenadores y jamas me he infectado con un virus en 25 años que llevo usando ordenadores.

Obviamente lo que no voy es a ir a internet buscar en google "chetos de X juego" bajarme la primera mierda y ala me han baneado (aunque mientras no se implemente un sistema de identificacion tampoco me joderia mucho porque me crearia otra cuenta xD). Pero te aseguro que cojo y desarrollo un cheto yo, lo arranco con los mismos permisos que el rootkit y hago y deshago lo que me venga en gana con el rootkit, y funcionaria indetectable :P. Es que os pensais que el software es infalible y que un programa software es imposible de saltarse... si fuera asi ni habria chetos, ni habria cracks, ni habria virus, y sintiendolo mucho en el mundo real si hay de todo eso y siempre lo habra.

La unica manera eficaz de evitar los chetos es que a una persona no le merezca la pena usarlos y para mi la mas efectiva es identificar la cuenta a una persona real y baneos de por vida en el juego, y para detectar que alguien hace trampas no necesitas mas que un replay, ademas es mil veces mas facil de justificar el baneo que simplemente decir que el "anticheat" salto, porque anda que no hacen falsos positivos a saco ;). Si un jugador profesional que ya tiene su reputacion y dinero tiene la opcion de usar un cheto y el riesgo es grande (baneo de por vida y no hay posibilidad de hacerse otra cuenta), te aseguro que no lo va a usar.

El tema de los rootkits no sabeis hasta que punto es problematico en un sistema y el problema de seguridad y estabilidad que conlleva cada uno.
Lo dicho, cuando dejes a tus hijos con la niñera le das tambien la llave de tu caja fuerte porque obviamente es esencial para realizar su trabajo como niñera... en fin.

Yo también llevo años desarrollando, y ni de coña se peude hacer lo mismo con el VAC que un el AC de FaceIT ya que sin permisos no puedes analizar las inyecciones en diferentes aplicaciones.... Ya eso te da una ventaja enorme. Puedes colar un aimbot? Mucho mas dificil pero sí... Pero vamos, que compares un sistema con otro es, y de verdad que no te lo tomes a mal, pero no tener ni puta idea de lo que estás hablando sobre el sistema de VAC, ya que es una pedazo de ponzoña de proporciones biblicas, y la mayoría de baneos vienen por el Overwatch y no por el VAC.... creo que eso ya te lo dice todo

Pues macho si llevas años desarrollando deberias tener un minimo de conocimientos y saber que ambos sistemas se pueden saltar perfectamente. Solo que el VAC no tiene las llaves de mi caja fuerte y el otro si, para basicamente hacer lo mismo.

Que parece mentira hombre. Lo unico que previenen ambos sistemas es que el tipico crio se baje un cheto generico publicado en un foro y sin actualizar desde hace tiempo y pueda entrar en el juego a hacer trampas. Pero gente que mueva dinero y actualicen el cheto a menudo comprobado con cada actualizacion del juego simplemente van a ser indetectables, usen rootkit o no... es una perdida de tiempo absurda.

Que lo de la perdida de tiempo me la suda, pero lo de darle permisos de kernel a un software de terceros para que encima no me garantice absolutamente nada... en fin.
jimi escribió:
djlogan83 escribió:
jimi escribió:Te digo que en la practica son exactamente igual de efectivos cuando a dia de hoy se puede hacer perfectamente un cheto que se salte las comprobaciones del rootkit ya que al fin y al cabo es software, o me aseguras que es imposible hacer un cheto que se lo salte? yo te aseguro que si, macho que llevo años dedicandome a desarrollar software y te digo que es perfectamente posible. Y ya no solo es que yo te aseguro que es perfectamente posible, es que solo tienes que ver que todos los juegos (incluso el famoso vagrant con su rootkit al inicio del sistema y a los 2 dias ya habia aimbots a saco xD).
Es como si me dices que los antivirus son infalibles por ejecutarse a nivel de kernel yo te digo que no, que no sirven de absolutamente nada contra virus creados a conciencia, que solo detectan a posteriori, cuando el virus se ha analizado y se añadido su firma... los sistemas heuristicos jamas van a funcionar bien porque el que desarrolla un virus obviamente lo prueba con los antivirus primero para comprobar que es indetectable ;).

Y si, jamas he usadado un antivirus en mis ordenadores y jamas me he infectado con un virus en 25 años que llevo usando ordenadores.

Obviamente lo que no voy es a ir a internet buscar en google "chetos de X juego" bajarme la primera mierda y ala me han baneado (aunque mientras no se implemente un sistema de identificacion tampoco me joderia mucho porque me crearia otra cuenta xD). Pero te aseguro que cojo y desarrollo un cheto yo, lo arranco con los mismos permisos que el rootkit y hago y deshago lo que me venga en gana con el rootkit, y funcionaria indetectable :P. Es que os pensais que el software es infalible y que un programa software es imposible de saltarse... si fuera asi ni habria chetos, ni habria cracks, ni habria virus, y sintiendolo mucho en el mundo real si hay de todo eso y siempre lo habra.

La unica manera eficaz de evitar los chetos es que a una persona no le merezca la pena usarlos y para mi la mas efectiva es identificar la cuenta a una persona real y baneos de por vida en el juego, y para detectar que alguien hace trampas no necesitas mas que un replay, ademas es mil veces mas facil de justificar el baneo que simplemente decir que el "anticheat" salto, porque anda que no hacen falsos positivos a saco ;). Si un jugador profesional que ya tiene su reputacion y dinero tiene la opcion de usar un cheto y el riesgo es grande (baneo de por vida y no hay posibilidad de hacerse otra cuenta), te aseguro que no lo va a usar.

El tema de los rootkits no sabeis hasta que punto es problematico en un sistema y el problema de seguridad y estabilidad que conlleva cada uno.
Lo dicho, cuando dejes a tus hijos con la niñera le das tambien la llave de tu caja fuerte porque obviamente es esencial para realizar su trabajo como niñera... en fin.

Yo también llevo años desarrollando, y ni de coña se peude hacer lo mismo con el VAC que un el AC de FaceIT ya que sin permisos no puedes analizar las inyecciones en diferentes aplicaciones.... Ya eso te da una ventaja enorme. Puedes colar un aimbot? Mucho mas dificil pero sí... Pero vamos, que compares un sistema con otro es, y de verdad que no te lo tomes a mal, pero no tener ni puta idea de lo que estás hablando sobre el sistema de VAC, ya que es una pedazo de ponzoña de proporciones biblicas, y la mayoría de baneos vienen por el Overwatch y no por el VAC.... creo que eso ya te lo dice todo

Pues macho si llevas años desarrollando deberias tener un minimo de conocimientos y saber que ambos sistemas se pueden saltar perfectamente. Solo que el VAC no tiene las llaves de mi caja fuerte y el otro si, para basicamente hacer lo mismo.

Que parece mentira hombre. Lo unico que previenen ambos sistemas es que el tipico crio se baje un cheto generico publicado en un foro y sin actualizar desde hace tiempo y pueda entrar en el juego a hacer trampas. Pero gente que mueva dinero y actualicen el cheto a menudo comprobado con cada actualizacion del juego simplemente van a ser indetectables, usen rootkit o no... es una perdida de tiempo absurda.

Que lo de la perdida de tiempo me la suda, pero lo de darle permisos de kernel a un software de terceros para que encima no me garantice absolutamente nada... en fin.

Uno de los cheats de pago mas avanzados que hay te caza en FaceIT: https://aimware.net/forum/thread-133971 ... ght=faceit

Tu teoría de desmonta cada dos por tres. Reitero, el CS tiene unos offsets hacia la memoria para cada función. Es cuestión de que una app mire en la memoria todas las aplicaciones abiertas y si alguna tiene algo inyectado que haga referencia a los offset. El VAC no lo puede hacer, una aplicación de nivel 0 sí.

Sigues errer que erre y como no quieres ver la diferencia cuando ni siquiera sabes como funciona y mucho menos te han metido a comprobar como funciona cada uno.... Lo dicho, desactivo las notificaciones porque es como hablar con una pared.
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Yo también llevo años desarrollando, y ni de coña se peude hacer lo mismo con el VAC que un el AC de FaceIT ya que sin permisos no puedes analizar las inyecciones en diferentes aplicaciones.... Ya eso te da una ventaja enorme. Puedes colar un aimbot? Mucho mas dificil pero sí... Pero vamos, que compares un sistema con otro es, y de verdad que no te lo tomes a mal, pero no tener ni puta idea de lo que estás hablando sobre el sistema de VAC, ya que es una pedazo de ponzoña de proporciones biblicas, y la mayoría de baneos vienen por el Overwatch y no por el VAC.... creo que eso ya te lo dice todo

Pues macho si llevas años desarrollando deberias tener un minimo de conocimientos y saber que ambos sistemas se pueden saltar perfectamente. Solo que el VAC no tiene las llaves de mi caja fuerte y el otro si, para basicamente hacer lo mismo.

Que parece mentira hombre. Lo unico que previenen ambos sistemas es que el tipico crio se baje un cheto generico publicado en un foro y sin actualizar desde hace tiempo y pueda entrar en el juego a hacer trampas. Pero gente que mueva dinero y actualicen el cheto a menudo comprobado con cada actualizacion del juego simplemente van a ser indetectables, usen rootkit o no... es una perdida de tiempo absurda.

Que lo de la perdida de tiempo me la suda, pero lo de darle permisos de kernel a un software de terceros para que encima no me garantice absolutamente nada... en fin.

Uno de los cheats de pago mas avanzados que hay te caza en FaceIT: https://aimware.net/forum/thread-133971 ... ght=faceit

Tu teoría de desmonta cada dos por tres. Reitero, el CS tiene unos offsets hacia la memoria para cada función. Es cuestión de que una app mire en la memoria todas las aplicaciones abiertas y si alguna tiene algo inyectado que haga referencia a los offset. El VAC no lo puede hacer, una aplicación de nivel 0 sí.

Sigues errer que erre y como no quieres ver la diferencia cuando ni siquiera sabes como funciona y mucho menos te han metido a comprobar como funciona cada uno.... Lo dicho, desactivo las notificaciones porque es como hablar con una pared.

Tranquilo hombre que te doy la razon y ya puedes dormir tranquilo, que con ejecutarse a nivel de kernel puedes detectar cualquier cosa, sea un cheto o sea un virus ;). No se como no trabajas para una compañia antivirus, te hacias de oro. Pero bueno en el mundo real seguira habiendo chetos que pasaran indetectables se instale el anticheat como rootkit o no... te guste a ti o no... simplemente que a partir de ahora los sistemas windows seran mucho mas vulnerables por la cantidad de vectores de ataque que van a existir en cuanto esto se ponga de moda y toda compañia lo instale con la excusa. Y esto traera seguramente menos juegos multiplataforma o que se puedan virtualizar, que tambien es otra ventaja mas del asunto.

Me hace gracia que hables de que no tengo ni idea y sueltes cosas sin sentido como que has leido de por ahi pero jamas has programado nada relacionado. Yo hace 20 años cuando empezaba a programar y con lo que me aburria en la ingenieria (todas las noches de juerga y de dia pasando la resaca uno se aburria un huevo xD), pues hice chetos de todos los tipos habidos y por haber y jamas me detectaron uno. Obviamente no los publique, ni tampoco los use para viciarme a juegos haciendo trampas, porque sinceramente no tiene gracia, pero era un entretenimiento mas para pasar las horas muertas y tambien para practicar programacion que tampoco venia mal :P.
Se perfectamente como funciona windows, linux, unix, osx, etc a bajo nivel, y no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten porque que importa que el anticheat tenga acceso al anillo 0 si yo tambien lo tengo? y ademas yo puedo saber exactamente todo lo que hace ya que tengo acceso a su codigo, mientras el no sabe absolutamente nada de lo que hace mi programa a menos que se hagan con una copia y actualicen el anticheat para detectarlo que si no lo publico a ver como lo obtienen. Y en caso de que lo publicase solo tendria que actualizarlo y vuelta a empezar... es una perdida de tiempo y punto.

Y de aquellas las herramientas que habia eran de risa, hacerle ingenieria inversa a un programa era una puta tortura. Hoy en dia tienes un IDA que es la puta ostia, y encima si eres vago y te da dolor de cabeza el ensamblador los decompiladores de Hexrays son muy muy buenos... lo que costaba antes analizar un programa y lo poco que cuesta ahora. Pero bueno, el dia que vea que hay un antivirus o un anticheto que funciona siempre porque corre en el anillo 0 ese dia le planto un pino al jefe en la mesa con mi carta de dimision xD.
jimi escribió:
djlogan83 escribió:
jimi escribió:Pues macho si llevas años desarrollando deberias tener un minimo de conocimientos y saber que ambos sistemas se pueden saltar perfectamente. Solo que el VAC no tiene las llaves de mi caja fuerte y el otro si, para basicamente hacer lo mismo.

Que parece mentira hombre. Lo unico que previenen ambos sistemas es que el tipico crio se baje un cheto generico publicado en un foro y sin actualizar desde hace tiempo y pueda entrar en el juego a hacer trampas. Pero gente que mueva dinero y actualicen el cheto a menudo comprobado con cada actualizacion del juego simplemente van a ser indetectables, usen rootkit o no... es una perdida de tiempo absurda.

Que lo de la perdida de tiempo me la suda, pero lo de darle permisos de kernel a un software de terceros para que encima no me garantice absolutamente nada... en fin.

Uno de los cheats de pago mas avanzados que hay te caza en FaceIT: https://aimware.net/forum/thread-133971 ... ght=faceit

Tu teoría de desmonta cada dos por tres. Reitero, el CS tiene unos offsets hacia la memoria para cada función. Es cuestión de que una app mire en la memoria todas las aplicaciones abiertas y si alguna tiene algo inyectado que haga referencia a los offset. El VAC no lo puede hacer, una aplicación de nivel 0 sí.

Sigues errer que erre y como no quieres ver la diferencia cuando ni siquiera sabes como funciona y mucho menos te han metido a comprobar como funciona cada uno.... Lo dicho, desactivo las notificaciones porque es como hablar con una pared.

Tranquilo hombre que te doy la razon y ya puedes dormir tranquilo, que con ejecutarse a nivel de kernel puedes detectar cualquier cosa, sea un cheto o sea un virus ;). No se como no trabajas para una compañia antivirus, te hacias de oro. Pero bueno en el mundo real seguira habiendo chetos que pasaran indetectables se instale el anticheat como rootkit o no... te guste a ti o no... simplemente que a partir de ahora los sistemas windows seran mucho mas vulnerables por la cantidad de vectores de ataque que van a existir en cuanto esto se ponga de moda y toda compañia lo instale con la excusa. Y esto traera seguramente menos juegos multiplataforma o que se puedan virtualizar, que tambien es otra ventaja mas del asunto.

Me hace gracia que hables de que no tengo ni idea y sueltes cosas sin sentido como que has leido de por ahi pero jamas has programado nada relacionado. Yo hace 20 años cuando empezaba a programar y con lo que me aburria en la ingenieria (todas las noches de juerga y de dia pasando la resaca uno se aburria un huevo xD), pues hice chetos de todos los tipos habidos y por haber y jamas me detectaron uno. Obviamente no los publique, ni tampoco los use para viciarme a juegos haciendo trampas, porque sinceramente no tiene gracia, pero era un entretenimiento mas para pasar las horas muertas y tambien para practicar programacion que tampoco venia mal :P.
Se perfectamente como funciona windows, linux, unix, osx, etc a bajo nivel, y no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten porque que importa que el anticheat tenga acceso al anillo 0 si yo tambien lo tengo? y ademas yo puedo saber exactamente todo lo que hace ya que tengo acceso a su codigo, mientras el no sabe absolutamente nada de lo que hace mi programa a menos que se hagan con una copia y actualicen el anticheat para detectarlo que si no lo publico a ver como lo obtienen. Y en caso de que lo publicase solo tendria que actualizarlo y vuelta a empezar... es una perdida de tiempo y punto.

Y de aquellas las herramientas que habia eran de risa, hacerle ingenieria inversa a un programa era una puta tortura. Hoy en dia tienes un IDA que es la puta ostia, y encima si eres vago y te da dolor de cabeza el ensamblador los decompiladores de Hexrays son muy muy buenos... lo que costaba antes analizar un programa y lo poco que cuesta ahora. Pero bueno, el dia que vea que hay un antivirus o un anticheto que funciona siempre porque corre en el anillo 0 ese dia le planto un pino al jefe en la mesa con mi carta de dimision xD.

[oki] cuando hagas un cheto como dices que no lo pille el FaceIT me avisas... mientras tanto la cosa sigue igual... yo te he demostrado varias cosas, tu solo palabras sin demostrar nada... ya te he dicho que ya no te voy a rebatir nada porque ya ha quedado todo evidenciado.
Puedes hacerlo en C, Java, lo que mejor te venga... y si necesitas te paso todos los offsets...

Cual va a ser la excusa de ahora? No tengo tiempo? No me hace falta hacerlo para demostrar nada? Te recuerdo que has sido tu el que lo has dicho....
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

me imagino que si no tienes problemas... lo puedes hacer sin poner ninguna excusa....pero como llevas haciendo todo el post... no vas a demostrar nada y no lo vas a hacer verdad?
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Uno de los cheats de pago mas avanzados que hay te caza en FaceIT: https://aimware.net/forum/thread-133971 ... ght=faceit

Tu teoría de desmonta cada dos por tres. Reitero, el CS tiene unos offsets hacia la memoria para cada función. Es cuestión de que una app mire en la memoria todas las aplicaciones abiertas y si alguna tiene algo inyectado que haga referencia a los offset. El VAC no lo puede hacer, una aplicación de nivel 0 sí.

Sigues errer que erre y como no quieres ver la diferencia cuando ni siquiera sabes como funciona y mucho menos te han metido a comprobar como funciona cada uno.... Lo dicho, desactivo las notificaciones porque es como hablar con una pared.

Tranquilo hombre que te doy la razon y ya puedes dormir tranquilo, que con ejecutarse a nivel de kernel puedes detectar cualquier cosa, sea un cheto o sea un virus ;). No se como no trabajas para una compañia antivirus, te hacias de oro. Pero bueno en el mundo real seguira habiendo chetos que pasaran indetectables se instale el anticheat como rootkit o no... te guste a ti o no... simplemente que a partir de ahora los sistemas windows seran mucho mas vulnerables por la cantidad de vectores de ataque que van a existir en cuanto esto se ponga de moda y toda compañia lo instale con la excusa. Y esto traera seguramente menos juegos multiplataforma o que se puedan virtualizar, que tambien es otra ventaja mas del asunto.

Me hace gracia que hables de que no tengo ni idea y sueltes cosas sin sentido como que has leido de por ahi pero jamas has programado nada relacionado. Yo hace 20 años cuando empezaba a programar y con lo que me aburria en la ingenieria (todas las noches de juerga y de dia pasando la resaca uno se aburria un huevo xD), pues hice chetos de todos los tipos habidos y por haber y jamas me detectaron uno. Obviamente no los publique, ni tampoco los use para viciarme a juegos haciendo trampas, porque sinceramente no tiene gracia, pero era un entretenimiento mas para pasar las horas muertas y tambien para practicar programacion que tampoco venia mal :P.
Se perfectamente como funciona windows, linux, unix, osx, etc a bajo nivel, y no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten porque que importa que el anticheat tenga acceso al anillo 0 si yo tambien lo tengo? y ademas yo puedo saber exactamente todo lo que hace ya que tengo acceso a su codigo, mientras el no sabe absolutamente nada de lo que hace mi programa a menos que se hagan con una copia y actualicen el anticheat para detectarlo que si no lo publico a ver como lo obtienen. Y en caso de que lo publicase solo tendria que actualizarlo y vuelta a empezar... es una perdida de tiempo y punto.

Y de aquellas las herramientas que habia eran de risa, hacerle ingenieria inversa a un programa era una puta tortura. Hoy en dia tienes un IDA que es la puta ostia, y encima si eres vago y te da dolor de cabeza el ensamblador los decompiladores de Hexrays son muy muy buenos... lo que costaba antes analizar un programa y lo poco que cuesta ahora. Pero bueno, el dia que vea que hay un antivirus o un anticheto que funciona siempre porque corre en el anillo 0 ese dia le planto un pino al jefe en la mesa con mi carta de dimision xD.

[oki] cuando hagas un cheto como dices que no lo pille el FaceIT me avisas... mientras tanto la cosa sigue igual... yo te he demostrado varias cosas, tu solo palabras sin demostrar nada... ya te he dicho que ya no te voy a rebatir nada porque ya ha quedado todo evidenciado.
Puedes hacerlo en C, Java, lo que mejor te venga... y si necesitas te paso todos los offsets...

Cual va a ser la excusa de ahora? No tengo tiempo? No me hace falta hacerlo para demostrar nada? Te recuerdo que has sido tu el que lo has dicho....
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

me imagino que si no tienes problemas... lo puedes hacer sin poner ninguna excusa....pero como llevas haciendo todo el post... no vas a demostrar nada y no lo vas a hacer verdad?

Que has demostrado? Ni me has demostrado que los antichetos esos que segun tu son infalibles realmente lo son porque se ejecutan en el anillo 0 (vamos como si los chetos no se puedan ejecutar en ese anillo tambien vamos xD). Me pones de ejemplos torneos menores de third parties donde se usan esos rootkits, y yo te pongo ejemplos de torneos que mueven muchisimo mas dinero dinero de los que nombras donde no se usan y ademas los organizan los creadores del juego en cuestion ;).
Ahora me pides que te cree un software para ti por la cara, porque seguro que me pagues las horas de investigacion y desarrollo que voy a necesitar me vas a decir que si verdad?. O te sobra mucho el tiempo o no se, algunos trabajamos 8 horas todos los dias y al llegar a casa como comprenderas no me voy a poner a desarrollarte una app asi por la cara y menos de gratis ;). Pero vamos, se puede hacer perfectamente.
De hecho si fueras un poco inteligente podrias simplemente coger e ir a youtube y poner "faceit cheaters" o "valorant cheaters" y tendras ejemplos a patadas estoy seguro. Y lo que es mejor te saldra gratis ;).

Espero que en un futuro no te dediques a desarrollar software embedido para hospitales o aviones porque voy a cogerle miedo a volar e ir a un hospital (y ni al covid le tengo miedo).
jimi escribió:
djlogan83 escribió:
jimi escribió:Tranquilo hombre que te doy la razon y ya puedes dormir tranquilo, que con ejecutarse a nivel de kernel puedes detectar cualquier cosa, sea un cheto o sea un virus ;). No se como no trabajas para una compañia antivirus, te hacias de oro. Pero bueno en el mundo real seguira habiendo chetos que pasaran indetectables se instale el anticheat como rootkit o no... te guste a ti o no... simplemente que a partir de ahora los sistemas windows seran mucho mas vulnerables por la cantidad de vectores de ataque que van a existir en cuanto esto se ponga de moda y toda compañia lo instale con la excusa. Y esto traera seguramente menos juegos multiplataforma o que se puedan virtualizar, que tambien es otra ventaja mas del asunto.

Me hace gracia que hables de que no tengo ni idea y sueltes cosas sin sentido como que has leido de por ahi pero jamas has programado nada relacionado. Yo hace 20 años cuando empezaba a programar y con lo que me aburria en la ingenieria (todas las noches de juerga y de dia pasando la resaca uno se aburria un huevo xD), pues hice chetos de todos los tipos habidos y por haber y jamas me detectaron uno. Obviamente no los publique, ni tampoco los use para viciarme a juegos haciendo trampas, porque sinceramente no tiene gracia, pero era un entretenimiento mas para pasar las horas muertas y tambien para practicar programacion que tampoco venia mal :P.
Se perfectamente como funciona windows, linux, unix, osx, etc a bajo nivel, y no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten porque que importa que el anticheat tenga acceso al anillo 0 si yo tambien lo tengo? y ademas yo puedo saber exactamente todo lo que hace ya que tengo acceso a su codigo, mientras el no sabe absolutamente nada de lo que hace mi programa a menos que se hagan con una copia y actualicen el anticheat para detectarlo que si no lo publico a ver como lo obtienen. Y en caso de que lo publicase solo tendria que actualizarlo y vuelta a empezar... es una perdida de tiempo y punto.

Y de aquellas las herramientas que habia eran de risa, hacerle ingenieria inversa a un programa era una puta tortura. Hoy en dia tienes un IDA que es la puta ostia, y encima si eres vago y te da dolor de cabeza el ensamblador los decompiladores de Hexrays son muy muy buenos... lo que costaba antes analizar un programa y lo poco que cuesta ahora. Pero bueno, el dia que vea que hay un antivirus o un anticheto que funciona siempre porque corre en el anillo 0 ese dia le planto un pino al jefe en la mesa con mi carta de dimision xD.

[oki] cuando hagas un cheto como dices que no lo pille el FaceIT me avisas... mientras tanto la cosa sigue igual... yo te he demostrado varias cosas, tu solo palabras sin demostrar nada... ya te he dicho que ya no te voy a rebatir nada porque ya ha quedado todo evidenciado.
Puedes hacerlo en C, Java, lo que mejor te venga... y si necesitas te paso todos los offsets...

Cual va a ser la excusa de ahora? No tengo tiempo? No me hace falta hacerlo para demostrar nada? Te recuerdo que has sido tu el que lo has dicho....
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

me imagino que si no tienes problemas... lo puedes hacer sin poner ninguna excusa....pero como llevas haciendo todo el post... no vas a demostrar nada y no lo vas a hacer verdad?

Que has demostrado? Ni me has demostrado que los antichetos esos que segun tu son infalibles realmente lo son porque se ejecutan en el anillo 0 (vamos como si los chetos no se puedan ejecutar en ese anillo tambien vamos xD). Me pones de ejemplos torneos menores de third parties donde se usan esos rootkits, y yo te pongo ejemplos de torneos que mueven muchisimo mas dinero dinero de los que nombras donde no se usan y ademas los organizan los creadores del juego en cuestion ;).
Ahora me pides que te cree un software para ti por la cara, porque seguro que me pagues las horas de investigacion y desarrollo que voy a necesitar me vas a decir que si verdad?. O te sobra mucho el tiempo o no se, algunos trabajamos 8 horas todos los dias y al llegar a casa como comprenderas no me voy a poner a desarrollarte una app asi por la cara y menos de gratis ;). Pero vamos, se puede hacer perfectamente.
De hecho si fueras un poco inteligente podrias simplemente coger e ir a youtube y poner "faceit cheaters" o "valorant cheaters" y tendras ejemplos a patadas estoy seguro. Y lo que es mejor te saldra gratis ;).

Espero que en un futuro no te dediques a desarrollar software embedido para hospitales o aviones porque voy a cogerle miedo a volar e ir a un hospital (y ni al covid le tengo miedo).

Gracias por confirmar mi teoría de la excusa del cheto.... Que por cierto no la quiero para mí, ya que no uso esa mierda, era solo para que demostrases tu teoría. En la cuál sigues sin demostrar nada y excusandote una y otra vez.
Mas facil todavía... crealo y lo grabas tu mismo en faceit usandolo durante una semana sin que te baneen... así ya no tienes la excusa de... no lo hago para no regalarte mi trabajo y crear un cheto para ti....
Cuál es la siguiente excusa ahora? [qmparto]

Los torneos que te menciono son los oficiales de CSGO donde hay un pool prize de 2 millones solo para el ganador.

Que has demostrado hasta ahora? Nada

Yo te he demostrado estadísticamente que el anti cheat de FaceIT le da mil patadas al VAC. El por qué la gente juega mas en esas plataformas por algo.

Tu que has demostrado? Que puedes hacer un cheto si tu quieres bla bla bla... pero cuando te lo he dicho... a la excusa facil como ya te había adelantado yo. Me reitero... crealo para demostrarme que puedes aguantar mas en FaceIT y lo grabas, de verdad, a mi no me pases nada....
Pero igual que en el anterior post... ya te adelanto que me vas a dar una excusa bastante pésima como la de ahora...

Pe pe pe pero los que organizan los torneos grandes lo hacen sin instalar un rootkit!!!! Por favor, demuestrame eso tabién que hasta ahora no has demostrado que no haya que hacerlo....

P.D.: https://www.reddit.com/r/DotA2/comments ... _works_in/
https://www.youtube.com/watch?v=HwnSObxOAiw

El chiste se cuenta solo [qmparto] [qmparto]

P.D.2: https://steamcommunity.com/app/730/disc ... 173851950/
Hasta en los propios foros de Valve ya te están diciendo que el VAC es unaponzoña y que tiene que ser mucho mas intrusivo si quiere conseguir algo.

Ojo que al final vas a tener razón eh? :D

P.D.3: Espero que no tengas en el futuro que desarrollar ni el firm de un dvd porque me está empezando miedo hasta de ver una película y salir ardiendo [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió: [oki] cuando hagas un cheto como dices que no lo pille el FaceIT me avisas... mientras tanto la cosa sigue igual... yo te he demostrado varias cosas, tu solo palabras sin demostrar nada... ya te he dicho que ya no te voy a rebatir nada porque ya ha quedado todo evidenciado.
Puedes hacerlo en C, Java, lo que mejor te venga... y si necesitas te paso todos los offsets...

Cual va a ser la excusa de ahora? No tengo tiempo? No me hace falta hacerlo para demostrar nada? Te recuerdo que has sido tu el que lo has dicho....

me imagino que si no tienes problemas... lo puedes hacer sin poner ninguna excusa....pero como llevas haciendo todo el post... no vas a demostrar nada y no lo vas a hacer verdad?

Que has demostrado? Ni me has demostrado que los antichetos esos que segun tu son infalibles realmente lo son porque se ejecutan en el anillo 0 (vamos como si los chetos no se puedan ejecutar en ese anillo tambien vamos xD). Me pones de ejemplos torneos menores de third parties donde se usan esos rootkits, y yo te pongo ejemplos de torneos que mueven muchisimo mas dinero dinero de los que nombras donde no se usan y ademas los organizan los creadores del juego en cuestion ;).
Ahora me pides que te cree un software para ti por la cara, porque seguro que me pagues las horas de investigacion y desarrollo que voy a necesitar me vas a decir que si verdad?. O te sobra mucho el tiempo o no se, algunos trabajamos 8 horas todos los dias y al llegar a casa como comprenderas no me voy a poner a desarrollarte una app asi por la cara y menos de gratis ;). Pero vamos, se puede hacer perfectamente.
De hecho si fueras un poco inteligente podrias simplemente coger e ir a youtube y poner "faceit cheaters" o "valorant cheaters" y tendras ejemplos a patadas estoy seguro. Y lo que es mejor te saldra gratis ;).

Espero que en un futuro no te dediques a desarrollar software embedido para hospitales o aviones porque voy a cogerle miedo a volar e ir a un hospital (y ni al covid le tengo miedo).

Gracias por confirmar mi teoría de la excusa del cheto.... Que por cierto no la quiero para mí, ya que no uso esa mierda, era solo para que demostrases tu teoría. En la cuál sigues sin demostrar nada y excusandote una y otra vez.
Mas facil todavía... crealo y lo grabas tu mismo en faceit usandolo durante una semana sin que te baneen... así ya no tienes la excusa de... no lo hago para no regalarte mi trabajo y crear un cheto para ti....
Cuál es la siguiente excusa ahora? [qmparto]

Los torneos que te menciono son los oficiales de CSGO donde hay un pool prize de 2 millones solo para el ganador.

Que has demostrado hasta ahora? Nada

Yo te he demostrado estadísticamente que el anti cheat de FaceIT le da mil patadas al VAC. El por qué la gente juega mas en esas plataformas por algo.

Tu que has demostrado? Que puedes hacer un cheto si tu quieres bla bla bla... pero cuando te lo he dicho... a la excusa facil como ya te había adelantado yo. Me reitero... crealo para demostrarme que puedes aguantar mas en FaceIT y lo grabas, de verdad, a mi no me pases nada....
Pero igual que en el anterior post... ya te adelanto que me vas a dar una excusa bastante pésima como la de ahora...

Pe pe pe pero los que organizan los torneos grandes lo hacen sin instalar un rootkit!!!! Por favor, demuestrame eso tabién que hasta ahora no has demostrado que no haya que hacerlo....

P.D.: https://www.reddit.com/r/DotA2/comments ... _works_in/
https://www.youtube.com/watch?v=HwnSObxOAiw

El chiste se cuenta solo [qmparto] [qmparto]

P.D.2: https://steamcommunity.com/app/730/disc ... 173851950/
Hasta en los propios foros de Valve ya te están diciendo que el VAC es unaponzoña y que tiene que ser mucho mas intrusivo si quiere conseguir algo.

Ojo que al final vas a tener razón eh? :D

P.D.3: Espero que no tengas en el futuro que desarrollar ni el firm de un dvd porque me está empezando miedo hasta de ver una película y salir ardiendo [qmparto]

Te lo explicare para tontos a ver si asi me entiendes ;).
Vete a youtube.com y escribes "the international cheaters" y me dices cuantos videos ves con peña haciendo trampas (y son los torneos que mas dinero reparten del mundo con diferencia y que yo sepa solamente usan VAC), luego haces la misma prueba y pones "csgo faceit cheaters" y me cuentas.
Para que coño voy a perder el tiempo y dinero en hacerte un software y grabarte un video si hay a patadas de ejemplos que prueban exactamente lo mismo y no me cuesta ni tiempo ni dinero? O me tomas por un crio de 12 años o no se macho. El mundo adulto y capitalista en el que vivimos funciona de tal forma que el tiempo es dinero y si quieres que alguien (que encima no conoces de nada) pierda el tiempo en algo, te va a costar dinero. Si te piensas que voy a trabajar gratis y encima en mis horas libres por una tonteria asi o me tomas por tonto o tienes un problema grave xD.

Llevo 15 trabajando en multiples proyectos y cobrando por ello siempre, quizas si me llegas a pillar 5 años antes de empezar a currar mientras estaba empezando a programar, estudiaba, me sobraba el tiempo y lo de dormir y descansar me lo pasaba por el arco del triunfo pues a lo mejor hasta tenias suerte... pero a dia de hoy va a ser que no ;).

Por ejemplo, mientras desarrollabamos un servidor alternativo para un mmorpg pues tuve que hacer varias herramientas sencillas que modificaban el cliente oficial para que se conectase a lo servidores alternativos y utilizase otras claves publicas ya que obviamente no vas a disponer de las privadas correspondientes (si es que sabes de lo que te hablo, porque tengo ya mis dudas). Utilidades tan simples que funcionaban tanto para el cliente de linux como para el de windows, y que no te llevaba ni un dia hacer. Pues me apuesto a que tu no has hecho nada ni parecido en tu vida... y te hablo de hace 20 años cuando estaba empezando a "programar" y practicamente todo lo publicaba en codigo abierto y con licencias GPL.
Antoniopua está baneado por "saltarse el ban con un clon"
Vaya troyano, ¿no? [carcajad] [+risas]
jimi escribió:
djlogan83 escribió:
jimi escribió:Que has demostrado? Ni me has demostrado que los antichetos esos que segun tu son infalibles realmente lo son porque se ejecutan en el anillo 0 (vamos como si los chetos no se puedan ejecutar en ese anillo tambien vamos xD). Me pones de ejemplos torneos menores de third parties donde se usan esos rootkits, y yo te pongo ejemplos de torneos que mueven muchisimo mas dinero dinero de los que nombras donde no se usan y ademas los organizan los creadores del juego en cuestion ;).
Ahora me pides que te cree un software para ti por la cara, porque seguro que me pagues las horas de investigacion y desarrollo que voy a necesitar me vas a decir que si verdad?. O te sobra mucho el tiempo o no se, algunos trabajamos 8 horas todos los dias y al llegar a casa como comprenderas no me voy a poner a desarrollarte una app asi por la cara y menos de gratis ;). Pero vamos, se puede hacer perfectamente.
De hecho si fueras un poco inteligente podrias simplemente coger e ir a youtube y poner "faceit cheaters" o "valorant cheaters" y tendras ejemplos a patadas estoy seguro. Y lo que es mejor te saldra gratis ;).

Espero que en un futuro no te dediques a desarrollar software embedido para hospitales o aviones porque voy a cogerle miedo a volar e ir a un hospital (y ni al covid le tengo miedo).

Gracias por confirmar mi teoría de la excusa del cheto.... Que por cierto no la quiero para mí, ya que no uso esa mierda, era solo para que demostrases tu teoría. En la cuál sigues sin demostrar nada y excusandote una y otra vez.
Mas facil todavía... crealo y lo grabas tu mismo en faceit usandolo durante una semana sin que te baneen... así ya no tienes la excusa de... no lo hago para no regalarte mi trabajo y crear un cheto para ti....
Cuál es la siguiente excusa ahora? [qmparto]

Los torneos que te menciono son los oficiales de CSGO donde hay un pool prize de 2 millones solo para el ganador.

Que has demostrado hasta ahora? Nada

Yo te he demostrado estadísticamente que el anti cheat de FaceIT le da mil patadas al VAC. El por qué la gente juega mas en esas plataformas por algo.

Tu que has demostrado? Que puedes hacer un cheto si tu quieres bla bla bla... pero cuando te lo he dicho... a la excusa facil como ya te había adelantado yo. Me reitero... crealo para demostrarme que puedes aguantar mas en FaceIT y lo grabas, de verdad, a mi no me pases nada....
Pero igual que en el anterior post... ya te adelanto que me vas a dar una excusa bastante pésima como la de ahora...

Pe pe pe pero los que organizan los torneos grandes lo hacen sin instalar un rootkit!!!! Por favor, demuestrame eso tabién que hasta ahora no has demostrado que no haya que hacerlo....

P.D.: https://www.reddit.com/r/DotA2/comments ... _works_in/
https://www.youtube.com/watch?v=HwnSObxOAiw

El chiste se cuenta solo [qmparto] [qmparto]

P.D.2: https://steamcommunity.com/app/730/disc ... 173851950/
Hasta en los propios foros de Valve ya te están diciendo que el VAC es unaponzoña y que tiene que ser mucho mas intrusivo si quiere conseguir algo.

Ojo que al final vas a tener razón eh? :D

P.D.3: Espero que no tengas en el futuro que desarrollar ni el firm de un dvd porque me está empezando miedo hasta de ver una película y salir ardiendo [qmparto]

Te lo explicare para tontos a ver si asi me entiendes ;).
Vete a youtube.com y escribes "the international cheaters" y me dices cuantos videos ves con peña haciendo trampas (y son los torneos que mas dinero reparten del mundo con diferencia y que yo sepa solamente usan VAC), luego haces la misma prueba y pones "csgo faceit cheaters" y me cuentas.
Para que coño voy a perder el tiempo y dinero en hacerte un software y grabarte un video si hay a patadas de ejemplos que prueban exactamente lo mismo y no me cuesta ni tiempo ni dinero? O me tomas por un crio de 12 años o no se macho. El mundo adulto y capitalista en el que vivimos funciona de tal forma que el tiempo es dinero y si quieres que alguien (que encima no conoces de nada) pierda el tiempo en algo, te va a costar dinero. Si te piensas que voy a trabajar gratis y encima en mis horas libres por una tonteria asi o me tomas por tonto o tienes un problema grave xD.

Llevo 15 trabajando en multiples proyectos y cobrando por ello siempre, quizas si me llegas a pillar 5 años antes de empezar a currar mientras estaba empezando a programar, estudiaba, me sobraba el tiempo y lo de dormir y descansar me lo pasaba por el arco del triunfo pues a lo mejor hasta tenias suerte... pero a dia de hoy va a ser que no ;).

Por ejemplo, mientras desarrollabamos un servidor alternativo para un mmorpg pues tuve que hacer varias herramientas sencillas que modificaban el cliente oficial para que se conectase a lo servidores alternativos y utilizase otras claves publicas ya que obviamente no vas a disponer de las privadas correspondientes (si es que sabes de lo que te hablo, porque tengo ya mis dudas). Utilidades tan simples que funcionaban tanto para el cliente de linux como para el de windows, y que no te llevaba ni un dia hacer. Pues me apuesto a que tu no has hecho nada ni parecido en tu vida... y te hablo de hace 20 años cuando estaba empezando a "programar" y practicamente todo lo publicaba en codigo abierto y con licencias GPL.

Te lo explicare para personas con coeficiente muy muy bajo....
Primero.... Pon un torneo de FaceIT como TU has dicho y enseñame en youtube uno solo donde usan chetos. Hablar de un torneo donde tienes un arbitro detrás de cada team es que es de genero tonto como estás demostrado una y otra vez.

Segundo. Vuelves a dar largas como había predicho sobre hacer el cheto... ahora ya la excusa es... si me pillashace 5 años... Sigues confirmando mi teoría gracias.

Tercero.... que casualidad!! Yo también he trabajado en hacer ingenieria inversa a un MMOPRG y muy famoso y tener que adaptarlo a MAC.... Usando CMAKE y VS, aparte de los respectivos sniffers y parsers para sacar todas las llamadas.... podemos hablar de ello no te preocupes... si de verdad puedes apoyar lo que dices con hechos XDDDDD.

Cuarto... Como siempre... hablas sin demostrar nada... yo ya te he pasado videos, enlaces... etc... Tu aportación ha sido la misma desde un principio... Yo podria..... pero casi que no...
Me recuerdas a un calvo famoso... no tendrás nada que ver no? [qmparto] [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Gracias por confirmar mi teoría de la excusa del cheto.... Que por cierto no la quiero para mí, ya que no uso esa mierda, era solo para que demostrases tu teoría. En la cuál sigues sin demostrar nada y excusandote una y otra vez.
Mas facil todavía... crealo y lo grabas tu mismo en faceit usandolo durante una semana sin que te baneen... así ya no tienes la excusa de... no lo hago para no regalarte mi trabajo y crear un cheto para ti....
Cuál es la siguiente excusa ahora? [qmparto]

Los torneos que te menciono son los oficiales de CSGO donde hay un pool prize de 2 millones solo para el ganador.

Que has demostrado hasta ahora? Nada

Yo te he demostrado estadísticamente que el anti cheat de FaceIT le da mil patadas al VAC. El por qué la gente juega mas en esas plataformas por algo.

Tu que has demostrado? Que puedes hacer un cheto si tu quieres bla bla bla... pero cuando te lo he dicho... a la excusa facil como ya te había adelantado yo. Me reitero... crealo para demostrarme que puedes aguantar mas en FaceIT y lo grabas, de verdad, a mi no me pases nada....
Pero igual que en el anterior post... ya te adelanto que me vas a dar una excusa bastante pésima como la de ahora...

Pe pe pe pero los que organizan los torneos grandes lo hacen sin instalar un rootkit!!!! Por favor, demuestrame eso tabién que hasta ahora no has demostrado que no haya que hacerlo....

P.D.: https://www.reddit.com/r/DotA2/comments ... _works_in/
https://www.youtube.com/watch?v=HwnSObxOAiw

El chiste se cuenta solo [qmparto] [qmparto]

P.D.2: https://steamcommunity.com/app/730/disc ... 173851950/
Hasta en los propios foros de Valve ya te están diciendo que el VAC es unaponzoña y que tiene que ser mucho mas intrusivo si quiere conseguir algo.

Ojo que al final vas a tener razón eh? :D

P.D.3: Espero que no tengas en el futuro que desarrollar ni el firm de un dvd porque me está empezando miedo hasta de ver una película y salir ardiendo [qmparto]

Te lo explicare para tontos a ver si asi me entiendes ;).
Vete a youtube.com y escribes "the international cheaters" y me dices cuantos videos ves con peña haciendo trampas (y son los torneos que mas dinero reparten del mundo con diferencia y que yo sepa solamente usan VAC), luego haces la misma prueba y pones "csgo faceit cheaters" y me cuentas.
Para que coño voy a perder el tiempo y dinero en hacerte un software y grabarte un video si hay a patadas de ejemplos que prueban exactamente lo mismo y no me cuesta ni tiempo ni dinero? O me tomas por un crio de 12 años o no se macho. El mundo adulto y capitalista en el que vivimos funciona de tal forma que el tiempo es dinero y si quieres que alguien (que encima no conoces de nada) pierda el tiempo en algo, te va a costar dinero. Si te piensas que voy a trabajar gratis y encima en mis horas libres por una tonteria asi o me tomas por tonto o tienes un problema grave xD.

Llevo 15 trabajando en multiples proyectos y cobrando por ello siempre, quizas si me llegas a pillar 5 años antes de empezar a currar mientras estaba empezando a programar, estudiaba, me sobraba el tiempo y lo de dormir y descansar me lo pasaba por el arco del triunfo pues a lo mejor hasta tenias suerte... pero a dia de hoy va a ser que no ;).

Por ejemplo, mientras desarrollabamos un servidor alternativo para un mmorpg pues tuve que hacer varias herramientas sencillas que modificaban el cliente oficial para que se conectase a lo servidores alternativos y utilizase otras claves publicas ya que obviamente no vas a disponer de las privadas correspondientes (si es que sabes de lo que te hablo, porque tengo ya mis dudas). Utilidades tan simples que funcionaban tanto para el cliente de linux como para el de windows, y que no te llevaba ni un dia hacer. Pues me apuesto a que tu no has hecho nada ni parecido en tu vida... y te hablo de hace 20 años cuando estaba empezando a "programar" y practicamente todo lo publicaba en codigo abierto y con licencias GPL.

Te lo explicare para personas con coeficiente muy muy bajo....
Primero.... Pon un torneo de FaceIT como TU has dicho y enseñame en youtube uno solo donde usan chetos. Hablar de un torneo donde tienes un arbitro detrás de cada team es que es de genero tonto como estás demostrado una y otra vez.

Segundo. Vuelves a dar largas como había predicho sobre hacer el cheto... ahora ya la excusa es... si me pillashace 5 años... Sigues confirmando mi teoría gracias.

Tercero.... Yo también he trabajado en hacer ingenieria inversa a un MMOPRG y muy famoso y tener que adaptarlo a MAC.... Usando CMAKE y VS, aparte de los respectivos sniffers y parsers para sacar todas las llamadas.... podemos hablar de ello no te preocupes... si de verdad puedes apoyar lo que dices con hechos XDDDDD.

Cuarto... Como siempre... hablas sin demostrar nada... yo ya te he pasado videos, enlaces... etc... Tu aportación ha sido la misma desde un principio... Yo podria..... pero casi que no...
Me recuerdas a un calvo famoso... no tendrás nada que ver no? [qmparto] [qmparto]

A ver, me puedes explicar porque te tengo que buscar un torneo donde se use faceit para demostrarte que uno se puede saltar faceit? Si faceit detecta los chetos tan bien como tu dices (y ojo que tu pusistes el ejemplo de faceit, que para mi son todos igualmente de ineficaces) imagino que funcionara tambien fuera de torneos? no es el mismo ejecutable?.

Lo que funciona son los replays y que al jugador no le compense el riesgo vs beneficio obtenido, lo que suelen hacer en los torneos es que la gente profesional se sepa quienes son en la vida real. Y si estas personas deciden hacer trampas y los pillan en un simple replay basicamente no pueden volver a jugar en la vida en los torneos, y esto es lo que realmente funciona. Que le pongas 20 rootkits no sirven de nada mientras el usuario del cheto pueda coger y si lo pillan volver a crearse otra cuenta gratuitamente y seguir jugando exactamente igual. Porque el riesgo es nulo y conque vea algo de beneficio en hacer trampas pues le merece la pena (incluso bajarse un cheto de un foro o un virus).

Segundo: Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Tercero: Pues ya son muchas casualidades y que ademas ambos utilicemos OSX :P. Yo tambien fui curiosamente el unico de todos los desarrolladores que llegue a utilizar OSX y por lo tanto el unido que mantenia la version del servidor en OSX incluso tiempo despues de no estar activo en el proyecto :P. Siempre se intento que el servidor fuese estable, rapido, de codigo abierto y multiplataforma (funcionaba en linux, bsd, osx, unix y windows). Gracias a ello aun a dia de hoy aun sigue vivo despues de 20 años de vida (que se dice pronto, hoy en dia hay mmorpgs oficiales con menos años de vida xD). Ojala de aquellas hubiese un cmake como el de hoy en dia y no tener que hacer un monton de condicionantes en el makefile porque cada sistema instalaba las bibliotecas en un sitio distinto, y no solo cada sistema y version, sino que cada distribucion de linux las metia donde le venia en gana. No recuerdo el numero de maquinas virtuales que llegue a tener que tener instaladas pero no se contaban con los dedos de las dos manos.
Y bueno la ingenieria inversa fue un proceso muy largo y tedioso de años, gracias a dios los dos desarrolladores que empezaron el proyecto antes de yo unirme (de aquellas aun perdia el tiempo jugando al juego) sacaron lo mas basico antes de dejar el proyecto, que fuera el protocolo mas basico (te podias conectar, moverte por el mundo y chatear) y la codificacion del archivo de sprites del cliente. Aunque de aquellas el cliente ni hacia falta editarlo en memoria ya que el dominio o ip del servidor se podia configurar en las opciones del cliente o pasarselo como parametro, ademas el cliente no encriptaba las comunicaciones (ojo que hablamos de finales de los 90, principios de los 2000 xD). Luego a nosotros nos toco lo mas facil que es implementar todo el resto de cosas que faltaban respecto al servidor oficial, implementar encriptacion en cuanto tomaron medidas en futuras versiones, tambien solucionar medidas que fueron tomando para hacer mas dificil el conectar el cliente oficial a servidores alternativos, como quitar la opcion de especificar el dominio del servidor al que conectarte o usar encriptacion en las comunicaciones, usando primero criptografia asimetrica para intercambiar una clave simetrica con la que se continuaba el resto de las comunicaciones. Siempre me encanto entender como funcionaba todo. De hecho me pusieron hasta matricula de honor en una asignatura que se llamaba Sistemas Operativos y me lei el temario el dia/noche anterior al examen xD.

Cuarto: macho no me seas vago, pon en youtube "csgo faceit cheaters" que tienes ejemplos a patadas. Tu me pides que pierda horas sin que me las pagues y encima en mi tiempo libre para hacer un programa y no tienes ni la decencia de copiar y pegar un texto en youtube que te lleva 5 segundos? ;).

Si estas en el anillo 0 puedes cambiar hasta el anticheat entero si te sale de los huevos, por muchas protecciones que tenga y comprobaciones que haga. Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe. Es que me parece increible que si de verdad has desarrollado un servidor mmorpg y hecho ingenieria inversa como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0... te juro que intento entender que es lo que te lleva a esa conclusion pero no lo veo.
Es que deberias saber que de todo lo que se ejecuta en el ordenador del cliente te tienes que fiar 0, si fuese tan sencillo fiarte de lo que te envia el cliente te aseguro que no se gastaba tanto dinero en mantener servidores dedicados para los juegos en la inmensa mayoria de casos. De lo unico de lo que te puedes fiar es de lo que se ejecuta en el servidor ;). De hecho esa es la base de practicamente todo MMORPG, incluso a dia de hoy.
jimi escribió:
djlogan83 escribió:
jimi escribió:Te lo explicare para tontos a ver si asi me entiendes ;).
Vete a youtube.com y escribes "the international cheaters" y me dices cuantos videos ves con peña haciendo trampas (y son los torneos que mas dinero reparten del mundo con diferencia y que yo sepa solamente usan VAC), luego haces la misma prueba y pones "csgo faceit cheaters" y me cuentas.
Para que coño voy a perder el tiempo y dinero en hacerte un software y grabarte un video si hay a patadas de ejemplos que prueban exactamente lo mismo y no me cuesta ni tiempo ni dinero? O me tomas por un crio de 12 años o no se macho. El mundo adulto y capitalista en el que vivimos funciona de tal forma que el tiempo es dinero y si quieres que alguien (que encima no conoces de nada) pierda el tiempo en algo, te va a costar dinero. Si te piensas que voy a trabajar gratis y encima en mis horas libres por una tonteria asi o me tomas por tonto o tienes un problema grave xD.

Llevo 15 trabajando en multiples proyectos y cobrando por ello siempre, quizas si me llegas a pillar 5 años antes de empezar a currar mientras estaba empezando a programar, estudiaba, me sobraba el tiempo y lo de dormir y descansar me lo pasaba por el arco del triunfo pues a lo mejor hasta tenias suerte... pero a dia de hoy va a ser que no ;).

Por ejemplo, mientras desarrollabamos un servidor alternativo para un mmorpg pues tuve que hacer varias herramientas sencillas que modificaban el cliente oficial para que se conectase a lo servidores alternativos y utilizase otras claves publicas ya que obviamente no vas a disponer de las privadas correspondientes (si es que sabes de lo que te hablo, porque tengo ya mis dudas). Utilidades tan simples que funcionaban tanto para el cliente de linux como para el de windows, y que no te llevaba ni un dia hacer. Pues me apuesto a que tu no has hecho nada ni parecido en tu vida... y te hablo de hace 20 años cuando estaba empezando a "programar" y practicamente todo lo publicaba en codigo abierto y con licencias GPL.

Te lo explicare para personas con coeficiente muy muy bajo....
Primero.... Pon un torneo de FaceIT como TU has dicho y enseñame en youtube uno solo donde usan chetos. Hablar de un torneo donde tienes un arbitro detrás de cada team es que es de genero tonto como estás demostrado una y otra vez.

Segundo. Vuelves a dar largas como había predicho sobre hacer el cheto... ahora ya la excusa es... si me pillashace 5 años... Sigues confirmando mi teoría gracias.

Tercero.... Yo también he trabajado en hacer ingenieria inversa a un MMOPRG y muy famoso y tener que adaptarlo a MAC.... Usando CMAKE y VS, aparte de los respectivos sniffers y parsers para sacar todas las llamadas.... podemos hablar de ello no te preocupes... si de verdad puedes apoyar lo que dices con hechos XDDDDD.

Cuarto... Como siempre... hablas sin demostrar nada... yo ya te he pasado videos, enlaces... etc... Tu aportación ha sido la misma desde un principio... Yo podria..... pero casi que no...
Me recuerdas a un calvo famoso... no tendrás nada que ver no? [qmparto] [qmparto]

A ver, me puedes explicar porque te tengo que buscar un torneo donde se use faceit para demostrarte que uno se puede saltar faceit? Si faceit detecta los chetos tan bien como tu dices (y ojo que tu pusistes el ejemplo de faceit, que para mi son todos igualmente de ineficaces) imagino que funcionara tambien fuera de torneos? no es el mismo ejecutable?.

Lo que funciona son los replays y que al jugador no le compense el riesgo vs beneficio obtenido, lo que suelen hacer en los torneos es que la gente profesional se sepa quienes son en la vida real. Y si estas personas deciden hacer trampas y los pillan en un simple replay basicamente no pueden volver a jugar en la vida en los torneos, y esto es lo que realmente funciona. Que le pongas 20 rootkits no sirven de nada mientras el usuario del cheto pueda coger y si lo pillan volver a crearse otra cuenta gratuitamente y seguir jugando exactamente igual. Porque el riesgo es nulo y conque vea algo de beneficio en hacer trampas pues le merece la pena (incluso bajarse un cheto de un foro o un virus).

Segundo: Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Tercero: Pues ya son muchas casualidades y que ademas ambos utilicemos OSX :P. Yo tambien fui curiosamente el unico de todos los desarrolladores que llegue a utilizar OSX y por lo tanto el unido que mantenia la version del servidor en OSX incluso tiempo despues de no estar activo en el proyecto :P. Siempre se intento que el servidor fuese estable, rapido, de codigo abierto y multiplataforma (funcionaba en linux, bsd, osx, unix y windows). Gracias a ello aun a dia de hoy aun sigue vivo despues de 20 años de vida (que se dice pronto, hoy en dia hay mmorpgs oficiales con menos años de vida xD). Ojala de aquellas hubiese un cmake como el de hoy en dia y no tener que hacer un monton de condicionantes en el makefile porque cada sistema instalaba las bibliotecas en un sitio distinto, y no solo cada sistema y version, sino que cada distribucion de linux las metia donde le venia en gana. No recuerdo el numero de maquinas virtuales que llegue a tener que tener instaladas pero no se contaban con los dedos de las dos manos.
Y bueno la ingenieria inversa fue un proceso muy largo y tedioso de años, gracias a dios los dos desarrolladores que empezaron el proyecto antes de yo unirme (de aquellas aun perdia el tiempo jugando al juego) sacaron lo mas basico antes de dejar el proyecto, que fuera el protocolo mas basico (te podias conectar, moverte por el mundo y chatear) y la codificacion del archivo de sprites del cliente. Aunque de aquellas el cliente ni hacia falta editarlo en memoria ya que el dominio o ip del servidor se podia configurar en las opciones del cliente o pasarselo como parametro, ademas el cliente no encriptaba las comunicaciones (ojo que hablamos de finales de los 90, principios de los 2000 xD). Luego a nosotros nos toco lo mas facil que es implementar todo el resto de cosas que faltaban respecto al servidor oficial, implementar encriptacion en cuanto tomaron medidas en futuras versiones, tambien solucionar medidas que fueron tomando para hacer mas dificil el conectar el cliente oficial a servidores alternativos, como quitar la opcion de especificar el dominio del servidor al que conectarte o usar encriptacion en las comunicaciones, usando primero criptografia asimetrica para intercambiar una clave simetrica con la que se continuaba el resto de las comunicaciones. Siempre me encanto entender como funcionaba todo. De hecho me pusieron hasta matricula de honor en una asignatura que se llamaba Sistemas Operativos y me lei el temario el dia/noche anterior al examen xD.

Cuarto: macho no me seas vago, pon en youtube "csgo faceit cheaters" que tienes ejemplos a patadas. Tu me pides que pierda horas sin que me las pagues y encima en mi tiempo libre para hacer un programa y no tienes ni la decencia de copiar y pegar un texto en youtube que te lleva 5 segundos? ;).

Si estas en el anillo 0 puedes cambiar hasta el anticheat entero si te sale de los huevos, por muchas protecciones que tenga y comprobaciones que haga. Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe. Es que me parece increible que si de verdad has desarrollado un servidor mmorpg y hecho ingenieria inversa como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0... te juro que intento entender que es lo que te lleva a esa conclusion pero no lo veo.
Es que deberias saber que de todo lo que se ejecuta en el ordenador del cliente te tienes que fiar 0, si fuese tan sencillo fiarte de lo que te envia el cliente te aseguro que no se gastaba tanto dinero en mantener servidores dedicados para los juegos en la inmensa mayoria de casos. De lo unico de lo que te puedes fiar es de lo que se ejecuta en el servidor ;). De hecho esa es la base de practicamente todo MMORPG, incluso a dia de hoy.

No voy a contestarte a todo ya que estoy cansado y vuelve a quedar demostrado todo de nuevo... Quinta excusa, sobre lo de crear el cheat que se salte el sistema de FaceIT y esea... primero me has dicho que no ibas a crear un cheto para mi por la cara y gratis, luego has dicho que si te pillo hace 5 años... Vale venga... ya ha quedado claro, no te voy a decir mas sobre eso...
Peeeeeeeeeeeero ya que dices
Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Yo solo te digo lo que tu dijistes...
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

Y como yo ya sabía que iba a pasar... te fuí adelantando lo que ibas a decir en cada post antes de que tu fueras poniendo las excusas [qmparto]
Primero no tienes problemas para hacer un cheto y ahora van apareciendo muchos problemas... no voy a hacer nada gratis para tí... si me pillas hace 5 años lo haría...
Yo también puedo decir muchas cosas sin demostrarlas.... lo que pasa que sería mentir y sacar excusas... y no es mi estilo... si no hacer algo, no digo que puedo hacerlo para luego sacar excusas. Yo si digo que puedo hacer algo lo demuestro ;)

Lo segundo....
como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0

puedes decirme donde he dicho yo que el sistema de faceit o esea sea infalible? Me lo puedes indicar en un quote por favor?? Hay alguna falta de comprensión lectora?? Porque hasta ahora revisando el hilo solo he leido esa palabra en tus comentarios hasta 3 veces y es por estás cosas que hay que explicartelo todo lento y despacito... [facepalm]

Otra cosilla...
Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe

Eso te funcionara en una parte donde sea client-side... si cambias el anti-cheat estas cambiando el hash así que no, eso no te va a servir ya que el server-side no se lo va a tragar... al igual que en un mmorpg... como bien dices... parece mentira que hayas trabajado en un MMORPG...

Sabes que los videos de youtube de cheats en faceit son el 99% falsos? Y es facil demostrable por el tickrate o la publicidad que no lleva integrada y es propietaria?

Repito que te cuesta entenderlo... el cliente de FaceIT o ESEA sirve para cuando NO estás en un torneo delante del público y con un arbitro detrás tuya, estando delante con arbitros no tiene mucho sentido para el WH, pero sí para el AIM ya que hay cosas que el ojo humano puede pasar desapercibidas...

Lo de las replays.... como se nota que no entiendes del juego y que eso muchas veces no sirve de mucho

El cliente de FaceIT y ESEA tiene "privilegios" para escanear y revisar la memoria aparte de todo el hardware en busca de offsets usadas en CS y te va a pillar el 99% de veces, Steam tiene un VAC que pillla un 1% de casos, ya que la mayoría de baneos vienen por el overwatch. Esto último te lo puede decir cualquiera que juegue a CS y tenga un mínimo de horas.

Un último ejemplo antes de irme... mira este video (ya que yo SI te pongo pruebas): https://www.youtube.com/watch?v=AVr5_zznnNI
Me quedo con el comentario de.... "esto lo ha pillado el cliente de ESEA, no el de VAC" mientras se descojona mientras dice VAC [qmparto]

Y ya por último... siempre que me dices que te demuestre cosas yo te pongo enlaces... cuando te lo digo yo me dices que no tienes porque buscar nada... que lo busque yo... que no sea vago... Cuando TÚ has sido el primero en decir... Lo de los anticheat es la escusa perfecta y la gente se lo cree.

Pues pasame una lista de chetos que valgan en FaceIT y yo te paso una que se la trague el VAC vale? Defiende tu teoría!!!! [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Te lo explicare para personas con coeficiente muy muy bajo....
Primero.... Pon un torneo de FaceIT como TU has dicho y enseñame en youtube uno solo donde usan chetos. Hablar de un torneo donde tienes un arbitro detrás de cada team es que es de genero tonto como estás demostrado una y otra vez.

Segundo. Vuelves a dar largas como había predicho sobre hacer el cheto... ahora ya la excusa es... si me pillashace 5 años... Sigues confirmando mi teoría gracias.

Tercero.... Yo también he trabajado en hacer ingenieria inversa a un MMOPRG y muy famoso y tener que adaptarlo a MAC.... Usando CMAKE y VS, aparte de los respectivos sniffers y parsers para sacar todas las llamadas.... podemos hablar de ello no te preocupes... si de verdad puedes apoyar lo que dices con hechos XDDDDD.

Cuarto... Como siempre... hablas sin demostrar nada... yo ya te he pasado videos, enlaces... etc... Tu aportación ha sido la misma desde un principio... Yo podria..... pero casi que no...
Me recuerdas a un calvo famoso... no tendrás nada que ver no? [qmparto] [qmparto]

A ver, me puedes explicar porque te tengo que buscar un torneo donde se use faceit para demostrarte que uno se puede saltar faceit? Si faceit detecta los chetos tan bien como tu dices (y ojo que tu pusistes el ejemplo de faceit, que para mi son todos igualmente de ineficaces) imagino que funcionara tambien fuera de torneos? no es el mismo ejecutable?.

Lo que funciona son los replays y que al jugador no le compense el riesgo vs beneficio obtenido, lo que suelen hacer en los torneos es que la gente profesional se sepa quienes son en la vida real. Y si estas personas deciden hacer trampas y los pillan en un simple replay basicamente no pueden volver a jugar en la vida en los torneos, y esto es lo que realmente funciona. Que le pongas 20 rootkits no sirven de nada mientras el usuario del cheto pueda coger y si lo pillan volver a crearse otra cuenta gratuitamente y seguir jugando exactamente igual. Porque el riesgo es nulo y conque vea algo de beneficio en hacer trampas pues le merece la pena (incluso bajarse un cheto de un foro o un virus).

Segundo: Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Tercero: Pues ya son muchas casualidades y que ademas ambos utilicemos OSX :P. Yo tambien fui curiosamente el unico de todos los desarrolladores que llegue a utilizar OSX y por lo tanto el unido que mantenia la version del servidor en OSX incluso tiempo despues de no estar activo en el proyecto :P. Siempre se intento que el servidor fuese estable, rapido, de codigo abierto y multiplataforma (funcionaba en linux, bsd, osx, unix y windows). Gracias a ello aun a dia de hoy aun sigue vivo despues de 20 años de vida (que se dice pronto, hoy en dia hay mmorpgs oficiales con menos años de vida xD). Ojala de aquellas hubiese un cmake como el de hoy en dia y no tener que hacer un monton de condicionantes en el makefile porque cada sistema instalaba las bibliotecas en un sitio distinto, y no solo cada sistema y version, sino que cada distribucion de linux las metia donde le venia en gana. No recuerdo el numero de maquinas virtuales que llegue a tener que tener instaladas pero no se contaban con los dedos de las dos manos.
Y bueno la ingenieria inversa fue un proceso muy largo y tedioso de años, gracias a dios los dos desarrolladores que empezaron el proyecto antes de yo unirme (de aquellas aun perdia el tiempo jugando al juego) sacaron lo mas basico antes de dejar el proyecto, que fuera el protocolo mas basico (te podias conectar, moverte por el mundo y chatear) y la codificacion del archivo de sprites del cliente. Aunque de aquellas el cliente ni hacia falta editarlo en memoria ya que el dominio o ip del servidor se podia configurar en las opciones del cliente o pasarselo como parametro, ademas el cliente no encriptaba las comunicaciones (ojo que hablamos de finales de los 90, principios de los 2000 xD). Luego a nosotros nos toco lo mas facil que es implementar todo el resto de cosas que faltaban respecto al servidor oficial, implementar encriptacion en cuanto tomaron medidas en futuras versiones, tambien solucionar medidas que fueron tomando para hacer mas dificil el conectar el cliente oficial a servidores alternativos, como quitar la opcion de especificar el dominio del servidor al que conectarte o usar encriptacion en las comunicaciones, usando primero criptografia asimetrica para intercambiar una clave simetrica con la que se continuaba el resto de las comunicaciones. Siempre me encanto entender como funcionaba todo. De hecho me pusieron hasta matricula de honor en una asignatura que se llamaba Sistemas Operativos y me lei el temario el dia/noche anterior al examen xD.

Cuarto: macho no me seas vago, pon en youtube "csgo faceit cheaters" que tienes ejemplos a patadas. Tu me pides que pierda horas sin que me las pagues y encima en mi tiempo libre para hacer un programa y no tienes ni la decencia de copiar y pegar un texto en youtube que te lleva 5 segundos? ;).

Si estas en el anillo 0 puedes cambiar hasta el anticheat entero si te sale de los huevos, por muchas protecciones que tenga y comprobaciones que haga. Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe. Es que me parece increible que si de verdad has desarrollado un servidor mmorpg y hecho ingenieria inversa como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0... te juro que intento entender que es lo que te lleva a esa conclusion pero no lo veo.
Es que deberias saber que de todo lo que se ejecuta en el ordenador del cliente te tienes que fiar 0, si fuese tan sencillo fiarte de lo que te envia el cliente te aseguro que no se gastaba tanto dinero en mantener servidores dedicados para los juegos en la inmensa mayoria de casos. De lo unico de lo que te puedes fiar es de lo que se ejecuta en el servidor ;). De hecho esa es la base de practicamente todo MMORPG, incluso a dia de hoy.

No voy a contestarte a todo ya que estoy cansado y vuelve a quedar demostrado todo de nuevo... Quinta excusa, sobre lo de crear el cheat que se salte el sistema de FaceIT y esea... primero me has dicho que no ibas a crear un cheto para mi por la cara y gratis, luego has dicho que si te pillo hace 5 años... Vale venga... ya ha quedado claro, no te voy a decir mas sobre eso...
Peeeeeeeeeeeero ya que dices
Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Yo solo te digo lo que tu dijistes...
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

Y como yo ya sabía que iba a pasar... te fuí adelantando lo que ibas a decir en cada post antes de que tu fueras poniendo las excusas [qmparto]
Primero no tienes problemas para hacer un cheto y ahora van apareciendo muchos problemas... no voy a hacer nada gratis para tí... si me pillas hace 5 años lo haría...
Yo también puedo decir muchas cosas sin demostrarlas.... lo que pasa que sería mentir y sacar excusas... y no es mi estilo... si no hacer algo, no digo que puedo hacerlo para luego sacar excusas. Yo si digo que puedo hacer algo lo demuestro ;)

Lo segundo....
como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0

puedes decirme donde he dicho yo que el sistema de faceit o esea sea infalible? Me lo puedes indicar en un quote por favor?? Hay alguna falta de comprensión lectora?? Porque hasta ahora revisando el hilo solo he leido esa palabra en tus comentarios hasta 3 veces y es por estás cosas que hay que explicartelo todo lento y despacito... [facepalm]

Otra cosilla...
Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe

Eso te funcionara en una parte donde sea client-side... si cambias el anti-cheat estas cambiando el hash así que no, eso no te va a servir ya que el server-side no se lo va a tragar... al igual que en un mmorpg... como bien dices... parece mentira que hayas trabajado en un MMORPG...

Sabes que los videos de youtube de cheats en faceit son el 99% falsos? Y es facil demostrable por el tickrate o la publicidad que no lleva integrada y es propietaria?

Repito que te cuesta entenderlo... el cliente de FaceIT o ESEA sirve para cuando NO estás en un torneo delante del público y con un arbitro detrás tuya, estando delante con arbitros no tiene mucho sentido para el WH, pero sí para el AIM ya que hay cosas que el ojo humano puede pasar desapercibidas...

Lo de las replays.... como se nota que no entiendes del juego y que eso muchas veces no sirve de mucho

El cliente de FaceIT y ESEA tiene "privilegios" para escanear y revisar la memoria aparte de todo el hardware en busca de offsets usadas en CS y te va a pillar el 99% de veces, Steam tiene un VAC que pillla un 1% de casos, ya que la mayoría de baneos vienen por el overwatch. Esto último te lo puede decir cualquiera que juegue a CS y tenga un mínimo de horas.

Un último ejemplo antes de irme... mira este video (ya que yo SI te pongo pruebas): https://www.youtube.com/watch?v=AVr5_zznnNI
Me quedo con el comentario de.... "esto lo ha pillado el cliente de ESEA, no el de VAC" mientras se descojona mientras dice VAC [qmparto]

Y ya por último... siempre que me dices que te demuestre cosas yo te pongo enlaces... cuando te lo digo yo me dices que no tienes porque buscar nada... que lo busque yo... que no sea vago... Cuando TÚ has sido el primero en decir... Lo de los anticheat es la escusa perfecta y la gente se lo cree.

Pues pasame una lista de chetos que valgan en FaceIT y yo te paso una que se la trague el VAC vale? Defiende tu teoría!!!! [qmparto]

Me enlazas un video que he mirado por encima y en el dicen claramente que habia el tio que supuestamente han pillado dice que es el primero de muchos... que solo le han pillado a el pero que hay muchos y que han ganado mucho dinero con el... con ese video lo que demuestras es que hasta cheats genericos (que se los venden a muchos) y por lo tanto es facil para los desarrolladores del anticheat de hacerse con el y tomar medidas para detectarlo en futuras actualizaciones han sido detectados... vamos que funciona exactamente igual que los antivirus, hasta que tienen acceso al virus y lo analizan no empiezan a detectarlo... lo que te llevo diciendo desde el principio.

Que si, que todos los videos de youtube donde se muestran chetos de faceit son falsos... y luego hablas de escusas, con dos narices. Si quieres pierdo el tiempo en analizar los ejecutables de faceit y hacerte un POC que los evite y luego te pongo un video y me dices que mi video tambien es fake (como estas haciendo con los que hay ya en youtube a dia de hoy), y seguiras erre que erre con lo mismo ;).

Ya que tanto controlas si no te importa porque no me pegas un codigo fuente tuyo de algun programa que hayas hecho relaccionado con la ediccion de memoria o tu usuario del repositorio donde aparezcan los commits de ese servidor de MMORPG donde has trabajado. Tengo curiosidad por ver como controlas del tema ;).

Y por cierto, explicame porque es imposible y que impide modificar un programa y enviar hashes validos al servidor del anticheat? al final todo se ejecuta en el ordenador del cliente ;).
jimi escribió:
djlogan83 escribió:
jimi escribió:A ver, me puedes explicar porque te tengo que buscar un torneo donde se use faceit para demostrarte que uno se puede saltar faceit? Si faceit detecta los chetos tan bien como tu dices (y ojo que tu pusistes el ejemplo de faceit, que para mi son todos igualmente de ineficaces) imagino que funcionara tambien fuera de torneos? no es el mismo ejecutable?.

Lo que funciona son los replays y que al jugador no le compense el riesgo vs beneficio obtenido, lo que suelen hacer en los torneos es que la gente profesional se sepa quienes son en la vida real. Y si estas personas deciden hacer trampas y los pillan en un simple replay basicamente no pueden volver a jugar en la vida en los torneos, y esto es lo que realmente funciona. Que le pongas 20 rootkits no sirven de nada mientras el usuario del cheto pueda coger y si lo pillan volver a crearse otra cuenta gratuitamente y seguir jugando exactamente igual. Porque el riesgo es nulo y conque vea algo de beneficio en hacer trampas pues le merece la pena (incluso bajarse un cheto de un foro o un virus).

Segundo: Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Tercero: Pues ya son muchas casualidades y que ademas ambos utilicemos OSX :P. Yo tambien fui curiosamente el unico de todos los desarrolladores que llegue a utilizar OSX y por lo tanto el unido que mantenia la version del servidor en OSX incluso tiempo despues de no estar activo en el proyecto :P. Siempre se intento que el servidor fuese estable, rapido, de codigo abierto y multiplataforma (funcionaba en linux, bsd, osx, unix y windows). Gracias a ello aun a dia de hoy aun sigue vivo despues de 20 años de vida (que se dice pronto, hoy en dia hay mmorpgs oficiales con menos años de vida xD). Ojala de aquellas hubiese un cmake como el de hoy en dia y no tener que hacer un monton de condicionantes en el makefile porque cada sistema instalaba las bibliotecas en un sitio distinto, y no solo cada sistema y version, sino que cada distribucion de linux las metia donde le venia en gana. No recuerdo el numero de maquinas virtuales que llegue a tener que tener instaladas pero no se contaban con los dedos de las dos manos.
Y bueno la ingenieria inversa fue un proceso muy largo y tedioso de años, gracias a dios los dos desarrolladores que empezaron el proyecto antes de yo unirme (de aquellas aun perdia el tiempo jugando al juego) sacaron lo mas basico antes de dejar el proyecto, que fuera el protocolo mas basico (te podias conectar, moverte por el mundo y chatear) y la codificacion del archivo de sprites del cliente. Aunque de aquellas el cliente ni hacia falta editarlo en memoria ya que el dominio o ip del servidor se podia configurar en las opciones del cliente o pasarselo como parametro, ademas el cliente no encriptaba las comunicaciones (ojo que hablamos de finales de los 90, principios de los 2000 xD). Luego a nosotros nos toco lo mas facil que es implementar todo el resto de cosas que faltaban respecto al servidor oficial, implementar encriptacion en cuanto tomaron medidas en futuras versiones, tambien solucionar medidas que fueron tomando para hacer mas dificil el conectar el cliente oficial a servidores alternativos, como quitar la opcion de especificar el dominio del servidor al que conectarte o usar encriptacion en las comunicaciones, usando primero criptografia asimetrica para intercambiar una clave simetrica con la que se continuaba el resto de las comunicaciones. Siempre me encanto entender como funcionaba todo. De hecho me pusieron hasta matricula de honor en una asignatura que se llamaba Sistemas Operativos y me lei el temario el dia/noche anterior al examen xD.

Cuarto: macho no me seas vago, pon en youtube "csgo faceit cheaters" que tienes ejemplos a patadas. Tu me pides que pierda horas sin que me las pagues y encima en mi tiempo libre para hacer un programa y no tienes ni la decencia de copiar y pegar un texto en youtube que te lleva 5 segundos? ;).

Si estas en el anillo 0 puedes cambiar hasta el anticheat entero si te sale de los huevos, por muchas protecciones que tenga y comprobaciones que haga. Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe. Es que me parece increible que si de verdad has desarrollado un servidor mmorpg y hecho ingenieria inversa como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0... te juro que intento entender que es lo que te lleva a esa conclusion pero no lo veo.
Es que deberias saber que de todo lo que se ejecuta en el ordenador del cliente te tienes que fiar 0, si fuese tan sencillo fiarte de lo que te envia el cliente te aseguro que no se gastaba tanto dinero en mantener servidores dedicados para los juegos en la inmensa mayoria de casos. De lo unico de lo que te puedes fiar es de lo que se ejecuta en el servidor ;). De hecho esa es la base de practicamente todo MMORPG, incluso a dia de hoy.

No voy a contestarte a todo ya que estoy cansado y vuelve a quedar demostrado todo de nuevo... Quinta excusa, sobre lo de crear el cheat que se salte el sistema de FaceIT y esea... primero me has dicho que no ibas a crear un cheto para mi por la cara y gratis, luego has dicho que si te pillo hace 5 años... Vale venga... ya ha quedado claro, no te voy a decir mas sobre eso...
Peeeeeeeeeeeero ya que dices
Te he dicho que si me pillas 5 años antes de empezar a trabajar cuando era un puto cafre, a lo mejor hasta aceptaria perder el tiempo en eso y sin cobrarte dinero por ello, a dia de hoy ni de coña voy a hacer semejante estupidez xD. Yo creo que entendistes mal o no se a que narices te refieres.

Yo solo te digo lo que tu dijistes...
no tendria problema a dia de hoy a hacerte un cheto para enseñarte lo facil que es que no te lo detecten

Y como yo ya sabía que iba a pasar... te fuí adelantando lo que ibas a decir en cada post antes de que tu fueras poniendo las excusas [qmparto]
Primero no tienes problemas para hacer un cheto y ahora van apareciendo muchos problemas... no voy a hacer nada gratis para tí... si me pillas hace 5 años lo haría...
Yo también puedo decir muchas cosas sin demostrarlas.... lo que pasa que sería mentir y sacar excusas... y no es mi estilo... si no hacer algo, no digo que puedo hacerlo para luego sacar excusas. Yo si digo que puedo hacer algo lo demuestro ;)

Lo segundo....
como me aseguras me digas que los anticheat son infalibles por el mero hecho de ejecutarse en el anillo 0

puedes decirme donde he dicho yo que el sistema de faceit o esea sea infalible? Me lo puedes indicar en un quote por favor?? Hay alguna falta de comprensión lectora?? Porque hasta ahora revisando el hilo solo he leido esa palabra en tus comentarios hasta 3 veces y es por estás cosas que hay que explicartelo todo lento y despacito... [facepalm]

Otra cosilla...
Que vamos el anticheat se ejecuta bajo tu sistema, tienes acceso a todo lo que hace y como lo hace y tambien tienes acceso a todo lo que envia y recibe

Eso te funcionara en una parte donde sea client-side... si cambias el anti-cheat estas cambiando el hash así que no, eso no te va a servir ya que el server-side no se lo va a tragar... al igual que en un mmorpg... como bien dices... parece mentira que hayas trabajado en un MMORPG...

Sabes que los videos de youtube de cheats en faceit son el 99% falsos? Y es facil demostrable por el tickrate o la publicidad que no lleva integrada y es propietaria?

Repito que te cuesta entenderlo... el cliente de FaceIT o ESEA sirve para cuando NO estás en un torneo delante del público y con un arbitro detrás tuya, estando delante con arbitros no tiene mucho sentido para el WH, pero sí para el AIM ya que hay cosas que el ojo humano puede pasar desapercibidas...

Lo de las replays.... como se nota que no entiendes del juego y que eso muchas veces no sirve de mucho

El cliente de FaceIT y ESEA tiene "privilegios" para escanear y revisar la memoria aparte de todo el hardware en busca de offsets usadas en CS y te va a pillar el 99% de veces, Steam tiene un VAC que pillla un 1% de casos, ya que la mayoría de baneos vienen por el overwatch. Esto último te lo puede decir cualquiera que juegue a CS y tenga un mínimo de horas.

Un último ejemplo antes de irme... mira este video (ya que yo SI te pongo pruebas): https://www.youtube.com/watch?v=AVr5_zznnNI
Me quedo con el comentario de.... "esto lo ha pillado el cliente de ESEA, no el de VAC" mientras se descojona mientras dice VAC [qmparto]

Y ya por último... siempre que me dices que te demuestre cosas yo te pongo enlaces... cuando te lo digo yo me dices que no tienes porque buscar nada... que lo busque yo... que no sea vago... Cuando TÚ has sido el primero en decir... Lo de los anticheat es la escusa perfecta y la gente se lo cree.

Pues pasame una lista de chetos que valgan en FaceIT y yo te paso una que se la trague el VAC vale? Defiende tu teoría!!!! [qmparto]

Me enlazas un video que he mirado por encima y en el dicen claramente que habia el tio que supuestamente han pillado dice que es el primero de muchos... que solo le han pillado a el pero que hay muchos y que han ganado mucho dinero con el... con ese video lo que demuestras es que hasta cheats genericos (que se los venden a muchos) y por lo tanto es facil para los desarrolladores del anticheat de hacerse con el y tomar medidas para detectarlo en futuras actualizaciones han sido detectados... vamos que funciona exactamente igual que los antivirus, hasta que tienen acceso al virus y lo analizan no empiezan a detectarlo... lo que te llevo diciendo desde el principio.

Que si, que todos los videos de youtube donde se muestran chetos de faceit son falsos... y luego hablas de escusas, con dos narices. Si quieres pierdo el tiempo en analizar los ejecutables de faceit y hacerte un POC que los evite y luego te pongo un video y me dices que mi video tambien es fake (como estas haciendo con los que hay ya en youtube a dia de hoy), y seguiras erre que erre con lo mismo ;).

Ya que tanto controlas si no te importa porque no me pegas un codigo fuente tuyo de algun programa que hayas hecho relaccionado con la ediccion de memoria o tu usuario del repositorio donde aparezcan los commits de ese servidor de MMORPG donde has trabajado. Tengo curiosidad por ver como controlas del tema ;).

Y por cierto, explicame porque es imposible y que impide modificar un programa y enviar hashes validos al servidor del anticheat? al final todo se ejecuta en el ordenador del cliente ;).

Sigues pidiéndome pruebas cuando tú no aportas ni una. Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar, aunque para alguien que no tiene ni idea de lo que habla todos los vídeos son verdaderos.... Aquí reside la cuestión de lo que hablo... Que desde la ignorancia es muy fácil hablar.

No vas a hacer un proof of concept porque no tienes ni idea de hacerlo como has demostrado muchas veces ...

Me pides pruebas de un coomit privado? Tenemos todo el desarrollo en un gitlab privado por algo ya que la competencia es bastante severa.

Pero te pongo algunos de los arreglos pertinentes campeón....
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}

Bueno campeón creo que es la decimoquinta vez que te doy pruebas y me parece que tú no has mostrado ni una de tu "proof of concept"

En cada post vas quedando mejor.... Pido pruebas pero no puedo dar ni una [qmparto] [qmparto]

Venga que quiero ver en acción ese "proof of concept" jajjajajajajjahora cambias la excusa a que no lo haces porque voy a decir que el video es falso [qmparto] [qmparto]
Macho cada post cambias la excusa aleatoriamente...
Me imagino que estarás usando la sentencia var o la condición if no? [qmparto] [qmparto] [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:No voy a contestarte a todo ya que estoy cansado y vuelve a quedar demostrado todo de nuevo... Quinta excusa, sobre lo de crear el cheat que se salte el sistema de FaceIT y esea... primero me has dicho que no ibas a crear un cheto para mi por la cara y gratis, luego has dicho que si te pillo hace 5 años... Vale venga... ya ha quedado claro, no te voy a decir mas sobre eso...
Peeeeeeeeeeeero ya que dices

Yo solo te digo lo que tu dijistes...

Y como yo ya sabía que iba a pasar... te fuí adelantando lo que ibas a decir en cada post antes de que tu fueras poniendo las excusas [qmparto]
Primero no tienes problemas para hacer un cheto y ahora van apareciendo muchos problemas... no voy a hacer nada gratis para tí... si me pillas hace 5 años lo haría...
Yo también puedo decir muchas cosas sin demostrarlas.... lo que pasa que sería mentir y sacar excusas... y no es mi estilo... si no hacer algo, no digo que puedo hacerlo para luego sacar excusas. Yo si digo que puedo hacer algo lo demuestro ;)

Lo segundo....

puedes decirme donde he dicho yo que el sistema de faceit o esea sea infalible? Me lo puedes indicar en un quote por favor?? Hay alguna falta de comprensión lectora?? Porque hasta ahora revisando el hilo solo he leido esa palabra en tus comentarios hasta 3 veces y es por estás cosas que hay que explicartelo todo lento y despacito... [facepalm]

Otra cosilla...

Eso te funcionara en una parte donde sea client-side... si cambias el anti-cheat estas cambiando el hash así que no, eso no te va a servir ya que el server-side no se lo va a tragar... al igual que en un mmorpg... como bien dices... parece mentira que hayas trabajado en un MMORPG...

Sabes que los videos de youtube de cheats en faceit son el 99% falsos? Y es facil demostrable por el tickrate o la publicidad que no lleva integrada y es propietaria?

Repito que te cuesta entenderlo... el cliente de FaceIT o ESEA sirve para cuando NO estás en un torneo delante del público y con un arbitro detrás tuya, estando delante con arbitros no tiene mucho sentido para el WH, pero sí para el AIM ya que hay cosas que el ojo humano puede pasar desapercibidas...

Lo de las replays.... como se nota que no entiendes del juego y que eso muchas veces no sirve de mucho

El cliente de FaceIT y ESEA tiene "privilegios" para escanear y revisar la memoria aparte de todo el hardware en busca de offsets usadas en CS y te va a pillar el 99% de veces, Steam tiene un VAC que pillla un 1% de casos, ya que la mayoría de baneos vienen por el overwatch. Esto último te lo puede decir cualquiera que juegue a CS y tenga un mínimo de horas.

Un último ejemplo antes de irme... mira este video (ya que yo SI te pongo pruebas): https://www.youtube.com/watch?v=AVr5_zznnNI
Me quedo con el comentario de.... "esto lo ha pillado el cliente de ESEA, no el de VAC" mientras se descojona mientras dice VAC [qmparto]

Y ya por último... siempre que me dices que te demuestre cosas yo te pongo enlaces... cuando te lo digo yo me dices que no tienes porque buscar nada... que lo busque yo... que no sea vago... Cuando TÚ has sido el primero en decir... Lo de los anticheat es la escusa perfecta y la gente se lo cree.

Pues pasame una lista de chetos que valgan en FaceIT y yo te paso una que se la trague el VAC vale? Defiende tu teoría!!!! [qmparto]

Me enlazas un video que he mirado por encima y en el dicen claramente que habia el tio que supuestamente han pillado dice que es el primero de muchos... que solo le han pillado a el pero que hay muchos y que han ganado mucho dinero con el... con ese video lo que demuestras es que hasta cheats genericos (que se los venden a muchos) y por lo tanto es facil para los desarrolladores del anticheat de hacerse con el y tomar medidas para detectarlo en futuras actualizaciones han sido detectados... vamos que funciona exactamente igual que los antivirus, hasta que tienen acceso al virus y lo analizan no empiezan a detectarlo... lo que te llevo diciendo desde el principio.

Que si, que todos los videos de youtube donde se muestran chetos de faceit son falsos... y luego hablas de escusas, con dos narices. Si quieres pierdo el tiempo en analizar los ejecutables de faceit y hacerte un POC que los evite y luego te pongo un video y me dices que mi video tambien es fake (como estas haciendo con los que hay ya en youtube a dia de hoy), y seguiras erre que erre con lo mismo ;).

Ya que tanto controlas si no te importa porque no me pegas un codigo fuente tuyo de algun programa que hayas hecho relaccionado con la ediccion de memoria o tu usuario del repositorio donde aparezcan los commits de ese servidor de MMORPG donde has trabajado. Tengo curiosidad por ver como controlas del tema ;).

Y por cierto, explicame porque es imposible y que impide modificar un programa y enviar hashes validos al servidor del anticheat? al final todo se ejecuta en el ordenador del cliente ;).

Sigues pidiéndome pruebas cuando tú no aportas ni una. Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar, aunque para alguien que no tiene ni idea de lo que habla todos los vídeos son verdaderos.... Aquí reside la cuestión de lo que hablo... Que desde la ignorancia es muy fácil hablar.

No vas a hacer un proof of concept porque no tienes ni idea de hacerlo como has demostrado muchas veces ...

Me pides pruebas de un coomit privado? Tenemos todo el desarrollo en un gitlab privado por algo ya que la competencia es bastante severa.

Pero te pongo algunos de los arreglos pertinentes campeón....
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}

Bueno campeón creo que es la decimoquinta vez que te doy pruebas y me parece que tú no has mostrado ni una de tu "proof of concept"

En cada post vas quedando mejor.... Pido pruebas pero no puedo dar ni una [qmparto] [qmparto]

Venga que quiero ver en acción ese "proof of concept" jajjajajajajjahora cambias la excusa a que no lo haces porque voy a decir que el video es falso [qmparto] [qmparto]
Macho cada post cambias la excusa aleatoriamente...
Me imagino que estarás usando la sentencia var o la condición if no? [qmparto] [qmparto] [qmparto]

A ver que me entere, primero me dices que los replays no sirven de nada para cazar chetos, pero luego me dices que tu me puedes identificar que los multiples videos que aparecen en youtube de chetos en faceit como falsos... ok...

No has aportado una sola prueba de nada, basicamente todo lo que dices es "es asi porque yo lo digo y punto" pero me pides que pierda tiempo de gratis para demostrarte noseque (porque no te voy a demostrar absolutamente nada a menos que lo pudieses usar tu mismo, porque si no te fias ni de ningun video... supongo que te valdrian unas fotos no? xD).

Te pido el codigo fuente de algun programa sencillo que hayas hecho relaccionado con lo que hablas o sencillamente ver los commits en un repo, pero me pegas un trocito de codigo fuente sin mas que no demuestra absolutamente nada, ni que tenga nada que ver con lo que hablamos xD. Que si curiosamente el repo es privado porque hay mucha competencia... solo tienes que hacerlo mejor que el resto y listo macho ;), que nadie te va a fusilar el codigo y enriquecerse a tu costa (y si lo hacen pues se les pone una demanda, que si hay dinero de por medio te digo yo que cualquier abogado se anima a porcentaje :P). Aunque legalmente tampoco puedes sacar dinero de ese proyecto si utilizais el cliente oficial xD. Yo al menos no le veo ningun sentido a hacer un servidor alternativo de un MMORPG y de codigo cerrado, en fin XD.

Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;).
jimi escribió:
djlogan83 escribió:
jimi escribió:Me enlazas un video que he mirado por encima y en el dicen claramente que habia el tio que supuestamente han pillado dice que es el primero de muchos... que solo le han pillado a el pero que hay muchos y que han ganado mucho dinero con el... con ese video lo que demuestras es que hasta cheats genericos (que se los venden a muchos) y por lo tanto es facil para los desarrolladores del anticheat de hacerse con el y tomar medidas para detectarlo en futuras actualizaciones han sido detectados... vamos que funciona exactamente igual que los antivirus, hasta que tienen acceso al virus y lo analizan no empiezan a detectarlo... lo que te llevo diciendo desde el principio.

Que si, que todos los videos de youtube donde se muestran chetos de faceit son falsos... y luego hablas de escusas, con dos narices. Si quieres pierdo el tiempo en analizar los ejecutables de faceit y hacerte un POC que los evite y luego te pongo un video y me dices que mi video tambien es fake (como estas haciendo con los que hay ya en youtube a dia de hoy), y seguiras erre que erre con lo mismo ;).

Ya que tanto controlas si no te importa porque no me pegas un codigo fuente tuyo de algun programa que hayas hecho relaccionado con la ediccion de memoria o tu usuario del repositorio donde aparezcan los commits de ese servidor de MMORPG donde has trabajado. Tengo curiosidad por ver como controlas del tema ;).

Y por cierto, explicame porque es imposible y que impide modificar un programa y enviar hashes validos al servidor del anticheat? al final todo se ejecuta en el ordenador del cliente ;).

Sigues pidiéndome pruebas cuando tú no aportas ni una. Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar, aunque para alguien que no tiene ni idea de lo que habla todos los vídeos son verdaderos.... Aquí reside la cuestión de lo que hablo... Que desde la ignorancia es muy fácil hablar.

No vas a hacer un proof of concept porque no tienes ni idea de hacerlo como has demostrado muchas veces ...

Me pides pruebas de un coomit privado? Tenemos todo el desarrollo en un gitlab privado por algo ya que la competencia es bastante severa.

Pero te pongo algunos de los arreglos pertinentes campeón....
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}

Bueno campeón creo que es la decimoquinta vez que te doy pruebas y me parece que tú no has mostrado ni una de tu "proof of concept"

En cada post vas quedando mejor.... Pido pruebas pero no puedo dar ni una [qmparto] [qmparto]

Venga que quiero ver en acción ese "proof of concept" jajjajajajajjahora cambias la excusa a que no lo haces porque voy a decir que el video es falso [qmparto] [qmparto]
Macho cada post cambias la excusa aleatoriamente...
Me imagino que estarás usando la sentencia var o la condición if no? [qmparto] [qmparto] [qmparto]

A ver que me entere, primero me dices que los replays no sirven de nada para cazar chetos, pero luego me dices que tu me puedes identificar que los multiples videos que aparecen en youtube de chetos en faceit como falsos... ok...

No has aportado una sola prueba de nada, basicamente todo lo que dices es "es asi porque yo lo digo y punto" pero me pides que pierda tiempo de gratis para demostrarte noseque (porque no te voy a demostrar absolutamente nada a menos que lo pudieses usar tu mismo, porque si no te fias ni de ningun video... supongo que te valdrian unas fotos no? xD).

Te pido el codigo fuente de algun programa sencillo que hayas hecho relaccionado con lo que hablas o sencillamente ver los commits en un repo, pero me pegas un trocito de codigo fuente sin mas que no demuestra absolutamente nada, ni que tenga nada que ver con lo que hablamos xD. Que si curiosamente el repo es privado porque hay mucha competencia... solo tienes que hacerlo mejor que el resto y listo macho ;), que nadie te va a fusilar el codigo y enriquecerse a tu costa (y si lo hacen pues se les pone una demanda, que si hay dinero de por medio te digo yo que cualquier abogado se anima a porcentaje :P). Aunque legalmente tampoco puedes sacar dinero de ese proyecto si utilizais el cliente oficial xD. Yo al menos no le veo ningun sentido a hacer un servidor alternativo de un MMORPG y de codigo cerrado, en fin XD.

Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;).

Te he demostrado enlaces, te he demostrado videos.... cosa que tu no has pasado ninguna prueba.... Pero de NADA.

Has ido chuleandote que podrías hacer un cheto que se salte el antiCHEAT de FaceIT pero no lo has demostrado, como siempre no demuestras nada.

Te he puesto el código fuente que hay en nuestro commit, cosa que tu me has pedido.
Todo lo que me pides te lo he demostrado, con videos, con enlaces, o con source....

Que has demostrado tu sobre ese famoso cheto que si quieres puedes hacer que se salte FaceIT? [qmparto] [qmparto] [qmparto]

Por cierto...
jimi escribió:Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;)

djlogan83 escribió:Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar

Empiezo a entender todo... tienes dificultad en la comprensión lectora??? Algún trauma??? Todo bien por casa??

A lo de llorar porque todo el mundo usa cheto... no he sido yo el que ha venido a pregonar que el VAC funciona perfectamente sin ni siquiera saber de lo que habla xDDD.

P.D.: Quieres mas pruebas de que tu VAC es igual de eficaz??? Toma SEIS partidas de Matchmaking entre hoy y ayer
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... y9Yc-9P47M
steam://rungame/730/76561202255233023/+ ... JuwM-HcyMM
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... Gpk4-HfoAL
steam://rungame/730/76561202255233023/+ ... 9CD8-3LPYE

Como ves te mando la partida integra sin editar ni nada, directamente de los oficiales, para que no saques una de tus típicas y habituales excusas. Que pruebas aportas tú para decir que el cliente de FaceIT/ESEA es igual??? Pasame SEIS partidas de FaceIT o ESEA donde se vea eso...

Yo aporto pruebas y no he tenido que irme muy lejos, menos de 24 horas en esas SEIS partidas.... tu que aportas? NADA. Para variar... mucha boca pero pocos hechos xD
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Sigues pidiéndome pruebas cuando tú no aportas ni una. Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar, aunque para alguien que no tiene ni idea de lo que habla todos los vídeos son verdaderos.... Aquí reside la cuestión de lo que hablo... Que desde la ignorancia es muy fácil hablar.

No vas a hacer un proof of concept porque no tienes ni idea de hacerlo como has demostrado muchas veces ...

Me pides pruebas de un coomit privado? Tenemos todo el desarrollo en un gitlab privado por algo ya que la competencia es bastante severa.

Pero te pongo algunos de los arreglos pertinentes campeón....
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}

Bueno campeón creo que es la decimoquinta vez que te doy pruebas y me parece que tú no has mostrado ni una de tu "proof of concept"

En cada post vas quedando mejor.... Pido pruebas pero no puedo dar ni una [qmparto] [qmparto]

Venga que quiero ver en acción ese "proof of concept" jajjajajajajjahora cambias la excusa a que no lo haces porque voy a decir que el video es falso [qmparto] [qmparto]
Macho cada post cambias la excusa aleatoriamente...
Me imagino que estarás usando la sentencia var o la condición if no? [qmparto] [qmparto] [qmparto]

A ver que me entere, primero me dices que los replays no sirven de nada para cazar chetos, pero luego me dices que tu me puedes identificar que los multiples videos que aparecen en youtube de chetos en faceit como falsos... ok...

No has aportado una sola prueba de nada, basicamente todo lo que dices es "es asi porque yo lo digo y punto" pero me pides que pierda tiempo de gratis para demostrarte noseque (porque no te voy a demostrar absolutamente nada a menos que lo pudieses usar tu mismo, porque si no te fias ni de ningun video... supongo que te valdrian unas fotos no? xD).

Te pido el codigo fuente de algun programa sencillo que hayas hecho relaccionado con lo que hablas o sencillamente ver los commits en un repo, pero me pegas un trocito de codigo fuente sin mas que no demuestra absolutamente nada, ni que tenga nada que ver con lo que hablamos xD. Que si curiosamente el repo es privado porque hay mucha competencia... solo tienes que hacerlo mejor que el resto y listo macho ;), que nadie te va a fusilar el codigo y enriquecerse a tu costa (y si lo hacen pues se les pone una demanda, que si hay dinero de por medio te digo yo que cualquier abogado se anima a porcentaje :P). Aunque legalmente tampoco puedes sacar dinero de ese proyecto si utilizais el cliente oficial xD. Yo al menos no le veo ningun sentido a hacer un servidor alternativo de un MMORPG y de codigo cerrado, en fin XD.

Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;).

Te he demostrado enlaces, te he demostrado videos.... cosa que tu no has pasado ninguna prueba.... Pero de NADA.

Has ido chuleandote que podrías hacer un cheto que se salte el antiCHEAT de FaceIT pero no lo has demostrado, como siempre no demuestras nada.

Te he puesto el código fuente que hay en nuestro commit, cosa que tu me has pedido.
Todo lo que me pides te lo he demostrado, con videos, con enlaces, o con source....

Que has demostrado tu sobre ese famoso cheto que si quieres puedes hacer que se salte FaceIT? [qmparto] [qmparto] [qmparto]

Por cierto...
jimi escribió:Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;)

djlogan83 escribió:Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar

Empiezo a entender todo... tienes dificultad en la comprensión lectora??? Algún trauma??? Todo bien por casa??

A lo de llorar porque todo el mundo usa cheto... no he sido yo el que ha venido a pregonar que el VAC funciona perfectamente sin ni siquiera saber de lo que habla xDDD.

P.D.: Quieres mas pruebas de que tu VAC es igual de eficaz??? Toma CINCO partidas de Matchmaking entre hoy y ayer
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... y9Yc-9P47M
steam://rungame/730/76561202255233023/+ ... JuwM-HcyMM
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... Gpk4-HfoAL

Como ves te mando la partida integra sin editar ni nada, directamente de los oficiales, para que no saques una de tus típicas y habituales excusas. Que pruebas aportas tú para decir que el cliente de FaceIT/ESEA es igual??? Pasame CINCO partidas de FaceIT o ESEA donde se vea eso...

Yo aporto pruebas y no he tenido que irme muy lejos, menos de 24 horas en esas CINCO partidas.... tu que aportas? NADA. Para variar... mucha boca pero pocos hechos xD

Quieres que te diga lo que pienso realmente? lo primero que dudo que trabajes de desarrollador, eso para empezar y menos de algo relacionado con lo que pregonas, porque son demasiadas cosas sin sentido una tras otra.

Me puedes explicar porque narices lloras de que no puedes jugar al CSGO debido a que esta plagado de cheaters por todos lados y al mismo tiempo me dices que los multiples ejemplos de gente haciendo trampas en youtube son todos fakes y que en CSGO usando faceit no hay chetos. En serio no te das cuenta de la contradiccion entre esas dos cosas?
Sabes lo que pienso? Que por muchos años que lleves no eres muy bueno al juego y eres de los que se piensa que todo dios usa chetos porque no puede ser que sean mejores que tu.

Vaya personaje :D. Con lo tozudo que eres intentando demostrar que llevas la razon en cosas que no comprendes ni al mas basico nivel jamas vas a ser un buen desarrollador, porque te va ser imposible aprender :/. Y no se si vives en españa pero ya vamos por los 8 millones de parados, eso si que te va a ser competencia cuando trabajes como desarrollador y no el miedo que le tienes de que te copien codigo de un hobby ;).

Ya te digo yo que ni el del valorant, ni el faceit, ni los multiples rootkits que saldran a partir de ahora van a cazar mas que a novatos que se bajan cosas colgadas en foros por ahi, lo mismo que hasta ahora. Vamos, exactamente lo mismo que los antivirus, que solo cogen virus ya conocidos, pero es salir un virus nuevo y ninguno lo detecta xD.
jimi escribió:
djlogan83 escribió:
jimi escribió:A ver que me entere, primero me dices que los replays no sirven de nada para cazar chetos, pero luego me dices que tu me puedes identificar que los multiples videos que aparecen en youtube de chetos en faceit como falsos... ok...

No has aportado una sola prueba de nada, basicamente todo lo que dices es "es asi porque yo lo digo y punto" pero me pides que pierda tiempo de gratis para demostrarte noseque (porque no te voy a demostrar absolutamente nada a menos que lo pudieses usar tu mismo, porque si no te fias ni de ningun video... supongo que te valdrian unas fotos no? xD).

Te pido el codigo fuente de algun programa sencillo que hayas hecho relaccionado con lo que hablas o sencillamente ver los commits en un repo, pero me pegas un trocito de codigo fuente sin mas que no demuestra absolutamente nada, ni que tenga nada que ver con lo que hablamos xD. Que si curiosamente el repo es privado porque hay mucha competencia... solo tienes que hacerlo mejor que el resto y listo macho ;), que nadie te va a fusilar el codigo y enriquecerse a tu costa (y si lo hacen pues se les pone una demanda, que si hay dinero de por medio te digo yo que cualquier abogado se anima a porcentaje :P). Aunque legalmente tampoco puedes sacar dinero de ese proyecto si utilizais el cliente oficial xD. Yo al menos no le veo ningun sentido a hacer un servidor alternativo de un MMORPG y de codigo cerrado, en fin XD.

Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;).

Te he demostrado enlaces, te he demostrado videos.... cosa que tu no has pasado ninguna prueba.... Pero de NADA.

Has ido chuleandote que podrías hacer un cheto que se salte el antiCHEAT de FaceIT pero no lo has demostrado, como siempre no demuestras nada.

Te he puesto el código fuente que hay en nuestro commit, cosa que tu me has pedido.
Todo lo que me pides te lo he demostrado, con videos, con enlaces, o con source....

Que has demostrado tu sobre ese famoso cheto que si quieres puedes hacer que se salte FaceIT? [qmparto] [qmparto] [qmparto]

Por cierto...
jimi escribió:Y si tan bueno es faceit contra los chetos (segun tu pregonas vamos), me pregunto porque narices no lo usas en vez de poner un post en este mismo foro llorando de que todo dios hace trampas y que no te fias de nadie (salvo por supuesto foreros delotrolado que te van a asegurar que no van usar chetos contigo XD). Es que te contradices tu solo todo el rato ;)

djlogan83 escribió:Si, yo sé identificarte videos falsos porque yo juego en faceit y es muy fácil de demostrar

Empiezo a entender todo... tienes dificultad en la comprensión lectora??? Algún trauma??? Todo bien por casa??

A lo de llorar porque todo el mundo usa cheto... no he sido yo el que ha venido a pregonar que el VAC funciona perfectamente sin ni siquiera saber de lo que habla xDDD.

P.D.: Quieres mas pruebas de que tu VAC es igual de eficaz??? Toma CINCO partidas de Matchmaking entre hoy y ayer
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... y9Yc-9P47M
steam://rungame/730/76561202255233023/+ ... JuwM-HcyMM
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... Gpk4-HfoAL

Como ves te mando la partida integra sin editar ni nada, directamente de los oficiales, para que no saques una de tus típicas y habituales excusas. Que pruebas aportas tú para decir que el cliente de FaceIT/ESEA es igual??? Pasame CINCO partidas de FaceIT o ESEA donde se vea eso...

Yo aporto pruebas y no he tenido que irme muy lejos, menos de 24 horas en esas CINCO partidas.... tu que aportas? NADA. Para variar... mucha boca pero pocos hechos xD

Quieres que te diga lo que pienso realmente? lo primero que dudo que trabajes de desarrollador, eso para empezar y menos de algo relacionado con lo que pregonas, porque son demasiadas cosas sin sentido una tras otra.

Me puedes explicar porque narices lloras de que no puedes jugar al CSGO debido a que esta plagado de cheaters por todos lados y al mismo tiempo me dices que los multiples ejemplos de gente haciendo trampas en youtube son todos fakes y que en CSGO usando faceit no hay chetos. En serio no te das cuenta de la contradiccion entre esas dos cosas?
Sabes lo que pienso? Que por muchos años que lleves no eres muy bueno al juego y eres de los que se piensa que todo dios usa chetos porque no puede ser que sean mejores que tu.

Vaya personaje :D. Con lo tozudo que eres intentando demostrar que llevas la razon en cosas que no comprendes ni al mas basico nivel jamas vas a ser un buen desarrollador, porque te va ser imposible aprender :/. Y no se si vives en españa pero ya vamos por los 8 millones de parados, eso si que te va a ser competencia cuando trabajes como desarrollador y no el miedo que le tienes de que te copien codigo de un hobby ;).

Ya te digo yo que ni el del valorant, ni el faceit, ni los multiples rootkits que saldran a partir de ahora van a cazar mas que a novatos que se bajan cosas colgadas en foros por ahi, lo mismo que hasta ahora. Vamos, exactamente lo mismo que los antivirus, que solo cogen virus ya conocidos, pero es salir un virus nuevo y ninguno lo detecta xD.

Espera que va a dudar de mí el que todavía no ha presentado su "proof of concept" XDDDDDDDDDDDDDDDDDDD

Atento que dice que yo lloro de que no se puede jugar al counter.... cítame donde he dicho yo eso jajajajjajajajajaajajajajajajaj

Venga hasta luego mari carmen. Ya has demostrado ser un troll y que de dev tienes lo que yo de cura, puedes volver a la cueva a "programar" xDDDD.
8 millones de parados???? No llegan ni a 4....
https://www.lamoncloa.gob.es/serviciosd ... -paro.aspx
https://www.epdata.es/datos/paro-regist ... espana/106

Y gracias a dios, me va bien desarrollando en node.js y en vue.js pero gracias por preocuparte [qmparto]

Como siempre, aquí estoy demostrandote con enlaces, lo troll que eres y que hablas como siempre sin saber. Como programes igual que inventas los datos... puede ser un cachondeo a la hora de compilar xDDDD

P.D.: Tu como mucho has programado un script de IRC en JS viendo algún tutorial para noobs xD

Algún día vas a demostrar algo? O vas a seguir alardeando de nada?
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Te he demostrado enlaces, te he demostrado videos.... cosa que tu no has pasado ninguna prueba.... Pero de NADA.

Has ido chuleandote que podrías hacer un cheto que se salte el antiCHEAT de FaceIT pero no lo has demostrado, como siempre no demuestras nada.

Te he puesto el código fuente que hay en nuestro commit, cosa que tu me has pedido.
Todo lo que me pides te lo he demostrado, con videos, con enlaces, o con source....

Que has demostrado tu sobre ese famoso cheto que si quieres puedes hacer que se salte FaceIT? [qmparto] [qmparto] [qmparto]

Por cierto...


Empiezo a entender todo... tienes dificultad en la comprensión lectora??? Algún trauma??? Todo bien por casa??

A lo de llorar porque todo el mundo usa cheto... no he sido yo el que ha venido a pregonar que el VAC funciona perfectamente sin ni siquiera saber de lo que habla xDDD.

P.D.: Quieres mas pruebas de que tu VAC es igual de eficaz??? Toma CINCO partidas de Matchmaking entre hoy y ayer
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... y9Yc-9P47M
steam://rungame/730/76561202255233023/+ ... JuwM-HcyMM
steam://rungame/730/76561202255233023/+ ... S5Ft-NDpcG
steam://rungame/730/76561202255233023/+ ... Gpk4-HfoAL

Como ves te mando la partida integra sin editar ni nada, directamente de los oficiales, para que no saques una de tus típicas y habituales excusas. Que pruebas aportas tú para decir que el cliente de FaceIT/ESEA es igual??? Pasame CINCO partidas de FaceIT o ESEA donde se vea eso...

Yo aporto pruebas y no he tenido que irme muy lejos, menos de 24 horas en esas CINCO partidas.... tu que aportas? NADA. Para variar... mucha boca pero pocos hechos xD

Quieres que te diga lo que pienso realmente? lo primero que dudo que trabajes de desarrollador, eso para empezar y menos de algo relacionado con lo que pregonas, porque son demasiadas cosas sin sentido una tras otra.

Me puedes explicar porque narices lloras de que no puedes jugar al CSGO debido a que esta plagado de cheaters por todos lados y al mismo tiempo me dices que los multiples ejemplos de gente haciendo trampas en youtube son todos fakes y que en CSGO usando faceit no hay chetos. En serio no te das cuenta de la contradiccion entre esas dos cosas?
Sabes lo que pienso? Que por muchos años que lleves no eres muy bueno al juego y eres de los que se piensa que todo dios usa chetos porque no puede ser que sean mejores que tu.

Vaya personaje :D. Con lo tozudo que eres intentando demostrar que llevas la razon en cosas que no comprendes ni al mas basico nivel jamas vas a ser un buen desarrollador, porque te va ser imposible aprender :/. Y no se si vives en españa pero ya vamos por los 8 millones de parados, eso si que te va a ser competencia cuando trabajes como desarrollador y no el miedo que le tienes de que te copien codigo de un hobby ;).

Ya te digo yo que ni el del valorant, ni el faceit, ni los multiples rootkits que saldran a partir de ahora van a cazar mas que a novatos que se bajan cosas colgadas en foros por ahi, lo mismo que hasta ahora. Vamos, exactamente lo mismo que los antivirus, que solo cogen virus ya conocidos, pero es salir un virus nuevo y ninguno lo detecta xD.

Espera que va a dudar de mí el que todavía no ha presentado su "proof of concept" XDDDDDDDDDDDDDDDDDDD

Atento que dice que yo lloro de que no se peude jugar al counter.... cítame donde he dicho yo eso jajajajjajajajajaajajajajajajaj

Venga hasta luego mari carmen. Ya has demostrado ser un troll, puedes volver a la cueva a "programar" xDDDD.

P.D.: Tu como mucho has programado un script de IRC en JS viendo algún tutorial para noobs xD

Otro consejo que te voy a dar tambien gratis, por si un dia quieres trabajar de desarrollador: No fusiles codigo con GPL y le quites los creditos para intentar pasarlo como tuyo... porque lo mas probable es que te terminen pillando y te metas en un buen lio ;).

Busca las diferencias:
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}


/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*
* An example of a spell script file
* to bind a script to spell you have to add entry for it in `spell_script_names`
* where `spell_id` is id of the spell to bind
* and `ScriptName` is the name of a script assigned on registration
*/

#include "ScriptMgr.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "Player.h"

enum Spells
{
    SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
    public:
        spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

        class spell_ex_5581SpellScript : public SpellScript
        {
            // initialize script, this macro does compile time check for type of the function - prevents possible issues
            // if you have assigned wrong type of function to a hook you'll receive type conversion error during build
            // this line is required, otherwise you'll get XXXHandlerFunction - identifier not found errors
            PrepareSpellScript(spell_ex_5581SpellScript);

            std::string localVariable;
            char* localVariable2;

            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid 70522 exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called just after script is added to spell
            // we initialize local variables if needed
            bool Load()
            {
                localVariable = "we're using local variable";
                localVariable2 = new char();
                return true;
                // return false - script will be immediately removed from the spell
                // for example - we don't want this script to be executed on a creature
                // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
                //     return false;
            }

            // function called just before script delete
            // we free allocated memory
            void Unload()
            {
                delete localVariable2;
            }

            void HandleBeforeCast()
            {
                // this hook is executed before anything about casting the spell is done
                // after this hook is executed all the machinery starts
                sLog->outInfo(LOG_FILTER_GENERAL, "Caster just finished preparing the spell (cast bar has expired)");
            }

            void HandleOnCast()
            {
                // cast is validated and spell targets are selected at this moment
                // this is a last place when the spell can be safely interrupted
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
            }

            void HandleAfterCast()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "All immediate Actions for the spell are finished now");
                // this is a safe for triggering additional effects for a spell without interfering
                // with visuals or with other effects of the spell
                //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            SpellCastResult CheckRequirement()
            {
                // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
                // in this case we're disallowing to select non-player as a target of the spell
                //if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
                    //return SPELL_FAILED_BAD_TARGETS;
                return SPELL_CAST_OK;
            }


            void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
            }

            void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
            {
                uint64 targetGUID = 0;
                if (Unit* unitTarget = GetHitUnit())
                    targetGUID = unitTarget->GetGUID();
                // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
            }

            void HandleDummyHit(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
            }

            void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SPELL_EFFECT_DUMMY is hits it's target!");
                // make caster cast a spell on a unit target of effect
                if (Unit* target = GetHitUnit())
                    GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleBeforeHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to hit target!");
            }

            void HandleOnHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just hit target!");
            }

            void HandleAfterHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just finished hitting target!");
            }

            void FilterTargets(std::list<Unit*>& /*targetList*/)
            {
                // usually you want this call for Area Target spells
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to add targets from targetList to final targets!");
            }

            // register functions used in spell script - names of these functions do not matter
            void Register()
            {
                // we're registering our functions here
                BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
                OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
                AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
                OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
                // function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
                OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
                OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell hits it's destination, independant from targets selected for spell, just before default effect 0 hit handler
                OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when unit is hit by spell, just before default effect 0 hit target handler
                OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
                // this will make HandleDummy function to be called on first != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
                // this will make HandleDummy function to be called on all != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
                // bind handler to BeforeHit event of the spell
                BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
                // bind handler to OnHit event of the spell
                OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
                // bind handler to AfterHit event of the spell
                AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
                // bind handler to OnUnitTargetSelect event of the spell
                //OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
            }
        };

        // function which creates SpellScript
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_5581SpellScript();
        }
};

class spell_ex_66244 : public SpellScriptLoader
{
    public:
        spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

        class spell_ex_66244AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_66244AuraScript);
            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called in aura constructor
            // we initialize local variables if needed
            bool Load()
            {
                // do not load script if aura is casted by player or caster not avalible
                if (Unit* caster = GetCaster())
                    if (caster->GetTypeId() == TYPEID_PLAYER)
                        return true;
                return false;
            }


            void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be applied on target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }
            void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be removed from target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }

            void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been applied on target!");
                Unit* target = GetTarget();
                // cast spell on target on aura apply
                target->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been just removed from target!");
                Unit* target = GetTarget();
                Unit* caster = GetCaster();
                // caster may be not avalible (logged out for example)
                if (!caster)
                    return;
                // cast spell on caster on aura remove
                target->CastSpell(caster, SPELL_TRIGGERED, true);
            }

            void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is does a tick on target!");
                Unit* target = GetTarget();
                // aura targets damage self on tick
                target->DealDamage(target, 100);
            }

            void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is now updated!");
                // we're doubling aura amount every tick
                aurEff->ChangeAmount(aurEff->GetAmount() * 2);
            }

            void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Amount of Aura Effect is being calculated now!");
                // we're setting amount to 100
                amount = 100;
                // amount will be never recalculated due to applying passive aura
                canBeRecalculated = false;
            }

            void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Periodic data of Aura Effect is being calculated now!");
                // we're setting aura to be periodic and tick every 10 seconds
                isPeriodic = true;
                amplitude = 2 * IN_MILLISECONDS;
            }

            void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SpellMod data of Aura Effect is being calculated now!");
                // we don't want spellmod for example
                if (spellMod)
                {
                    delete spellMod;
                    spellMod = NULL;
                }
                /*
                // alternative: we want spellmod for spell which doesn't have it
                if (!spellMod)
                {
                    spellMod = new SpellModifier(GetAura());
                    spellMod->op = SPELLMOD_DOT;
                    spellMod->type = SPELLMOD_PCT;
                    spellMod->spellId = GetId();
                    spellMod->mask[1] = 0x00002000;
                }
                */
            }

            // function registering
            void Register()
            {
                OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                // AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - makes handler to be called when aura is reapplied on target
                AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
                AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
                /*OnApply += AuraEffectApplyFn();
                OnRemove += AuraEffectRemoveFn();
                DoCheckAreaTarget += AuraCheckAreaTargetFn();*/
            }
            /*
            void OnApply()
            {
            }
            void OnRemove()
            {
            }
            bool DoCheckAreaTarget(Unit* proposedTarget)
            {
            }*/
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_66244AuraScript();
        }
};

// example usage of OnEffectManaShield and AfterEffectManaShield hooks
// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb

// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks
class spell_ex_absorb_aura : public SpellScriptLoader
{
    public:
        spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

        class spell_ex_absorb_auraAuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_absorb_auraAuraScript);

            void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura is now absorbing damage done to us!");
                // absorb whole damage done to us
                absorbAmount = dmgInfo.GetDamage();
            }

            void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura has absorbed %u damage!", absorbAmount);
            }

            // function registering
            void Register()
            {
                OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
                AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_absorb_auraAuraScript();
        }
};

class spell_ex_463 : public SpellScriptLoader
{
    public:
        spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

        class spell_ex_463AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_463AuraScript);

            bool CheckAreaTarget(Unit* target)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Area aura checks if unit is a valid target for it!");
                // in our script we allow only players to be affected
                return target->GetTypeId() == TYPEID_PLAYER;
            }
            void Register()
            {
                DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_463AuraScript();
        }
};

// this function has to be added to function set in ScriptLoader.cpp
void AddSC_example_spell_scripts()
{
    new spell_ex_5581;
    new spell_ex_66244;
    new spell_ex_absorb_aura;
    new spell_ex_463;
}

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_ex_SpellScript);
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
            //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
            void Register()
            {
            }
        };
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_SpellScript();
        }
};
*/

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex)
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectApply += AuraEffectApplyFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectRemove += AuraEffectRemoveFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff) //OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect* aurEff) //OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            void Register()
            {
            }
        };
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_AuraScript();
        }
};
*/
jimi escribió:
djlogan83 escribió:
jimi escribió:Quieres que te diga lo que pienso realmente? lo primero que dudo que trabajes de desarrollador, eso para empezar y menos de algo relacionado con lo que pregonas, porque son demasiadas cosas sin sentido una tras otra.

Me puedes explicar porque narices lloras de que no puedes jugar al CSGO debido a que esta plagado de cheaters por todos lados y al mismo tiempo me dices que los multiples ejemplos de gente haciendo trampas en youtube son todos fakes y que en CSGO usando faceit no hay chetos. En serio no te das cuenta de la contradiccion entre esas dos cosas?
Sabes lo que pienso? Que por muchos años que lleves no eres muy bueno al juego y eres de los que se piensa que todo dios usa chetos porque no puede ser que sean mejores que tu.

Vaya personaje :D. Con lo tozudo que eres intentando demostrar que llevas la razon en cosas que no comprendes ni al mas basico nivel jamas vas a ser un buen desarrollador, porque te va ser imposible aprender :/. Y no se si vives en españa pero ya vamos por los 8 millones de parados, eso si que te va a ser competencia cuando trabajes como desarrollador y no el miedo que le tienes de que te copien codigo de un hobby ;).

Ya te digo yo que ni el del valorant, ni el faceit, ni los multiples rootkits que saldran a partir de ahora van a cazar mas que a novatos que se bajan cosas colgadas en foros por ahi, lo mismo que hasta ahora. Vamos, exactamente lo mismo que los antivirus, que solo cogen virus ya conocidos, pero es salir un virus nuevo y ninguno lo detecta xD.

Espera que va a dudar de mí el que todavía no ha presentado su "proof of concept" XDDDDDDDDDDDDDDDDDDD

Atento que dice que yo lloro de que no se peude jugar al counter.... cítame donde he dicho yo eso jajajajjajajajajaajajajajajajaj

Venga hasta luego mari carmen. Ya has demostrado ser un troll, puedes volver a la cueva a "programar" xDDDD.

P.D.: Tu como mucho has programado un script de IRC en JS viendo algún tutorial para noobs xD

Otro consejo que te voy a dar tambien gratis, por si un dia quieres trabajar de desarrollador: No fusiles codigo con GPL y le quites los creditos para intentar pasarlo como tuyo... porque lo mas probable es que te terminen pillando y te metas en un buen lio ;).

Busca las diferencias:
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}


/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*
* An example of a spell script file
* to bind a script to spell you have to add entry for it in `spell_script_names`
* where `spell_id` is id of the spell to bind
* and `ScriptName` is the name of a script assigned on registration
*/

#include "ScriptMgr.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "Player.h"

enum Spells
{
    SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
    public:
        spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

        class spell_ex_5581SpellScript : public SpellScript
        {
            // initialize script, this macro does compile time check for type of the function - prevents possible issues
            // if you have assigned wrong type of function to a hook you'll receive type conversion error during build
            // this line is required, otherwise you'll get XXXHandlerFunction - identifier not found errors
            PrepareSpellScript(spell_ex_5581SpellScript);

            std::string localVariable;
            char* localVariable2;

            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid 70522 exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called just after script is added to spell
            // we initialize local variables if needed
            bool Load()
            {
                localVariable = "we're using local variable";
                localVariable2 = new char();
                return true;
                // return false - script will be immediately removed from the spell
                // for example - we don't want this script to be executed on a creature
                // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
                //     return false;
            }

            // function called just before script delete
            // we free allocated memory
            void Unload()
            {
                delete localVariable2;
            }

            void HandleBeforeCast()
            {
                // this hook is executed before anything about casting the spell is done
                // after this hook is executed all the machinery starts
                sLog->outInfo(LOG_FILTER_GENERAL, "Caster just finished preparing the spell (cast bar has expired)");
            }

            void HandleOnCast()
            {
                // cast is validated and spell targets are selected at this moment
                // this is a last place when the spell can be safely interrupted
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
            }

            void HandleAfterCast()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "All immediate Actions for the spell are finished now");
                // this is a safe for triggering additional effects for a spell without interfering
                // with visuals or with other effects of the spell
                //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            SpellCastResult CheckRequirement()
            {
                // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
                // in this case we're disallowing to select non-player as a target of the spell
                //if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
                    //return SPELL_FAILED_BAD_TARGETS;
                return SPELL_CAST_OK;
            }


            void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
            }

            void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
            {
                uint64 targetGUID = 0;
                if (Unit* unitTarget = GetHitUnit())
                    targetGUID = unitTarget->GetGUID();
                // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
            }

            void HandleDummyHit(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
            }

            void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SPELL_EFFECT_DUMMY is hits it's target!");
                // make caster cast a spell on a unit target of effect
                if (Unit* target = GetHitUnit())
                    GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleBeforeHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to hit target!");
            }

            void HandleOnHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just hit target!");
            }

            void HandleAfterHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just finished hitting target!");
            }

            void FilterTargets(std::list<Unit*>& /*targetList*/)
            {
                // usually you want this call for Area Target spells
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to add targets from targetList to final targets!");
            }

            // register functions used in spell script - names of these functions do not matter
            void Register()
            {
                // we're registering our functions here
                BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
                OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
                AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
                OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
                // function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
                OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
                OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell hits it's destination, independant from targets selected for spell, just before default effect 0 hit handler
                OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when unit is hit by spell, just before default effect 0 hit target handler
                OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
                // this will make HandleDummy function to be called on first != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
                // this will make HandleDummy function to be called on all != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
                // bind handler to BeforeHit event of the spell
                BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
                // bind handler to OnHit event of the spell
                OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
                // bind handler to AfterHit event of the spell
                AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
                // bind handler to OnUnitTargetSelect event of the spell
                //OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
            }
        };

        // function which creates SpellScript
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_5581SpellScript();
        }
};

class spell_ex_66244 : public SpellScriptLoader
{
    public:
        spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

        class spell_ex_66244AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_66244AuraScript);
            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called in aura constructor
            // we initialize local variables if needed
            bool Load()
            {
                // do not load script if aura is casted by player or caster not avalible
                if (Unit* caster = GetCaster())
                    if (caster->GetTypeId() == TYPEID_PLAYER)
                        return true;
                return false;
            }


            void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be applied on target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }
            void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be removed from target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }

            void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been applied on target!");
                Unit* target = GetTarget();
                // cast spell on target on aura apply
                target->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been just removed from target!");
                Unit* target = GetTarget();
                Unit* caster = GetCaster();
                // caster may be not avalible (logged out for example)
                if (!caster)
                    return;
                // cast spell on caster on aura remove
                target->CastSpell(caster, SPELL_TRIGGERED, true);
            }

            void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is does a tick on target!");
                Unit* target = GetTarget();
                // aura targets damage self on tick
                target->DealDamage(target, 100);
            }

            void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is now updated!");
                // we're doubling aura amount every tick
                aurEff->ChangeAmount(aurEff->GetAmount() * 2);
            }

            void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Amount of Aura Effect is being calculated now!");
                // we're setting amount to 100
                amount = 100;
                // amount will be never recalculated due to applying passive aura
                canBeRecalculated = false;
            }

            void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Periodic data of Aura Effect is being calculated now!");
                // we're setting aura to be periodic and tick every 10 seconds
                isPeriodic = true;
                amplitude = 2 * IN_MILLISECONDS;
            }

            void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SpellMod data of Aura Effect is being calculated now!");
                // we don't want spellmod for example
                if (spellMod)
                {
                    delete spellMod;
                    spellMod = NULL;
                }
                /*
                // alternative: we want spellmod for spell which doesn't have it
                if (!spellMod)
                {
                    spellMod = new SpellModifier(GetAura());
                    spellMod->op = SPELLMOD_DOT;
                    spellMod->type = SPELLMOD_PCT;
                    spellMod->spellId = GetId();
                    spellMod->mask[1] = 0x00002000;
                }
                */
            }

            // function registering
            void Register()
            {
                OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                // AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - makes handler to be called when aura is reapplied on target
                AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
                AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
                /*OnApply += AuraEffectApplyFn();
                OnRemove += AuraEffectRemoveFn();
                DoCheckAreaTarget += AuraCheckAreaTargetFn();*/
            }
            /*
            void OnApply()
            {
            }
            void OnRemove()
            {
            }
            bool DoCheckAreaTarget(Unit* proposedTarget)
            {
            }*/
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_66244AuraScript();
        }
};

// example usage of OnEffectManaShield and AfterEffectManaShield hooks
// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb

// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks
class spell_ex_absorb_aura : public SpellScriptLoader
{
    public:
        spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

        class spell_ex_absorb_auraAuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_absorb_auraAuraScript);

            void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura is now absorbing damage done to us!");
                // absorb whole damage done to us
                absorbAmount = dmgInfo.GetDamage();
            }

            void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura has absorbed %u damage!", absorbAmount);
            }

            // function registering
            void Register()
            {
                OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
                AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_absorb_auraAuraScript();
        }
};

class spell_ex_463 : public SpellScriptLoader
{
    public:
        spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

        class spell_ex_463AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_463AuraScript);

            bool CheckAreaTarget(Unit* target)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Area aura checks if unit is a valid target for it!");
                // in our script we allow only players to be affected
                return target->GetTypeId() == TYPEID_PLAYER;
            }
            void Register()
            {
                DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_463AuraScript();
        }
};

// this function has to be added to function set in ScriptLoader.cpp
void AddSC_example_spell_scripts()
{
    new spell_ex_5581;
    new spell_ex_66244;
    new spell_ex_absorb_aura;
    new spell_ex_463;
}

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_ex_SpellScript);
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
            //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
            void Register()
            {
            }
        };
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_SpellScript();
        }
};
*/

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex)
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectApply += AuraEffectApplyFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectRemove += AuraEffectRemoveFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff) //OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect* aurEff) //OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            void Register()
            {
            }
        };
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_AuraScript();
        }
};
*/

Consejo para que apredas un poco de este mundillo. El core es de trinitycore base que es público. Que por cierto no está nada mal para esa versión. Luego los distintos servidores hacemos correcciones sobre los Bugs ya que el core está montado con los diferentes sniffs sacados del oficial. Luego los distintos servidores tenemos el código propio que se va arreglando. De ahí la privacidad...

Lo entiendes? O lo explico mas despacio?

Venga voy a intentarlo a ver si eres capaz de comprenderlo....

En un servidor de WoW hay dos partes.... La parte del emulador.... Y la base de datos ...
Es sencillo no? La parte del emulador va toda en C y la parte de la base de datos en SQL.
Lo entiendes?

El emulador PÚBLICO de WoW en su versión 4.3.4 se utiliza el de Trinity. El problema es que tiene mucha mierda metida a pelo.
Los NPC's igual están todos juntos porque no tiene programada el sistema de fases, o muchos datos de spells están mal porque o no se han sacado del oficial o los han puesto los entrys copiados de fanpages, triggers que faltan, todas las instancias de 10 y de 25j tanto en versión NM como en HC...

Pues todos los arreglos que se hacen... Que son muchos, pero muchísimo más de lo que te imaginas, van en un gitlab privado... Por lo que te he dicho antes... Hay muchos servidores y cada uno tiene su código ...

Espero que lo hayas entendido ya que he intentado explicarlo lo más sencillo posible para que pudieras entenderlo .... No he querido ahondar más en profundidad con tecnicismos para que no te perdieras...
Yo siento si no te ha quedado claro.... Pero como habías dicho que habías trabajado en un MMORPG daba por hecho que ya sabías como funcionaban...

Ahora bien.... Cómo va tu proof of concept??? [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Espera que va a dudar de mí el que todavía no ha presentado su "proof of concept" XDDDDDDDDDDDDDDDDDDD

Atento que dice que yo lloro de que no se peude jugar al counter.... cítame donde he dicho yo eso jajajajjajajajajaajajajajajajaj

Venga hasta luego mari carmen. Ya has demostrado ser un troll, puedes volver a la cueva a "programar" xDDDD.

P.D.: Tu como mucho has programado un script de IRC en JS viendo algún tutorial para noobs xD

Otro consejo que te voy a dar tambien gratis, por si un dia quieres trabajar de desarrollador: No fusiles codigo con GPL y le quites los creditos para intentar pasarlo como tuyo... porque lo mas probable es que te terminen pillando y te metas en un buen lio ;).

Busca las diferencias:
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}


/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*
* An example of a spell script file
* to bind a script to spell you have to add entry for it in `spell_script_names`
* where `spell_id` is id of the spell to bind
* and `ScriptName` is the name of a script assigned on registration
*/

#include "ScriptMgr.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "Player.h"

enum Spells
{
    SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
    public:
        spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

        class spell_ex_5581SpellScript : public SpellScript
        {
            // initialize script, this macro does compile time check for type of the function - prevents possible issues
            // if you have assigned wrong type of function to a hook you'll receive type conversion error during build
            // this line is required, otherwise you'll get XXXHandlerFunction - identifier not found errors
            PrepareSpellScript(spell_ex_5581SpellScript);

            std::string localVariable;
            char* localVariable2;

            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid 70522 exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called just after script is added to spell
            // we initialize local variables if needed
            bool Load()
            {
                localVariable = "we're using local variable";
                localVariable2 = new char();
                return true;
                // return false - script will be immediately removed from the spell
                // for example - we don't want this script to be executed on a creature
                // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
                //     return false;
            }

            // function called just before script delete
            // we free allocated memory
            void Unload()
            {
                delete localVariable2;
            }

            void HandleBeforeCast()
            {
                // this hook is executed before anything about casting the spell is done
                // after this hook is executed all the machinery starts
                sLog->outInfo(LOG_FILTER_GENERAL, "Caster just finished preparing the spell (cast bar has expired)");
            }

            void HandleOnCast()
            {
                // cast is validated and spell targets are selected at this moment
                // this is a last place when the spell can be safely interrupted
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
            }

            void HandleAfterCast()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "All immediate Actions for the spell are finished now");
                // this is a safe for triggering additional effects for a spell without interfering
                // with visuals or with other effects of the spell
                //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            SpellCastResult CheckRequirement()
            {
                // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
                // in this case we're disallowing to select non-player as a target of the spell
                //if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
                    //return SPELL_FAILED_BAD_TARGETS;
                return SPELL_CAST_OK;
            }


            void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
            }

            void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
            {
                uint64 targetGUID = 0;
                if (Unit* unitTarget = GetHitUnit())
                    targetGUID = unitTarget->GetGUID();
                // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
            }

            void HandleDummyHit(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
            }

            void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SPELL_EFFECT_DUMMY is hits it's target!");
                // make caster cast a spell on a unit target of effect
                if (Unit* target = GetHitUnit())
                    GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleBeforeHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to hit target!");
            }

            void HandleOnHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just hit target!");
            }

            void HandleAfterHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just finished hitting target!");
            }

            void FilterTargets(std::list<Unit*>& /*targetList*/)
            {
                // usually you want this call for Area Target spells
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to add targets from targetList to final targets!");
            }

            // register functions used in spell script - names of these functions do not matter
            void Register()
            {
                // we're registering our functions here
                BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
                OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
                AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
                OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
                // function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
                OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
                OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell hits it's destination, independant from targets selected for spell, just before default effect 0 hit handler
                OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when unit is hit by spell, just before default effect 0 hit target handler
                OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
                // this will make HandleDummy function to be called on first != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
                // this will make HandleDummy function to be called on all != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
                // bind handler to BeforeHit event of the spell
                BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
                // bind handler to OnHit event of the spell
                OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
                // bind handler to AfterHit event of the spell
                AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
                // bind handler to OnUnitTargetSelect event of the spell
                //OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
            }
        };

        // function which creates SpellScript
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_5581SpellScript();
        }
};

class spell_ex_66244 : public SpellScriptLoader
{
    public:
        spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

        class spell_ex_66244AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_66244AuraScript);
            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called in aura constructor
            // we initialize local variables if needed
            bool Load()
            {
                // do not load script if aura is casted by player or caster not avalible
                if (Unit* caster = GetCaster())
                    if (caster->GetTypeId() == TYPEID_PLAYER)
                        return true;
                return false;
            }


            void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be applied on target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }
            void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be removed from target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }

            void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been applied on target!");
                Unit* target = GetTarget();
                // cast spell on target on aura apply
                target->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been just removed from target!");
                Unit* target = GetTarget();
                Unit* caster = GetCaster();
                // caster may be not avalible (logged out for example)
                if (!caster)
                    return;
                // cast spell on caster on aura remove
                target->CastSpell(caster, SPELL_TRIGGERED, true);
            }

            void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is does a tick on target!");
                Unit* target = GetTarget();
                // aura targets damage self on tick
                target->DealDamage(target, 100);
            }

            void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is now updated!");
                // we're doubling aura amount every tick
                aurEff->ChangeAmount(aurEff->GetAmount() * 2);
            }

            void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Amount of Aura Effect is being calculated now!");
                // we're setting amount to 100
                amount = 100;
                // amount will be never recalculated due to applying passive aura
                canBeRecalculated = false;
            }

            void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Periodic data of Aura Effect is being calculated now!");
                // we're setting aura to be periodic and tick every 10 seconds
                isPeriodic = true;
                amplitude = 2 * IN_MILLISECONDS;
            }

            void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SpellMod data of Aura Effect is being calculated now!");
                // we don't want spellmod for example
                if (spellMod)
                {
                    delete spellMod;
                    spellMod = NULL;
                }
                /*
                // alternative: we want spellmod for spell which doesn't have it
                if (!spellMod)
                {
                    spellMod = new SpellModifier(GetAura());
                    spellMod->op = SPELLMOD_DOT;
                    spellMod->type = SPELLMOD_PCT;
                    spellMod->spellId = GetId();
                    spellMod->mask[1] = 0x00002000;
                }
                */
            }

            // function registering
            void Register()
            {
                OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                // AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - makes handler to be called when aura is reapplied on target
                AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
                AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
                /*OnApply += AuraEffectApplyFn();
                OnRemove += AuraEffectRemoveFn();
                DoCheckAreaTarget += AuraCheckAreaTargetFn();*/
            }
            /*
            void OnApply()
            {
            }
            void OnRemove()
            {
            }
            bool DoCheckAreaTarget(Unit* proposedTarget)
            {
            }*/
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_66244AuraScript();
        }
};

// example usage of OnEffectManaShield and AfterEffectManaShield hooks
// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb

// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks
class spell_ex_absorb_aura : public SpellScriptLoader
{
    public:
        spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

        class spell_ex_absorb_auraAuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_absorb_auraAuraScript);

            void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura is now absorbing damage done to us!");
                // absorb whole damage done to us
                absorbAmount = dmgInfo.GetDamage();
            }

            void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura has absorbed %u damage!", absorbAmount);
            }

            // function registering
            void Register()
            {
                OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
                AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_absorb_auraAuraScript();
        }
};

class spell_ex_463 : public SpellScriptLoader
{
    public:
        spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

        class spell_ex_463AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_463AuraScript);

            bool CheckAreaTarget(Unit* target)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Area aura checks if unit is a valid target for it!");
                // in our script we allow only players to be affected
                return target->GetTypeId() == TYPEID_PLAYER;
            }
            void Register()
            {
                DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_463AuraScript();
        }
};

// this function has to be added to function set in ScriptLoader.cpp
void AddSC_example_spell_scripts()
{
    new spell_ex_5581;
    new spell_ex_66244;
    new spell_ex_absorb_aura;
    new spell_ex_463;
}

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_ex_SpellScript);
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
            //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
            void Register()
            {
            }
        };
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_SpellScript();
        }
};
*/

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex)
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectApply += AuraEffectApplyFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectRemove += AuraEffectRemoveFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff) //OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect* aurEff) //OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            void Register()
            {
            }
        };
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_AuraScript();
        }
};
*/

Consejo para que apredas un poco de este mundillo. El core es de trinitycore base que es público. Que por cierto no está nada mal para esa versión. Luego los distintos servidores hacemos correcciones sobre los Bugs ya que el core está montado con los diferentes sniffs sacados del oficial. Luego los distintos servidores tenemos el código propio que se va arreglando. De ahí la privacidad...

Lo entiendes? O lo explico mas despacio?

Venga voy a intentarlo a ver si eres capaz de comprenderlo....

En un servidor de WoW hay dos partes.... La parte del emulador.... Y la base de datos ...
Es sencillo no? La parte del emulador va toda en C y la parte de la base de datos en SQL.
Lo entiendes?

El emulador PÚBLICO de WoW en su versión 4.3.4 se utiliza el de Trinity. El problema es que tiene mucha mierda metida a pelo.
Los NPC's igual están todos juntos porque no tiene programada el sistema de fases, o muchos datos de spells están mal porque o no se han sacado del oficial o los han puesto los entrys copiados de fanpages....

Pues todos los arreglos que se hacen... Que son muchos, van en un gitlab privado... Por lo que te he dicho antes... Hay muchos servidores y cada uno tiene su código ...

Espero que lo hayas entendido ya que he intentado explicarlo lo más sencillo posible para que pudieras entenderlo .... No he querido ahondar más en profundidad con tecnicismos para que no te perdieras..

Ahora bien.... Cómo va tu proof of concept??? [qmparto]

Posteastes tu mismo ese codigo como tuyo, me dices que no pones mas codigo porque esta en un servidor privado xD.
Resulta que lo que posteastes para demostrar lo buen desarrollador que eres es publico y de otra persona, y encima es GPL y le quitas la parte de la licencia y creditos?

Por favor, dejalo, en serio.
Ya no tiene gracia y ahora mismo me da pena :/.
jimi escribió:
djlogan83 escribió:
jimi escribió:Otro consejo que te voy a dar tambien gratis, por si un dia quieres trabajar de desarrollador: No fusiles codigo con GPL y le quites los creditos para intentar pasarlo como tuyo... porque lo mas probable es que te terminen pillando y te metas en un buen lio ;).

Busca las diferencias:
enum Spells
{
SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
public:
spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

class spell_ex_5581SpellScript : public SpellScript
{
// Esta macro debe estar presente siempre en todos los SpellScripts, ya que permite el acceso a los hooks de registro
PrepareSpellScript(spell_ex_5581SpellScript);

std::string localVariable;
char* localVariable2;

// Comprobamos que las spell o los datos que se vayan a usar esten todos para evitar comprobaciones innecesarias (Se llama mientras se levanta el server por lo que no hay que usarlo para comprobar punteros como el Unit que castea la spell)
bool Validate(SpellInfo const* /*spellInfo*/) override
{
// Comprobamos que la spell exista en la dbc
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

// Se llama al empezar el casteo de la spell
bool Load() override
{
localVariable = "texto de una variable";
localVariable2 = new char();
return true; // Si se devuelve false el script se cancela automaticamente
}

// Se llama al borrarse el script de la spell
void Unload() override
{
delete localVariable2;
}

void HandleBeforeCast()
{
// El hook se llama nada mas empezar la spell, despues de preparar datos de la spell y objetivos
TC_LOG_INFO("server", "Caster just finished preparing the spell (cast bar has expired)");
}

void HandleOnCast()
{
// El hook se llama justo al terminar el casteo (La barra por llamarlo de alguna manera)
TC_LOG_INFO("server", "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
}

void HandleAfterCast()
{
// El hook se llama despues de terminar el casteo y realizar cosas inmediatas
TC_LOG_INFO("server", "All immediate Actions for the spell are finished now");
//GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

SpellCastResult CheckRequirement()
{
// Requisitos customs de la spells
//if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
// return SPELL_FAILED_BAD_TARGETS;
return SPELL_CAST_OK;
}


void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
{
// El hook se llama al iniciarse al crearse el efecto
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
}

void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
{
// El hook se llama una vez por cada target y se llama justo al lanzarse la spell sobre el objetivo, antes de hacer hit
ObjectGuid targetGUID;
if (Unit* unitTarget = GetHitUnit())
targetGUID = unitTarget->GetGUID();
// we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
}

void HandleDummyHit(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit
TC_LOG_INFO("server", "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
}

void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
{
// La spell ha hecho hit sobre un target y se llama una vez por cada target
TC_LOG_INFO("server", "SPELL_EFFECT_DUMMY is hits it's target!");
// make caster cast a spell on a unit target of effect
if (Unit* target = GetHitUnit())
GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleBeforeHit()
{
// Se llama justo antes de hacer hit
TC_LOG_INFO("server", "Spell is about to hit target!");
}

void HandleOnHit()
{
// Se llama al hacer hit
TC_LOG_INFO("server", "Spell just hit target!");
}

void HandleAfterHit()
{
// Se llama despues del hit
TC_LOG_INFO("server", "Spell just finished hitting target!");
}

void FilterTargets(std::list<Unit*>& /*targetList*/)
{
// Normalmente se usa en spells que afectan a areas, y se llama justo en el momento en el que se seleccionan los objetivos disponibles
TC_LOG_INFO("server", "Spell is about to add targets from targetList to final targets!");
}

// Registramos las funciones, sin esto nunca se llamarian
void Register() override
{
// Algunas funciones basicas
BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
// Se llama independientemente del objetivo
OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
// Una vez por target antes de hacer hit
OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama independientemente del objetivo
OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
// Se llama una vez por target al ahcer hit
OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
// Dara error ya que el effect 0 de la spell 49375 es SPELL_EFFECT_DUMMY en vez de SPELL_EFFECT_APPLY_AURA
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
// Solo se llamara para el primer efecto de la spell independientemente del que sea
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
// Se llamara para todos los efectos de la spell
//OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
// Antes de los eventos de la spell
BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
// Al hacer hit
OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
// Despues de hacer hit
AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
// Para seleccionar los objetivos si es necesario
//OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
}
};

// Funcion que crea el SpellScript
SpellScript* GetSpellScript() const override
{
return new spell_ex_5581SpellScript();
}
};

class spell_ex_66244 : public SpellScriptLoader
{
public:
spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

class spell_ex_66244AuraScript : public AuraScript
{
// Igual que en SpellScript las macro para registrar los hooks
PrepareAuraScript(spell_ex_66244AuraScript);

bool Validate(SpellInfo const* /*spellEntry*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
return false;
return true;
}

bool Load() override
{
// do not load script if aura is casted by player or caster not avalible
if (Unit* caster = GetCaster())
if (caster->GetTypeId() == TYPEID_PLAYER)
return true;
return false;
}


void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be applied on target!");
// El codigo comentado permite evitar el efecto del aura
//PreventDefaultAction();
}

void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect is about to be removed from target!");
//PreventDefaultAction();
}

void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been applied on target!");
Unit* target = GetTarget();
if (!target)
return;

// Comprobamos que exista el objetivo del aura antes de nada
target->CastSpell(target, SPELL_TRIGGERED, true);
}

void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
TC_LOG_INFO("server", "Aura Effect has just been just removed from target!");
Unit* target = GetTarget();
Unit* caster = GetCaster();
if (!caster || !target)
return;

target->CastSpell(caster, SPELL_TRIGGERED, true);
}

void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is does a tick on target!");
Unit* target = GetTarget();
if (!target)
return;
// 100 de daño sobre el objetivo cada tick del aura
target->DealDamage(target, 100);
}

void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
{
TC_LOG_INFO("server", "Perioidic Aura Effect is now updated!");
// Aumentamos el valor del aura cada vez que hace tick el efecto
aurEff->ChangeAmount(aurEff->GetAmount() * 2);
}

void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
{
TC_LOG_INFO("server", "Amount of Aura Effect is being calculated now!");
// Establecemos un valor
amount = 100;
// Evitamos que esta valor pueda cambiar
canBeRecalculated = false;
}

void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
{
TC_LOG_INFO("server", "Periodic data of Aura Effect is being calculated now!");
// Se puede usar para que una spell que no tiene efecto periodico lo tenga
isPeriodic = true;
amplitude = 2 * IN_MILLISECONDS;
}

void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
{
TC_LOG_INFO("server", "SpellMod data of Aura Effect is being calculated now!");
// Creamos una modificacion de spells, ejemplo reduccion de cooldown en Golpe heroico mientras el aura esta activo
if (spellMod)
{
delete spellMod;
spellMod = NULL;
}
/*
// alternative: we want spellmod for spell which doesn't have it
if (!spellMod)
{
spellMod = new SpellModifier(GetAura());
spellMod->op = SPELLMOD_DOT;
spellMod->type = SPELLMOD_PCT;
spellMod->spellId = GetId();
spellMod->mask[1] = 0x00002000;
}
*/
}

void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
// AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - Para que se llame cada vez que se aplica o reaplica sobre el objetivo
AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
}
};

// Funcion que crea el AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_66244AuraScript();
}
};

class spell_ex_absorb_aura : public SpellScriptLoader
{
public:
spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

class spell_ex_absorb_auraAuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_absorb_auraAuraScript);

void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
{
TC_LOG_INFO("server", "Our aura is now absorbing damage done to us!");
// El aura absorvera lo indicado, en este caso es todo el daño que nos hacen
absorbAmount = dmgInfo.GetDamage();
}

void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
{
// Hacer algo despues de absorver daño
TC_LOG_INFO("server", "Our aura has absorbed %u damage!", absorbAmount);
}

// function registering
void Register() override
{
OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
}
};

// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_ex_absorb_auraAuraScript();
}
};

class spell_ex_463 : public SpellScriptLoader
{
public:
spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

class spell_ex_463AuraScript : public AuraScript
{
PrepareAuraScript(spell_ex_463AuraScript);

bool CheckAreaTarget(Unit* target)
{
TC_LOG_INFO("server", "Area aura checks if unit is a valid target for it!");
// Si la condicion no se cumple el aura no tendra efecto alguno
return target->GetTypeId() == TYPEID_PLAYER;
}

void Register() override
{
DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_ex_463AuraScript();
}
};

void AddSC_example_spell_scripts()
{
new spell_ex_5581;
new spell_ex_66244;
new spell_ex_absorb_aura;
new spell_ex_463;
}


/*
* Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/

/*
* An example of a spell script file
* to bind a script to spell you have to add entry for it in `spell_script_names`
* where `spell_id` is id of the spell to bind
* and `ScriptName` is the name of a script assigned on registration
*/

#include "ScriptMgr.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "SpellScript.h"
#include "Player.h"

enum Spells
{
    SPELL_TRIGGERED = 18282
};

class spell_ex_5581 : public SpellScriptLoader
{
    public:
        spell_ex_5581() : SpellScriptLoader("spell_ex_5581") { }

        class spell_ex_5581SpellScript : public SpellScript
        {
            // initialize script, this macro does compile time check for type of the function - prevents possible issues
            // if you have assigned wrong type of function to a hook you'll receive type conversion error during build
            // this line is required, otherwise you'll get XXXHandlerFunction - identifier not found errors
            PrepareSpellScript(spell_ex_5581SpellScript);

            std::string localVariable;
            char* localVariable2;

            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid 70522 exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called just after script is added to spell
            // we initialize local variables if needed
            bool Load()
            {
                localVariable = "we're using local variable";
                localVariable2 = new char();
                return true;
                // return false - script will be immediately removed from the spell
                // for example - we don't want this script to be executed on a creature
                // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
                //     return false;
            }

            // function called just before script delete
            // we free allocated memory
            void Unload()
            {
                delete localVariable2;
            }

            void HandleBeforeCast()
            {
                // this hook is executed before anything about casting the spell is done
                // after this hook is executed all the machinery starts
                sLog->outInfo(LOG_FILTER_GENERAL, "Caster just finished preparing the spell (cast bar has expired)");
            }

            void HandleOnCast()
            {
                // cast is validated and spell targets are selected at this moment
                // this is a last place when the spell can be safely interrupted
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to do take reagents, power, launch missile, do visuals and instant spell effects");
            }

            void HandleAfterCast()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "All immediate Actions for the spell are finished now");
                // this is a safe for triggering additional effects for a spell without interfering
                // with visuals or with other effects of the spell
                //GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            SpellCastResult CheckRequirement()
            {
                // in this hook you can add additional requirements for spell caster (and throw a client error if reqs're not passed)
                // in this case we're disallowing to select non-player as a target of the spell
                //if (!GetExplTargetUnit() || GetExplTargetUnit()->ToPlayer())
                    //return SPELL_FAILED_BAD_TARGETS;
                return SPELL_CAST_OK;
            }


            void HandleDummyLaunch(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched!", GetSpellInfo()->Id);
            }

            void HandleDummyLaunchTarget(SpellEffIndex /*effIndex*/)
            {
                uint64 targetGUID = 0;
                if (Unit* unitTarget = GetHitUnit())
                    targetGUID = unitTarget->GetGUID();
                // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY is just launched at it's target: " UI64FMTD "!", GetSpellInfo()->Id, targetGUID);
            }

            void HandleDummyHit(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell %u with SPELL_EFFECT_DUMMY has hit!", GetSpellInfo()->Id);
            }

            void HandleDummyHitTarget(SpellEffIndex /*effIndex*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SPELL_EFFECT_DUMMY is hits it's target!");
                // make caster cast a spell on a unit target of effect
                if (Unit* target = GetHitUnit())
                    GetCaster()->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleBeforeHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to hit target!");
            }

            void HandleOnHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just hit target!");
            }

            void HandleAfterHit()
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell just finished hitting target!");
            }

            void FilterTargets(std::list<Unit*>& /*targetList*/)
            {
                // usually you want this call for Area Target spells
                sLog->outInfo(LOG_FILTER_GENERAL, "Spell is about to add targets from targetList to final targets!");
            }

            // register functions used in spell script - names of these functions do not matter
            void Register()
            {
                // we're registering our functions here
                BeforeCast += SpellCastFn(spell_ex_5581SpellScript::HandleBeforeCast);
                OnCast += SpellCastFn(spell_ex_5581SpellScript::HandleOnCast);
                AfterCast += SpellCastFn(spell_ex_5581SpellScript::HandleAfterCast);
                OnCheckCast += SpellCheckCastFn(spell_ex_5581SpellScript::CheckRequirement);
                // function HandleDummy will be called when spell is launched, independant from targets selected for spell, just before default effect 0 launch handler
                OnEffectLaunch += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunch, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell is launched at target, just before default effect 0 launch at target handler
                OnEffectLaunchTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyLaunchTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when spell hits it's destination, independant from targets selected for spell, just before default effect 0 hit handler
                OnEffectHit += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHit, EFFECT_0, SPELL_EFFECT_DUMMY);
                // function HandleDummy will be called when unit is hit by spell, just before default effect 0 hit target handler
                OnEffectHitTarget += SpellEffectFn(spell_ex_5581SpellScript::HandleDummyHitTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
                // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
                // this will make HandleDummy function to be called on first != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
                // this will make HandleDummy function to be called on all != 0 effect of spell 49375
                //OnEffectHitTarget += SpellEffectFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
                // bind handler to BeforeHit event of the spell
                BeforeHit += SpellHitFn(spell_ex_5581SpellScript::HandleBeforeHit);
                // bind handler to OnHit event of the spell
                OnHit += SpellHitFn(spell_ex_5581SpellScript::HandleOnHit);
                // bind handler to AfterHit event of the spell
                AfterHit += SpellHitFn(spell_ex_5581SpellScript::HandleAfterHit);
                // bind handler to OnUnitTargetSelect event of the spell
                //OnUnitTargetSelect += SpellUnitTargetFn(spell_ex_5581SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER);
            }
        };

        // function which creates SpellScript
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_5581SpellScript();
        }
};

class spell_ex_66244 : public SpellScriptLoader
{
    public:
        spell_ex_66244() : SpellScriptLoader("spell_ex_66244") { }

        class spell_ex_66244AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_66244AuraScript);
            // function called on server startup
            // checks if script has data required for it to work
            bool Validate(SpellInfo const* /*spellEntry*/)
            {
                // check if spellid exists in dbc, we will trigger it later
                if (!sSpellMgr->GetSpellInfo(SPELL_TRIGGERED))
                    return false;
                return true;
            }

            // function called in aura constructor
            // we initialize local variables if needed
            bool Load()
            {
                // do not load script if aura is casted by player or caster not avalible
                if (Unit* caster = GetCaster())
                    if (caster->GetTypeId() == TYPEID_PLAYER)
                        return true;
                return false;
            }


            void HandleOnEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be applied on target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }
            void HandleOnEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect is about to be removed from target!");
                // this hook allows you to prevent execution of AuraEffect handler, or to replace it with your own handler
                //PreventDefaultAction();
            }

            void HandleAfterEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been applied on target!");
                Unit* target = GetTarget();
                // cast spell on target on aura apply
                target->CastSpell(target, SPELL_TRIGGERED, true);
            }

            void HandleAfterEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Aura Effect has just been just removed from target!");
                Unit* target = GetTarget();
                Unit* caster = GetCaster();
                // caster may be not avalible (logged out for example)
                if (!caster)
                    return;
                // cast spell on caster on aura remove
                target->CastSpell(caster, SPELL_TRIGGERED, true);
            }

            void HandleEffectPeriodic(AuraEffect const* /*aurEff*/)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is does a tick on target!");
                Unit* target = GetTarget();
                // aura targets damage self on tick
                target->DealDamage(target, 100);
            }

            void HandleEffectPeriodicUpdate(AuraEffect* aurEff)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Perioidic Aura Effect is now updated!");
                // we're doubling aura amount every tick
                aurEff->ChangeAmount(aurEff->GetAmount() * 2);
            }

            void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Amount of Aura Effect is being calculated now!");
                // we're setting amount to 100
                amount = 100;
                // amount will be never recalculated due to applying passive aura
                canBeRecalculated = false;
            }

            void HandleEffectCalcPeriodic(AuraEffect const* /*aurEff*/, bool& isPeriodic, int32& amplitude)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Periodic data of Aura Effect is being calculated now!");
                // we're setting aura to be periodic and tick every 10 seconds
                isPeriodic = true;
                amplitude = 2 * IN_MILLISECONDS;
            }

            void HandleEffectCalcSpellMod(AuraEffect const* /*aurEff*/, SpellModifier*& spellMod)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "SpellMod data of Aura Effect is being calculated now!");
                // we don't want spellmod for example
                if (spellMod)
                {
                    delete spellMod;
                    spellMod = NULL;
                }
                /*
                // alternative: we want spellmod for spell which doesn't have it
                if (!spellMod)
                {
                    spellMod = new SpellModifier(GetAura());
                    spellMod->op = SPELLMOD_DOT;
                    spellMod->type = SPELLMOD_PCT;
                    spellMod->spellId = GetId();
                    spellMod->mask[1] = 0x00002000;
                }
                */
            }

            // function registering
            void Register()
            {
                OnEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleOnEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                // AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK - makes handler to be called when aura is reapplied on target
                AfterEffectApply += AuraEffectApplyFn(spell_ex_66244AuraScript::HandleAfterEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
                AfterEffectRemove += AuraEffectRemoveFn(spell_ex_66244AuraScript::HandleAfterEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
                OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_66244AuraScript::HandleEffectPeriodicUpdate, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_66244AuraScript::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_66244AuraScript::HandleEffectCalcPeriodic, EFFECT_0, SPELL_AURA_DUMMY);
                DoEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_66244AuraScript::HandleEffectCalcSpellMod, EFFECT_0, SPELL_AURA_DUMMY);
                /*OnApply += AuraEffectApplyFn();
                OnRemove += AuraEffectRemoveFn();
                DoCheckAreaTarget += AuraCheckAreaTargetFn();*/
            }
            /*
            void OnApply()
            {
            }
            void OnRemove()
            {
            }
            bool DoCheckAreaTarget(Unit* proposedTarget)
            {
            }*/
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_66244AuraScript();
        }
};

// example usage of OnEffectManaShield and AfterEffectManaShield hooks
// see spell_ex_absorb_aura, these hooks work the same as OnEffectAbsorb and AfterEffectAbsorb

// example usage of OnEffectAbsorb and AfterEffectAbsorb hooks
class spell_ex_absorb_aura : public SpellScriptLoader
{
    public:
        spell_ex_absorb_aura() : SpellScriptLoader("spell_ex_absorb_aura") { }

        class spell_ex_absorb_auraAuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_absorb_auraAuraScript);

            void HandleOnEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & dmgInfo, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura is now absorbing damage done to us!");
                // absorb whole damage done to us
                absorbAmount = dmgInfo.GetDamage();
            }

            void HandleAfterEffectAbsorb(AuraEffect* /*aurEff*/, DamageInfo & /*dmgInfo*/, uint32 & absorbAmount)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Our aura has absorbed %u damage!", absorbAmount);
            }

            // function registering
            void Register()
            {
                OnEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleOnEffectAbsorb, EFFECT_0);
                AfterEffectAbsorb += AuraEffectAbsorbFn(spell_ex_absorb_auraAuraScript::HandleAfterEffectAbsorb, EFFECT_0);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_absorb_auraAuraScript();
        }
};

class spell_ex_463 : public SpellScriptLoader
{
    public:
        spell_ex_463() : SpellScriptLoader("spell_ex_463") { }

        class spell_ex_463AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex_463AuraScript);

            bool CheckAreaTarget(Unit* target)
            {
                sLog->outInfo(LOG_FILTER_GENERAL, "Area aura checks if unit is a valid target for it!");
                // in our script we allow only players to be affected
                return target->GetTypeId() == TYPEID_PLAYER;
            }
            void Register()
            {
                DoCheckAreaTarget += AuraCheckAreaTargetFn(spell_ex_463AuraScript::CheckAreaTarget);
            }
        };

        // function which creates AuraScript
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_463AuraScript();
        }
};

// this function has to be added to function set in ScriptLoader.cpp
void AddSC_example_spell_scripts()
{
    new spell_ex_5581;
    new spell_ex_66244;
    new spell_ex_absorb_aura;
    new spell_ex_463;
}

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_SpellScript : public SpellScript
        {
            PrepareSpellScript(spell_ex_SpellScript);
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void Function(SpellEffIndex effIndex) //OnEffect += SpellEffectFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_EFFECT_ANY);
            //void Function() //OnHit += SpellEffectFn(spell_ex_SpellScript::Function);
            void Register()
            {
            }
        };
        SpellScript* GetSpellScript() const
        {
            return new spell_ex_SpellScript();
        }
};
*/

/* empty script for copypasting
class spell_ex : public SpellScriptLoader
{
    public:
        spell_ex() : SpellScriptLoader("spell_ex") { }
        class spell_ex_AuraScript : public AuraScript
        {
            PrepareAuraScript(spell_ex)
            //bool Validate(SpellInfo const* spellEntry){return true;}
            //bool Load(){return true;}
            //void Unload(){}
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectApply += AuraEffectApplyFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, AuraEffectHandleModes mode) //OnEffectRemove += AuraEffectRemoveFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY, AURA_EFFECT_HANDLE_REAL);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff) //OnEffectPeriodic += AuraEffectPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect* aurEff) //OnEffectUpdatePeriodic += AuraEffectUpdatePeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, int32& amount, bool& canBeRecalculated) //DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, bool& isPeriodic, int32& amplitude) //OnEffectCalcPeriodic += AuraEffectCalcPeriodicFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            //void spell_ex_SpellScript::Function(AuraEffect const* aurEff, SpellModifier*& spellMod) //OnEffectCalcSpellMod += AuraEffectCalcSpellModFn(spell_ex_SpellScript::Function, EFFECT_ANY, SPELL_AURA_ANY);
            void Register()
            {
            }
        };
        AuraScript* GetAuraScript() const
        {
            return new spell_ex_AuraScript();
        }
};
*/

Consejo para que apredas un poco de este mundillo. El core es de trinitycore base que es público. Que por cierto no está nada mal para esa versión. Luego los distintos servidores hacemos correcciones sobre los Bugs ya que el core está montado con los diferentes sniffs sacados del oficial. Luego los distintos servidores tenemos el código propio que se va arreglando. De ahí la privacidad...

Lo entiendes? O lo explico mas despacio?

Venga voy a intentarlo a ver si eres capaz de comprenderlo....

En un servidor de WoW hay dos partes.... La parte del emulador.... Y la base de datos ...
Es sencillo no? La parte del emulador va toda en C y la parte de la base de datos en SQL.
Lo entiendes?

El emulador PÚBLICO de WoW en su versión 4.3.4 se utiliza el de Trinity. El problema es que tiene mucha mierda metida a pelo.
Los NPC's igual están todos juntos porque no tiene programada el sistema de fases, o muchos datos de spells están mal porque o no se han sacado del oficial o los han puesto los entrys copiados de fanpages....

Pues todos los arreglos que se hacen... Que son muchos, van en un gitlab privado... Por lo que te he dicho antes... Hay muchos servidores y cada uno tiene su código ...

Espero que lo hayas entendido ya que he intentado explicarlo lo más sencillo posible para que pudieras entenderlo .... No he querido ahondar más en profundidad con tecnicismos para que no te perdieras..

Ahora bien.... Cómo va tu proof of concept??? [qmparto]

Posteastes tu mismo ese codigo como tuyo, me dices que no pones mas codigo porque esta en un servidor privado xD.
Resulta que lo que posteastes para demostrar lo buen desarrollador que eres es publico y de otra persona, y encima es GPL y le quitas la parte de la licencia y creditos?

Por favor, dejalo, en serio.
Ya no tiene gracia y ahora mismo me da pena :/.

Me dijistes que te pasará código nuestro del que trabajamos y te lo he pasado. Simple y fácil. Y efectivamente es nuestra compilación ya que es código libre. Si quieres puedes montar un servidor en local y hacer la prueba y ver todos los cambios. Si sabes montarlo claro....

Pero no discutas conmigo de esto que si no no te va a dar tiempo a programar el "proof of concept" [qmparto] [qmparto] [qmparto]

Por que podrías hacerlo no? Podrías demostrarme lo no??? Pareces Sasel [qmparto] [qmparto]

Joder, tú me llevas dando pena desde hace muchos post

Podrían ser 8 millones de parados.... Podria ser el VAC igual que el cliente de FaceIT.... Podrías hacer un cheto....

Son tantas cosas que dan pena.....

A cuidarse eh? [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Consejo para que apredas un poco de este mundillo. El core es de trinitycore base que es público. Que por cierto no está nada mal para esa versión. Luego los distintos servidores hacemos correcciones sobre los Bugs ya que el core está montado con los diferentes sniffs sacados del oficial. Luego los distintos servidores tenemos el código propio que se va arreglando. De ahí la privacidad...

Lo entiendes? O lo explico mas despacio?

Venga voy a intentarlo a ver si eres capaz de comprenderlo....

En un servidor de WoW hay dos partes.... La parte del emulador.... Y la base de datos ...
Es sencillo no? La parte del emulador va toda en C y la parte de la base de datos en SQL.
Lo entiendes?

El emulador PÚBLICO de WoW en su versión 4.3.4 se utiliza el de Trinity. El problema es que tiene mucha mierda metida a pelo.
Los NPC's igual están todos juntos porque no tiene programada el sistema de fases, o muchos datos de spells están mal porque o no se han sacado del oficial o los han puesto los entrys copiados de fanpages....

Pues todos los arreglos que se hacen... Que son muchos, van en un gitlab privado... Por lo que te he dicho antes... Hay muchos servidores y cada uno tiene su código ...

Espero que lo hayas entendido ya que he intentado explicarlo lo más sencillo posible para que pudieras entenderlo .... No he querido ahondar más en profundidad con tecnicismos para que no te perdieras..

Ahora bien.... Cómo va tu proof of concept??? [qmparto]

Posteastes tu mismo ese codigo como tuyo, me dices que no pones mas codigo porque esta en un servidor privado xD.
Resulta que lo que posteastes para demostrar lo buen desarrollador que eres es publico y de otra persona, y encima es GPL y le quitas la parte de la licencia y creditos?

Por favor, dejalo, en serio.
Ya no tiene gracia y ahora mismo me da pena :/.

Me dijistes que te pasará código nuestro del que trabajamos y te lo he pasado. Simple y fácil. Y efectivamente es nuestra compilación ya que es código libre. Si quieres puedes montar un servidor en local y hacer la prueba y ver todos los cambios. Si sabes montarlo claro....

Pero no discutas conmigo de esto que si no no te va a dar tiempo a programar el "proof of concept" [qmparto] [qmparto] [qmparto]

Por que podrías hacerlo no? Podrías demostrarme lo no??? Pareces Sasel [qmparto] [qmparto]

Joder, tú me llevas dando pena desde hace muchos post

Podrían ser 8 millones de parados.... Podria ser el VAC igual que el cliente de FaceIT.... Podrías hacer un cheto....

Son tantas cosas que dan pena.....

A cuidarse eh? [qmparto]

A ver, te he pedido un codigo tuyo sencillito que demuestre que tienes una minima idea de editar memoria de procesos o algo por el estilo, o sino el repo del mmorpg que supuestamente estas desarrollando para ver tus commits. Me pones la escusa de que el repo es privado ya que hay mucha competencia y me pegas este codigo, que curiosamente esta fusilado al 99% de un codigo libre con licencia GPL, en el que cambiastes los comentarios (incluida la parte de la licencia y creditos...).

Sabes lo que creo, que simplemente cogisteis un servidor alternativo de un MMORPG opensource y cacharreais con el cambiando 4 cosillas sin tener mucha idea.
Que vamos, me parece perfecto, es una buena manera de empezar y aprender, por supuesto.
Pero no tiene sentido perder el tiempo en cambiar los comentarios de ingles a español, ni eliminar la parte de licencia y creditos (ademas esto os puede traer problemas legales, por favor leeros las licencias).

De hecho en el servidor alternativo en el que estuve varios años programando, manteniendo y administrando mientras estudiaba, y que tambien era GPL, se le permitia a todo el mundo coger el codigo y modificar lo que le viniese en gana y publicar su "distribucion" con los cambios, pero respetando la licencia que obviamente impedia eliminar la licencia y creditos ;).
De hecho hubo cientos de distribuciones basadas en nuestro servidor y mucha gente que jamas en su vida habia programado podia hacer sus cosillas y montar su servidor privado con sus amigos.
Lo que a nadie se le ocurria es decir que esas distribuciones eran servidores alternativos diferentes al servidor alternativo que haciamos nosotros xD. Al final lo que tenian casi todas en comun era que eran muy inestables porque no comprendian en la inmensa mayoria de los casos como funcionaba minimamente el servidor ;).
Aun asi lo bueno del opensource es que dio lugar a algunas modificaciones interesantes, recuerdo un Capture the flag, deathmatchs o uno de pokemon :P.

Hubo algunos casos de manzanas podridas que se barrenaba el codigo GPL, hacia sus modificaciones y solo publicaba la version compilada saltandose la licencia, pues claro, pero no solian vivir mucho tiempo :P.
No hagais vosotros lo mismo... porque ni es etico, ni es legal ;).
Edit: nada, veo que ya había avisado @Alejandro_Tomas de que lo van a quitar.
jimi escribió:
djlogan83 escribió:
jimi escribió:Posteastes tu mismo ese codigo como tuyo, me dices que no pones mas codigo porque esta en un servidor privado xD.
Resulta que lo que posteastes para demostrar lo buen desarrollador que eres es publico y de otra persona, y encima es GPL y le quitas la parte de la licencia y creditos?

Por favor, dejalo, en serio.
Ya no tiene gracia y ahora mismo me da pena :/.

Me dijistes que te pasará código nuestro del que trabajamos y te lo he pasado. Simple y fácil. Y efectivamente es nuestra compilación ya que es código libre. Si quieres puedes montar un servidor en local y hacer la prueba y ver todos los cambios. Si sabes montarlo claro....

Pero no discutas conmigo de esto que si no no te va a dar tiempo a programar el "proof of concept" [qmparto] [qmparto] [qmparto]

Por que podrías hacerlo no? Podrías demostrarme lo no??? Pareces Sasel [qmparto] [qmparto]

Joder, tú me llevas dando pena desde hace muchos post

Podrían ser 8 millones de parados.... Podria ser el VAC igual que el cliente de FaceIT.... Podrías hacer un cheto....

Son tantas cosas que dan pena.....

A cuidarse eh? [qmparto]

A ver, te he pedido un codigo tuyo sencillito que demuestre que tienes una minima idea de editar memoria de procesos o algo por el estilo, o sino el repo del mmorpg que supuestamente estas desarrollando para ver tus commits. Me pones la escusa de que el repo es privado ya que hay mucha competencia y me pegas este codigo, que curiosamente esta fusilado al 99% de un codigo libre con licencia GPL, en el que cambiastes los comentarios (incluida la parte de la licencia y creditos...).

Sabes lo que creo, que simplemente cogisteis un servidor alternativo de un MMORPG opensource y cacharreais con el cambiando 4 cosillas sin tener mucha idea.
Que vamos, me parece perfecto, es una buena manera de empezar y aprender, por supuesto.
Pero no tiene sentido perder el tiempo en cambiar los comentarios de ingles a español, ni eliminar la parte de licencia y creditos (ademas esto os puede traer problemas legales, por favor leeros las licencias).

De hecho en el servidor alternativo en el que estuve varios años programando, manteniendo y administrando mientras estudiaba, y que tambien era GPL, se le permitia a todo el mundo coger el codigo y modificar lo que le viniese en gana y publicar su "distribucion" con los cambios, pero respetando la licencia que obviamente impedia eliminar la licencia y creditos ;).
De hecho hubo cientos de distribuciones basadas en nuestro servidor y mucha gente que jamas en su vida habia programado podia hacer sus cosillas y montar su servidor privado con sus amigos.
Lo que a nadie se le ocurria es decir que esas distribuciones eran servidores alternativos diferentes al servidor alternativo que haciamos nosotros xD. Al final lo que tenian casi todas en comun era que eran muy inestables porque no comprendian en la inmensa mayoria de los casos como funcionaba minimamente el servidor ;).
Aun asi lo bueno del opensource es que dio lugar a algunas modificaciones interesantes, recuerdo un Capture the flag, deathmatchs o uno de pokemon :P.

Hubo algunos casos de manzanas podridas que se barrenaba el codigo GPL, hacia sus modificaciones y solo publicaba la version compilada saltandose la licencia, pues claro, pero no solian vivir mucho tiempo :P.
No hagais vosotros lo mismo... porque ni es etico, ni es legal ;).

Que cacharreamos cuatro cosillas... Que esos servidores no duran mucho...

De momento 13 años van campeón y somos el servidor de habla hispana con más jugadores online. Cada vez vas acertando más
Puedes montarte el mismo servidor y comprobar las diferencias por ti mismo.... O tampoco tienes tiempo? Igual si te hubiera pillado hace cinco años si verdad? [qmparto] [qmparto] [qmparto]

Enga a cuidarse que no te voy a dar más explicaciones que ya has demostrado lo troll que eres.

Cuando TU demuestres algo hablamos lo que quieras

P.D.: Le vas a poner las licencias GNU-GPL a tu "proof of concept"? Porque hay 8 millones de parados que les vendría muy bien tu "cheto" [qmparto] [qmparto] [qmparto]
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Me dijistes que te pasará código nuestro del que trabajamos y te lo he pasado. Simple y fácil. Y efectivamente es nuestra compilación ya que es código libre. Si quieres puedes montar un servidor en local y hacer la prueba y ver todos los cambios. Si sabes montarlo claro....

Pero no discutas conmigo de esto que si no no te va a dar tiempo a programar el "proof of concept" [qmparto] [qmparto] [qmparto]

Por que podrías hacerlo no? Podrías demostrarme lo no??? Pareces Sasel [qmparto] [qmparto]

Joder, tú me llevas dando pena desde hace muchos post

Podrían ser 8 millones de parados.... Podria ser el VAC igual que el cliente de FaceIT.... Podrías hacer un cheto....

Son tantas cosas que dan pena.....

A cuidarse eh? [qmparto]

A ver, te he pedido un codigo tuyo sencillito que demuestre que tienes una minima idea de editar memoria de procesos o algo por el estilo, o sino el repo del mmorpg que supuestamente estas desarrollando para ver tus commits. Me pones la escusa de que el repo es privado ya que hay mucha competencia y me pegas este codigo, que curiosamente esta fusilado al 99% de un codigo libre con licencia GPL, en el que cambiastes los comentarios (incluida la parte de la licencia y creditos...).

Sabes lo que creo, que simplemente cogisteis un servidor alternativo de un MMORPG opensource y cacharreais con el cambiando 4 cosillas sin tener mucha idea.
Que vamos, me parece perfecto, es una buena manera de empezar y aprender, por supuesto.
Pero no tiene sentido perder el tiempo en cambiar los comentarios de ingles a español, ni eliminar la parte de licencia y creditos (ademas esto os puede traer problemas legales, por favor leeros las licencias).

De hecho en el servidor alternativo en el que estuve varios años programando, manteniendo y administrando mientras estudiaba, y que tambien era GPL, se le permitia a todo el mundo coger el codigo y modificar lo que le viniese en gana y publicar su "distribucion" con los cambios, pero respetando la licencia que obviamente impedia eliminar la licencia y creditos ;).
De hecho hubo cientos de distribuciones basadas en nuestro servidor y mucha gente que jamas en su vida habia programado podia hacer sus cosillas y montar su servidor privado con sus amigos.
Lo que a nadie se le ocurria es decir que esas distribuciones eran servidores alternativos diferentes al servidor alternativo que haciamos nosotros xD. Al final lo que tenian casi todas en comun era que eran muy inestables porque no comprendian en la inmensa mayoria de los casos como funcionaba minimamente el servidor ;).
Aun asi lo bueno del opensource es que dio lugar a algunas modificaciones interesantes, recuerdo un Capture the flag, deathmatchs o uno de pokemon :P.

Hubo algunos casos de manzanas podridas que se barrenaba el codigo GPL, hacia sus modificaciones y solo publicaba la version compilada saltandose la licencia, pues claro, pero no solian vivir mucho tiempo :P.
No hagais vosotros lo mismo... porque ni es etico, ni es legal ;).

Que cacharreamos cuatro cosillas... Que esos servidores no duran mucho...

De momento 13 años van campeón y somos el servidor de habla hispana con más jugadores online. Cada vez vas acertando más
Puedes montarte el mismo servidor y comprobar las diferencias por ti mismo.... O tampoco tienes tiempo? Igual si te hubiera pillado hace cinco años si verdad? [qmparto] [qmparto] [qmparto]

Enga a cuidarse que no te voy a dar más explicaciones que ya has demostrado lo troll que eres.

Cuando TU demuestres algo hablamos lo que quieras

P.D.: Le vas a poner las licencias GNU-GPL a tu "proof of concept"? Porque hay 8 millones de parados que les vendría muy bien tu "cheto" [qmparto] [qmparto] [qmparto]

Hoy en dia y despues de 20 años, aun sigue gente con cientos de servidores basados en el servidor alternativo del forme parte, y la inmensa mayoria de gente de esos cientos de servidores sabe lo mismo que tu de desarrollar un servidor mmorpg. La inmensa mayoria funcionan exactamente igual que el servidor oficial o alternativo (vamos que no han tocado absolutamente nada a bajo nivel o de arquitectura, solo han editado funciones de funcionalidades de alto nivel y ajustado valores :P). De hecho para montar un servidor privado basado en el codigo de nuestro servidor no tenias ni que tocar el codigo en c++ para adaptarlo a tu gusto, podias perfectamente usar scripts en LUA, editar archivos de configuracion y modificar el mapa visualmente con cualquiera de los multiples editores de mapas que fueron saliendo ;).

Recapitulando, dices que eres desarrollador y que has desarrollado un servidor alternativo, pero resulta que me dices que el repositorio es privado y tal (perfecto), me posteas un trocito de codigo (que encima es super simple y no hace nada relacionado con lo que se hablaba, ni toca nada ni de ediccion de memoria de otro proceso ni de comunicacion de red... pero bueno).
Resulta que como ya todo olia muy mal me da por curiosidad por pegar en google el nombre de la primera funcion, y placa primer resultado un github con un codigo practicamente identico, eso si con los comentarios en ingles y con su licencia y creditos como suele ser lo habitual, en fin.
Luego me pones de escusa que es que el servidor que montais esta basado en ese codigo abierto... que es lo normal, que bla bla bla...

Al final hasta tengo dudas hasta de que siquiera entiendas ni lo que hace ese codigo abierto que habeis fusilado para montar un servidor privado.

Te explico que coger un proyecto de un servidor alternativo hecho por otra gente, toquetear el mapa, editar funcionalidades superficiales (bien sea por scripts o editando el propio codigo si no los soporta) y luego montar un servidor privado para que la gente se conecte y juegue (y supongo que os done dinero con la escusa de costes del servidor? xD), no os convierte en desarrolladores de servidores mmorpg ;).
Si fuese asi el que hace una sencilla app de escritorio seria desarrollador de sistemas operativos xD.

Estoy completamente seguro de que ni has desarrollado en tu vida algo tan sencillo como es un servicio para windows. Aunque estoy seguro que puedes perfectamente googlear un ejemplo por internet darle a compilar al visual studio y decirme que que si (eso si, no te olvides de fusilarle la licencia y los creditos primero).

P.D.: Y se me olvido comentartelo en el anterior post, pero como parece que sigues insistiendo otra vez, te lo intentare explicar. Las cifras oficiales que da el gobierno de 4 millones de parados no incluyen los mas de 4 millones en situacion de ERTE, que tambien son parados por si no lo sabias, ni trabajan, ni cotizan a la seguridad social y reciben la prestacion por desempleo (los que tienen la suerte de recibirla que aun a dia de hoy y despues de mas de 2 meses aun hay gente sin recibir un duro :/). Yo no he dejado de trabajar ni un dia y no es lo comun en el sector privado... en mi empresa el primer lunes de empezar el estado de alarma tuvimos una mañana complicada, donde despidieron a muchos y a otros ERTE (quedamos el 10% de la plantilla trabajando porque teniamos responsabilidades esenciales, sino nos hubiese tocado como al resto), no sabes la pena que me dieron las pobres chicas de administracion que llevaban pocos meses en la empresa y salian todas llorando... y te aseguro que el jefe no es mala persona.

Aunque supongo a partir de ahora empezaran a abrir algunos comercios y rescataran a una pequeña parte de los ERTE (teniendo en cuenta que ayer finalizaba el plazo para presentar los impuestos del primer trimestre para pymes y autonomos, por lo que practicamente a ninguno le merecia la pena abrir una semana antes, con aforo reducido y tener que presentarlos xD, aunque supongo que algunos ni se dieron cuenta del pequeño detalle).
jimi escribió:
djlogan83 escribió:
jimi escribió:A ver, te he pedido un codigo tuyo sencillito que demuestre que tienes una minima idea de editar memoria de procesos o algo por el estilo, o sino el repo del mmorpg que supuestamente estas desarrollando para ver tus commits. Me pones la escusa de que el repo es privado ya que hay mucha competencia y me pegas este codigo, que curiosamente esta fusilado al 99% de un codigo libre con licencia GPL, en el que cambiastes los comentarios (incluida la parte de la licencia y creditos...).

Sabes lo que creo, que simplemente cogisteis un servidor alternativo de un MMORPG opensource y cacharreais con el cambiando 4 cosillas sin tener mucha idea.
Que vamos, me parece perfecto, es una buena manera de empezar y aprender, por supuesto.
Pero no tiene sentido perder el tiempo en cambiar los comentarios de ingles a español, ni eliminar la parte de licencia y creditos (ademas esto os puede traer problemas legales, por favor leeros las licencias).

De hecho en el servidor alternativo en el que estuve varios años programando, manteniendo y administrando mientras estudiaba, y que tambien era GPL, se le permitia a todo el mundo coger el codigo y modificar lo que le viniese en gana y publicar su "distribucion" con los cambios, pero respetando la licencia que obviamente impedia eliminar la licencia y creditos ;).
De hecho hubo cientos de distribuciones basadas en nuestro servidor y mucha gente que jamas en su vida habia programado podia hacer sus cosillas y montar su servidor privado con sus amigos.
Lo que a nadie se le ocurria es decir que esas distribuciones eran servidores alternativos diferentes al servidor alternativo que haciamos nosotros xD. Al final lo que tenian casi todas en comun era que eran muy inestables porque no comprendian en la inmensa mayoria de los casos como funcionaba minimamente el servidor ;).
Aun asi lo bueno del opensource es que dio lugar a algunas modificaciones interesantes, recuerdo un Capture the flag, deathmatchs o uno de pokemon :P.

Hubo algunos casos de manzanas podridas que se barrenaba el codigo GPL, hacia sus modificaciones y solo publicaba la version compilada saltandose la licencia, pues claro, pero no solian vivir mucho tiempo :P.
No hagais vosotros lo mismo... porque ni es etico, ni es legal ;).

Que cacharreamos cuatro cosillas... Que esos servidores no duran mucho...

De momento 13 años van campeón y somos el servidor de habla hispana con más jugadores online. Cada vez vas acertando más
Puedes montarte el mismo servidor y comprobar las diferencias por ti mismo.... O tampoco tienes tiempo? Igual si te hubiera pillado hace cinco años si verdad? [qmparto] [qmparto] [qmparto]

Enga a cuidarse que no te voy a dar más explicaciones que ya has demostrado lo troll que eres.

Cuando TU demuestres algo hablamos lo que quieras

P.D.: Le vas a poner las licencias GNU-GPL a tu "proof of concept"? Porque hay 8 millones de parados que les vendría muy bien tu "cheto" [qmparto] [qmparto] [qmparto]

Hoy en dia y despues de 20 años, aun sigue gente con cientos de servidores basados en el servidor alternativo del forme parte, y la inmensa mayoria de gente de esos cientos de servidores sabe lo mismo que tu de desarrollar un servidor mmorpg. La inmensa mayoria funcionan exactamente igual que el servidor oficial o alternativo (vamos que no han tocado absolutamente nada a bajo nivel o de arquitectura, solo han editado funciones de funcionalidades de alto nivel y ajustado valores :P). De hecho para montar un servidor privado basado en el codigo de nuestro servidor no tenias ni que tocar el codigo en c++ para adaptarlo a tu gusto, podias perfectamente usar scripts en LUA, editar archivos de configuracion y modificar el mapa visualmente con cualquiera de los multiples editores de mapas que fueron saliendo ;).

Recapitulando, dices que eres desarrollador y que has desarrollado un servidor alternativo, pero resulta que me dices que el repositorio es privado y tal (perfecto), me posteas un trocito de codigo (que encima es super simple y no hace nada relacionado con lo que se hablaba, ni toca nada ni de ediccion de memoria de otro proceso ni de comunicacion de red... pero bueno).
Resulta que como ya todo olia muy mal me da por curiosidad por pegar en google el nombre de la primera funcion, y placa primer resultado un github con un codigo practicamente identico, eso si con los comentarios en ingles y con su licencia y creditos como suele ser lo habitual, en fin.
Luego me pones de escusa que es que el servidor que montais esta basado en ese codigo abierto... que es lo normal, que bla bla bla...

Al final hasta tengo dudas hasta de que siquiera entiendas ni lo que hace ese codigo abierto que habeis fusilado para montar un servidor privado.

Te explico que coger un proyecto de un servidor alternativo hecho por otra gente, toquetear el mapa, editar funcionalidades superficiales (bien sea por scripts o editando el propio codigo si no los soporta) y luego montar un servidor privado para que la gente se conecte y juegue (y supongo que os done dinero con la escusa de costes del servidor? xD), no os convierte en desarrolladores de servidores mmorpg ;).
Si fuese asi el que hace una sencilla app de escritorio seria desarrollador de sistemas operativos xD.

Estoy completamente seguro de que ni has desarrollado en tu vida algo tan sencillo como es un servicio para windows. Aunque estoy seguro que puedes perfectamente googlear un ejemplo por internet darle a compilar al visual studio y decirme que que si (eso si, no te olvides de fusilarle la licencia y los creditos primero).

P.D.: Y se me olvido comentartelo en el anterior post, pero como parece que sigues insistiendo otra vez, te lo intentare explicar. Las cifras oficiales que da el gobierno de 4 millones de parados no incluyen los mas de 4 millones en situacion de ERTE, que tambien son parados por si no lo sabias, ni trabajan, ni cotizan a la seguridad social y reciben la prestacion por desempleo (los que tienen la suerte de recibirla que aun a dia de hoy y despues de mas de 2 meses aun hay gente sin recibir un duro :/). Yo no he dejado de trabajar ni un dia y no es lo comun en el sector privado... en mi empresa el primer lunes de empezar el estado de alarma tuvimos una mañana complicada, donde despidieron a muchos y a otros ERTE (quedamos el 10% de la plantilla trabajando porque teniamos responsabilidades esenciales, sino nos hubiese tocado como al resto), no sabes la pena que me dieron las pobres chicas de administracion que llevaban pocos meses en la empresa y salian todas llorando... y te aseguro que el jefe no es mala persona.

Aunque supongo a partir de ahora empezaran a abrir algunos comercios y rescataran a una pequeña parte de los ERTE (teniendo en cuenta que ayer finalizaba el plazo para presentar los impuestos del primer trimestre para pymes y autonomos, por lo que practicamente a ninguno le merecia la pena abrir una semana antes, con aforo reducido y tener que presentarlos xD, aunque supongo que algunos ni se dieron cuenta del pequeño detalle).


Primero... ya te dije qu trabajamos en un proyecto.... aprende a leer que vas bastante mal en esto xD.

Segundo.... superficialmente? Que tal si pruebas a instalarte un local (si es que sabes que lo dudo muchísimo) y vemos las diferencias superficiales? XDDDDD
Las raids vienen programadas? El sistema de hilos? XDDDD
Me encanta cuando hablas sin tener ni puta idea y mas sin demostrar nada xD

Otra cosilla.... los que están en ERTE es una situación especial ya que es temporal y no son contabilizados como parados ya que siguen cotizando a efectos a la seguridad social, salvo que no lo paga la empresa. Esto peudes corroborarlo viendo la vida laboral campeón. Toma, para que veas un poco como funciona que te veo muy perdido xD
Los Expedientes de Regulación Temporal de Empleo (ERTE) son, en definitiva, una suspensión temporal del contrato de trabajo. Ni la empresa tiene obligación de pagar al trabajador que está incluido en el ERTE, ni el empleado tiene la obligación de realizar su trabajo.

Sin embargo, durante el ERTE, la relación laboral permanece, no ha desaparecido y tanto la empresa como el trabajador tienen que seguir cumpliendo con sus obligaciones de cotización a la Seguridad Social, entendiéndose este periodo como efectivamente cotizado (art. 24.2 RDL 8/2020)


Ale, sigue inventandote cosas coo has hecho en todo el post, como el famoso "proof of concept" que tiene huevos que cuestienens mi trabajo cuando TU no has demostrado nada eh campeón? [qmparto] [qmparto] [qmparto]

Cuando sepas programar y saber el trabajo que hay detras de un MMORPG hablamos un poco de eso y si quieres hasta te enseño... ya que has demostrado que ni entiendes del VAC, ni de MMORPG, y mucho menos de desarrollo...

Cuando te instales un local y aprendas un poco como funciona pues eso, hablamos... pero como ya me he cansado de que no demuestres nada, y ya has demostrado que no tienes ni puta idea, y que me he reido bastante con tu ignorancia, pero ya empiezas a cansar... pasas a la lista de ignorados porque ya no me entretienen lo suficiente.

P.D.: Antes de ponerte en ignorados.... te comento un poco que vas a necesitas Git Extensions, MySQL 5.5 (te recomiendo este antes que el 7), OpenSSL, CMAKE (este super util, pero recuerda hacer la build en la misma arquitectura que vayas a compilarlo, x86, x64, ARM...), Framework, BOOST (recuerda que tienes que añadir la variable en el sistema), ZeroMQ y por supuesto.... VS... Igualmente depende de la build que uses en el CMAKE tienes que usar VS 15 o 17...

Venga campeón... cuando eso me avisas para hablar con alguién que entienda un mínimo.... ah! y no se te olvide el "super cheto" ese que "podías" programar [qmparto] [qmparto]

P.D.2: Cuando leas esto ya estarás en ignorados así que piensa que ni te voy a leer ya tus mentiras asi que piensa en eso xD

P.D.3: P.D. significa post data.... es que viendo el nivel prefiero explicartelo xD
djlogan83 escribió:
jimi escribió:
djlogan83 escribió:Que cacharreamos cuatro cosillas... Que esos servidores no duran mucho...

De momento 13 años van campeón y somos el servidor de habla hispana con más jugadores online. Cada vez vas acertando más
Puedes montarte el mismo servidor y comprobar las diferencias por ti mismo.... O tampoco tienes tiempo? Igual si te hubiera pillado hace cinco años si verdad? [qmparto] [qmparto] [qmparto]

Enga a cuidarse que no te voy a dar más explicaciones que ya has demostrado lo troll que eres.

Cuando TU demuestres algo hablamos lo que quieras

P.D.: Le vas a poner las licencias GNU-GPL a tu "proof of concept"? Porque hay 8 millones de parados que les vendría muy bien tu "cheto" [qmparto] [qmparto] [qmparto]

Hoy en dia y despues de 20 años, aun sigue gente con cientos de servidores basados en el servidor alternativo del forme parte, y la inmensa mayoria de gente de esos cientos de servidores sabe lo mismo que tu de desarrollar un servidor mmorpg. La inmensa mayoria funcionan exactamente igual que el servidor oficial o alternativo (vamos que no han tocado absolutamente nada a bajo nivel o de arquitectura, solo han editado funciones de funcionalidades de alto nivel y ajustado valores :P). De hecho para montar un servidor privado basado en el codigo de nuestro servidor no tenias ni que tocar el codigo en c++ para adaptarlo a tu gusto, podias perfectamente usar scripts en LUA, editar archivos de configuracion y modificar el mapa visualmente con cualquiera de los multiples editores de mapas que fueron saliendo ;).

Recapitulando, dices que eres desarrollador y que has desarrollado un servidor alternativo, pero resulta que me dices que el repositorio es privado y tal (perfecto), me posteas un trocito de codigo (que encima es super simple y no hace nada relacionado con lo que se hablaba, ni toca nada ni de ediccion de memoria de otro proceso ni de comunicacion de red... pero bueno).
Resulta que como ya todo olia muy mal me da por curiosidad por pegar en google el nombre de la primera funcion, y placa primer resultado un github con un codigo practicamente identico, eso si con los comentarios en ingles y con su licencia y creditos como suele ser lo habitual, en fin.
Luego me pones de escusa que es que el servidor que montais esta basado en ese codigo abierto... que es lo normal, que bla bla bla...

Al final hasta tengo dudas hasta de que siquiera entiendas ni lo que hace ese codigo abierto que habeis fusilado para montar un servidor privado.

Te explico que coger un proyecto de un servidor alternativo hecho por otra gente, toquetear el mapa, editar funcionalidades superficiales (bien sea por scripts o editando el propio codigo si no los soporta) y luego montar un servidor privado para que la gente se conecte y juegue (y supongo que os done dinero con la escusa de costes del servidor? xD), no os convierte en desarrolladores de servidores mmorpg ;).
Si fuese asi el que hace una sencilla app de escritorio seria desarrollador de sistemas operativos xD.

Estoy completamente seguro de que ni has desarrollado en tu vida algo tan sencillo como es un servicio para windows. Aunque estoy seguro que puedes perfectamente googlear un ejemplo por internet darle a compilar al visual studio y decirme que que si (eso si, no te olvides de fusilarle la licencia y los creditos primero).

P.D.: Y se me olvido comentartelo en el anterior post, pero como parece que sigues insistiendo otra vez, te lo intentare explicar. Las cifras oficiales que da el gobierno de 4 millones de parados no incluyen los mas de 4 millones en situacion de ERTE, que tambien son parados por si no lo sabias, ni trabajan, ni cotizan a la seguridad social y reciben la prestacion por desempleo (los que tienen la suerte de recibirla que aun a dia de hoy y despues de mas de 2 meses aun hay gente sin recibir un duro :/). Yo no he dejado de trabajar ni un dia y no es lo comun en el sector privado... en mi empresa el primer lunes de empezar el estado de alarma tuvimos una mañana complicada, donde despidieron a muchos y a otros ERTE (quedamos el 10% de la plantilla trabajando porque teniamos responsabilidades esenciales, sino nos hubiese tocado como al resto), no sabes la pena que me dieron las pobres chicas de administracion que llevaban pocos meses en la empresa y salian todas llorando... y te aseguro que el jefe no es mala persona.

Aunque supongo a partir de ahora empezaran a abrir algunos comercios y rescataran a una pequeña parte de los ERTE (teniendo en cuenta que ayer finalizaba el plazo para presentar los impuestos del primer trimestre para pymes y autonomos, por lo que practicamente a ninguno le merecia la pena abrir una semana antes, con aforo reducido y tener que presentarlos xD, aunque supongo que algunos ni se dieron cuenta del pequeño detalle).


Primero... ya te dije qu trabajamos en un proyecto.... aprende a leer que vas bastante mal en esto xD.

Segundo.... superficialmente? Que tal si pruebas a instalarte un local (si es que sabes que lo dudo muchísimo) y vemos las diferencias superficiales? XDDDDD
Las raids vienen programadas? El sistema de hilos? XDDDD
Me encanta cuando hablas sin tener ni puta idea y mas sin demostrar nada xD

Otra cosilla.... los que están en ERTE es una situación especial ya que es temporal y no son contabilizados como parados ya que siguen cotizando a efectos a la seguridad social, salvo que no lo paga la empresa. Esto peudes corroborarlo viendo la vida laboral campeón. Toma, para que veas un poco como funciona que te veo muy perdido xD
Los Expedientes de Regulación Temporal de Empleo (ERTE) son, en definitiva, una suspensión temporal del contrato de trabajo. Ni la empresa tiene obligación de pagar al trabajador que está incluido en el ERTE, ni el empleado tiene la obligación de realizar su trabajo.

Sin embargo, durante el ERTE, la relación laboral permanece, no ha desaparecido y tanto la empresa como el trabajador tienen que seguir cumpliendo con sus obligaciones de cotización a la Seguridad Social, entendiéndose este periodo como efectivamente cotizado (art. 24.2 RDL 8/2020)


Ale, sigue inventandote cosas coo has hecho en todo el post, como el famoso "proof of concept" que tiene huevos que cuestienens mi trabajo cuando TU no has demostrado nada eh campeón? [qmparto] [qmparto] [qmparto]

Cuando sepas programar y saber el trabajo que hay detras de un MMORPG hablamos un poco de eso y si quieres hasta te enseño... ya que has demostrado que ni entiendes del VAC, ni de MMORPG, y mucho menos de desarrollo...

Cuando te instales un local y aprendas un poco como funciona pues eso, hablamos... pero como ya me he cansado de que no demuestres nada, y ya has demostrado que no tienes ni puta idea, y que me he reido bastante con tu ignorancia, pero ya empiezas a cansar... pasas a la lista de ignorados porque ya no me entretienen lo suficiente.

P.D.: Antes de ponerte en ignorados.... te comento un poco que vas a necesitas Git Extensions, MySQL 5.5 (te recomiendo este antes que el 7), OpenSSL, CMAKE (este super util, pero recuerda hacer la build en la misma arquitectura que vayas a compilarlo, x86, x64, ARM...), Framework, BOOST (recuerda que tienes que añadir la variable en el sistema), ZeroMQ y por supuesto.... VS... Igualmente depende de la build que uses en el CMAKE tienes que usar VS 15 o 17...

Venga campeón... cuando eso me avisas para hablar con alguién que entienda un mínimo.... ah! y no se te olvide el "super cheto" ese que "podías" programar [qmparto] [qmparto]

P.D.2: Cuando leas esto ya estarás en ignorados así que piensa que ni te voy a leer ya tus mentiras asi que piensa en eso xD

P.D.3: P.D. significa post data.... es que viendo el nivel prefiero explicartelo xD

Vale campeon, llevas con lo de "y no me contestes que te he metido en ignorados" varios posts, al menos se inteligente y despues de leerlo simplemente no contestes xD.
Supongo que no tendras la suerte de verte afectado por un ERTE (para eso primero tienes que trabajar que tengo la impresion que de eso ni mu). En un ERTE ni acumulas dias trabajados para tu pension, ni te van a contar para la extras si tienes 14 pagas... vamos estas parado. Porque te crees que cuando estas en ERTE cobras la prestacion de desempleo y la gastas obviamente (salvo en el caso especifico de estos ERTEs por fuerza mayor donde no se te van a descontar los dias acumulados que tengas de paro).

Me listas las dependencias de un proyecto que usa cmake como si fuese algo complicado? Te tenia que ver a ti manejando dependencias con Makefiles a mano en multiples distribuciones de linux en los años 90 y 2000 cuando ni existia cmake o estaba en pañales, y muy pocas biliotecas tenian pkg-config, que la gente se las tenia que instalar a mano porque la mayoria de ellas no estaban en los gestores de paquetes y en cada distribucion las metia en un sitio xD.

En fin, tengo clarisimo que no sabes ni como funciona tu propio proyecto en el que "trabajas", porque sueltas cosas aleatorias que has leido en algun sitio sin siquiera comprenderlas lo mas minimo. Lo unico que me demostraste es que sabes lo que es un comentario y como editarlo, y ademas que tienes 0 escrupulos para aprovecharte del trabajo de otras personas e intentar pasarlo como tuyo sin siquiera tener la minima decencia de dar credito a su trabajo :(.

Y luego hablas de comprension lectora y me intentas explicar que significa "P.D." cuando en el anterior post que tu mismo citas lo he utilizado xD.

Es que no hay por donde cogerte, te juro que cada vez se me quitan mas las ganas de que parte de mis impuestos se empleen en inutiles que ni aportan nada, ni ponen el mas minimo interes en aprender para algun dia llegar a aportar algo.
89 respuestas
1, 2