Mensajes: 417
Temas: 53
Registro en: May 2014
05/05/2017, 11:46 PM
(Última modificación: 05/05/2017, 11:48 PM por Ipolito.)
Hola gente. Estoy tratando de hacer lo siguiente.
Quiero hacer que X entidad sea visible solamente si el jugador es humano, si esta cerca y si esta apuntando a la entidad. Pero solamente la entidad a la que el jugador esta apuntando, no a todas. Hice algo asi, pero el problema es que se vuelven todas visibles.
Por ejemplo, hay 3 "cajas" (entidad) en el mapa, una cerca de la otra. Al apuntar a una de esas 3, se vuelven todas visibles, yo lo que quiero es que se vuelva visible solo la que estoy apuntando (?
Código PHP: public fw_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet) { if(pev_valid(ent)) { static sClassName[33]; entity_get_string(ent, EV_SZ_classname, sClassName, 32);
if(equali(sClassName, ENT_SURPRISE_CLASSNAME)) { if(g_zombie[host]) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) } else { static iPlayerID; iPlayerID = entity_get_int( eny, SURPRISE_OWNER );
if(!iPlayerID) { new iBody; if(get_user_aiming(host, ent, iBody) >= 75.0) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) } } } } }
return FMRES_IGNORED }
Mi duda es.. se puede hacer una entidad visible/invisible al apuntar ? Pero solamente esa entidad , la que estemos apuntando
Como tendria que ser ? Le tendria que setear un index unico a cada entidad ? Si alguien pudiera explicarme
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
Tendrias que calcular a que le esta apuntando el jugador en esa función, y si es una caja entonces visualizarla.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 417
Temas: 53
Registro en: May 2014
06/05/2017, 12:16 AM
(Última modificación: 06/05/2017, 12:24 AM por Ipolito.)
(06/05/2017, 12:13 AM)Treki escribió: Tendrias que calcular a que le esta apuntando el jugador en esa función, y si es una caja entonces visualizarla.
Eso hice, creo (? Pero me visualizaba todas
Edit: Hice algo asi y no funciono (?
Código PHP: public fw_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet) { static sur; sur = aimingAtSurprise(host)
if(sur) { static iPlayerID; iPlayerID = entity_get_int( sur, SURPRISE_OWNER );
if(!iPlayerID) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) }
}
return FMRES_IGNORED }
aimingAtSurprise(const id) { new iTarget; new iBody; if(get_user_aiming(id, iTarget, iBody) >= 70.0) return 0; if(iTarget){ if(isSurprise(iTarget)) { return iTarget; } return 0; }
return 0; }
isSurprise(const ent) { if(!is_valid_ent(ent)) return 0; new sClassName[32]; entity_get_string(ent, EV_SZ_classname, sClassName, charsmax(sClassName)); if( sClassName[0] == 'e' && sClassName[1] == 'n' && sClassName[2] == 't' && sClassName[3] == 'S' && sClassName[4] == 'u' && sClassName[5] == 'r' && sClassName[6] == 'p' && sClassName[7] == 'r' && sClassName[8] == 'i' && sClassName[9] == 's' && sClassName[10] == 'e') return 1; return 0; }
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
Buscá como usar bien get_user_aiming y te vas a dar cuenta del error.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
06/05/2017, 12:45 AM
(Última modificación: 06/05/2017, 05:33 PM por Chamo..)
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen
PD: Otra cosa, para que chequeas el iOwner de la entidad, si según tú, querés volver invisible la entidad solo si el host es humano, esta cercano y la esta mirando directamente.
Mensajes: 417
Temas: 53
Registro en: May 2014
06/05/2017, 12:54 AM
(Última modificación: 06/05/2017, 12:54 AM por Ipolito.)
(06/05/2017, 12:45 AM)Chamo. escribió: Pero si recien revise y get_user_aiming devuelve solo los indexes de los jugadores o entendi mal
PD: Otra cosa, para que chequeas el iOwner de la entidad, si según tú, querés volver invisible la entidad solo si el host es humano, esta cercano y la esta mirando directamente.
Devuelve index de entidades tambien (?
Yo quiero hacerla invisible para todos digamos, y que al estar cerca se vuelva visible (siendo humano).
Hice algo asi pero nada (? : no se me ocurre otra forma ._.
Código PHP: public fw_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet) { new body, szClassname[32]; get_user_aiming(host, ent, body); if (is_valid_ent(ent)) { entity_get_string(ent, EV_SZ_classname, szClassname, charsmax(szClassname)); if (equal(szClassname, ENT_SURPRISE_CLASSNAME)) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) } }
return FMRES_IGNORED }
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
06/05/2017, 12:58 AM
(Última modificación: 06/05/2017, 05:34 PM por Chamo..)
(06/05/2017, 12:54 AM)Ipolito escribió: (06/05/2017, 12:45 AM)Chamo. escribió: Pero si recien revise y get_user_aiming devuelve solo los indexes de los jugadores o entendi mal
PD: Otra cosa, para que chequeas el iOwner de la entidad, si según tú, querés volver invisible la entidad solo si el host es humano, esta cercano y la esta mirando directamente.
Devuelve index de entidades tambien (?
Yo quiero hacerla invisible para todos digamos, y que al estar cerca se vuelva visible (siendo humano).
Hice algo asi pero nada (? : no se me ocurre otra forma ._.
Código PHP: public fw_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet) { new body, szClassname[32]; get_user_aiming(host, ent, body); if (is_valid_ent(ent)) { entity_get_string(ent, EV_SZ_classname, szClassname, charsmax(szClassname)); if (equal(szClassname, ENT_SURPRISE_CLASSNAME)) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) } }
return FMRES_IGNORED }
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen
Como lo pintas tenes que chequear la entidad que el jugar apunta (si queres te paso un code que halle recién en AM para buscar una entidad si la apuntas), ya que tengo entendido que las entidades te serán transmitidas, asi no las estés "apuntando".
Es decir, que así no apuntes la entidad con el crosshair, esta te sera transmitida, si estas en su PVS (algo así capte yo)
Mensajes: 417
Temas: 53
Registro en: May 2014
(06/05/2017, 12:58 AM)Chamo. escribió: (06/05/2017, 12:54 AM)Ipolito escribió: (06/05/2017, 12:45 AM)Chamo. escribió: Pero si recien revise y get_user_aiming devuelve solo los indexes de los jugadores o entendi mal
PD: Otra cosa, para que chequeas el iOwner de la entidad, si según tú, querés volver invisible la entidad solo si el host es humano, esta cercano y la esta mirando directamente.
Devuelve index de entidades tambien (?
Yo quiero hacerla invisible para todos digamos, y que al estar cerca se vuelva visible (siendo humano).
Hice algo asi pero nada (? : no se me ocurre otra forma ._.
Código PHP: public fw_AddToFullPack(es_handle, e, ent, host, hostflags, player, pSet) { new body, szClassname[32]; get_user_aiming(host, ent, body); if (is_valid_ent(ent)) { entity_get_string(ent, EV_SZ_classname, szClassname, charsmax(szClassname)); if (equal(szClassname, ENT_SURPRISE_CLASSNAME)) { set_es(es_handle, ES_RenderMode, kRenderTransAlpha) set_es(es_handle, ES_RenderAmt, 0) } }
return FMRES_IGNORED }
La cuestión es, que según revise get_user_aiming devuelve solo indexes de jugadores, y como lo pintas tenes que chequear la entidad que el jugar apunta (si queres te paso un code que halle recién en AM para buscar una entidad si la apuntas), ya que tengo entendido que las entidades te serán transmitidas, asi no las estés "apuntando"
Yo por ejemplo lo que uso para saber si esta mirando una sentry es esto:
Código PHP: aimingAtSentry(const id) { new iTarget; new iBody; if(get_user_aiming(id, iTarget, iBody) >= 70.0) return 0; if(iTarget){ if(isSentry(iTarget)) { return iTarget; } return 0; }
return 0; }
isSentry(const ent) { if(!is_valid_ent(ent)) return 0; new sClassName[32]; entity_get_string(ent, EV_SZ_classname, sClassName, charsmax(sClassName)); if( sClassName[0] == 'e' && sClassName[1] == 'n' && sClassName[2] == 't' && sClassName[3] == 'S' && sClassName[4] == 'e' && sClassName[5] == 'n' && sClassName[6] == 't' && sClassName[7] == 'r' && sClassName[8] == 'y') return 1; return 0; }
Intente hacerlo con las cajas pero no funciono (? . Pasa el code a ver
Mensajes: 876
Temas: 74
Registro en: Sep 2015
Reputación:
11
06/05/2017, 01:04 AM
(Última modificación: 06/05/2017, 01:09 AM por Web Controller.)
Código PHP: static iBox, iBody, szClassname[ 16 ];
get_user_aiming( iId, iBox, iBody ); if( is_valid_ent( iBox ) ) { entity_get_string( iBox, EV_SZ_classname, szClassname, charsmax( szClassname ) ); if( equal( szClassname, g_eBox[ BOX_CLASSNAME ] ) ) { remove_entity( iBox ); g_iCreated_Boxes--; Print_Color( iId, "%s Se ha removido la !gcaja!y correctamente.", g_szPlugin_Information[ CHAT_PREFIX ] ); } }
else Print_Color( iId, "%s La entidad que estabas apuntando no es !gvalida!y.", g_szPlugin_Information[ CHAT_PREFIX ] );
Capaz te sirva.
EDIT:
Asi deberia funcionar. Lo que no se si esta correcto es la parte de donde utilizas "es_handle".
Código PHP: public fw_AddToFullPack( es_handle, e, ent, host, hostflags, player, pSet ) { static iEntity, iBody, szClassname[ 16 ];
get_user_aiming( host, iEntity, iBody ); if( is_valid_ent( iEntity ) ) { entity_get_string( iEntity, EV_SZ_classname, szClassname, charsmax( szClassname ) ); if( equal( szClassname, ENT_SURPRISE_CLASSNAME ) ) { set_es( es_handle, ES_RenderMode, kRenderTransAlpha ) set_es( es_handle, ES_RenderAmt, 0 ) } }
return FMRES_IGNORED }
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
06/05/2017, 01:05 AM
(Última modificación: 06/05/2017, 05:34 PM por Chamo..)
Is user aiming at an entity (cabe destacar, que Exolent[jNr] advierte no estar seguro de que sea un método eficiente)
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen
Mensajes: 417
Temas: 53
Registro en: May 2014
06/05/2017, 01:27 AM
(Última modificación: 06/05/2017, 10:32 AM por Ipolito.)
EDIT: Ya lo solucione :V
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
Podrías dejar la solución para los demas
Mensajes: 417
Temas: 53
Registro en: May 2014
(06/05/2017, 10:42 AM)Chamo. escribió: Podrías dejar la solución para los demas
Chequeando si es zombie/humano, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
06/05/2017, 10:46 AM
(Última modificación: 06/05/2017, 05:33 PM por Chamo..)
(06/05/2017, 10:44 AM)Ipolito escribió: (06/05/2017, 10:42 AM)Chamo. escribió: Podrías dejar la solución para los demas
Chequeando si es zombie/humano, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible
Pero y si viene alguien buscando algo similar y no sabe ?
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen
Mensajes: 417
Temas: 53
Registro en: May 2014
(06/05/2017, 10:46 AM)Chamo. escribió: (06/05/2017, 10:44 AM)Ipolito escribió: (06/05/2017, 10:42 AM)Chamo. escribió: Podrías dejar la solución para los demas
Chequeando si es zombie/humano, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible
Pero y si viene alguien buscando algo similar y no sabe ?
Otra cosa, usaste get_user_aiming?, si es así, pues seguramente no me quedo claro el uso de esa native
Sin uso de get_user_aiming, osea como dije antes, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible. Si la distancia entre la entidad y el jugador es mayor a 85 se vuelve invisible, si es menor a 85 se vuelve visible. Igual depende mucho de lo que quiera hacer la persona xD, no creo que nadie pida algo como esto . No lo pude hacer con get_user_aiming porque no funcionaba, no se porque. Get_user_aiming lo uso para saber si estaba apuntando a un laser o sentry y ahi les muestro un hud
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
Bueno
(06/05/2017, 10:52 AM)Ipolito escribió: (06/05/2017, 10:46 AM)Chamo. escribió: (06/05/2017, 10:44 AM)Ipolito escribió: (06/05/2017, 10:42 AM)Chamo. escribió: Podrías dejar la solución para los demas
Chequeando si es zombie/humano, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible
Pero y si viene alguien buscando algo similar y no sabe ?
Otra cosa, usaste get_user_aiming?, si es así, pues seguramente no me quedo claro el uso de esa native
Sin uso de get_user_aiming, osea como dije antes, la distancia entre la entidad y el jugador, y ahi la vuelvo visible/invisible. Si la distancia entre la entidad y el jugador es mayor a 85 se vuelve invisible, si es menor a 85 se vuelve visible. Igual depende mucho de lo que quiera hacer la persona xD, no creo que nadie pida algo como esto . No lo pude hacer con get_user_aiming porque no funcionaba, no se porque. Get_user_aiming lo uso para saber si estaba apuntando a un laser o sentry y ahi les muestro un hud
No se, creo que conozco a alguien interesado ....
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
06/05/2017, 02:21 PM
(Última modificación: 06/05/2017, 02:21 PM por Manu.)
Usando SURPRISE_OWNER para guardar el index del dueño de la caja, una solución puede ser esta para cualquiera que esté interesado:
Código PHP: public fw_AddToFullPack( es_handle, e, ent, host, hostflags, player, pSet ) { if( player || !get_orig_retval( ) ) return FMRES_IGNORED; static szClassname[ 16 ]; entity_get_string( ent, EV_SZ_classname, szClassname, charsmax( szClassname ) ); if( equal( szClassname, ENT_SURPRISE_CLASSNAME ) ) { if( !g_zombie[host] && entity_get_int( ent, SURPRISE_OWNER ) == host && entity_range( host, ent ) <= 75.0 ) return FMRES_IGNORED; set_es( es_handle, ES_RenderMode, kRenderTransAlpha ); set_es( es_handle, ES_RenderAmt, 0 ); } return FMRES_IGNORED; }
Siempre que usen una función que se llame muchas veces tienen que procurar hacer buen uso de los condicionales para evitar llamados innecesarios a módulos. Se podría inclusive hacer un estilo de cache para saber cual entidad es una caja y no tener que obtener el classname.
PD: No funcionaba con get_user_aiming porque no te fijaste como utilizar correctamente la función.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
06/05/2017, 04:37 PM
(Última modificación: 06/05/2017, 05:24 PM por Chamo..)
(06/05/2017, 02:21 PM)Treki escribió: Usando SURPRISE_OWNER para guardar el index del dueño de la caja, una solución puede ser esta para cualquiera que esté interesado:
Código PHP: public fw_AddToFullPack( es_handle, e, ent, host, hostflags, player, pSet ) { if( player || !get_orig_retval( ) ) return FMRES_IGNORED; static szClassname[ 16 ]; entity_get_string( ent, EV_SZ_classname, szClassname, charsmax( szClassname ) ); if( equal( szClassname, ENT_SURPRISE_CLASSNAME ) ) { if( !g_zombie[host] && entity_get_int( ent, SURPRISE_OWNER ) == host && entity_range( host, ent ) <= 75.0 ) return FMRES_IGNORED; set_es( es_handle, ES_RenderMode, kRenderTransAlpha ); set_es( es_handle, ES_RenderAmt, 0 ); } return FMRES_IGNORED; }
Siempre que usen una función que se llame muchas veces tienen que procurar hacer buen uso de los condicionales para evitar llamados innecesarios a módulos. Se podría inclusive hacer un estilo de cache para saber cual entidad es una caja y no tener que obtener el classname.
PD: No funcionaba con get_user_aiming porque no te fijaste como utilizar correctamente la función.
Gracias por el pedazo de codigo
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Dejame entender, quieres que la entidad sea por defecto invisible a todos, y quienes sean humanos+esten cerca+la esten mirando sean los únicos en tenerla visible?
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
(06/05/2017, 05:10 PM)meTaLiCroSS escribió: Dejame entender, quieres que la entidad sea por defecto invisible a todos, y quienes sean humanos+esten cerca+la esten mirando sean los únicos en tenerla visible?
+ que el humano sea el "dueño" de la caja creo.
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,902
Temas: 35
Registro en: Jan 2014
Reputación:
28
(06/05/2017, 05:10 PM)meTaLiCroSS escribió: Dejame entender, quieres que la entidad sea por defecto invisible a todos, y quienes sean humanos+esten cerca+la esten mirando sean los únicos en tenerla visible?
Lo de que sea invisible por defecto no se si lo tendrá así, pero a todo lo demás, si
Mensajes: 3,466
Temas: 18
Registro en: Oct 2013
Reputación:
54
Que me detalle bién los supuestos, así puedo explicarles una forma de lograr esto de una manera muy optimizada ya que se pueden reducir la cantidad de llamadas al módulo. AddToFullPack es una función peligrosa
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
(06/05/2017, 05:38 PM)meTaLiCroSS escribió: Que me detalle bién los supuestos, así puedo explicarles una forma de lograr esto de una manera muy optimizada ya que se pueden reducir la cantidad de llamadas al módulo. AddToFullPack es una función peligrosa
Por lo que entendí es algo como que si estas cerca de una caja te sea visible (como una busqueda del tesoro pero con cajas invisibles a menos que estés cerca)
Mensajes: 417
Temas: 53
Registro en: May 2014
(06/05/2017, 05:38 PM)meTaLiCroSS escribió: Que me detalle bién los supuestos, así puedo explicarles una forma de lograr esto de una manera muy optimizada ya que se pueden reducir la cantidad de llamadas al módulo. AddToFullPack es una función peligrosa
Es invisible para todos los zombies, y para los humanos visible pero solamente si estas en un rango de 75 o menor
Mensajes: 1,933
Temas: 39
Registro en: Jul 2014
Reputación:
23
(06/05/2017, 05:38 PM)meTaLiCroSS escribió: Que me detalle bién los supuestos, así puedo explicarles una forma de lograr esto de una manera muy optimizada ya que se pueden reducir la cantidad de llamadas al módulo. AddToFullPack es una función peligrosa
tan peligrosa que puede hacer un shoot en un lugar donde no estas y hacer daño
aunsigo sin entender esto
https://amxmodx-es.com/Thread-Desvirtue-...#pid155771
|