Enviar respuesta 
[GUIA] El Parametro fNoMonsters de los Traces
Autor Mensaje
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #1
[GUIA] El Parametro fNoMonsters de los Traces
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
#define IGNORE_MONSTERS                 1
#define IGNORE_MISSILE                  2
#define IGNORE_GLASS                    0x100 

Y aparece en los siguientes Trace functions:
  • TraceLine
  • TraceMonsterHull
  • TraceHull
  • TraceSphere (el cual no se toma en cuenta porque es una función que no hace nada, solo tira un error al usarla, asi que descartenla)

Todas posibles de hookear y ejecutar con Fakemeta. (ver fakemeta_const.inc)

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.
  1. TraceLine viaja con un tamaño nulo, es decir, {0,0,0} y {0,0,0} como mins y maxs, es decir, como una linea o recta.
  2. TraceHull tendra un tamaño variado según su parametro hullNumber, los cuales son las constantes HULL_ de hlsdk_const.inc y esos tamaños quedan hardcodeados en el engine despues que le preguntan al mod sus correspondientes valores (es por eso que el tamaño de un player en Half-Life es distinto al de uno en Counter-Strike).
  3. TraceMonsterHull viajara usando el tamaño de la entidad que es pasada en el primer parametro. Es muy útil al momento de querer usar un tamaño definido por nosotros si es que queremos detectar si una entidad esta atascada.



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:
  • El tipo mismo, que puede ser 0-1-2
  • Si ignorará vidrios o no.


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:
  1. Tengan su rendermode distinto a kRenderNormal
  2. No tengan su flags con el bit FL_WORLDBRUSH

Ejemplo: La mayoria de las veces que uno crea un mapa y hace "vidrios", suelen ser func_breakable con algo de trasparencia -> su "Render Mode" debe ser "Texture - Some Light" equivalente al rendermode kRenderTransTexture. Esta ya seria una entidad ignorada por el flag IGNORE_GLASS ya que los func_breakable no tienen el flag FL_WORLDBRUSH.

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.

Por lo mismo al flag se le dice "World Brush", ya que es considerado como un bloque del mapa, y estos tienen la caracteristica de que ningun Trace puede traspasarlos.

Esta escrito en el mismo HLSDK

Código PHP:
    // Flag unbreakable glass as "worldbrush" so it will block ALL tracelines
    
if ( !IsBreakable() && pev->rendermode != kRenderNormal )
        
pev->flags |= FL_WORLDBRUSH

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 Gran sonrisa

Dudas haganlas saber en el tema, y no se desvien preguntando estupideces.

(Este mensaje fue modificado por última vez en: 28/09/2014 11:44 PM por meTaLiCroSS.)
28/09/2014 11:43 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
roccoxx Sin conexión
Miembro Destacado


Plugin developer Trebol purpura 1k
Mensajes: 1,159
Registro en: Oct 2013
Reputación: 18
Mensaje: #2
RE: [GUIA] El Parametro fNoMonsters de los Traces
IGNORE_MISSILE te juro que yo pensaba eso de misiles xD

bueno ahora como cambio el limite de precache Crab

buen tutorial (pulgararriba)

futuro ingeniero agrónomo.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

volví a vender plugins, contactame
28/09/2014 11:56 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #3
RE: [GUIA] El Parametro fNoMonsters de los Traces
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í!
(Este mensaje fue modificado por última vez en: 29/09/2014 02:03 AM por [Anti].)
29/09/2014 02:02 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #4
RE: [GUIA] El Parametro fNoMonsters de los Traces
Ahi hay 6 dimensiones, 3 c/vector, ahora que se interpreten en el mismo plano es otra cosa Whatever

29/09/2014 02:05 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
[Anti] Sin conexión
Miembro Sr.


Mensajes: 725
Registro en: Oct 2013
Reputación: 20
Mensaje: #5
RE: [GUIA] El Parametro fNoMonsters de los Traces
Ahh, entonces sería cubo Lengua
29/09/2014 02:30 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
RauliTop Sin conexión
Miembro Héroe


El protector 1k
Mensajes: 1,961
Registro en: Oct 2013
Reputación: 36
Mensaje: #6
RE: [GUIA] El Parametro fNoMonsters de los Traces
(28/09/2014 11:56 PM)roccoxx escribió:  bueno ahora como cambio el limite de precache Crab

es off, pero bué... para que veas que me conecto Whatever

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.

(17/04/2015 03:36 PM)Neeeeeeeeeel.- escribió:  No se va a volver a conectar a internet en toda su puta vida... nadie sube porno a mi foro y vive para contarlo.
29/09/2014 09:52 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #7
RE: [GUIA] El Parametro fNoMonsters de los Traces
(29/09/2014 09:52 AM)RauliTop escribió:  
(28/09/2014 11:56 PM)roccoxx escribió:  bueno ahora como cambio el limite de precache Crab

es off, pero bué... para que veas que me conecto Whatever

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.

Lo que dijo rocoxxx fue obviamente una joda para el topic, si vas a comentar, minimo algo relacionado con el tema, porfavor Sonrisa

29/09/2014 09:57 AM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Federicomb Sin conexión
Miembro Destacado


Plugin developer Trebol verde Trebol de oro 1k
Mensajes: 1,038
Registro en: Jan 2014
Reputación: 24
Mensaje: #8
RE: [GUIA] El Parametro fNoMonsters de los Traces
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.

Believe, be yourself and don't hold on to just one dream ❤


29/09/2014 12:17 PM
Visita su sitio web Encuentra todos sus mensajes Cita este mensaje en tu respuesta
meTaLiCroSS Sin conexión
Miembro Destacado


Buen Tutorial AMXX Support Pensador Trebol verde 1k
Mensajes: 1,420
Registro en: Oct 2013
Reputación: 52
Mensaje: #9
RE: [GUIA] El Parametro fNoMonsters de los Traces
Debes partir por saber como se usan los Tracelines, y hay tutoriales sobre eso

29/09/2014 02:44 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
mongito100 Sin conexión
Miembro Héroe


El protector
Mensajes: 1,566
Registro en: Feb 2014
Reputación: 28
Mensaje: #10
RE: [GUIA] El Parametro fNoMonsters de los Traces
(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.
Roflmao

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 Crab

[TUT] Carnage

Fight

"El limite de los backdoors de gente q sabe programar como nostros lo impone nuestra maldad interior y creeme q soy muy malo en el interior"

Anónimo
29/09/2014 04:16 PM
Encuentra todos sus mensajes Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)

Contáctanos | Allied Modders en español | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS