Jump to content
Sign in to follow this  
totopizza

[API] Sistema de Frags, muertes, tiempo jugado + Menu de Info - guardado adv_vault.

Recommended Posts

[-] Nombre del plugin: tAPI_sis_frags.sma

[-] Creador del plugin: totopizza

[-] Breve descripción: Este plugin lo ise yo se 0, el plugin consiste en un sistema que te guarda los frags, muertes, también tiene un sistema de tiempo jugado - dias, horas, minutos, segundos - con guardadoal entrar tú al servidor se te darán los frags y muertes, también se te dará el conteo del tiempo jugado, al desconectarte se te guardaran los datos, también cuenta con un sistema de servers, te aparecen en consola.

[-] Código:

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <adv_vault>

#define TASK_CONTEO 5012
#define TASK_ID ( taskid - TASK_CONTEO)
#define TIME_ANUNCIO 300.0 // 5 minutos

new const szTag[] = "[Mundo Mapping]";
new const szWeb[] = "http://www.mundo-mapping.net/foro/";

#pragma semicolon 1

enum _:DATA_SERVER {
   SERVER[32],
   IP[25]
};

new const szServers[][DATA_SERVER] = {
   /*    Nombre del Server            Ip del server */
   { "[Mundo-Mapping] Servidor 1", "123.123.123.123:27015" },
   { "[Mundo-Mapping] Servidor 2", "123.123.123.123:27016" },
   { "[Mundo-Mapping] Servidor 3", "123.123.123.123:27017" }
};

enum
{
   CAMPO_FRAGS=0,
   CAMPO_MUERTES,
   CAMPO_SEGUNDOS,
   CAMPO_MINUTOS,
   CAMPO_HORAS,
   CAMPO_DIAS,
   MAX_CAMPOS
};

new g_campos[MAX_CAMPOS], tGuardado;
new tPlayerName[33][32];

new t_frags[33], t_muertes[33], t_segundos[33], t_minutos[33], t_horas[33], t_dias[33];

new g_msgScreenFade;



public plugin_init() {
   register_plugin("SIS. FRAGS-MUERTES-DIAS", "v1.0", "totopizza");

   //Menu...
   register_clcmd("chooseteam", "clcmd_menu");
   register_clcmd("jointeam", "clcmd_menu");

   //Guardado
   tGuardado = adv_vault_open("Tguardado", false);

   g_campos[CAMPO_FRAGS] = adv_vault_register_field(tGuardado, "FRAGS");
   g_campos[CAMPO_MUERTES] = adv_vault_register_field(tGuardado, "MUERTES");
   g_campos[CAMPO_SEGUNDOS] = adv_vault_register_field(tGuardado, "SEGUNDOS");
   g_campos[CAMPO_MINUTOS] = adv_vault_register_field(tGuardado, "MINUTOS");
   g_campos[CAMPO_HORAS] = adv_vault_register_field(tGuardado, "HORAS");
   g_campos[CAMPO_DIAS] = adv_vault_register_field(tGuardado, "DIAS");

   adv_vault_init(tGuardado);

   //Hams

   RegisterHam(Ham_Spawn, "player", "fw_hamspawn", 1);//al revivir
   RegisterHam(Ham_Killed, "player", "fw_hamkilled", 1);//Al matar

   set_task(TIME_ANUNCIO, "tAnuncio", _,_,_, "b");

   g_msgScreenFade = get_user_msgid( "ScreenFade" );//Para que funcione el efecto del ScreenFase o lo que hacemos con los mapas: env_fade
}

/*****************************
*           NATIVES          *
******************************/

public plugin_natives()
{
   register_native("tGet_user_frags", "tGet_user_frags", 1);
   register_native("tGet_user_muertes", "tGet_user_muertes", 1);
   register_native("tGet_user_segs", "tGet_user_segs", 1);
   register_native("tGet_user_mins", "tGet_user_mins", 1);
   register_native("tGet_user_hrs", "tGet_user_hrs", 1);
   register_native("tGet_user_days", "tGet_user_days", 1);

   register_native("tSet_user_frags", "tSet_user_frags", 1);
   register_native("tSet_user_muertes", "tSet_user_muertes", 1);
   register_native("tSet_user_screenfade", "tSet_user_screenfade", 1);
}
/**********************************
*  Player Killed and Player Spawn *
***********************************/
public fw_hamspawn(id)
{
   //tSet_info - id, 0 = frags, 1 = muertes, 2 = frags y muertes
   tSet_info(id, 2);

   tChat(id, "^4%s ^1Preciona la letra ^4M ^1Para abrir el menú principal", szTag);
}
public fw_hamkilled(victim, attacker)
{
   if(!is_user_connected(victim) || !is_user_connected(attacker))
       return HAM_IGNORED;

   if( victim == attacker)
   {
       t_frags[victim]--;
       t_muertes[victim]++;
       return HAM_IGNORED;
   }

   t_frags[attacker]++;
   t_muertes[victim]++;

   tSet_user_screenfade(victim, 255, 000, 000, 2, 100);//Esto es como el env_fade de los mapas (:

   return HAM_IGNORED;
}
/*****************************
*       MENU and SERVERS     *
******************************/
public clcmd_menu(id)
{
   if(get_user_team(id) == 1 || get_user_team(id) == 2)
   {
       new menu = menu_create("\r[Mundo Mapping] \yMenú principal", "opc_menu");

       menu_additem(menu, "\wMi Información", "1");
       menu_additem(menu, "\yLista de Servidores", "2");
       if(is_user_admin(id))
           menu_additem(menu, "\yMenú de Admin", "3");
       else
           menu_additem(menu, "\dMenú de Admin", "3");

       menu_setprop(menu, MPROP_EXITNAME, "\ySalir");
       menu_display(id, menu, 0);
       return PLUGIN_HANDLED;
   }
   return PLUGIN_CONTINUE;
}
public opc_menu(id, menu, item)
{
   if(item == MENU_EXIT)
   {
       menu_destroy(menu);
       return PLUGIN_HANDLED;
   }
   switch(item)
   {
       case 0: client_cmd(id, "say /info");
       case 1: show_servers(id);
       case 2: {
           if(!is_user_admin(id))
           {
               tChat(id, "^4%s ^1No tienes acceso a este menú!", szTag);
               return PLUGIN_HANDLED;
           }
           else
           {
               client_cmd(id, "amxmodmenu");
           }
       }
   }
   menu_destroy(menu);
   return PLUGIN_HANDLED;
}

public show_servers(id)
{
   console_print(id, "=============== %s ===============", szTag);
   static i;
   for(i = 0; i < sizeof(szServers); i++)
       console_print(id, "#%d | %s - IP: %s", i+1, szServers[i][sERVER], szServers[i][iP]);

   console_print(id, "Está es la lista de Nuestros Servidores");
   console_print(id, "=============== %s ===============", szTag);
   client_cmd(id, "toggleconsole");

   return PLUGIN_HANDLED;
}

/**********************************
*   Client Connect and Disconnec  *
***********************************/

public client_putinserver(id)
{
   get_user_name(id, tPlayerName[id], charsmax(tPlayerName[]));
   t_frags[id] = 0;
   t_muertes[id] = 0;
   t_segundos[id] = 0;
   t_minutos[id] = 0;
   t_horas[id] = 0;
   t_dias[id] = 0;

   tCargar(id);

   set_task(1.0, "start_conteo", id);
}
public client_disconnect(id)
{
   tGuardar(id);

   remove_task(id+TASK_CONTEO);
}
/*****************************
*          GUARDADO          *
******************************/
public tCargar(id)
{
   if(!adv_vault_get_prepare(tGuardado, _, tPlayerName[id]))
       return;

   t_frags[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_FRAGS]);
   t_muertes[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_MUERTES]);
   t_segundos[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_SEGUNDOS]);
   t_minutos[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_MINUTOS]);
   t_horas[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_HORAS]);
   t_dias[id] = adv_vault_get_field(tGuardado, g_campos[CAMPO_DIAS]);

   tSet_info(id, 2);
}
public tGuardar(id)
{
   adv_vault_set_start(tGuardado);

   adv_vault_set_field(tGuardado, g_campos[CAMPO_FRAGS], t_frags[id]);
   adv_vault_set_field(tGuardado, g_campos[CAMPO_MUERTES], t_muertes[id]);
   adv_vault_set_field(tGuardado, g_campos[CAMPO_SEGUNDOS], t_segundos[id]);
   adv_vault_set_field(tGuardado, g_campos[CAMPO_MINUTOS], t_minutos[id]);
   adv_vault_set_field(tGuardado, g_campos[CAMPO_HORAS], t_horas[id]);
   adv_vault_set_field(tGuardado, g_campos[CAMPO_DIAS], t_dias[id]);

   adv_vault_set_end(tGuardado, 0, tPlayerName[id]);
}

/*****************************
*       TIEMPO JUGADO        *
******************************/

public start_conteo(id)
   set_task(1.0, "tiempo_jugado", id+TASK_CONTEO,_,_, "b");
public tiempo_jugado(taskid)
{
   t_segundos[TASK_ID]++;
   if(t_segundos[TASK_ID] > 60)
   {
       t_minutos[TASK_ID]++;
       t_segundos[TASK_ID] = 0;
   }
   if(t_minutos[TASK_ID] > 60)
   {
       t_horas[TASK_ID]++;
       t_minutos[TASK_ID] = 0;
       t_segundos[TASK_ID] = 0;    
   }
   if(t_horas[TASK_ID] >= 24)
   {
       t_dias[TASK_ID]++;
       t_horas[TASK_ID] = 0;
       t_minutos[TASK_ID] = 0;
       t_segundos[TASK_ID] = 0;
   }
   return PLUGIN_HANDLED;
}
public tAnuncio()
   tChat(0, "^4%s ^1Visita nuestro foro para más información ^4%s", szTag, szWeb);

/*****************************
*         NATIVE GET         *
******************************/

public tGet_user_frags(id)
   return t_frags[id];

public tGet_user_muertes(id)
   return t_muertes[id];

public tGet_user_segs(id)
   return t_segundos[id];

public tGet_user_mins(id)
   return t_minutos[id];

public tGet_user_hrs(id)
   return t_horas[id];

public tGet_user_days(id)
   return t_dias[id];

/*****************************
*         NATIVE SET         *
******************************/


public tSet_user_frags(id, frags)
   return t_frags[id] += frags;

public tSet_user_muertes(id, muertes)
   return t_muertes[id] += muertes;

public tSet_info(id, info)
{
   static i;
   for(i = 1; i < get_maxplayers() ; i++)
   {
       if(!is_user_connected(i)) 
           continue;
       if(info == 0)
           set_user_frags(i, t_frags[i]);

       if(info == 1)
           cs_set_user_deaths(i,t_muertes[i]);

       if(info >= 2)
       {
           set_user_frags(i, t_frags[i]);
           set_user_frags(i, t_frags[i]);
           cs_set_user_deaths(i,t_muertes[i]);
       }

   }
}

public tSet_user_screenfade(id, rrr, ggg, bbb, duracion, alpha)
{
   message_begin( id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, g_msgScreenFade, _, id );
   write_short( duracion * 4096 );
   write_short( duracion * 4096 );
   write_short( 0x0000 );
   write_byte( rrr ); // Color 1
   write_byte( ggg ); // Color 2
   write_byte( bbb ); // Color 3
   write_byte( alpha );
   message_end( );

}

/*****************************
*       COLOR MENSAJE        *
******************************/

public tChat(id, const input[], any:...)
{
   static szMsg[191], msgSayText;

   if (!msgSayText)
   msgSayText = get_user_msgid("SayText");

   replace_all(szMsg, 190, "!g", "^4");
   replace_all(szMsg, 190, "!y", "^1");
   replace_all(szMsg, 190, "!team", "^3");

   vformat(szMsg, 190, input, 3);

   message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, .player = id);
   write_byte(id ? id : 33);
   write_string(szMsg);
   message_end();
}

Share this post


Link to post
Share on other sites

Parte #2

[-] Nombre del plugin: tAPI_Informacion.sma

[-] Creador del plugin: totopizza

[-] Breve descripción: Con este plugin, podrán ver su información, mediante unos comandos del say.

[-] Comandos:

[TABLE=class: grid, width: 500, align: center]

[TR]

[TD=align: center]Comando

[/TD]

[TD=align: center]say

[/TD]

[TD=align: center]say_team

[/TD]

[TD=align: center]consola

[/TD]

[/TR]

[TR]

[TD=align: center]/informacion

[/TD]

[TD=align: center]Sí

[/TD]

[TD=align: center]Sí

[/TD]

[TD=align: center]No

[/TD]

[/TR]

[TR]

[TD=align: center]/info

[/TD]

[TD=align: center]Sí

[/TD]

[TD=align: center]Sí

[/TD]

[TD=align: center]No

[/TD]

[/TR]

[TR]

[TD=align: center]/hora

[/TD]

[TD=align: center]Sí

[/TD]

[TD=align: center]No[/TD]

[TD=align: center]No

[/TD]

[/TR]

[/TABLE]

[-] Código:

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <tAPI>//Incluimos el include para que funcionen los dias, horas, minutos etc..

new const szTag[] = "[Mundo Mapping]";//Este es un prefix, o como ustedes le quieran llamar


public plugin_init() {
   register_plugin("Menu de informacion", "v1.0", "totopizza");


   register_clcmd("say /info", "clcmd_info",_,"< Muestra tu   informacion en un menu>");//Comando say para abrir el menu de   informacion
   register_clcmd("say /informacion", "clcmd_info",_,"< Muestra tu   informacion en un menu>");//Comando say para abrir el menu de   informacion
   register_clcmd("say_team /info", "clcmd_info",_,"< Muestra tu   informacion en un menu>");//Comando say_team para abrir el menu de   informacion
   register_clcmd("say_team /informacion", "clcmd_info",_,"< Muestra   tu informacion en un menu>");//Comando say_team para abrir el menu   de informacion

   register_clcmd("say /hora", "clcmd_hora",_, "< Muestra la hora local del server>");

   register_menucmd(register_menuid("Menu informacion"), 1023, "info_key");

}
public clcmd_info(id)
{
   static tTexto[256], tName[32], len;
   len = 0;

   get_user_name(id, tName, charsmax(tName));//Obtenemos el nombre del player, con tName

   new dia, hora, mins, segs, keys = MENU_KEY_0;

   dia = tGet_user_days(id);//Obtenemos los dias jugados del player
   hora = tGet_user_hrs(id);//Obtenemos las horas jugados del player
   mins = tGet_user_mins(id);//Obtenemos los minutos jugados del player
   segs = tGet_user_segs(id);//Obtenemos los segundos jugados del player


   len += formatex(tTexto[len], charsmax(tTexto) - len, "\r%s \yInformación de la cuenta:\w %s^n", szTag, tName);
   len += formatex(tTexto[len], charsmax(tTexto) - len, "\r* \wTiempo   jugado: \d%d \yDias \w| \d%d \yHoras \w| \d%d \yMinutos \w| \d%d   \ySegundos^n^n",dia,hora,mins,segs);
   len += formatex(tTexto[len], charsmax(tTexto) - len, "\r* \y Frags: \d%d^n", tGet_user_frags(id));
   len += formatex(tTexto[len], charsmax(tTexto) - len, "\r* \y Muertes: \d%d^n^n", tGet_user_muertes(id));
   len += formatex(tTexto[len], charsmax(tTexto) - len, "\r0. Salir");

   show_menu(id, keys, tTexto, -1, "Menu informacion");//Mostramos el menu
   return PLUGIN_HANDLED;
}
public info_key(id, keys, menu)
{
   if(keys == 1)
       return PLUGIN_HANDLED;
   else
       return PLUGIN_HANDLED;
   return PLUGIN_HANDLED;
}

public clcmd_hora(id)
{
   new szHora[20];
   get_time("%I:%M:%S %p", szHora, charsmax(szHora));
   tChat(id, "^4%s ^1La hora local del servidor es: ^4%s", szTag, szHora)

}
public tChat(id, const input[], any:...)
{
   static szMsg[191], msgSayText;

   if (!msgSayText)
   msgSayText = get_user_msgid("SayText");

   replace_all(szMsg, 190, "!g", "^4");
   replace_all(szMsg, 190, "!y", "^1");
   replace_all(szMsg, 190, "!team", "^3");

   vformat(szMsg, 190, input, 3);

   message_begin(id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, msgSayText, .player = id);
   write_byte(id ? id : 33);
   write_string(szMsg);
   message_end();
}

 

- - - Actualizado - - -

 

Parte #3

[-] Nombre del include: tAPI.inc

[-] Creador del include: totopizza

[-] Breve descripción: Con este include podrán saber los frags, muertes, dias, horas, minutos, segundos, del usuario, tambien le podran dar, se los dejo aquí con una descripción:

[TABLE=class: grid, width: 500, align: center]

[TR]

[TD=align: center]Native[/TD]

[TD=align: center]GET[/TD]

[TD=align: center]SET[/TD]

[TD=align: center]Descripción[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_frags(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber los frags del jugador[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_muertes(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber las muertes del jugador[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_segs(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber los segundos que tiene el jugador[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_mins(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber los minutos que tiene el jugador[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_hrs(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber las horas que tiene el jugador[/TD]

[/TR]

[TR]

[TD=align: center]tGet_user_days(id)[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Con esta native podemos saber los días que tiene el jugador[/TD]

[/TR]

[TR]

[TD=align: center]---------------------------------------------------------------------------------[/TD]

[TD=align: center]--------------[/TD]

[TD=align: center]-------------[/TD]

[TD=align: center]------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------[/TD]

[/TR]

[TR]

[TD=align: center]tSet_user_frags(id, frags)[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]Con esta native podemos sumarle una cantidad de frags al player[/TD]

[/TR]

[TR]

[TD=align: center]tSet_user_muertes(id, muertes)[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]Con esta native podemos darle una cantidad de muertes al player[/TD]

[/TR]

[TR]

[TD=align: center]tSet_user_screenfade(id,rrr,ggg,bbb,duracion, alpha)[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]Con esta native podemos darle un ScreenFade al jugador, duración en minutos, alpha es la opacidad, esto es como el env_fade[/TD]

[/TR]

[TR]

[TD=align: center]tSet_info(id, info)[/TD]

[TD=align: center]No[/TD]

[TD=align: center]Sí[/TD]

[TD=align: center]Con esta native podemos darle una info en la tabla de scorer al player:

info = 0 (Solo le damos los frags) info = 1 (Solo le damos las muertes) info = 2 (Le damos los frags y muertes)[/TD]

[/TR]

[TR]

[/TR]

[/TABLE]

 

- - - Actualizado - - -

 

Codigo del inc:

/******************************************
**        Included by totopizza          **
**********                     ************
*******************************************/

#if defined _tAPI_included
   #endinput
#endif
#define _tAPI_included


native tGet_user_frags(id)

native tGet_user_muertes(id)

native tGet_user_segs(id)

native tGet_user_mins(id)

native tGet_user_hrs(id)

native tGet_user_days(id)


native tSet_user_frags(id, frags)

native tSet_info(id, info)

native tSet_user_muerts(id, muertes)

native tSet_user_screenfade( id, rrr, ggg, bbb, duracion,alpha )

 

- - - Actualizado - - -

 

Para este plugin deberan usar el guardado creado por destro: https://amxmodx-es.com/Thread-API-Advanced-Vault-System-1-4c-23-12-2014

Share this post


Link to post
Share on other sites

Veo que sos un muy buen Scripter, mas avanzado que yo por lo menos.

Te felicito por el plugin, pero tengo algunas inquietudes, tal vez haya sido solo yo.

Con el sistema de guardado por nvault, no tenes posibilidades de que se te buguee? Porque yo no hace mucho, cuando tenia mi sv de dr, tenia un sistema de guardado de datos por nvault que lo usaba para guardar el tiempo que hacia x jugador al terminar el mapa, y cuando ponias /best, en say te aparecia el que menos tiempo hizo en ese mapa y con cuanto tiempo, pero a veces se bugueaba y aparecia cualquier tiempo, no siempre, pero lo hacia, tambien, cada vez que reiniciaba el sv desde el panel o se caia, se borraba todo y no habia ningun tiempo, y lo tuve que reemplazar a ese sistema por otro un poco peor pero que funciono sin problema alguno.

 

Y otra cosa, yo creo que para que este sistema sea 100% efectivo, deberia haber un sistema de cuentas sqlite porque sino cualquiera entra con el tag del loco y le baja el rank killeandose o haciendo que lo maten, etc.

 

Si lo que dije no tiene nada que ver, perdon, es porque no entendi, digo por las dudas.

Buen trabajo y muy prolijo.

Saludos.

Share this post


Link to post
Share on other sites

Muchas gracias, el guardado lo puse por nick, simplemente podrían usar cualquier sistema de registro y así evitarian que entren con los nicks y que les arruinen su scorer.

 

Ahora del otro lado de que tu me dices sobre el nvault, dejame decirte que yo ese guardado nunca lo supe usar, me contaron algunos amigos que sí, a ellos aveces se les bugeaba borrandole los datos como tu lo acabas de mencionar.

 

PD: También podrían usar el no name changed

Share this post


Link to post
Share on other sites

Usé el siguiente guardado:

#include <adv_vault>

 

Para que funcione el guardado tienes que tener activado el adv_vault.amxx en plugins.ini, aquí te dejare de donde lo puedes descargar.

https://amxmodx-es.com/Thread-API-Advanced-Vault-System-1-4c-23-12-2014

 

PD: se me olvidada, para que las natives funcionen, el plugins tAPI_sis_frags.amxx tiene que estar activado :|

Share this post


Link to post
Share on other sites

Muy bueno, yo todavia estoy intentando entender el sistema de las natives, por el momento asocio los plugins con los .inl, pero implica tener que hacer varios cambios a los plugins que quiero asociar, y no es una forma muy segura, pero me funciona hasta ahora.

Saludos y vamos por mas!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...