[GUIA] El Parametro fNoMonsters de los Traces - Versión para impresión +- Allied Modders en español (https://amxmodx-es.com) +-- Foro: AMX Mod X - Scripting (https://amxmodx-es.com/Forum-AMX-Mod-X-Scripting) +--- Foro: Tutoriales / Guias (https://amxmodx-es.com/Forum-Tutoriales-Guias) +--- Tema: [GUIA] El Parametro fNoMonsters de los Traces (/Thread-GUIA-El-Parametro-fNoMonsters-de-los-Traces) |
[GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 28/09/2014 Muchos se han fijado alguna vez cuando ven ejecutado un Trace cualquiera (TraceLine más recurrente) siempre se fijan en un parametro de escasa informacion la cual intriga saber que porqueria trata de decir. Estas recurrentemente suelen verse declaradas así: Cita:engfunc(EngFunc_TraceLine, vecStart, vecAim, IGNORE_MONSTERS, iIgnoreEnt, 0) La cual corresponde al parametro fNoMonsters de éste trace. El conjunto de valores validos de este parametro la podemos encontrar en hlsdk_const.inc Código PHP: #define DONT_IGNORE_MONSTERS 0 Y aparece en los siguientes Trace functions:
La parte buena de esto es saber como interactuan estos valores. Y es aquí donde uno por curiosidad se pone a investigar cuando no tiene otra mierda más interesante que hacer en un Domingo típico. Antes de empezar a explicar, cabe decir que las 3 funciones hacen lo mismo, solo que varía el tamaño del Trace que viaja detectando colisiones. Eso es practicamente la labor de una Trace function. El tamaño del Trace es definido por 2 vectores, mins y maxs.
Empecemos. El parametro fNoMonsters define que solidos puede ignorar o no, ademas de la entidad del parametro pentToSkip que tienen estas Trace functions. Todos los Trace si o si van a parar cuando toquen una parte del mapa que no sea entidad, que vendria siendo un solido del mapa, worldspawn, bloque, o como quieran decirle. ► DONT_IGNORE_MONSTERS (0) es el más sencillo. Se entiende que refiere a "NO IGNORAR MOUNSTRUOS", dando a saber que debe para al primer toque. Todo lo que no es parte de la integridad del mapa, es considerado un monstruo, por lo que este valor nos da a saber que el trace parará en CUALQUIER punto solido. ► IGNORE_MONSTERS (1) entra en dudas. Se entiende que refiere a "IGNORAR MONSTRUOS", y eso esta claro a simple vista, pero ¿que condiciones tiene una entidad que la haga ser un mounstruo? Este flag hará que el Trace ignore cualquier entidad, excepto las que tengan su movetype igual a MOVETYPE_PUSHSTEP. Las únicas entidades que tienen su movetype igual a MOVETYPE_PUSHSTEP son las entidades func_pushable. ► IGNORE_MISSILE (2) podría afirmar con toda seguridad que nadie sabe a que se refiere. Y lo chistoso es que su referencia a "IGNORAR MISILES" no tiene nada que ver a ignorar misiles literalmente, y da muy poco que decir. Este flag hará (lee bien) que el Trace tome OTRO tamaño (sea TraceLine/[Monster]Hull) a toda entidad que tenga en su flags (el pev) el bit FL_MONSTER por un tamaño de maxs {15,15,15} y mins {-15,-15,-15} (un cuadrado perfecto de 15 unidades por dimension) Como dije arriba, cada Trace tiene un tamaño (definido como una caja, mins y maxs), definamoslo como mins1 y maxs1. Antes de ser ejecutado el Trace, estos valores se copian a otro tamaño, llamemosle mins2 y maxs2. - Los mins1 y maxs1 seran el tamaño con el que seran verificados con todas las entidades 'exceptuando las de flag FL_MONSTER' - Mientras que los mins2 y maxs2 seran el tamaño con el que seran verificados las entidades 'de flag FL_MONSTER'. Pero como dije, estas se copian en un principio y terminan siendo lo mismo mins1 con mins2, y maxs1 con maxs2. IGNORE_MISSILE lo que hace es simplemente hacer que mins2 y maxs2 sean {15,15,15} y {-15,-15,-15} (ignorando el tamaño del Trace) respecticamente para las entidades con su flags que tengan el bit FL_MONSTER. Algo idiota, no le veo utilidad. _________________________________________________________________ IGNORE_GLASS es distinto a los 3 mencionados arriba. Los 3 mencionados son valores que son detectados directamente como 0 1 o 2, mientras que IGNORE_GLASS es detectado como un flag. Es por eso que el parametro fNoMonsters se divide en 2:
Las siguientes combinaciones son totalmente validas y únicamente validas: DONT_IGNORE_MONSTERS IGNORE_MONSTERS IGNORE_MISSILE IGNORE_GLASS DONT_IGNORE_MONSTERS | IGNORE_GLASS IGNORE_MONSTERS | IGNORE_GLASS IGNORE_MISSILE | IGNORE_GLASS Mientras que por ejemplo, las siguientes son invalidas: DONT_IGNORE_MONSTERS | IGNORE_MISSILE IGNORE_MONSTERS | IGNORE_MISSILE DONT_IGNORE_MONSTERS | IGNORE_MONSTERS (reverendo idiota para hacer esto) Y ahora, es donde vamos a definir que es considerado "un vidrio" para el engine. ► IGNORE_GLASS puesto como flag en cualquiera de los 3 mencionados, hará que el Trace ignore entidades que:
Las unicas entidades que tienen el flag FL_WORLDBRUSH son las "func_wall", siendo estas, ademas del mismo mundo, las unicas entidades imposibles de traspasar con un Trace. Espero haya hecho activar un buen grupo de neuronas haciendolos leer este tutorial. Todo lo escrito fue un research hecho en el engine, y acredito a OpenHLDS, OSHLDS, HLSDK y el IDA Pro por verificar con el mismo engine Dudas haganlas saber en el tema, y no se desvien preguntando estupideces. RE: [GUIA] El Parametro fNoMonsters de los Traces - roccoxx - 28/09/2014 IGNORE_MISSILE te juro que yo pensaba eso de misiles xD bueno ahora como cambio el limite de precache buen tutorial (pulgararriba) RE: [GUIA] El Parametro fNoMonsters de los Traces - [Anti] - 29/09/2014 un tamaño de maxs {15,15,15} y mins {-15,-15,-15} (un cuadrado perfecto de 15 unidades por dimension) No serian 30 unidades? Buena guia, seguí así! RE: [GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 29/09/2014 Ahi hay 6 dimensiones, 3 c/vector, ahora que se interpreten en el mismo plano es otra cosa RE: [GUIA] El Parametro fNoMonsters de los Traces - [Anti] - 29/09/2014 Ahh, entonces sería cubo :p RE: [GUIA] El Parametro fNoMonsters de los Traces - RauliTop - 29/09/2014 (28/09/2014, 11:56 PM)roccoxx escribió: bueno ahora como cambio el limite de precache es off, pero bué... para que veas que me conecto no se puede, por mucho que lo cambies el límite se encuentra tanto en el servidor como en el cliente. recuerdo que se podía hacer algo en el servidor... pero si lo superabas el límite se le crasheaba al jugador. por lo tanto, para poder hacerlo deberían también modificarle cosas al jugador... esas modificaciones no son relativamente fáciles y ya no sé más. RE: [GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 29/09/2014 (29/09/2014, 09:52 AM)RauliTop escribió:(28/09/2014, 11:56 PM)roccoxx escribió: bueno ahora como cambio el limite de precache Lo que dijo rocoxxx fue obviamente una joda para el topic, si vas a comentar, minimo algo relacionado con el tema, porfavor RE: [GUIA] El Parametro fNoMonsters de los Traces - Federicomb - 29/09/2014 Muchas gracias por compartir tu sabiduría. Creo que para entendérmelo bien lo tengo que leer algunas veces en profundidad y después tratar de aplicarlo. RE: [GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 29/09/2014 Debes partir por saber como se usan los Tracelines, y hay tutoriales sobre eso RE: [GUIA] El Parametro fNoMonsters de los Traces - mongito100 - 29/09/2014 (29/09/2014, 02:44 PM)meTaLiCroSS escribió: Y es aquí donde uno por curiosidad se pone a investigar cuando no tiene otra mierda más interesante que hacer en un Domingo típico. Algún día q este al pedo lo voy a leer mas a fondo pero lo leí por arriba y se nota q explicas muy bien RE: [GUIA] El Parametro fNoMonsters de los Traces - ivan - 29/09/2014 OHHHHHH NO, otra ves me tengo que quemar la cabeza u_u Buen tutorial (Y) . Solo leeí asta la mitad ._. RE: [GUIA] El Parametro fNoMonsters de los Traces - wicho - 05/04/2015 Tengo una pregunta el trace_line es igual a EngFunc_TraceLine? o cambia en algo? RE: [GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 05/04/2015 (05/04/2015, 05:11 AM)wicho escribió: Tengo una pregunta el trace_line es igual a EngFunc_TraceLine? o cambia en algo? trace_line es una native algo resumida de EngFunc_TraceLine. En la engfunc puedes pasar un handle de traceline generado por create_tr2. En la native de engine pasas un origen y un termino, y en el 4to parametro te saca la posicion de termino (obtenido por TR_vecEndPos), pero no te permite definir el flag del trace ([DONT_]IGNORE_MONSTERS), por defecto lo tiene en DONT_IGNORE_MONSTERS. Depende de lo que quieras realizar con el trace. RE: [GUIA] El Parametro fNoMonsters de los Traces - wicho - 05/04/2015 Gracias por la explicacion es que estaba pasando natives de fakemeta a engine y me tope con esto y me salio duda.. por ejemplo este stock: Código PHP: stock get_user_hitpoint(id, Float:hOrigin[3]) es recomendable pasarlo a engine es decir el traceline? RE: [GUIA] El Parametro fNoMonsters de los Traces - meTaLiCroSS - 05/04/2015 Lo dejaría así: Código PHP: stock get_user_hitpoint(id, Float:hOrigin[3]) |