AddToFullPack duda
#1
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_handleeenthosthostflagsplayerpSet)
{
    if(
pev_valid(ent))
    {
        static 
sClassName[33];
        
entity_get_string(entEV_SZ_classnamesClassName32);

        if(
equali(sClassNameENT_SURPRISE_CLASSNAME))
        {
            if(
g_zombie[host])
            {
                
set_es(es_handleES_RenderModekRenderTransAlpha)
                
set_es(es_handleES_RenderAmt0)
            }
            else
            {
            
                static 
iPlayerIDiPlayerID entity_get_intenySURPRISE_OWNER );

                if(!
iPlayerID)
                {
                    new 
iBody;
    
                    if(
get_user_aiming(hostentiBody) >= 75.0)
                    {
                        
set_es(es_handleES_RenderModekRenderTransAlpha)
                        
set_es(es_handleES_RenderAmt0)
                    }
                }
            }    
        }
    }

    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 pacman
Responder
#2
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
.
Responder
#3
(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_handleeenthosthostflagsplayerpSet)
{
    static 
sursur aimingAtSurprise(host)

    if(
sur)
    {
        static 
iPlayerIDiPlayerID entity_get_intsurSURPRISE_OWNER );

        if(!
iPlayerID)
        {
            
set_es(es_handleES_RenderModekRenderTransAlpha)
            
set_es(es_handleES_RenderAmt0)
        }

    }

    return 
FMRES_IGNORED
}


aimingAtSurprise(const id) {
    new 
iTarget;
    new 
iBody;
    
    if(
get_user_aiming(idiTargetiBody) >= 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(entEV_SZ_classnamesClassNamecharsmax(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;

Responder
#4
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
.
Responder
#5
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen Whatdone

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.
Responder
#6
(06/05/2017, 12:45 AM)Chamo. escribió: Pero si recien revise y get_user_aiming devuelve solo los indexes de los jugadores Dafuq 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 (? :Whatdone no se me ocurre otra forma ._.
Código PHP:
public fw_AddToFullPack(es_handleeenthosthostflagsplayerpSet)
{
    new 
bodyszClassname[32];
    
get_user_aiming(hostentbody);
 
    if (
is_valid_ent(ent)) 
    {
        
entity_get_string(entEV_SZ_classnameszClassnamecharsmax(szClassname));
 
        if (
equal(szClassnameENT_SURPRISE_CLASSNAME)) 
        {
            
set_es(es_handleES_RenderModekRenderTransAlpha)
            
set_es(es_handleES_RenderAmt0)
        }
 
    }

    return 
FMRES_IGNORED

Responder
#7
(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 Dafuq 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 (? :Whatdone no se me ocurre otra forma ._.
Código PHP:
public fw_AddToFullPack(es_handleeenthosthostflagsplayerpSet)
{
    new 
bodyszClassname[32];
    
get_user_aiming(hostentbody);
 
    if (
is_valid_ent(ent)) 
    {
        
entity_get_string(entEV_SZ_classnameszClassnamecharsmax(szClassname));
 
        if (
equal(szClassnameENT_SURPRISE_CLASSNAME)) 
        {
            
set_es(es_handleES_RenderModekRenderTransAlpha)
            
set_es(es_handleES_RenderAmt0)
        }
 
    }

    return 
FMRES_IGNORED


EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen Whatdone

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)
Responder
#8
(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 Dafuq 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 (? :Whatdone no se me ocurre otra forma ._.
Código PHP:
public fw_AddToFullPack(es_handleeenthosthostflagsplayerpSet)
{
    new 
bodyszClassname[32];
    
get_user_aiming(hostentbody);
 
    if (
is_valid_ent(ent)) 
    {
        
entity_get_string(entEV_SZ_classnameszClassnamecharsmax(szClassname));
 
        if (
equal(szClassnameENT_SURPRISE_CLASSNAME)) 
        {
            
set_es(es_handleES_RenderModekRenderTransAlpha)
            
set_es(es_handleES_RenderAmt0)
        }
 
    }

    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(idiTargetiBody) >= 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(entEV_SZ_classnamesClassNamecharsmax(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
Responder
#9
Código PHP:
static iBox
        
iBody,
        
szClassname16 ];

get_user_aimingiIdiBoxiBody );
            
if( 
is_valid_entiBox ) )
{
    
entity_get_stringiBoxEV_SZ_classnameszClassnamecharsmaxszClassname ) );
                
    if( 
equalszClassnameg_eBoxBOX_CLASSNAME ] ) )
    {
        
remove_entityiBox ); 
        
g_iCreated_Boxes--;
                    
        
Print_ColoriId"%s Se ha removido la !gcaja!y correctamente."g_szPlugin_InformationCHAT_PREFIX ] );
    }
}

else
    
Print_ColoriId"%s La entidad que estabas apuntando no es !gvalida!y."g_szPlugin_InformationCHAT_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_AddToFullPackes_handleeenthosthostflagsplayerpSet )
{
    static  
iEntity
            
iBody,
            
szClassname16 ];

    
get_user_aiminghostiEntityiBody );
 
    if( 
is_valid_entiEntity ) ) 
    {
        
entity_get_stringiEntityEV_SZ_classnameszClassnamecharsmaxszClassname ) );
                
        if( 
equalszClassnameENT_SURPRISE_CLASSNAME ) )
        {
            
set_eses_handleES_RenderModekRenderTransAlpha )
            
set_eses_handleES_RenderAmt)
        }
    }

    return 
FMRES_IGNORED

Responder
#10
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 Whatdone
Responder
#11
EDIT: Ya lo solucione :V
Responder
#12
Podrías dejar la solución para los demas
Responder
#13
(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
Responder
#14
(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 Roflmao?
EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen Whatdone
Responder
#15
(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 Roflmao?
Otra cosa, usaste get_user_aiming?, si es así, pues seguramente no me quedo claro el uso de esa native Whatever

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 pacman . 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
Responder
#16
Bueno Whatever


(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 Roflmao?
Otra cosa, usaste get_user_aiming?, si es así, pues seguramente no me quedo claro el uso de esa native Whatever

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 pacman . 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 Thats what she said....Roflmao
Responder
#17
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_AddToFullPackes_handleeenthosthostflagsplayerpSet )
{
    if( 
player || !get_orig_retval( ) )
        return 
FMRES_IGNORED;
    
    static 
szClassname16 ];
    
    
entity_get_stringentEV_SZ_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnameENT_SURPRISE_CLASSNAME ) )
    {
        if( !
g_zombie[host] && entity_get_intentSURPRISE_OWNER ) == host && entity_rangehostent ) <= 75.0 )
            return 
FMRES_IGNORED;
        
        
set_eses_handleES_RenderModekRenderTransAlpha );
        
set_eses_handleES_RenderAmt);
    }
    
    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
.
Responder
#18
(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_AddToFullPackes_handleeenthosthostflagsplayerpSet )
{
    if( 
player || !get_orig_retval( ) )
        return 
FMRES_IGNORED;
    
    static 
szClassname16 ];
    
    
entity_get_stringentEV_SZ_classnameszClassnamecharsmaxszClassname ) );
    
    if( 
equalszClassnameENT_SURPRISE_CLASSNAME ) )
    {
        if( !
g_zombie[host] && entity_get_intentSURPRISE_OWNER ) == host && entity_rangehostent ) <= 75.0 )
            return 
FMRES_IGNORED;
        
        
set_eses_handleES_RenderModekRenderTransAlpha );
        
set_eses_handleES_RenderAmt);
    }
    
    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 Whatever


EDIT: Perdón, había mandado cualquiera, ya puede comprender disculpen Whatdone
Responder
#19
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?
Responder
#20
(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
.
Responder
#21
(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
Responder
#22
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
Responder
#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

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)
Responder
#24
(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
Responder
#25
(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

pacman tan peligrosa que puede hacer un shoot en un lugar donde no estas y hacer daño pacman

aunsigo sin entender esto
https://amxmodx-es.com/Thread-Desvirtue-...#pid155771
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)