Oops! Publicado 7 de agosto del 2016 Denunciar Publicado 7 de agosto del 2016 CREAR CVARs Las CVARs son algo a tener en cuenta al crear plugins. Es una manera de facilitar la manupulación de determinados aspectos del plugin, y también nos ahorra el trabajo de tener que editar el .sma y volver a compilar constantemente. ¿Cómo se crean? Simple: register_cvar("nombre_cvar", "valor_pordefecto") // esto dentro de plugin_init() Como primer ejemplo, hagamos un plugin que nos dé X cantidad de plata al escribir /plata, y que se pueda utilizar cada X segundos. Para esto, vamos a utilizar las siguientes funciones: cs_get_user_money(id) //para saber la plata que tiene cs_set_user_money(id) //para setear la plata que va a tener También vamos a necesitar: get_pcvar_num(variabledelacvar) //obtiene el valor actual de una cvar; esto es un integer (nº entero) get_pcvar_float(variabledelacvar) //lo mismo, pero esto es un float (nº decimal) Vayamos al plugin en sí: Spoiler #include <amxmodx> #include <cstrike> // .inc que contiene la funcion para el dinero // creamos variables para las diferentes cvars new cvar_on, cvar_plata, cvar_tiempo new puede_recibir // esta variable es para chequear si ya paso el tiempo para poder // usarlo de nuevo public plugin_init() { register_plugin("Dar Plata", "1.0", "Nadie") //registramos el plg register_clcmd("say /plata", "darplata") //al escribir plata por say register_clcmd("say_team /plata", "darplata") //o say_team, se llama a "darplata" cvar_on = register_cvar("plata_on", "1") //plugin on/off cvar_plata = register_cvar("plata_cantidad", "500") //cantidad de plata que recibiremos cvar_tiempo = register_cvar("plata_tiempo", "10.0") //cada cuantos segs. } public client_putinserver(id) // esto se llama cuando el cliente entra al sv { puede_recibir = true //cuando entra tiene que poder usar el cmd } public darplata(id) // lo que va a hacer esta funcion { if(get_pcvar_num(cvar_on) == 0) //si el valor de cvar_on es 0 return PLUGIN_HANDLED //paramos la funcion, ya que el plg esta off if(!is_user_alive(id)) //si no esta vivo... return PLUGIN_HANDLED //no podemos darle plata, por lo tanto //paramos la ejecucion de la funcion if(!puede_recibir) //si todavia no paso el tiempo asignado, return PLUGIN_HANDLED // tamb paramos la ejecucion //seteamos la plata; a lo que ya tiene, le sumamos el valor que indica "cvar_plata" cs_set_user_money(id, cs_get_user_money(id) + get_pcvar_num(cvar_plata)) //hacemos un task, que se va a activar cuando haya pasado el tiempo especificado //@param 1: tiempo (float) //@param 2: funcion que se va a activar al pasar ese tiempo //@param 3: id unico del task; lo vamos a usar despues set_task(get_pcvar_float(cvar_tiempo), "reset", 1234) return PLUGIN_HANDLED // damos fin a la funcion "darplata" } public reset() // al pasar el tiempo definido por cvar_tiempo... { puede_recibir = true // hacemos true a esta variable para que pueda volver a usar el cmd } public client_disconnect(id) //se llama cuando el player se desconecta { if(task_exists(1234)) //si el task todavia estaba siendo ejecutado cuando se fue... remove_task(1234) //lo borramos } Así como está, hay un detalle que el plugin no tiene en cuenta, que es lo siguiente: si se muere sin que se haya cumplido el tiempo especificado en el set_task, hay una posibilidad de que no pueda usar el comando /plata en los primeros segundos de la ronda sguiente, ya que ese tiempo todavía no pasó. Para evitar eso, podemos usar lo siguiente: register_event("DeathMsg", "event_muerte", "a") // en plugin_init() /* "DeathMsg" : nombre del event "event_muerte" : nombre de la funcion que se llama cuando muere "a" : flag (atributo), la "a" significa que es global y se aplica a todos los jugadores */ En otro post voy a entrar más en detalle sobre la función register_event(). Por ahora basta con saber que esto sirve para captar el momento en el que un jugador muere. Entonces, agregando eso, el plugin quedaría así: Spoiler #include <amxmodx> #include <cstrike> // .inc que contiene la funcion para el dinero // creamos variables para las diferentes cvars new cvar_on, cvar_plata, cvar_tiempo new puede_recibir // esta variable es para chequear si ya paso el tiempo para poder // usarlo de nuevo public plugin_init() { register_plugin("Dar Plata", "1.0", "Nadie") //registramos el plg register_event("DeathMsg", "event_muerte", "a") // ACA LA NUEVA FUNCION register_clcmd("say /plata", "darplata") //al escribir plata por say register_clcmd("say_team /plata", "darplata") //o say_team, se llama a "darplata" cvar_on = register_cvar("plata_on", "1") //plugin on/off cvar_plata = register_cvar("plata_cantidad", "500") //cantidad de plata que recibiremos cvar_tiempo = register_cvar("plata_tiempo", "10.0") //cada cuantos segs. } public client_putinserver(id) // esto se llama cuando el cliente entra al sv { puede_recibir = true //cuando entra tiene que poder usar el cmd } public darplata(id) // lo que va a hacer esta funcion { if(get_pcvar_num(cvar_on) == 0) //si el valor de cvar_on es 0 return PLUGIN_HANDLED //paramos la funcion, ya que el plg esta off if(!is_user_alive(id)) //si no esta vivo... return PLUGIN_HANDLED //no podemos darle plata, por lo tanto //paramos la ejecucion de la funcion if(!puede_recibir) //si todavia no paso el tiempo asignado, return PLUGIN_HANDLED // tamb paramos la ejecucion //seteamos la plata; a lo que ya tiene, le sumamos el valor que indica "cvar_plata" cs_set_user_money(id, cs_get_user_money(id) + get_pcvar_num(cvar_plata)) //hacemos un task, que se va a activar cuando haya pasado el tiempo especificado //@param 1: tiempo (float) //@param 2: funcion que se va a activar al pasar ese tiempo //@param 3: id unico del task; lo vamos a usar despues set_task(get_pcvar_float(cvar_tiempo), "reset", 1234) return PLUGIN_HANDLED // damos fin a la funcion "darplata" } public reset() // al pasar el tiempo definido por cvar_tiempo... { puede_recibir = true // hacemos true a esta variable para que pueda volver a usar el cmd } public client_disconnect(id) //se llama cuando el player se desconecta { if(task_exists(1234)) //si el task todavia estaba siendo ejecutado cuando se fue... remove_task(1234) //lo borramos } public event_muerte() // LA FUNCION QUE ES LLAMADA EN LA MUERTE DE UN USUARIO { if(task_exists(1234)) // hacemos lo mismo que en client_disconnect (id) remove_task(1234) puede_recibir = true //la hacemos true con el mismo fin que en la funcion reset() } Con eso finaliza el tut, espero que les sirva.
Sky^^ Publicado 7 de agosto del 2016 Denunciar Publicado 7 de agosto del 2016 Hay millones de maneras para crear más de una cvars a gusto de uno. Pero buen aporte, pero no le dan mucho uso a esta sección.. Oops! reaccionó a esto 1
Posts recomendados