Contador por player id
#1
Hola buenas, traigo un código a ejemplo para que un grupo de jugadores vean un contador en simultaneo.
Por ahora es la mejor aproximación que tengo para realizarlo pero capaz se les ocurre un método más eficiente.

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

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

new g_count 3;
new 
bool:g_players[33];

public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("say /count","counter");
    
register_clcmd("say /join","join");
}

public 
counter(){
    if(
g_count){
        for(new 
0;i<33;i++){
            if(
g_players[i])
                
showCount(i);
        }
        
set_task(1.0,"counter");
        
g_count--;
    }
    else{
        
g_count 3;
    }
}

public 
join(id){
    
g_players[id] = true;
}

public 
showCount(id){
    
set_hudmessage(02550, -1.0, -1.0,_,_,1.0);
    
show_hudmessage(id"%d",g_count);


Si bien no creo que vaya a salir de una complejidad lineal dentro del segundo if, me preocupa que esté teniendo algún error lógico a futuro que pueda generar un desfasaje entre los diferentes clientes, la idea de este contador es que cuando llegue a 0 les asigne a los mismos jugadores ~FL_FROZEN para liberarlos.

Saludos!
Responder
#2
Que quieres hacer exactamente? por mi lado no entiendo que quieres hacer en tu código
Responder
#3
(10/01/2022, 11:03 PM)[N]drs escribió: Que quieres hacer exactamente? por mi lado no entiendo que quieres hacer en tu código

Lo que el código dice, mostrar un hudmessage a ciertos jugadores y cómo mucho reproducir algún sonido. Lo que venga antes o después no importa realmente, quiero saber si hay un método más eficiente o se puede mejorar la sintaxis, saludos!
Responder
#4
(10/01/2022, 11:14 PM)warps escribió: Lo que el código dice, mostrar un hudmessage a ciertos jugadores y cómo mucho reproducir algún sonido. Lo que venga antes o después no importa realmente, quiero saber si hay un método más eficiente o se puede mejorar la sintaxis, saludos!

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

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "author"

new g_count 3;
new 
bool:g_players[33];

#define TASK 8798

public plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_clcmd("say /count","StartCounter");
    
register_clcmd("say /join","join");
}

public 
StartCounter()
{
    if(
task_exists(TASK))
        return

    
g_count 3
    set_task
(1.0"Task_Counter"TASK__"b")
}

public 
Task_Counter()
{
    if(!--
g_count)
    {
        
// El contador llegó a su fin
        
remove_task(TASK)

    }
    else
    {
        for(new 
0MaxClientsi++)
        {
            if(
g_players[i])
                
showCount(i);
        }
    }
}

public 
join(id){
    
g_players[id] = true;
}

public 
showCount(id){
    
set_hudmessage(02550, -1.0, -1.0,_,_,1.0);
    
show_hudmessage(id"%d"g_count);

Responder
#5
Gracias, ahí leí la guía también sobre tasks... pero me queda una duda, la verificación del id entiendo para que se hace, no así el porque se remueven.
Una vez fuera del ámbito que la contiene si no se removió ¿Queda cómo basura? Busqué pero no encontré nada al respecto, tampoco en el include y supongo que no debe ser solo por buena práctica, saludos!

PD: Teniendo en cuenta este ejemplo solamente, obvio que va a ver situaciones dónde si voy a querer removerlas.
Responder
#6
(11/01/2022, 11:24 AM)warps escribió: Gracias, ahí leí la guía también sobre tasks... pero me queda una duda, la verificación del id entiendo para que se hace, no así el porque se remueven.
Una vez fuera del ámbito que la contiene si no se removió ¿Queda cómo basura? Busqué pero no encontré nada al respecto, tampoco en el include y supongo que no debe ser solo por buena práctica, saludos!

PD: Teniendo en cuenta este ejemplo solamente, obvio que va a ver situaciones dónde si voy a querer removerlas.

En el caso de tu código, se tiene que remover el task si o si, debido a que el task se a creado con el flag "b" el cual llama a la función "Task_Counter" infinitas veces cada 1.0 segundos, si no lo remueves, cuando tu contador llegue a 0, seguirá en -1, -2, -3 hasta que remuevas el task
Responder
#7
(11/01/2022, 11:59 AM)[N]drs escribió: En el caso de tu código, se tiene que remover el task si o si, debido a que el task se a creado con el flag "b" el cual llama a la función "Task_Counter" infinitas veces cada 1.0 segundos, si no lo remueves, cuando tu contador llegue a 0, seguirá en -1, -2, -3 hasta que remuevas el task

Para el modelo que vos enviaste si, preguntaba en que mejora tu alternativa con la mía.
Ya que estamos si sabes de algún posteo que hable sobre estandarización del lenguaje estaría bueno que tampoco encuentro nada Sonrisa
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)