entender el get_gametime()
#1
Bueno entiendo para que sirve pero no entiendo cuando hacen algo como

Código PHP:
new fGameTime
fGameTime 
get_gametime()

if(
fGameTime 1.0)
{
              new 
ftime 
              ftime 
get_gametime()
}
new 
fftime

fftime 
fGameTime ftime



un ejemplo muy absurdo pero espero se haya entendido... quisiera saber mas y el modo de uso, gracias !
Responder
#2
fGameTime toma el tiempo y si es mayor a 1.0 ftime toma devuelta el tiempo xD y después dice que fftime es igual a fGameTime menos ftime

Yo tampoco entiendo ese ejemplo pero creo que deje un poquito de explicación

Genius
Facebook para preguntas/pedidos: Fb.com/scripterfrosst
Responder
#3
get_gametime() devuelve la cantidad de segundos que han transcurrido desde que el mapa empezó, así de simple, puedes hacer timers y delays, tasks efectivos y otros, no se necesita más matematica que sumar y comparar Genius
Responder
#4
(12/01/2015, 03:04 PM)Frosst escribió: fGameTime toma el tiempo y si es mayor a 1.0 ftime toma devuelta el tiempo xD y después dice que fftime es igual a fGameTime menos ftime

Yo tampoco entiendo ese ejemplo pero creo que deje un poquito de explicación

Genius

Con todo el respeto del mundo, queres sumar mensajes no ? ese ejmplo lo hice yo, porque asi veo los codes pero no entiendo el porque

(12/01/2015, 04:16 PM)meTaLiCroSS escribió: get_gametime() devuelve la cantidad de segundos que han transcurrido desde que el mapa empezó, así de simple, puedes hacer timers y delays, tasks efectivos y otros, no se necesita más matematica que sumar y comparar Genius

si, exactamente pero no entiendo porque es mas efectivo que un set_task() ?

Código PHP:
public Function()
{
    new 
Players[32
    new 
playerCountiidweaponctimexcvar
    get_players
(PlayersplayerCount"a"
    
    for (
i=0playerCounti++) 
    {
        
id Players[i
        
        
weapon get_user_weapon(id)
        
        if(!
wait[id])
        {
            if(
get_user_weapon(idammoclip) == CSW_AWP)
            {
                if(
ammo get_pcvar_num(xAmmo))
                {
                    
cs_set_weapon_ammo(find_ent_by_owner(-1"weapon_awp"id), get_pcvar_num(xAmmo))
                    
cs_set_user_bpammo(idCSW_AWP0)
                }
            
                else    
// Starts the 'xTime' on the first bullet.
                
{
                    
startTime get_gametime()
                    
wait[id] = true
                
}
            }
        }
    
        else
        {
            
ctime get_gametime() - startTime
            xcvar 
float(get_pcvar_num(xTime)) // Why dont you just use a float cvar instead?
            
            
if(ctime xcvar)
            {
                
cs_set_user_bpammo(idCSW_AWP0)
                
                if(
weapon == CSW_AWP)
                    
client_print(idprint_center"Next Ammo in [%d]"floatround(float(get_pcvar_num(xTime)) - get_gametime() + startTime))    // Countdown Message
                
                
else
                    
client_print(id,print_center" ")    // To insta-hide the Countdown Message if player changes weapon.
            
}
            
            else if(
ctime xcvar >= 0)
            {
                
cs_set_weapon_ammo(find_ent_by_owner(-1"weapon_awp"id), get_pcvar_num(xAmmo))
                
wait[id] = false
                
                
if(weapon != CSW_AWP)
                    
client_print(idprint_center"Your AWP Ammo is ready!")
                else
                    
client_print(id,print_center" ")    // To insta-hide the Countdown Message at 0 sec.
            
}
        }
    }



este es un code de alliedmoders, ahi se utiliza el gametime, seria mejor que un set_task() para el disparo y eso?
Responder
#5
Recurso que va más allá del llamado de natives, los tasks son un monton de codigo basura dentro del amxx, utilizando timers ahorras bastante.

Éste es frecuente, y lo uso mucho fijate.

Código PHP:
#include <amxmodx>
#include <engine>

new Float:g_flTimer[33];

public 
plugin_init()
{
    
register_plugin("CUANTAS""COPAS""TENES?");
    
register_clcmd("say /floodeame""ClientCommand_FloodMe")
}

public 
ClientCommand_FloodMe(iId)
{
    if(
g_flTimer[iId] > 0.0)
    {
        
g_flTimer[iId] = 0.0;
        
client_print(idprint_chat"[FLOOD] Dejé de floodearte, negro puto");
    }
    else
    {
        
g_flTimer[iId] = get_gametime();
        
client_print(idprint_chat"[FLOOD] Welcome al flood!");
    }
}

public 
client_PreThink(iId)
{
    static 
Float:flCurrentTime;
    
flCurrentTime get_gametime();
    
    if(
g_flTimer[iId] > 0.0 /* importante */ && g_flTimer[iId] <= flCurrentTime)
    {
        
g_flTimer[iId] = flCurrentTime 0.5
        client_print
(idprint_chat"[FLOOD] Floodeo de medio segundo :troll:");
    }
}

public 
client_connect(iId)
{
    
g_flTimer[iId] = 0.0;


Y el limitador, que tambien es bueno

Código PHP:
#include <amxmodx>

new Float:g_flTimer[33];

public 
plugin_init()
{
    
register_plugin("CUANTAS""LIBERTADORES""TENES?");
    
register_clcmd("say /mensajito""ClientCommand_Message")
}

public 
ClientCommand_Message(iId)
{
    new 
Float:flCurrentTime get_gametime();
    
    if(
g_flTimer[iId] > flCurrentTime)
    {
        
client_print(idprint_chat"[MENSAJITO] Espera %.2f segundos negro forro", (g_flTimer[iId] - flCurrentTime) );
        return;
    }
    
    
g_flTimer[iId] = flCurrentTime 20.0;
    
client_print(idprint_chat"[MENSAJITO] Te ganaste una galleta :whatever: y espera 20 segundos para usar esto de nuevo");
}

public 
client_connect(iId)
{
    
g_flTimer[iId] = 0.0;


Y es mucho mejor que usar un task de mierda para desactivar un booleano que define si paso el tiempo o no. Entre un set_task y un get_gametime, no hay por donde perderse Whatever
Responder
#6
asi ?

Código PHP:
// variable global
g_fTime[33]

// en la funcion
switch(get_pcvar_num(NoSayType))
    {
        case 

        {
            
ChatColor(id,"%s Chat bloqueado",szPrefix)
            return 
PLUGIN_HANDLED
        
}
        
        case 
:
        {
            new const 
Chat[][] = 
            { 
                
"/chat","!chat",".chat"
            
}

            for(new 
0;sizeof Chat;i++)
            {
                if(
containi(said,Chat[i]) != -1)
                {
            static 
Float:fGameTime get_gametime()
            if(
g_fTime[id] < 5.0)
            {
                
ChatColor(id"%s no rompas las bolas !"szPrefix)
                return 
PLUGIN_HANDLED;
            }
            
g_fTime[id] = fGameTime 5.0

                        ChatColor
(0,"%s El jugador %s esta pidiendo que desbloqueen el chat",szPrefix,name)
                        return 
PLUGIN_HANDLED
                
}
                else
                {
                
                    
ChatColor(id,"%s Chat bloqueado",szPrefix)
                    
ChatColor(id,"%s Solo puedes escribir /chat para pedir que desbloqueen el chat",szPrefix)
                    return 
PLUGIN_HANDLED
                
}
            }
        }
    }
    return 
PLUGIN_HANDLED 

un ejemplo de un post que vi recien...
Responder
#7
Que claro ejemplo.. de que no entendiste una mierda Genius

Me voy de aqui Nothingdohere
Responder
#8
La paciencia seria buena che -.- bueno gracias igual Confundido
Responder
#9
(12/01/2015, 06:16 PM)meTaLiCroSS escribió: Recurso que va más allá del llamado de natives, los tasks son un monton de codigo basura dentro del amxx, utilizando timers ahorras bastante.

Éste es frecuente, y lo uso mucho fijate.

Código PHP:
#include <amxmodx>
#include <engine>

new Float:g_flTimer[33];

public 
plugin_init()
{
    
register_plugin("CUANTAS""COPAS""TENES?");
    
register_clcmd("say /floodeame""ClientCommand_FloodMe")
}

public 
ClientCommand_FloodMe(iId)
{
    if(
g_flTimer[iId] > 0.0)
    {
        
g_flTimer[iId] = 0.0;
        
client_print(idprint_chat"[FLOOD] Dejé de floodearte, negro puto");
    }
    else
    {
        
g_flTimer[iId] = get_gametime();
        
client_print(idprint_chat"[FLOOD] Welcome al flood!");
    }
}

public 
client_PreThink(iId)
{
    static 
Float:flCurrentTime;
    
flCurrentTime get_gametime();
    
    if(
g_flTimer[iId] > 0.0 /* importante */ && g_flTimer[iId] <= flCurrentTime)
    {
        
g_flTimer[iId] = flCurrentTime 0.5
        client_print
(idprint_chat"[FLOOD] Floodeo de medio segundo :troll:");
    }
}

public 
client_connect(iId)
{
    
g_flTimer[iId] = 0.0;


Y el limitador, que tambien es bueno

Código PHP:
#include <amxmodx>

new Float:g_flTimer[33];

public 
plugin_init()
{
    
register_plugin("CUANTAS""LIBERTADORES""TENES?");
    
register_clcmd("say /mensajito""ClientCommand_Message")
}

public 
ClientCommand_Message(iId)
{
    new 
Float:flCurrentTime get_gametime();
    
    if(
g_flTimer[iId] > flCurrentTime)
    {
        
client_print(idprint_chat"[MENSAJITO] Espera %.2f segundos negro forro", (g_flTimer[iId] - flCurrentTime) );
        return;
    }
    
    
g_flTimer[iId] = flCurrentTime 20.0;
    
client_print(idprint_chat"[MENSAJITO] Te ganaste una galleta :whatever: y espera 20 segundos para usar esto de nuevo");
}

public 
client_connect(iId)
{
    
g_flTimer[iId] = 0.0;


Y es mucho mejor que usar un task de mierda para desactivar un booleano que define si paso el tiempo o no. Entre un set_task y un get_gametime, no hay por donde perderse Whatever

y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e

me sirvio el 2do ejemplo, ahora tengo mucho trabajo Whatdone
Ingeniero agrónomo y desarrollador de Software.

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"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#10
(13/01/2015, 12:01 AM)roccoxx escribió: y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e
Todo depende de como y donde se esta usando ese "algo", en los ejemplos de arriba tranquilamente lo puedes hacer con gametime.
Hi [R]ak CrabCrab
Responder
#11
(13/01/2015, 12:47 AM)Milashkasiya escribió:
(13/01/2015, 12:01 AM)roccoxx escribió: y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e
Todo depende de como y donde se esta usando ese "algo", en los ejemplos de arriba tranquilamente lo puedes hacer con gametime.

algo simple para que se entienda, no voy a hacer todo complento, no me malinterpreten.

public funcion(iId){
// estando vivo obviamente
set_user_health(iId, 50000)
// si se desconecta el que entra me chupa la pija
set_task(20.0, "vida_normal", iId)
}

public vida_normal(iId) set_user_health(iId, 100)
Ingeniero agrónomo y desarrollador de Software.

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"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#12
(13/01/2015, 01:16 AM)roccoxx escribió:
(13/01/2015, 12:47 AM)Milashkasiya escribió:
(13/01/2015, 12:01 AM)roccoxx escribió: y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e
Todo depende de como y donde se esta usando ese "algo", en los ejemplos de arriba tranquilamente lo puedes hacer con gametime.

algo simple para que se entienda, no voy a hacer todo complento, no me malinterpreten.

public funcion(iId){
// estando vivo obviamente
set_user_health(iId, 50000)
// si se desconecta el que entra me chupa la pija
set_task(20.0, "vida_normal", iId)
}

public vida_normal(iId) set_user_health(iId, 100)
pienso igual que tú, ahí solo se puede utilizar task... o una entidad que piense.

cuál de las 2 es mejor y por qué?
(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.
Responder
#13
El gametime no cubre todas las posibilidades, pero si una parte de las mismas.
Si querés saber que hace, hacete un hud o print que te devuelva el gametime, con eso y pensarlo un poco te tiene que bastar.

@Raul
Supongo que un task, por mas que sea bastante denso no creo que supere a todas las natives que vas a usar para hacer la entidad.
Responder
#14
Dependiendo de las necesidades...
Si vas a crear una entidad es mejor que aproveches todo lo que tiene para "ofrecer" (almacenamiento en PEVs, thinks, etc). Si sólo se trata de controlar eventos con tiempo, los task son buenos. La desventaja con los tasks es que por cada uno, el servidor tiene que comprobar en cada frame el tiempo y ver si es tiempo de llamar al task, mientras la entidad pensante también lo hace pero la comprobación es global para todas las entidades... Intento explicarme mejor: no puedes correr un servidor donde no hayan entidades, entonces, como sí o sí tienes entidades creadas en cada frame se va a comprobar si es momento para que las entidades "piensen" y al crear una entidad pensante más sólo agregas una a la lista, no es un gran esfuerzo, mientras en los task se hacen comprobaciones individuales, por cada task. Además, las comprobaciones de las entidades se hacen en un nivel más bajo (el HL engine) mientras las comprobaciones de los task se dan en el core de AMXX.
Si requieres de un evento controlado con tiempo permanente, desde que se inicia el plugin hasta que cierre el servidor, te conviene más una entidad pensante que un task. Supone un poco más de gasto de memoria; pero es preferible gastar unos bytes de más que sobrecargar el CPU (Hacer trabajar el CPU = consumo de energía, almacenar bytes no Trolleyes )

Sé que no me expliqué muy bien, pregunten cualquier duda...

Hasta que venga maderacross con una explicación mejor Whatever
Responder
#15
ahora me voy a poner a buscar lo de entidades, habia visto en la epoca que estaba rak pero ahora no vi mas, asi que a buscar, igual podes dejar ejemplo de entidades pensantes?

pd: esto no me compila para probarlo, help jaja

Código PHP:
#include <amxmodx>

new Float:g_fTime[33

#define time_wait    5.0

public plugin_init()
{
    
register_plugin("Probando","Get","GameTime")
    
register_clcmd("say /hola","cmd_Hola")

}

public 
client_connect(id)
{
    
g_fTime[id] = 0.0
}

public 
cmd_Hola(id)
{
    static 
Float:fGameTime get_gametime()
    
    if(
g_fTime[id] > fGameTime)
    {
        
client_print(idprint_chat"g_fTime : %0.2f - fGametime: %0.2f"g_fTime[id], fGameTime)
        
client_print(idprint_chat"Deja de flooder el server (espera %0.2f)"g_fTime[id] - fGameTime )
        return;
    }
    
    
client_print(idprint_chat"g_fTime : %0.2f - fGametime: %0.2f"g_fTime[id], fGameTime)
    
g_fTime[id] = fGameTime time_wait
    
return;

Responder
#16
Tanto los think como los task se comprueban en server frame, pero en el task se usa un timer de 0.1s para recorrer la lista de task,en cambio para los think se comprueba en cada frame además de que se hace en varias funciones.
En C los hook son como llamar una función global, es casi lo mismo q se haga en el engine o en un módulo externo.

Usar un think como task solo rinde cuando ya tenes la entidad o cuando queres que seamas rápido y preciso que 0.1s


Pd: q bardo escribir desde el celu u.u
Responder
#17
(13/01/2015, 01:26 PM)matrix123 escribió: ahora me voy a poner a buscar lo de entidades, habia visto en la epoca que estaba rak pero ahora no vi mas, asi que a buscar, igual podes dejar ejemplo de entidades pensantes?

pd: esto no me compila para probarlo, help jaja

Código PHP:
#include <amxmodx>

new Float:g_fTime[33

#define time_wait    5.0

public plugin_init()
{
    
register_plugin("Probando","Get","GameTime")
    
register_clcmd("say /hola","cmd_Hola")

}

public 
client_connect(id)
{
    
g_fTime[id] = 0.0
}

public 
cmd_Hola(id)
{
    static 
Float:fGameTime get_gametime()
    
    if(
g_fTime[id] > fGameTime)
    {
        
client_print(idprint_chat"g_fTime : %0.2f - fGametime: %0.2f"g_fTime[id], fGameTime)
        
client_print(idprint_chat"Deja de flooder el server (espera %0.2f)"g_fTime[id] - fGameTime )
        return;
    }
    
    
client_print(idprint_chat"g_fTime : %0.2f - fGametime: %0.2f"g_fTime[id], fGameTime)
    
g_fTime[id] = fGameTime time_wait
    
return;


Código PHP:
static Float:fGameTime get_gametime() 

--->

Código PHP:
static Float:fGameTimefGameTime get_gametime() 

Las variables estáticas no permiten ser declaradas y recibir un valor al mismo tiempo.
Responder
#18
https://forums.alliedmods.net/showthread.php?t=43049

Y para ejemplos, mira codes de NPCs, publiqué en el foro oficial un plugin con una entidad que piensa, lo busco y agrego el link.

EDIT: Lo encontré
https://forums.alliedmods.net/showthread.php?t=243795
Responder
#19
una pelotudez que recien me doy cuenta que no es como pienso, client_PreThink se llama cuando... ?
Responder
#20
(13/01/2015, 02:33 PM)matrix123 escribió: una pelotudez que recien me doy cuenta que no es como pienso, client_PreThink se llama cuando... ?

haz que muestre un print y verás Whatever

cada vez que piensa la "entidad" del jugador
(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.
Responder
#21
(13/01/2015, 12:37 PM)RauliTop escribió:
(13/01/2015, 01:16 AM)roccoxx escribió:
(13/01/2015, 12:47 AM)Milashkasiya escribió:
(13/01/2015, 12:01 AM)roccoxx escribió: y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e
Todo depende de como y donde se esta usando ese "algo", en los ejemplos de arriba tranquilamente lo puedes hacer con gametime.

algo simple para que se entienda, no voy a hacer todo complento, no me malinterpreten.

public funcion(iId){
// estando vivo obviamente
set_user_health(iId, 50000)
// si se desconecta el que entra me chupa la pija
set_task(20.0, "vida_normal", iId)
}

public vida_normal(iId) set_user_health(iId, 100)
pienso igual que tú, ahí solo se puede utilizar task... o una entidad que piense.

cuál de las 2 es mejor y por qué?

marica me vas a decir que prefieres crear una entidad y todo eso para solamente setear la vida normal o un bool en false?

ahora una pregunta en general. ¿Qué recomiendan usar, para este caso, una entidad o los task?
https://amxmodx-es.com/Thread-Crear-un-C...erno-en-ZP
Ingeniero agrónomo y desarrollador de Software.

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"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#22
no... para el caso de dar vida no...

yo preguntaba de forma general
(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.
Responder
#23
(13/01/2015, 06:46 PM)roccoxx escribió:
(13/01/2015, 12:37 PM)RauliTop escribió:
(13/01/2015, 01:16 AM)roccoxx escribió:
(13/01/2015, 12:47 AM)Milashkasiya escribió:
(13/01/2015, 12:01 AM)roccoxx escribió: y si quiero que se le desactive algo a los 20 segundos, me cago en tus gametime e.e
Todo depende de como y donde se esta usando ese "algo", en los ejemplos de arriba tranquilamente lo puedes hacer con gametime.

algo simple para que se entienda, no voy a hacer todo complento, no me malinterpreten.

public funcion(iId){
// estando vivo obviamente
set_user_health(iId, 50000)
// si se desconecta el que entra me chupa la pija
set_task(20.0, "vida_normal", iId)
}

public vida_normal(iId) set_user_health(iId, 100)
pienso igual que tú, ahí solo se puede utilizar task... o una entidad que piense.

cuál de las 2 es mejor y por qué?

marica me vas a decir que prefieres crear una entidad y todo eso para solamente setear la vida normal o un bool en false?

ahora una pregunta en general. ¿Qué recomiendan usar, para este caso, una entidad o los task?
https://amxmodx-es.com/Thread-Crear-un-C...erno-en-ZP

Task.
Responder
#24
Lo que tengo que decir al respecto, como quieran tomarselo

1) Los tasks son inexactos, no lidiaria con eso, e incluso se "nota" en un servidor con mucho trafico (ej tipico, zp con 32 players)

2) Si vas a hacer un task repetitivo permanente, las entidades son la mejor opcion, debido que las creas, y el think es lo unico que cambiará en ellas.

3) Si vas a hacer un task repetitivo pero no permanente (ej. aura), utiliza un timer guiado por get_gametime(), asegurarás exactitud y menos basura

4) Si vas a hacer un task no repetitivo para hacer un limitador de tiempo, utiliza un timer guiado por get_gametime()

(3 y 4 son respectivos a los ejemplos que di)

5) Si vas a hacer un task sencillo para hacer delay a una funcion o un codigo especifico que deba ejecutarse en un corto o largo tiempo despues, utiliza un task. Creo que es la unica utilidad buena que tiene esa mierda

Nothingdohere
Responder
#25
esto seria un ejemplo?

Código PHP:
new Float:fGameTime


public plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
RegisterHam(Ham_Spawn"player""hm_spawn"1)
    
register_event("ResetHUD","round_start","b")
}

public 
round_start()
{
    
fGameTime = (get_gametime() + get_cvar_float("mp_freezetime"))
}
    
public 
hm_spawn(id)
{
    if(
get_gametime() > fGameTime) return
    
    new 
szTeam[13]
    
get_user_team(idszTeamcharsmax(szName))
    new 
players[32]
    static 
iNum
    get_players
(playersiNum"aeh"szTeam)
    
    new 
szName[32], szHud[512], iMoney
    
    
for(new iNum i++)
    {
        new 
lid players[i]
        
        
iMoney cs_get_user_money(lid)
        
        
get_user_name(lidszNamecharsmax(szName))
        
formatex(szHudcharsmax(szHud), "%s%s $ %i^n"szHudszNameiMoney)
    }
    
set_hudmessage(0,255,0,0.58,0.02,0,0.0,6.0,0.0,0.0,1);
    
show_hudmessage(id,(szTeam[0] == 'C') ? "Counter-Terrorists:" "Terrorists:");
    
    
set_hudmessage(255,255,225,0.58,0.05,0,0.0,6.0,0.0,0.0,2);
    
show_hudmessage(id,szHud);

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)