added tfc plugins
This commit is contained in:
		
							
								
								
									
										201
									
								
								plugins/tfc/menufront.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										201
									
								
								plugins/tfc/menufront.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,201 @@
 | 
				
			|||||||
 | 
					/* AMX Mod X
 | 
				
			||||||
 | 
					*   Menus Front-End Plugin
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* by the AMX Mod X Development Team
 | 
				
			||||||
 | 
					*  originally developed by OLO
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of AMX Mod X.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					*  under the terms of the GNU General Public License as published by the
 | 
				
			||||||
 | 
					*  Free Software Foundation; either version 2 of the License, or (at
 | 
				
			||||||
 | 
					*  your option) any later version.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					*  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					*  General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					*  along with this program; if not, write to the Free Software Foundation,
 | 
				
			||||||
 | 
					*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  In addition, as a special exception, the author gives permission to
 | 
				
			||||||
 | 
					*  link the code of this program with the Half-Life Game Engine ("HL
 | 
				
			||||||
 | 
					*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
 | 
				
			||||||
 | 
					*  L.L.C ("Valve"). You must obey the GNU General Public License in all
 | 
				
			||||||
 | 
					*  respects for all of the code used other than the HL Engine and MODs
 | 
				
			||||||
 | 
					*  from Valve. If you modify this file, you may extend this exception
 | 
				
			||||||
 | 
					*  to your version of the file, but you are not obligated to do so. If
 | 
				
			||||||
 | 
					*  you do not wish to do so, delete this exception statement from your
 | 
				
			||||||
 | 
					*  version.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					#include <amxmisc>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuPosition[33]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MENUS_NUMBER 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuBody[MENUS_NUMBER][] = {
 | 
				
			||||||
 | 
					  "KICK_PLAYER",
 | 
				
			||||||
 | 
					  "BAN_PLAYER",
 | 
				
			||||||
 | 
					  "SLAP_SLAY",
 | 
				
			||||||
 | 
					  "TEAM_PLAYER",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "CHANGEL",
 | 
				
			||||||
 | 
					  "VOTE_MAPS",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "SPECH_STUFF",
 | 
				
			||||||
 | 
					  "CLIENT_COM",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Next Page
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "SERVER_COM",
 | 
				
			||||||
 | 
					  "CVARS_SET",
 | 
				
			||||||
 | 
					  "CONFIG",
 | 
				
			||||||
 | 
					  "LANG_SET",
 | 
				
			||||||
 | 
					  "STATS_SET",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "PAUSE_PLUG",
 | 
				
			||||||
 | 
					  "RES_WEAP",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "TELE_PLAYER" /* Last is Teleport menu - if you want to move it
 | 
				
			||||||
 | 
					                       change also code in displayMenu (look for fun module check) */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuCmd[MENUS_NUMBER][] = {
 | 
				
			||||||
 | 
					  "amx_kickmenu",
 | 
				
			||||||
 | 
					  "amx_banmenu",
 | 
				
			||||||
 | 
					  "amx_slapmenu",
 | 
				
			||||||
 | 
					  "amx_teammenu",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "amx_mapmenu",
 | 
				
			||||||
 | 
					  "amx_votemapmenu",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "amx_speechmenu",
 | 
				
			||||||
 | 
					  "amx_clcmdmenu",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Next Page
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "amx_cmdmenu",
 | 
				
			||||||
 | 
					  "amx_cvarmenu",
 | 
				
			||||||
 | 
					  "amx_cfgmenu",
 | 
				
			||||||
 | 
					  "amx_setlangmenu",
 | 
				
			||||||
 | 
					  "amx_statscfgmenu",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "amx_pausecfgmenu",
 | 
				
			||||||
 | 
					  "amx_restmenu",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "amx_teleportmenu"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Second value sets if menu is only for CS...
 | 
				
			||||||
 | 
					new g_menuAccess[MENUS_NUMBER][2] = {
 | 
				
			||||||
 | 
					  {ADMIN_KICK,0},
 | 
				
			||||||
 | 
					  {ADMIN_BAN,0},
 | 
				
			||||||
 | 
					  {ADMIN_SLAY,0},
 | 
				
			||||||
 | 
					  {ADMIN_LEVEL_A,0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {ADMIN_MAP,0},
 | 
				
			||||||
 | 
					  {ADMIN_MAP,0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {ADMIN_MENU,0},
 | 
				
			||||||
 | 
					  {ADMIN_LEVEL_A,0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Next Page
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {ADMIN_MENU,0},
 | 
				
			||||||
 | 
					  {ADMIN_CVAR,0},
 | 
				
			||||||
 | 
					  {ADMIN_MENU,0},
 | 
				
			||||||
 | 
					  {ADMIN_CFG,0},
 | 
				
			||||||
 | 
					  {ADMIN_CFG,0},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {ADMIN_CFG,0},
 | 
				
			||||||
 | 
					  {ADMIN_CFG,1},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {ADMIN_LEVEL_A,0}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_coloredMenus
 | 
				
			||||||
 | 
					new g_cstrikeRunning
 | 
				
			||||||
 | 
					new g_funModule
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init() {
 | 
				
			||||||
 | 
					  register_plugin("Menus Front-End",AMXX_VERSION_STR,"AMXX Dev Team")  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_dictionary("menufront.txt")
 | 
				
			||||||
 | 
					  register_dictionary("common.txt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("AMX Mod X Menu"),1023,"actionMenu") 
 | 
				
			||||||
 | 
					  register_clcmd("amxmodmenu","cmdMenu",ADMIN_MENU,"- displays menus")    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_coloredMenus = colored_menus()
 | 
				
			||||||
 | 
					  g_cstrikeRunning = cstrike_running()
 | 
				
			||||||
 | 
					  g_funModule = is_module_loaded("Fun")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionMenu(id,key) {
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 8: displayMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: client_cmd(id, g_menuCmd[ g_menuPosition[id] * 8 + key ] )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0)  return
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new start = pos * 8
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if ( start >= MENUS_NUMBER )
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					  new len = format(menuBody,511,
 | 
				
			||||||
 | 
					   g_coloredMenus ? "\yAMX Mod X Menu\R%d/%d^n\w^n" : "AMX Mod X Menu %d/%d^n^n" , pos+1, 2 )
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new end = start + 8
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (end > MENUS_NUMBER )
 | 
				
			||||||
 | 
					    end = MENUS_NUMBER
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new flags = get_user_flags(id)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					      if ( a == MENUS_NUMBER - 1 && !g_funModule ) 
 | 
				
			||||||
 | 
					        continue // checks if there is fun module for teleport menu
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					      if ( (flags & g_menuAccess[a][0]) && ( g_menuAccess[a][1] ? g_cstrikeRunning : 1 ) ) {
 | 
				
			||||||
 | 
					        keys |= (1<<b)
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"%d. %L^n",++b, id, g_menuBody[ a ] )
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else {
 | 
				
			||||||
 | 
					        ++b     
 | 
				
			||||||
 | 
					        if ( g_coloredMenus )
 | 
				
			||||||
 | 
					          len += format(menuBody[len],511-len, "\d%d. %L^n\w",b, id, g_menuBody[ a ] )
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          len += format(menuBody[len],511-len, "#. %L^n", id, g_menuBody[ a ] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					  if (end != MENUS_NUMBER ) {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %s", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menuBody[len],511-len,"^n0. %s", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    displayMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										675
									
								
								plugins/tfc/plmenu.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										675
									
								
								plugins/tfc/plmenu.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,675 @@
 | 
				
			|||||||
 | 
					/* AMX Mod X
 | 
				
			||||||
 | 
					*   Players Menu Plugin
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* by the AMX Mod X Development Team
 | 
				
			||||||
 | 
					*  originally developed by OLO
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of AMX Mod X.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					*  under the terms of the GNU General Public License as published by the
 | 
				
			||||||
 | 
					*  Free Software Foundation; either version 2 of the License, or (at
 | 
				
			||||||
 | 
					*  your option) any later version.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					*  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					*  General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					*  along with this program; if not, write to the Free Software Foundation,
 | 
				
			||||||
 | 
					*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  In addition, as a special exception, the author gives permission to
 | 
				
			||||||
 | 
					*  link the code of this program with the Half-Life Game Engine ("HL
 | 
				
			||||||
 | 
					*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
 | 
				
			||||||
 | 
					*  L.L.C ("Valve"). You must obey the GNU General Public License in all
 | 
				
			||||||
 | 
					*  respects for all of the code used other than the HL Engine and MODs
 | 
				
			||||||
 | 
					*  from Valve. If you modify this file, you may extend this exception
 | 
				
			||||||
 | 
					*  to your version of the file, but you are not obligated to do so. If
 | 
				
			||||||
 | 
					*  you do not wish to do so, delete this exception statement from your
 | 
				
			||||||
 | 
					*  version.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					#include <amxmisc>
 | 
				
			||||||
 | 
					#include <tfcx>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuPosition[33]
 | 
				
			||||||
 | 
					new g_menuPlayers[33][32]
 | 
				
			||||||
 | 
					new g_menuPlayersNum[33]
 | 
				
			||||||
 | 
					new g_menuOption[33]
 | 
				
			||||||
 | 
					new g_menuSettings[33]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuSelect[33][64]
 | 
				
			||||||
 | 
					new g_menuSelectNum[33]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_CLCMDS 24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_clcmdName[MAX_CLCMDS][32]
 | 
				
			||||||
 | 
					new g_clcmdCmd[MAX_CLCMDS][64]
 | 
				
			||||||
 | 
					new g_clcmdMisc[MAX_CLCMDS][2]
 | 
				
			||||||
 | 
					new g_clcmdNum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_coloredMenus
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_teamNames[5][] = { "", "Blue","Red","Yellow","Green" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init() {
 | 
				
			||||||
 | 
					  register_plugin("Players Menu",AMXX_VERSION_STR,"AMXX Dev Team")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_dictionary("plmenu.txt")
 | 
				
			||||||
 | 
					  register_dictionary("common.txt")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_clcmd("amx_kickmenu","cmdKickMenu",ADMIN_KICK,"- displays kick menu")
 | 
				
			||||||
 | 
					  register_clcmd("amx_banmenu","cmdBanMenu",ADMIN_BAN,"- displays ban menu")
 | 
				
			||||||
 | 
					  register_clcmd("amx_slapmenu","cmdSlapMenu",ADMIN_SLAY,"- displays slap/slay menu")
 | 
				
			||||||
 | 
					  register_clcmd("amx_teammenu","cmdTeamMenu",ADMIN_LEVEL_A,"- displays team menu")
 | 
				
			||||||
 | 
					  register_clcmd("amx_clcmdmenu","cmdClcmdMenu",ADMIN_LEVEL_A,"- displays client cmds menu")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Ban Menu"),1023,"actionBanMenu")
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Kick Menu"),1023,"actionKickMenu")
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Slap/Slay Menu"),1023,"actionSlapMenu")
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Team Menu"),1023,"actionTeamMenu")
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Client Cmds Menu"),1023,"actionClcmdMenu")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_coloredMenus = colored_menus()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new clcmds_ini_file[64]
 | 
				
			||||||
 | 
					  get_configsdir(clcmds_ini_file, 63)
 | 
				
			||||||
 | 
					  format(clcmds_ini_file, 63, "%s/clcmds.ini", clcmds_ini_file)
 | 
				
			||||||
 | 
					  load_settings(clcmds_ini_file)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Ban menu */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionBanMenu(id,key) {
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 7: {
 | 
				
			||||||
 | 
					      ++g_menuOption[id]
 | 
				
			||||||
 | 
					      g_menuOption[id] %= 3
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      switch(g_menuOption[id]){
 | 
				
			||||||
 | 
					      case 0: g_menuSettings[id] = 0
 | 
				
			||||||
 | 
					      case 1: g_menuSettings[id] = 5
 | 
				
			||||||
 | 
					      case 2: g_menuSettings[id] = 60
 | 
				
			||||||
 | 
					      }     
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      displayBanMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case 8: displayBanMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayBanMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      new name[32], name2[32], authid[32],authid2[32]
 | 
				
			||||||
 | 
					      get_user_name(player,name2,31)
 | 
				
			||||||
 | 
					      get_user_authid(id,authid,31)
 | 
				
			||||||
 | 
					      get_user_authid(player,authid2,31)
 | 
				
			||||||
 | 
					      get_user_name(id,name,31)
 | 
				
			||||||
 | 
					      new userid2 = get_user_userid(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log_amx("Ban: ^"%s<%d><%s><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^")", 
 | 
				
			||||||
 | 
					        name,get_user_userid(id),authid, name2,userid2,authid2, g_menuSettings[id] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      switch (get_cvar_num("amx_show_activity")) {
 | 
				
			||||||
 | 
					        case 2: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_BAN_2",name,name2)
 | 
				
			||||||
 | 
					        case 1: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_BAN_1",name2)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (equal("4294967295",authid2)) { /* lan */
 | 
				
			||||||
 | 
					        new ipa[32]
 | 
				
			||||||
 | 
					        get_user_ip(player,ipa,31,1)
 | 
				
			||||||
 | 
					        server_cmd("addip %d %s;writeip",g_menuSettings[id],ipa)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        server_cmd("banid %d #%d kick;writeid",g_menuSettings[id],userid2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      server_exec()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      displayBanMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayBanMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0)  return
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  get_players(g_menuPlayers[id],g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new i
 | 
				
			||||||
 | 
					  new name[32]
 | 
				
			||||||
 | 
					  new start = pos * 7
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (start >= g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new len = format(menuBody,511, g_coloredMenus ? 
 | 
				
			||||||
 | 
					    "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id,"BAN_MENU",pos+1,(  g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0 )) )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new end = start + 7
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0|MENU_KEY_8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end > g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    end = g_menuPlayersNum[id]
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    i = g_menuPlayers[id][a]
 | 
				
			||||||
 | 
					    get_user_name(i,name,31)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ( is_user_bot(i) || access(i,ADMIN_IMMUNITY) ) {
 | 
				
			||||||
 | 
					      ++b   
 | 
				
			||||||
 | 
					      if ( g_coloredMenus )
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"\d%d. %s^n\w",b,name)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"#. %s^n",name)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					      keys |= (1<<b)
 | 
				
			||||||
 | 
					      len += format(menuBody[len],511-len,"%d. %s^n",++b,name)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( g_menuSettings[id] )
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %L^n", id, "BAN_FOR_MIN", g_menuSettings[id] )
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %L^n", id, "BAN_PERM" )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end != g_menuPlayersNum[id]) {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody,-1,"Ban Menu")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdBanMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (!cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_menuOption[id] = 1
 | 
				
			||||||
 | 
					  g_menuSettings[id] = 5
 | 
				
			||||||
 | 
					  displayBanMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Slap/Slay */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionSlapMenu(id,key) {
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 7: {
 | 
				
			||||||
 | 
					      ++g_menuOption[id]
 | 
				
			||||||
 | 
					      g_menuOption[id] %= 4
 | 
				
			||||||
 | 
					      switch (g_menuOption[id]) {
 | 
				
			||||||
 | 
					        case 1: g_menuSettings[id] = 0
 | 
				
			||||||
 | 
					        case 2: g_menuSettings[id] = 1
 | 
				
			||||||
 | 
					        case 3: g_menuSettings[id] = 5
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      displaySlapMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case 8: displaySlapMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displaySlapMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      new name2[32]
 | 
				
			||||||
 | 
					      get_user_name(player,name2,31)
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      if (!is_user_alive(player)) {
 | 
				
			||||||
 | 
					        client_print(id,print_chat,"%L",id,"CANT_PERF_DEAD",name2)
 | 
				
			||||||
 | 
					        displaySlapMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					        return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					      new authid[32],authid2[32], name[32]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      get_user_authid(id,authid,31)
 | 
				
			||||||
 | 
					      get_user_authid(player,authid2,31)
 | 
				
			||||||
 | 
					      get_user_name(id,name,31)
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					      if ( g_menuOption[id] ) {
 | 
				
			||||||
 | 
					        log_amx("Cmd: ^"%s<%d><%s><>^" slap with %d damage ^"%s<%d><%s><>^"", 
 | 
				
			||||||
 | 
					          name,get_user_userid(id),authid, g_menuSettings[id], name2,get_user_userid(player),authid2 )
 | 
				
			||||||
 | 
					        switch (get_cvar_num("amx_show_activity")) {
 | 
				
			||||||
 | 
					          case 2: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_SLAP_2",name,name2,g_menuSettings[id])
 | 
				
			||||||
 | 
					          case 1: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_SLAP_1",name2,g_menuSettings[id])
 | 
				
			||||||
 | 
					        }     
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else {
 | 
				
			||||||
 | 
					        log_amx("Cmd: ^"%s<%d><%s><>^" slay ^"%s<%d><%s><>^"", 
 | 
				
			||||||
 | 
					          name,get_user_userid(id),authid, name2,get_user_userid(player),authid2 )
 | 
				
			||||||
 | 
					        switch(get_cvar_num("amx_show_activity")) {
 | 
				
			||||||
 | 
					          case 2: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_SLAY_2",name,name2)
 | 
				
			||||||
 | 
					          case 1: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_SLAY_1",name2)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      if ( g_menuOption[id])
 | 
				
			||||||
 | 
					        user_slap(player, ( get_user_health(player) >  g_menuSettings[id]  ) ? g_menuSettings[id] : 0 )
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        user_kill( player )
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      displaySlapMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displaySlapMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0)  return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get_players(g_menuPlayers[id],g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new i
 | 
				
			||||||
 | 
					  new name[32]
 | 
				
			||||||
 | 
					  new start = pos * 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (start >= g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new len = format(menuBody,511, g_coloredMenus ? 
 | 
				
			||||||
 | 
					    "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id,"SLAP_SLAY_MENU",pos+1,(  g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0 )) )
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					  new end = start + 7
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0|MENU_KEY_8
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (end > g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    end = g_menuPlayersNum[id]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    i = g_menuPlayers[id][a]
 | 
				
			||||||
 | 
					    get_user_name(i,name,31)
 | 
				
			||||||
 | 
					    new iteam = get_user_team(i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( !is_user_alive(i) || access(i,ADMIN_IMMUNITY) ) {
 | 
				
			||||||
 | 
					      ++b   
 | 
				
			||||||
 | 
					      if ( g_coloredMenus )
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"\d%d. %s\R%s^n\w", b,name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"#. %s   %s^n",name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      keys |= (1<<b)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      len += format(menuBody[len],511-len, g_coloredMenus ? 
 | 
				
			||||||
 | 
					        "%d. %s\y\R%s^n\w" : "%d. %s   %s^n",++b,name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( g_menuOption[id] )
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %L^n",id,"SLAP_WITH_DMG",g_menuSettings[id] )
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %L^n",id,"SLAY")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end != g_menuPlayersNum[id]) {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody,-1,"Slap/Slay Menu")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdSlapMenu(id,level,cid)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_menuOption[id] = 0
 | 
				
			||||||
 | 
					  g_menuSettings[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  displaySlapMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Kick */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionKickMenu(id,key)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 8: displayKickMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayKickMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      new authid[32],authid2[32], name[32], name2[32]
 | 
				
			||||||
 | 
					      get_user_authid(id,authid,31)
 | 
				
			||||||
 | 
					      get_user_authid(player,authid2,31)
 | 
				
			||||||
 | 
					      get_user_name(id,name,31)
 | 
				
			||||||
 | 
					      get_user_name(player,name2,31)      
 | 
				
			||||||
 | 
					      new userid2 = get_user_userid(player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log_amx("Kick: ^"%s<%d><%s><>^" kick ^"%s<%d><%s><>^"", 
 | 
				
			||||||
 | 
					          name,get_user_userid(id),authid, name2,userid2,authid2 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      switch (get_cvar_num("amx_show_activity")) {
 | 
				
			||||||
 | 
					        case 2: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_KICK_2",name,name2)
 | 
				
			||||||
 | 
					        case 1: client_print(0,print_chat,"%L",LANG_PLAYER,"ADMIN_KICK_1",name2)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      server_cmd("kick #%d",userid2)
 | 
				
			||||||
 | 
					      server_exec()
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					      displayKickMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayKickMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0)  return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get_players(g_menuPlayers[id],g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new i
 | 
				
			||||||
 | 
					  new name[32]
 | 
				
			||||||
 | 
					  new start = pos * 8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (start >= g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new len = format(menuBody,511, g_coloredMenus ?
 | 
				
			||||||
 | 
					    "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id,"KICK_MENU",pos+1,(  g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] % 8) ? 1 : 0 )) )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new end = start + 8
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end > g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    end = g_menuPlayersNum[id]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    i = g_menuPlayers[id][a]
 | 
				
			||||||
 | 
					    get_user_name(i,name,31)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if ( access(i,ADMIN_IMMUNITY) ) {
 | 
				
			||||||
 | 
					      ++b   
 | 
				
			||||||
 | 
					      if ( g_coloredMenus )
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"\d%d. %s^n\w",b,name)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"#. %s^n",name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					      keys |= (1<<b)
 | 
				
			||||||
 | 
					      len += format(menuBody[len],511-len,"%d. %s^n",++b,name)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end != g_menuPlayersNum[id]) {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else  format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody,-1,"Kick Menu")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdKickMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    displayKickMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Team menu */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionTeamMenu(id,key) {
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 7:{
 | 
				
			||||||
 | 
					      g_menuOption[id]++
 | 
				
			||||||
 | 
					      if( g_menuOption[id] > 4 )
 | 
				
			||||||
 | 
					        g_menuOption[id] = 1
 | 
				
			||||||
 | 
					      displayTeamMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case 8: displayTeamMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayTeamMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
 | 
				
			||||||
 | 
					      new authid[32],authid2[32], name[32], name2[32]
 | 
				
			||||||
 | 
					      get_user_name(player,name2,31)
 | 
				
			||||||
 | 
					      get_user_authid(id,authid,31)
 | 
				
			||||||
 | 
					      get_user_authid(player,authid2,31)
 | 
				
			||||||
 | 
					      get_user_name(id,name,31)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log_amx("Cmd: ^"%s<%d><%s><>^" transfer ^"%s<%d><%s><>^" (team ^"%s^")", 
 | 
				
			||||||
 | 
					          name,get_user_userid(id),authid, name2,get_user_userid(player),authid2, g_teamNames[g_menuOption[id]] )
 | 
				
			||||||
 | 
					      switch (get_cvar_num("amx_show_activity")) {
 | 
				
			||||||
 | 
					        case 2: client_print(0,print_chat,"%L",id,"ADMIN_TRANSF_2",name,name2, g_teamNames[g_menuOption[id]] )
 | 
				
			||||||
 | 
					        case 1: client_print(0,print_chat,"%L",id,"ADMIN_TRANSF_1",name2, g_teamNames[g_menuOption[id]] )
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      new szCmd[2]
 | 
				
			||||||
 | 
					      format(szCmd,2,"%d",g_menuOption[id])
 | 
				
			||||||
 | 
					      tfc_userkill(player)
 | 
				
			||||||
 | 
					      engclient_cmd(player,"jointeam" , szCmd )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      displayTeamMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayTeamMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0)  return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get_players(g_menuPlayers[id],g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new i, iteam
 | 
				
			||||||
 | 
					  new name[32]
 | 
				
			||||||
 | 
					  new start = pos * 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (start >= g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new len = format(menuBody,511, g_coloredMenus ? 
 | 
				
			||||||
 | 
					    "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id,"TEAM_MENU",pos+1,(  g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0 )) )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new end = start + 7
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0|MENU_KEY_8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end > g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    end = g_menuPlayersNum[id]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    i = g_menuPlayers[id][a]
 | 
				
			||||||
 | 
					    get_user_name(i,name,31)
 | 
				
			||||||
 | 
					    iteam = get_user_team(i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( (iteam == g_menuOption[id]) || access(i,ADMIN_IMMUNITY) ) {
 | 
				
			||||||
 | 
					      ++b   
 | 
				
			||||||
 | 
					      if ( g_coloredMenus )
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"\d%d. %s\R%s^n\w",b,name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"#. %s   %s^n",name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					      keys |= (1<<b)
 | 
				
			||||||
 | 
					      len += format(menuBody[len],511-len, g_coloredMenus ? 
 | 
				
			||||||
 | 
					        "%d. %s\y\R%s^n\w" : "%d. %s   %s^n",++b,name,g_teamNames[iteam])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  len += format(menuBody[len],511-len,"^n8. %L^n",id,"TRANSF_TO",g_teamNames[g_menuOption[id]] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end != g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					  {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody,-1,"Team Menu")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdTeamMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_menuOption[id] = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  displayTeamMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Client cmds menu */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionClcmdMenu(id,key) {
 | 
				
			||||||
 | 
					  switch (key) {
 | 
				
			||||||
 | 
					    case 7:{
 | 
				
			||||||
 | 
					      ++g_menuOption[id]
 | 
				
			||||||
 | 
					      g_menuOption[id] %= g_menuSelectNum[id]
 | 
				
			||||||
 | 
					      displayClcmdMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case 8: displayClcmdMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayClcmdMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
 | 
				
			||||||
 | 
					      new flags = g_clcmdMisc[g_menuSelect[id][g_menuOption[id]]][1]
 | 
				
			||||||
 | 
					      if (is_user_connected(player)) {
 | 
				
			||||||
 | 
					        new command[64], authid[32], name[32], userid[32]
 | 
				
			||||||
 | 
					        copy(command,63,g_clcmdCmd[g_menuSelect[id][g_menuOption[id]]])
 | 
				
			||||||
 | 
					        get_user_authid(player,authid,31)
 | 
				
			||||||
 | 
					        get_user_name(player,name,31)
 | 
				
			||||||
 | 
					        num_to_str(get_user_userid(player),userid,31)
 | 
				
			||||||
 | 
					        replace(command,63,"%userid%",userid)
 | 
				
			||||||
 | 
					        replace(command,63,"%authid%",authid)
 | 
				
			||||||
 | 
					        replace(command,63,"%name%",name)
 | 
				
			||||||
 | 
					        if (flags & 1) {
 | 
				
			||||||
 | 
					          server_cmd(command)
 | 
				
			||||||
 | 
					          server_exec()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else if (flags & 2)
 | 
				
			||||||
 | 
					          client_cmd(id,command)
 | 
				
			||||||
 | 
					        else if (flags & 4)
 | 
				
			||||||
 | 
					          client_cmd(player,command)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (flags & 8) displayClcmdMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayClcmdMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0) return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get_players(g_menuPlayers[id],g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new menuBody[512]
 | 
				
			||||||
 | 
					  new b = 0
 | 
				
			||||||
 | 
					  new i
 | 
				
			||||||
 | 
					  new name[32]
 | 
				
			||||||
 | 
					  new start = pos * 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (start >= g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new len = format(menuBody,511, g_coloredMenus ? 
 | 
				
			||||||
 | 
					    "\y%L\R%d/%d^n\w^n" : "%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id, "CL_CMD_MENU", pos+1,(  g_menuPlayersNum[id] / 7 + ((g_menuPlayersNum[id] % 7) ? 1 : 0 )) )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new end = start + 7
 | 
				
			||||||
 | 
					  new keys = MENU_KEY_0|MENU_KEY_8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (end > g_menuPlayersNum[id])
 | 
				
			||||||
 | 
					    end = g_menuPlayersNum[id]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    i = g_menuPlayers[id][a]
 | 
				
			||||||
 | 
					    get_user_name(i,name,31)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( !g_menuSelectNum[id] || access(i,ADMIN_IMMUNITY) ) {
 | 
				
			||||||
 | 
					      ++b   
 | 
				
			||||||
 | 
					      if ( g_coloredMenus )
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"\d%d. %s^n\w",b,name)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        len += format(menuBody[len],511-len,"#. %s^n",name)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					      keys |= (1<<b)
 | 
				
			||||||
 | 
					      len += format(menuBody[len],511-len,"%d. %s^n",++b,name)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( g_menuSelectNum[id] )
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %s^n", g_clcmdName[g_menuSelect[id][g_menuOption[id]]] )
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    len += format(menuBody[len],511-len,"^n8. %L^n",id,"NO_CMDS")
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  if (end != g_menuPlayersNum[id]) {
 | 
				
			||||||
 | 
					    format(menuBody[len],511-len,"^n9. %L...^n0. %L", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menuBody[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show_menu(id,keys,menuBody,-1,"Client Cmds Menu")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdClcmdMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (!cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new flags = get_user_flags(id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_menuSelectNum[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  for (new a = 0; a < g_clcmdNum; ++a)
 | 
				
			||||||
 | 
					    if (g_clcmdMisc[a][0] & flags)
 | 
				
			||||||
 | 
					      g_menuSelect[id][g_menuSelectNum[id]++] = a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_menuOption[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  displayClcmdMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load_settings( szFilename[] ) {
 | 
				
			||||||
 | 
					  if ( !file_exists ( szFilename ) ) 
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new text[256], szFlags[32], szAccess[32]
 | 
				
			||||||
 | 
					  new a,  pos = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  while ( g_clcmdNum < MAX_CLCMDS && read_file (szFilename,pos++,text,255,a) ) {
 | 
				
			||||||
 | 
					    if ( text[0] == ';' ) continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ( parse( text , g_clcmdName[g_clcmdNum] , 31 ,
 | 
				
			||||||
 | 
					      g_clcmdCmd[g_clcmdNum] ,63,szFlags,31,szAccess,31 ) > 3 )
 | 
				
			||||||
 | 
					    {     
 | 
				
			||||||
 | 
					      while ( replace( g_clcmdCmd[ g_clcmdNum ] ,63,"\'","^"") ) {
 | 
				
			||||||
 | 
					          // do nothing
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      g_clcmdMisc[ g_clcmdNum ][1] = read_flags ( szFlags )
 | 
				
			||||||
 | 
					      g_clcmdMisc[ g_clcmdNum ][0] = read_flags ( szAccess )
 | 
				
			||||||
 | 
					      g_clcmdNum++  
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_modules()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						require_module("tfcx")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										676
									
								
								plugins/tfc/stats.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										676
									
								
								plugins/tfc/stats.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,676 @@
 | 
				
			|||||||
 | 
					/* AMX Mod script.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* (c) 2004, SidLuke
 | 
				
			||||||
 | 
					* This file is provided as is (no warranties).
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* Plugin works with Stats Settings Plugin. Just run both of them.
 | 
				
			||||||
 | 
					* By amx_statscfg command (from Stats Settings Plugin)
 | 
				
			||||||
 | 
					* you will be able to set all settings and save them to a file.
 | 
				
			||||||
 | 
					* 
 | 
				
			||||||
 | 
					* Example of usage for some options:
 | 
				
			||||||
 | 
					* amx_statscfg on SayTop15
 | 
				
			||||||
 | 
					* amx_statscfg on SayRank
 | 
				
			||||||
 | 
					* 
 | 
				
			||||||
 | 
					* Accept able are also parts of name:
 | 
				
			||||||
 | 
					* amx_statscfg off say
 | 
				
			||||||
 | 
					* amx_statscfg on End
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					#include <tfcx>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public EndPlayer          // displays player stats at the end of map
 | 
				
			||||||
 | 
					public EndTop15           // displays top15 at the end of map
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public SayStatsAll        // displays players stats and rank
 | 
				
			||||||
 | 
					public SayTop15           // displays first 15. players ,cvar tfcstats_topvalue really:)
 | 
				
			||||||
 | 
					public SayRank            // displays user position in rank
 | 
				
			||||||
 | 
					public SayStatsMe         // displays user stats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public ShowAttackers  // shows attackers 
 | 
				
			||||||
 | 
					public ShowVictims    // shows victims 
 | 
				
			||||||
 | 
					public ShowKiller     // shows killer 
 | 
				
			||||||
 | 
					public KillerHp       // displays killer hp to victim console and screen 
 | 
				
			||||||
 | 
					public SayHP          // displays information about user killer 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public MultiKill
 | 
				
			||||||
 | 
					public MultiKillSound
 | 
				
			||||||
 | 
					public KnifeKill
 | 
				
			||||||
 | 
					public KnifeKillSound
 | 
				
			||||||
 | 
					public GrenadeKill
 | 
				
			||||||
 | 
					public GrenadeSuicide
 | 
				
			||||||
 | 
					public HeadShotKill
 | 
				
			||||||
 | 
					public HeadShotKillSound
 | 
				
			||||||
 | 
					public KillingStreak
 | 
				
			||||||
 | 
					public KillingStreakSound
 | 
				
			||||||
 | 
					public DoubleKill
 | 
				
			||||||
 | 
					public DoubleKillSound
 | 
				
			||||||
 | 
					public BulletDamage
 | 
				
			||||||
 | 
					public EndRoundStats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_streakKills[33][2]
 | 
				
			||||||
 | 
					new g_multiKills[33][2]
 | 
				
			||||||
 | 
					new Float:g_prevKill
 | 
				
			||||||
 | 
					new g_prevKillerId
 | 
				
			||||||
 | 
					new g_KillCount;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_userPosition[33]
 | 
				
			||||||
 | 
					new g_userState[33]
 | 
				
			||||||
 | 
					new g_userPlayers[33][32]
 | 
				
			||||||
 | 
					new g_Buffer[2048]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_Killers[33][4]
 | 
				
			||||||
 | 
					new Float:g_DeathStats[33] 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_bodyParts[8][] = { 
 | 
				
			||||||
 | 
					                        "whole body",
 | 
				
			||||||
 | 
					                        "head",
 | 
				
			||||||
 | 
					                        "chest",
 | 
				
			||||||
 | 
					                        "stomach",
 | 
				
			||||||
 | 
					                        "left arm",
 | 
				
			||||||
 | 
					                        "right arm",
 | 
				
			||||||
 | 
					                        "left leg",
 | 
				
			||||||
 | 
					                        "right leg"
 | 
				
			||||||
 | 
					                       }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_MultiKillMsg[7][] = { 
 | 
				
			||||||
 | 
					  "Multi-Kill! %s^nwith %d kills (%d hs)", 
 | 
				
			||||||
 | 
					  "Ultra-Kill!!! %s^nwith %d kills (%d hs)", 
 | 
				
			||||||
 | 
					  "%s IS ON A KILLING SPREE!!!^nwith %d kills (%d hs)",  
 | 
				
			||||||
 | 
					  "RAMPAGE!!! %s^nwith %d kills (%d hs)" ,
 | 
				
			||||||
 | 
					  "%s IS UNSTOPPABLE!!!^nwith %d kills (%d hs)" ,
 | 
				
			||||||
 | 
					  "%s IS A MONSTER!^nwith %d kills (%d hs)",
 | 
				
			||||||
 | 
					  "%s IS GODLIKE!!!!^nwith %d kills (%d hs)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_Sounds[7][] = { 
 | 
				
			||||||
 | 
					  "multikill", 
 | 
				
			||||||
 | 
					  "ultrakill", 
 | 
				
			||||||
 | 
					  "killingspree", 
 | 
				
			||||||
 | 
					  "rampage",    
 | 
				
			||||||
 | 
					  "unstoppable",   
 | 
				
			||||||
 | 
					  "monsterkill",
 | 
				
			||||||
 | 
					  "godlike"  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_KillingMsg[7][] = {
 | 
				
			||||||
 | 
					  "%s: Multi-Kill!",
 | 
				
			||||||
 | 
					  "%s: Ultra-Kill!!!",
 | 
				
			||||||
 | 
					  "%s IS ON A KILLING SPREE!!!",
 | 
				
			||||||
 | 
					  "%s: RAMPAGE!!!",  
 | 
				
			||||||
 | 
					  "%s IS UNSTOPPABLE!!!",  
 | 
				
			||||||
 | 
					  "%s IS A MONSTER!",
 | 
				
			||||||
 | 
					  "%s IS GODLIKE!!!"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_KnifeMsg[4][] = { 
 | 
				
			||||||
 | 
					  "%s sliced and diced %s", 
 | 
				
			||||||
 | 
					  "%s pulled out knife and gutted %s", 
 | 
				
			||||||
 | 
					  "%s sneaks carefully behind and knifed %s", 
 | 
				
			||||||
 | 
					  "%s knived %s"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_HeMessages[4][] = { 
 | 
				
			||||||
 | 
					  "%s sends a little gift to %s",   
 | 
				
			||||||
 | 
					  "%s throws a small present to %s",   
 | 
				
			||||||
 | 
					  "%s made a precision throw to %s",   
 | 
				
			||||||
 | 
					  "%s got a big explosion for %s"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_SHeMessages[4][] = { 
 | 
				
			||||||
 | 
					  "%s detonated himself with a grenade",   
 | 
				
			||||||
 | 
					  "%s trys the effect of a grenade",   
 | 
				
			||||||
 | 
					  "%s kicked a grenade into his own ass",   
 | 
				
			||||||
 | 
					  "%s explodes!"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					new g_HeadShots[7][] = { 
 | 
				
			||||||
 | 
					  "$kn killed $vn with a well^nplaced shot to the head!",   
 | 
				
			||||||
 | 
					  "$kn removed $vn's^nhead with the $wn",   
 | 
				
			||||||
 | 
					  "$kn turned $vn's head^ninto pudding with the $wn",   
 | 
				
			||||||
 | 
					  "$vn got pwned by $kn",
 | 
				
			||||||
 | 
					  "$vn's head has been^nturned into red jello",
 | 
				
			||||||
 | 
					  "$kn has superb aim with the $wn,^nas $vn well knows.",
 | 
				
			||||||
 | 
					  "$vn's head stayed in $kn's^ncrosshairs a bit too long..."
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_DoubleKillMsg[3][] = {
 | 
				
			||||||
 | 
					  "Wow! $kn made a double kill !!!",
 | 
				
			||||||
 | 
					  "Incredible! $kn made a triple kill !!!",
 | 
				
			||||||
 | 
					  "Amazing! $kn made $kk kills at once !!!"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_DoubleKillSound[3][] = {
 | 
				
			||||||
 | 
					  "doublekill",
 | 
				
			||||||
 | 
					  "multikill",
 | 
				
			||||||
 | 
					  "godlike"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init() {
 | 
				
			||||||
 | 
					  register_plugin("TFC Stats","0.20tfc","SidLuke")
 | 
				
			||||||
 | 
					  register_event("30","eInterMission","a")
 | 
				
			||||||
 | 
					  register_event("ResetHUD","eResetHud","b") 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_clcmd("say /hp","cmdKiller",0,"- displays info. about your killer") 
 | 
				
			||||||
 | 
					  register_clcmd("say /stats","cmdStats",0,"- displays others stats")
 | 
				
			||||||
 | 
					  register_clcmd("say /statsme","cmdStatsMe",0,"- displays your stats")
 | 
				
			||||||
 | 
					  register_clcmd("say /top15","cmdTop15",0,"- displays top 15 players")
 | 
				
			||||||
 | 
					  register_clcmd("say /top10","cmdTop15",0,"- displays top 15 players") // for statsme users :)
 | 
				
			||||||
 | 
					  register_clcmd("say /rank","cmdRank",0,"- displays your server stats")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_cvar("tfcstats_topvalue","15")
 | 
				
			||||||
 | 
					  register_cvar("tfcstats_maxmenupos","7")
 | 
				
			||||||
 | 
					  register_cvar("tfcstats_statstime","5.0")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  register_statsfwd(XMF_DAMAGE)
 | 
				
			||||||
 | 
					  register_statsfwd(XMF_DEATH)
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Server Stats"),1023,"actionStatsMenu")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_addStast[] = "amx_statscfg add ^"%s^" %s"
 | 
				
			||||||
 | 
					new g_disabledMsg[] = "Server has disabled that option"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_cfg(){
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Stats at the end of map","EndPlayer")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Top15 at the end of map","EndTop15")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Say /stats","SayStatsAll") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Say /top15","SayTop15")
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Say /rank","SayRank") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Say /statsme","SayStatsMe")
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Show Attackers","ShowAttackers") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Show Victims","ShowVictims") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Show killer","ShowKiller") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Show killer hp","KillerHp") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Say /hp","SayHP") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"MultiKill","MultiKill") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"MultiKill Sound","MultiKillSound") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Knife Kill","KnifeKill")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Knife Kill Sound","KnifeKillSound")    
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Grenade Kill","GrenadeKill")
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Grenade Suicide","GrenadeSuicide")
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"HeadShot Kill","HeadShotKill")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"HeadShot Kill Sound","HeadShotKillSound")
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Killing Streak","KillingStreak")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Killing Streak Sound","KillingStreakSound")  
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Double Kill","DoubleKill")    
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Double Kill Sound","DoubleKillSound") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"Bullet Damage","BulletDamage") 
 | 
				
			||||||
 | 
					  server_cmd(g_addStast,"End Round Stats","EndRoundStats") 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdStatsMe(id){
 | 
				
			||||||
 | 
					  if ( !SayStatsMe || !isActive() ){
 | 
				
			||||||
 | 
					    client_print(id,print_chat, g_disabledMsg )
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  displayStats(id,id)
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayStats(id,dest) {
 | 
				
			||||||
 | 
					  new name[32], stats[8], body[8]
 | 
				
			||||||
 | 
					  get_user_wstats(id,0,stats,body)
 | 
				
			||||||
 | 
					  new pos = format(g_Buffer,2047,"Kills: %d^nDeaths: %d^nTKs: %d^nDamage: %d^nHits: %d^nShots: %d^n^n",
 | 
				
			||||||
 | 
					    stats[0],stats[1],stats[3],stats[6],stats[5],stats[4])
 | 
				
			||||||
 | 
					  new a
 | 
				
			||||||
 | 
					  for( a = 1; a < TFCMAX_WEAPONS; a++) {
 | 
				
			||||||
 | 
					    if (get_user_wstats(id,a,stats,body)){
 | 
				
			||||||
 | 
					      if ( xmod_is_melee_wpn(a) )
 | 
				
			||||||
 | 
					        stats[4] = -1;
 | 
				
			||||||
 | 
					      xmod_get_wpnname(a,name,31)
 | 
				
			||||||
 | 
					      pos += format(g_Buffer[pos],2047-pos,"%s shots: %d  hits: %d  damage: %d  kills: %d  deaths: %d^n",
 | 
				
			||||||
 | 
					        name,stats[4],stats[5],stats[6],stats[0],stats[1])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  get_user_name(id,name,31)
 | 
				
			||||||
 | 
					  show_motd(dest,g_Buffer,name)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdRank(id){
 | 
				
			||||||
 | 
					  if ( !SayRank || !isActive() ){
 | 
				
			||||||
 | 
					    client_print(id,print_chat, g_disabledMsg )
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  displayRank(id,id)  
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayRank(id,dest) {
 | 
				
			||||||
 | 
					  new name[32], stats[8], body[8]
 | 
				
			||||||
 | 
					  new rank_pos = get_user_stats(id,stats,body)
 | 
				
			||||||
 | 
					  new pos = format(g_Buffer,2047,"Kills: %d^nDeaths: %d^nTKs: %d^nDamage: %d^nHits: %d^nShots: %d^n^n",
 | 
				
			||||||
 | 
					    stats[0],stats[1],stats[3],stats[6],stats[5],stats[4])
 | 
				
			||||||
 | 
					  pos += format(g_Buffer[pos],2047-pos,"Hits:^n%s: %d^n%s: %d^n%s: %d^n%s: %d^n%s: %d^n%s: %d^n%s: %d^n^n",
 | 
				
			||||||
 | 
					    g_bodyParts[1],body[1],g_bodyParts[2],body[2],g_bodyParts[3],body[3], g_bodyParts[4],body[4],
 | 
				
			||||||
 | 
					    g_bodyParts[5],body[5],g_bodyParts[6],body[6],g_bodyParts[7],body[7])
 | 
				
			||||||
 | 
					  format(g_Buffer[pos],2047-pos,"%s rank is %d of %d",(id==dest)?"Your":"His", rank_pos,get_statsnum())
 | 
				
			||||||
 | 
					  get_user_name(id,name,31)
 | 
				
			||||||
 | 
					  show_motd(dest,g_Buffer,name)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdTop15(id) {
 | 
				
			||||||
 | 
					  if ( !SayTop15 || !isActive() ){
 | 
				
			||||||
 | 
					    client_print(id,print_chat, g_disabledMsg )
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  getTop15()
 | 
				
			||||||
 | 
					  show_motd(id,g_Buffer,"Top 15")
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* get top 15 */
 | 
				
			||||||
 | 
					getTop15(){
 | 
				
			||||||
 | 
					  new stats[8], body[8], name[32]
 | 
				
			||||||
 | 
					  new pos = copy(g_Buffer,2047,"#   nick                           kills/deaths    TKs      hits/shots/headshots^n")
 | 
				
			||||||
 | 
					  new imax = get_statsnum()
 | 
				
			||||||
 | 
					  if (imax > 15) imax = 15
 | 
				
			||||||
 | 
					  for(new a = 0; a < imax; ++a){
 | 
				
			||||||
 | 
					    get_stats(a,stats,body,name,31)
 | 
				
			||||||
 | 
					    pos += format(g_Buffer[pos],2047-pos,"%2d.  %-28.27s    %d/%d         %d            %d/%d/%d^n",a+1,name,stats[0],stats[1],stats[3],stats[5],stats[4],stats[2])
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public endGameStats(){
 | 
				
			||||||
 | 
					  if ( EndPlayer ){
 | 
				
			||||||
 | 
					    new players[32], inum
 | 
				
			||||||
 | 
					    get_players(players,inum)
 | 
				
			||||||
 | 
					    for(new i = 0; i < inum; ++i){
 | 
				
			||||||
 | 
					      displayStats(players[i],players[i])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  else if ( EndTop15 ){
 | 
				
			||||||
 | 
					    new players[32], inum
 | 
				
			||||||
 | 
					    get_players(players,inum)
 | 
				
			||||||
 | 
					    getTop15()
 | 
				
			||||||
 | 
					    for(new i = 0; i < inum; ++i)
 | 
				
			||||||
 | 
					      show_motd(players[i],g_Buffer,"Top 15")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public eInterMission()
 | 
				
			||||||
 | 
					  if ( isActive() )
 | 
				
			||||||
 | 
					    set_task(1.0,"endGameStats")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdStats(id){
 | 
				
			||||||
 | 
					  if ( !SayStatsAll || !isActive() ){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client_print(id,print_chat, g_disabledMsg )
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  showStatsMenu(id,g_userPosition[id]=0)
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* build list of attackers */ 
 | 
				
			||||||
 | 
					getAttackers(id) { 
 | 
				
			||||||
 | 
					  new name[32],wpn[32], stats[8],body[8],found=0 
 | 
				
			||||||
 | 
					  new pos = copy(g_Buffer,2047,"Attackers:^n") 
 | 
				
			||||||
 | 
					  new amax = get_maxplayers() 
 | 
				
			||||||
 | 
					  for(new a = 1; a <= amax; ++a){ 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if(get_user_astats(id,a,stats,body,wpn,31)){ 
 | 
				
			||||||
 | 
					      found = 1 
 | 
				
			||||||
 | 
					      if (stats[0]) 
 | 
				
			||||||
 | 
					        format(wpn,31," -- %s",wpn) 
 | 
				
			||||||
 | 
					      else 
 | 
				
			||||||
 | 
					        wpn[0] = 0 
 | 
				
			||||||
 | 
					      get_user_name(a,name,31) 
 | 
				
			||||||
 | 
					      pos += format(g_Buffer[pos],2047-pos,"%s -- %d dmg / %d hit(s)%s^n",name,stats[6],stats[5],wpn) 
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return found 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* build list of victims */ 
 | 
				
			||||||
 | 
					getVictims(id) { 
 | 
				
			||||||
 | 
					  new name[32],wpn[32], stats[8],body[8],found=0 
 | 
				
			||||||
 | 
					  new pos = copy(g_Buffer,2047,"Victims:^n") 
 | 
				
			||||||
 | 
					  new amax = get_maxplayers() 
 | 
				
			||||||
 | 
					  for(new a = 1; a <= amax; ++a){ 
 | 
				
			||||||
 | 
					    if(get_user_vstats(id,a,stats,body,wpn,31)){ 
 | 
				
			||||||
 | 
					      found = 1 
 | 
				
			||||||
 | 
					      if (stats[1]) 
 | 
				
			||||||
 | 
					        format(wpn,31," -- %s",wpn) 
 | 
				
			||||||
 | 
					      else 
 | 
				
			||||||
 | 
					        wpn[0] = 0 
 | 
				
			||||||
 | 
					      get_user_name(a,name,31) 
 | 
				
			||||||
 | 
					      pos += format(g_Buffer[pos],2047-pos,"%s -- %d dmg / %d hit(s)%s^n",name,stats[6],stats[5],wpn) 
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return found 
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* build list of hita for AV List */ 
 | 
				
			||||||
 | 
					getHits(id,killer) { 
 | 
				
			||||||
 | 
					  new stats[8], body[8], pos = 0 
 | 
				
			||||||
 | 
					  g_Buffer[0] = 0 
 | 
				
			||||||
 | 
					  get_user_astats(id,killer,stats,body) 
 | 
				
			||||||
 | 
					  for(new a = 1; a < 8; ++a) 
 | 
				
			||||||
 | 
					    if(body[a]) 
 | 
				
			||||||
 | 
					      pos += format(g_Buffer[pos],2047-pos,"%s: %d^n",g_bodyParts[a],body[a]) 
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* build list of hits for say hp */ 
 | 
				
			||||||
 | 
					getMyHits(id,killed) { 
 | 
				
			||||||
 | 
					  new name[32], stats[8], body[8], found = 0 
 | 
				
			||||||
 | 
					  get_user_name(killed,name,31) 
 | 
				
			||||||
 | 
					  new pos = format(g_Buffer,2047,"You hit %s in:",name) 
 | 
				
			||||||
 | 
					  get_user_vstats(id,killed,stats,body) 
 | 
				
			||||||
 | 
					  for(new a = 1; a < 8; ++a){ 
 | 
				
			||||||
 | 
					    if(body[a]){ 
 | 
				
			||||||
 | 
					      found = 1 
 | 
				
			||||||
 | 
					      pos += format(g_Buffer[pos],2047-pos," %s: %d ",g_bodyParts[a],body[a]) 
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return found 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					} 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public eResetHud( id ) 
 | 
				
			||||||
 | 
					  g_Killers[ id ][0] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdKiller(id) {
 | 
				
			||||||
 | 
					  if ( !SayHP ){
 | 
				
			||||||
 | 
					    client_print(id,print_chat, g_disabledMsg )
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (g_Killers[id][0]) {
 | 
				
			||||||
 | 
					    new name[32], stats[8], body[8], wpn[33], mstats[8], mbody[8]
 | 
				
			||||||
 | 
					    get_user_name(g_Killers[id][0],name,31)
 | 
				
			||||||
 | 
					    get_user_astats(id,g_Killers[id][0],stats,body,wpn,31)
 | 
				
			||||||
 | 
					    client_print(id,print_chat,"%s killed you with %s from distance of %.2f meters",  name,wpn,float(g_Killers[id][3]) * 0.0254 )
 | 
				
			||||||
 | 
					    client_print(id,print_chat,"He did %d damage to you with %d hit%s and still had %dhp and %dap",
 | 
				
			||||||
 | 
					      stats[6],stats[5],(stats[5]==1)?"":"s" , g_Killers[id][1],g_Killers[id][2] )
 | 
				
			||||||
 | 
					    if ( get_user_vstats(id,g_Killers[id][0],mstats,mbody) )  {
 | 
				
			||||||
 | 
					      client_print(id,print_chat,"You did %d damage to him with %d hit%s",mstats[6], mstats[5],(mstats[5]==1)?"":"s" )
 | 
				
			||||||
 | 
					      getMyHits(id,g_Killers[id][0])
 | 
				
			||||||
 | 
					      client_print(id,print_chat,g_Buffer)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else client_print(id,print_chat,"You did no damage to him")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    client_print(id,print_chat,"You have no killer...")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionStatsMenu(id,key){
 | 
				
			||||||
 | 
					  switch(key){
 | 
				
			||||||
 | 
					  case 7: {
 | 
				
			||||||
 | 
					    g_userState[id] = 1 - g_userState[id]
 | 
				
			||||||
 | 
					    showStatsMenu(id,g_userPosition[id])
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  case 8: showStatsMenu(id,++g_userPosition[id])
 | 
				
			||||||
 | 
					  case 9: showStatsMenu(id,--g_userPosition[id])
 | 
				
			||||||
 | 
					  default:{
 | 
				
			||||||
 | 
					    new option = g_userPosition[id] * get_cvar_num("tfcstats_maxmenupos") + key
 | 
				
			||||||
 | 
					    new index = g_userPlayers[id][option]
 | 
				
			||||||
 | 
					    if (is_user_connected(index)){
 | 
				
			||||||
 | 
					      if (g_userState[id]){
 | 
				
			||||||
 | 
					          displayRank(index,id)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else{
 | 
				
			||||||
 | 
					          displayStats(index,id)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    showStatsMenu(id,g_userPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					showStatsMenu(id,pos){
 | 
				
			||||||
 | 
					  if (pos < 0) return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					  new max_menupos = get_cvar_num("tfcstats_maxmenupos")
 | 
				
			||||||
 | 
					  new menu_body[512], inum, k = 0, start = pos * max_menupos 
 | 
				
			||||||
 | 
					  get_players(g_userPlayers[id],inum)
 | 
				
			||||||
 | 
					  if (start >= inum) start = pos = g_userPosition[id] = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new len = format(menu_body,511,"Server Stats %d/%d^n^n",pos + 1,((inum/max_menupos)+((inum%max_menupos)?1:0)))
 | 
				
			||||||
 | 
					  new name[32], end = start + max_menupos, keys = (1<<9)|(1<<7)
 | 
				
			||||||
 | 
					  if (end > inum) end = inum
 | 
				
			||||||
 | 
					  for(new a = start; a < end; ++a){
 | 
				
			||||||
 | 
					    get_user_name(g_userPlayers[id][a],name,31)
 | 
				
			||||||
 | 
					    keys |= (1<<k)
 | 
				
			||||||
 | 
					    len += format(menu_body[len],511-len,"%d. %s^n",++k,name)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  len += format(menu_body[len],511-len,"^n8. %s^n",g_userState[id] ? "Show rank" : "Show stats" )
 | 
				
			||||||
 | 
					  if (end != inum){
 | 
				
			||||||
 | 
					    len += format(menu_body[len],511-len,"^n9. More...^n0. %s" , pos ? "Back" : "Exit" )
 | 
				
			||||||
 | 
					    keys |= (1<<8)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  else len += format(menu_body[len],511-len,"^n0. %s" , pos ? "Back" : "Exit" )
 | 
				
			||||||
 | 
					  show_menu(id,keys,menu_body)
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public client_putinserver(id)
 | 
				
			||||||
 | 
					  g_multiKills[id] = g_streakKills[ id ] = { 0 , 0 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public client_damage(attacker,victim,damage,wpnindex,hitplace,TA){ 
 | 
				
			||||||
 | 
					  if ( BulletDamage ) { 
 | 
				
			||||||
 | 
					    if ( attacker==victim || xmod_is_melee_wpn(wpnindex) ) return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					    set_hudmessage(0, 100, 200, 0.45, 0.85, 2, 0.1, 4.0, 0.02, 0.02, 1) 
 | 
				
			||||||
 | 
					    show_hudmessage(attacker,"%i", damage)   
 | 
				
			||||||
 | 
					    set_hudmessage(200, 0, 0, 0.55, 0.85, 2, 0.1, 4.0, 0.02, 0.02, 2) 
 | 
				
			||||||
 | 
					    show_hudmessage(victim,"%i", damage)  
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE 
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* save state at death */ 
 | 
				
			||||||
 | 
					public client_death(killer,victim,wpnindex,hitplace,TK){
 | 
				
			||||||
 | 
					  new killer_name[32]
 | 
				
			||||||
 | 
					  get_user_name(killer,killer_name,31) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( KillingStreak || KillingStreakSound ){ 
 | 
				
			||||||
 | 
					    g_streakKills[ victim ][ 1 ]++
 | 
				
			||||||
 | 
					    g_streakKills[ victim ][ 0 ] = 0
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new grenade = tfc_isgrenade(wpnindex)
 | 
				
			||||||
 | 
					  new headshot = ( hitplace == HIT_HEAD ) ? 1:0
 | 
				
			||||||
 | 
					  new selfKill = ( killer == victim ) ? 1:0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new victim_name[32] 
 | 
				
			||||||
 | 
					  get_user_name(victim,victim_name,31) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new Float:statstime = get_cvar_float("tfcstats_statstime")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( ShowVictims && getVictims(victim) ){ 
 | 
				
			||||||
 | 
					    set_hudmessage(0,80,220,0.55,0.60,0, statstime, 12.0, 1.0, 2.0, 4) 
 | 
				
			||||||
 | 
					    show_hudmessage(victim,g_Buffer) 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  if ( ShowAttackers  && getAttackers(victim)){ 
 | 
				
			||||||
 | 
					    set_hudmessage(220,80,0,0.55,0.35,0, statstime, 12.0, 1.0, 2.0, 3) 
 | 
				
			||||||
 | 
					    show_hudmessage(victim,g_Buffer) 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( selfKill && grenade && GrenadeSuicide ){ 
 | 
				
			||||||
 | 
					    set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, 1)
 | 
				
			||||||
 | 
					    show_hudmessage(0,g_SHeMessages[ random_num(0,3) ],victim_name) 
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( selfKill || TK )
 | 
				
			||||||
 | 
					    return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new vorigin[3], korigin[3] 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  get_user_origin(victim,vorigin) 
 | 
				
			||||||
 | 
					  get_user_origin(killer,korigin) 
 | 
				
			||||||
 | 
					  g_Killers[victim][0] = killer 
 | 
				
			||||||
 | 
					  g_Killers[victim][1] = get_user_health(killer) 
 | 
				
			||||||
 | 
					  g_Killers[victim][2] = get_user_armor(killer) 
 | 
				
			||||||
 | 
					  g_Killers[victim][3] = get_distance(vorigin,korigin) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  g_DeathStats[victim] = get_gametime() + statstime 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( ShowKiller && !(!get_cvar_num("tfcstats_rankbots") &&  (is_user_bot(killer) || is_user_bot(killer)))  ){ 
 | 
				
			||||||
 | 
					    new stats[8], body[8], wpn[33], mstats[8], mbody[8] 
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					    get_user_astats(victim,killer,stats,body,wpn,31) 
 | 
				
			||||||
 | 
					    get_user_vstats(victim,killer,mstats,mbody) 
 | 
				
			||||||
 | 
					    set_hudmessage(220,80,0,0.05,0.15,0, statstime, 12.0, 1.0, 2.0, 1) 
 | 
				
			||||||
 | 
					    getHits(victim,killer) 
 | 
				
			||||||
 | 
					    show_hudmessage(victim,"%s killed you with %s^nfrom distance of %.2f meters.^nHe did %d damage to you with %d hit(s)^nand still has %dhp and %dap.^nYou did %d damage to him with %d hit(s).^nHe hits you in:^n%s", 
 | 
				
			||||||
 | 
					                                killer_name,wpn,float(g_Killers[victim][3]) * 0.0254,  stats[6],stats[5],
 | 
				
			||||||
 | 
					                                g_Killers[victim][1],g_Killers[victim][2], mstats[6],mstats[5],g_Buffer ) 
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( KillerHp ){
 | 
				
			||||||
 | 
					    new kmsg[128]
 | 
				
			||||||
 | 
					    format(kmsg,127,"%s still has %dhp and %d ap",killer_name,g_Killers[victim][1],g_Killers[victim][1])
 | 
				
			||||||
 | 
					    client_print(victim,print_console,kmsg)
 | 
				
			||||||
 | 
					    set_hudmessage(255,255,255,0.02,0.9,2, 1.5, 3.0, 0.02, 5.0, 2)
 | 
				
			||||||
 | 
					    show_hudmessage(victim,kmsg)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( KillingStreak || KillingStreakSound ){    
 | 
				
			||||||
 | 
					    g_streakKills[ killer ][ 0 ]++
 | 
				
			||||||
 | 
					    g_streakKills[ killer ][ 1 ] = 0
 | 
				
			||||||
 | 
					    new a = g_streakKills[ killer ][ 0 ] - 3
 | 
				
			||||||
 | 
					    if ( (a > -1) && !( a % 2 ) ) {
 | 
				
			||||||
 | 
					      if ( (a >>= 1) > 6 ) a = 6
 | 
				
			||||||
 | 
					      if ( KillingStreak ){
 | 
				
			||||||
 | 
					        set_hudmessage(0, 100, 255, 0.05, 0.55, 2, 0.02, 6.0, 0.01, 0.1, 3)
 | 
				
			||||||
 | 
					        for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					          if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					          show_hudmessage(i,g_KillingMsg[ a ], killer_name) 
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if (  KillingStreakSound )  client_cmd( 0 ,  "spk misc/%s" , g_Sounds[ a ] )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( MultiKill || MultiKillSound ) {
 | 
				
			||||||
 | 
					      g_multiKills[killer][0]++ 
 | 
				
			||||||
 | 
					      g_multiKills[killer][1] += headshot
 | 
				
			||||||
 | 
					      new param[2]
 | 
				
			||||||
 | 
					      param[0] = killer 
 | 
				
			||||||
 | 
					      param[1] = g_multiKills[killer][0] 
 | 
				
			||||||
 | 
					      set_task( 4.0 + float( param[1] ) ,"checkKills",0,param,2)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( xmod_is_melee_wpn(wpnindex) && ( KnifeKill || KnifeKillSound )  ){
 | 
				
			||||||
 | 
					    if ( KnifeKill ){
 | 
				
			||||||
 | 
					      set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, 1)
 | 
				
			||||||
 | 
					      for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					        if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          continue
 | 
				
			||||||
 | 
					        show_hudmessage(i,g_KnifeMsg[ random_num(0,3) ],killer_name,victim_name) 
 | 
				
			||||||
 | 
					      } 
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( KnifeKillSound ) client_cmd(0,"spk misc/humiliation") 
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if ( grenade ){
 | 
				
			||||||
 | 
					    if ( GrenadeKill ){
 | 
				
			||||||
 | 
					      set_hudmessage(255, 100, 100, -1.0, 0.15, 1, 6.0, 6.0, 0.5, 0.15, 1) 
 | 
				
			||||||
 | 
					      for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					        if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					          continue
 | 
				
			||||||
 | 
					        show_hudmessage(i,g_HeMessages[ random_num(0,3)],killer_name,victim_name) 
 | 
				
			||||||
 | 
					      }   
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( headshot && (HeadShotKill || HeadShotKillSound) && !xmod_is_melee_wpn(wpnindex) ){
 | 
				
			||||||
 | 
					    if ( HeadShotKill ){
 | 
				
			||||||
 | 
					      new weapon[32], message[128]
 | 
				
			||||||
 | 
					      xmod_get_wpnname(wpnindex,weapon,31) 
 | 
				
			||||||
 | 
					      copy( message, 127, g_HeadShots[ random_num(0,6) ] )
 | 
				
			||||||
 | 
					      replace( message, 127 , "$vn", victim_name )
 | 
				
			||||||
 | 
					      replace( message, 127 , "$wn", weapon )    
 | 
				
			||||||
 | 
					      replace( message, 127 , "$kn", killer_name )
 | 
				
			||||||
 | 
					      set_hudmessage(100, 100, 255, -1.0, 0.19, 0, 6.0, 6.0, 0.5, 0.15, 1) 
 | 
				
			||||||
 | 
					      for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					        if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					          continue
 | 
				
			||||||
 | 
					        show_hudmessage(i,message) 
 | 
				
			||||||
 | 
					      }      
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( HeadShotKillSound ) client_cmd(0,"spk misc/headshot") 
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if ( DoubleKill || DoubleKillSound ){
 | 
				
			||||||
 | 
					    new Float:nowtime = get_gametime()
 | 
				
			||||||
 | 
					    if ( g_prevKill == nowtime && g_prevKillerId == killer ){
 | 
				
			||||||
 | 
					      g_KillCount++
 | 
				
			||||||
 | 
					      if ( DoubleKill || DoubleKillSound){
 | 
				
			||||||
 | 
					        set_task(0.01,"showDoubleKill")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else g_KillCount = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    g_prevKill = nowtime
 | 
				
			||||||
 | 
					    g_prevKillerId = killer
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public showDoubleKill(){ 
 | 
				
			||||||
 | 
					  new pos = g_KillCount - 2
 | 
				
			||||||
 | 
					  if ( pos > 2 ) pos = 2
 | 
				
			||||||
 | 
					  if ( DoubleKill ) {
 | 
				
			||||||
 | 
					    new name[32],message[128]
 | 
				
			||||||
 | 
					    get_user_name(g_prevKillerId,name,31)
 | 
				
			||||||
 | 
					    copy( message, 127, g_DoubleKillMsg[pos] )
 | 
				
			||||||
 | 
					    replace( message, 127 , "$kn", name )
 | 
				
			||||||
 | 
					    if ( pos == 2 ){
 | 
				
			||||||
 | 
					      new kills[3]
 | 
				
			||||||
 | 
					      num_to_str(g_KillCount,kills,2)
 | 
				
			||||||
 | 
					      replace( message, 127 , "$kk", kills )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    set_hudmessage(65, 102, 158, -1.0, 0.25, 0, 6.0, 6.0, 0.5, 0.15, 3)
 | 
				
			||||||
 | 
					    for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					      if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					        continue
 | 
				
			||||||
 | 
					      show_hudmessage(i,message) 
 | 
				
			||||||
 | 
					    } 
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if ( DoubleKillSound ) {
 | 
				
			||||||
 | 
					    client_cmd(0,"spk misc/%s",g_DoubleKillSound[pos])
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public checkKills(param[]){ 
 | 
				
			||||||
 | 
					  new id = param[0]
 | 
				
			||||||
 | 
					  new a = param[1]
 | 
				
			||||||
 | 
					  if (a == g_multiKills[id][0]){
 | 
				
			||||||
 | 
					    a -= 3 
 | 
				
			||||||
 | 
					    if ( a > -1 ){
 | 
				
			||||||
 | 
					      if ( MultiKill ) {
 | 
				
			||||||
 | 
					        new name[32]
 | 
				
			||||||
 | 
					        get_user_name(id,name,31)
 | 
				
			||||||
 | 
					        set_hudmessage(255, 0, 100, 0.05, 0.65, 2, 0.02, 6.0, 0.01, 0.1, 2)
 | 
				
			||||||
 | 
					        if ( a > 6 ) a = 6
 | 
				
			||||||
 | 
					        for (new i=1;i<=get_maxplayers();i++){
 | 
				
			||||||
 | 
					          if ( g_Killers[i][0] && g_DeathStats[i] > get_gametime() )
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					          show_hudmessage(i,g_MultiKillMsg[a],name,g_multiKills[id][0],g_multiKills[id][1]) 
 | 
				
			||||||
 | 
					        } 
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      if ( MultiKillSound ) client_cmd(0,"spk misc/%s",g_Sounds[a])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    g_multiKills[id] = { 0,0 }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					isActive(){
 | 
				
			||||||
 | 
					  if ( get_cvar_num("tfcstats_pause") ) 
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_modules()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						require_module("tfcx")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										87
									
								
								plugins/tfc/stats_logging.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										87
									
								
								plugins/tfc/stats_logging.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					/* AMX Mod X
 | 
				
			||||||
 | 
					*   Stats Logging Plugin
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* by the AMX Mod X Development Team
 | 
				
			||||||
 | 
					*  originally developed by JustinHoMi
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of AMX Mod X.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					*  under the terms of the GNU General Public License as published by the
 | 
				
			||||||
 | 
					*  Free Software Foundation; either version 2 of the License, or (at
 | 
				
			||||||
 | 
					*  your option) any later version.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					*  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					*  General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					*  along with this program; if not, write to the Free Software Foundation,
 | 
				
			||||||
 | 
					*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  In addition, as a special exception, the author gives permission to
 | 
				
			||||||
 | 
					*  link the code of this program with the Half-Life Game Engine ("HL
 | 
				
			||||||
 | 
					*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
 | 
				
			||||||
 | 
					*  L.L.C ("Valve"). You must obey the GNU General Public License in all
 | 
				
			||||||
 | 
					*  respects for all of the code used other than the HL Engine and MODs
 | 
				
			||||||
 | 
					*  from Valve. If you modify this file, you may extend this exception
 | 
				
			||||||
 | 
					*  to your version of the file, but you are not obligated to do so. If
 | 
				
			||||||
 | 
					*  you do not wish to do so, delete this exception statement from your
 | 
				
			||||||
 | 
					*  version.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					#include <tfcx>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_pingSum[33]
 | 
				
			||||||
 | 
					new g_pingCount[33]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init()
 | 
				
			||||||
 | 
					  register_plugin("TFC Stats Logging","0.20tfc","AMXX Dev Team")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public client_disconnect(id) {
 | 
				
			||||||
 | 
					  if ( is_user_bot( id ) ) return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					  remove_task( id )
 | 
				
			||||||
 | 
					  new szTeam[16],szName[32],szAuthid[32], iStats[8], iHits[8], szWeapon[24]
 | 
				
			||||||
 | 
					  new iUserid = get_user_userid( id )
 | 
				
			||||||
 | 
					  get_user_team(id, szTeam, 15 )
 | 
				
			||||||
 | 
					  get_user_name(id, szName ,31 )
 | 
				
			||||||
 | 
					  get_user_authid(id, szAuthid , 31 )
 | 
				
			||||||
 | 
					  for(new i = 1 ; i < TFCMAX_WEAPONS ; ++i ) {
 | 
				
			||||||
 | 
					    if( get_user_wstats( id , i ,iStats , iHits ) )   {
 | 
				
			||||||
 | 
					        xmod_get_wpnlogname( i , szWeapon , 23 )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats^" (weapon ^"%s^") (shots ^"%d^") (hits ^"%d^") (kills ^"%d^") (headshots ^"%d^") (tks ^"%d^") (damage ^"%d^") (deaths ^"%d^")",
 | 
				
			||||||
 | 
					        szName,iUserid,szAuthid,szTeam,szWeapon,iStats[4],iStats[5],iStats[0], iStats[2],iStats[3],iStats[6],iStats[1])
 | 
				
			||||||
 | 
					        log_message("^"%s<%d><%s><%s>^" triggered ^"weaponstats2^" (weapon ^"%s^") (head ^"%d^") (chest ^"%d^") (stomach ^"%d^") (leftarm ^"%d^") (rightarm ^"%d^") (leftleg ^"%d^") (rightleg ^"%d^")",
 | 
				
			||||||
 | 
					        szName,iUserid,szAuthid,szTeam,szWeapon,iHits[1],iHits[2],iHits[3],  iHits[4],iHits[5],iHits[6],iHits[7])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  new iTime = get_user_time( id , 1 )
 | 
				
			||||||
 | 
					  log_message("^"%s<%d><%s><%s>^" triggered ^"time^" (time ^"%d:%02d^")",
 | 
				
			||||||
 | 
					    szName,iUserid,szAuthid,szTeam, (iTime / 60),  (iTime % 60) )
 | 
				
			||||||
 | 
					  log_message("^"%s<%d><%s><%s>^" triggered ^"latency^" (ping ^"%d^")",
 | 
				
			||||||
 | 
					    szName,iUserid,szAuthid,szTeam, (g_pingSum[id] / ( g_pingCount[id] ? g_pingCount[id] : 1 ) ) )
 | 
				
			||||||
 | 
					  return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public client_putinserver(id) {
 | 
				
			||||||
 | 
					  if ( !is_user_bot( id ) ){
 | 
				
			||||||
 | 
					    g_pingSum[ id ] = g_pingCount[ id ] = 0
 | 
				
			||||||
 | 
					    set_task( 19.5 , "getPing" , id , "" , 0 , "b" )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public getPing( id ) {
 | 
				
			||||||
 | 
					  new iPing, iLoss
 | 
				
			||||||
 | 
					  get_user_ping( id , iPing, iLoss)
 | 
				
			||||||
 | 
					  g_pingSum[ id ] += iPing
 | 
				
			||||||
 | 
					  ++g_pingCount[ id ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_modules()
 | 
				
			||||||
 | 
					{ 
 | 
				
			||||||
 | 
						require_module("tfcx")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										240
									
								
								plugins/tfc/statscfg.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										240
									
								
								plugins/tfc/statscfg.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,240 @@
 | 
				
			|||||||
 | 
					/* AMX Mod X
 | 
				
			||||||
 | 
					*   Stats Configuration Plugin
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* by the AMX Mod X Development Team
 | 
				
			||||||
 | 
					*  originally developed by OLO
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					* This file is part of AMX Mod X.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is free software; you can redistribute it and/or modify it
 | 
				
			||||||
 | 
					*  under the terms of the GNU General Public License as published by the
 | 
				
			||||||
 | 
					*  Free Software Foundation; either version 2 of the License, or (at
 | 
				
			||||||
 | 
					*  your option) any later version.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  This program is distributed in the hope that it will be useful, but
 | 
				
			||||||
 | 
					*  WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 | 
				
			||||||
 | 
					*  General Public License for more details.
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					*  along with this program; if not, write to the Free Software Foundation,
 | 
				
			||||||
 | 
					*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 | 
				
			||||||
 | 
					*
 | 
				
			||||||
 | 
					*  In addition, as a special exception, the author gives permission to
 | 
				
			||||||
 | 
					*  link the code of this program with the Half-Life Game Engine ("HL
 | 
				
			||||||
 | 
					*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
 | 
				
			||||||
 | 
					*  L.L.C ("Valve"). You must obey the GNU General Public License in all
 | 
				
			||||||
 | 
					*  respects for all of the code used other than the HL Engine and MODs
 | 
				
			||||||
 | 
					*  from Valve. If you modify this file, you may extend this exception
 | 
				
			||||||
 | 
					*  to your version of the file, but you are not obligated to do so. If
 | 
				
			||||||
 | 
					*  you do not wish to do so, delete this exception statement from your
 | 
				
			||||||
 | 
					*  version.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					#include <amxmisc>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define MAX_MENU_DATA 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					new g_menuData[MAX_MENU_DATA][32]
 | 
				
			||||||
 | 
					new g_menuDataVar[MAX_MENU_DATA][32]
 | 
				
			||||||
 | 
					new g_menuDataId[MAX_MENU_DATA]
 | 
				
			||||||
 | 
					new g_menuDataNum
 | 
				
			||||||
 | 
					new g_menuPosition[33]
 | 
				
			||||||
 | 
					new g_fileToSave[64]
 | 
				
			||||||
 | 
					new bool:g_modified
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_precache() {
 | 
				
			||||||
 | 
					  register_clcmd("amx_statscfgmenu","cmdCfgMenu",ADMIN_CFG,"- displays stats configuration menu")
 | 
				
			||||||
 | 
					  register_dictionary("statscfg.txt")
 | 
				
			||||||
 | 
					  register_dictionary("common.txt")
 | 
				
			||||||
 | 
					  register_concmd("amx_statscfg","cmdCfg",ADMIN_CFG,"- displays help for stats configuration")  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init() {
 | 
				
			||||||
 | 
					  register_plugin("Stats Configuration",AMXX_VERSION_STR,"AMXX Dev Team")
 | 
				
			||||||
 | 
					  register_menucmd(register_menuid("Stats Configuration"),1023,"actionCfgMenu")
 | 
				
			||||||
 | 
					  get_configsdir(g_fileToSave, 63)
 | 
				
			||||||
 | 
					  format(g_fileToSave, 63, "%s/stats.ini", g_fileToSave)
 | 
				
			||||||
 | 
					  loadSettings(g_fileToSave)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdCfg( id,level,cid ) {
 | 
				
			||||||
 | 
					  if (!cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  new cmds[32]
 | 
				
			||||||
 | 
					  read_argv(1,cmds,31)
 | 
				
			||||||
 | 
					  new option = equali(cmds, "on" ) ? 1 : 0
 | 
				
			||||||
 | 
					  if ( !option ) option = equali(cmds, "off" ) ? 2 : 0
 | 
				
			||||||
 | 
					  if ( read_argc() > 2 && option ) {
 | 
				
			||||||
 | 
					    new var[32], enabled = 0
 | 
				
			||||||
 | 
					    read_argv( 2 , var , 31  )
 | 
				
			||||||
 | 
					    for ( new a = 0; a < g_menuDataNum; ++a ) {
 | 
				
			||||||
 | 
					      if ( containi( g_menuDataVar[ a ] ,  var  ) != -1 ) {
 | 
				
			||||||
 | 
					        g_modified = true
 | 
				
			||||||
 | 
					        ++enabled
 | 
				
			||||||
 | 
					        if ( option == 1 ) {
 | 
				
			||||||
 | 
					          set_xvar_num( g_menuDataId[a] , 1  )
 | 
				
			||||||
 | 
					          console_print(id,"Enabled %s" , g_menuData[a] )
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					          set_xvar_num( g_menuDataId[a] , 0  )
 | 
				
			||||||
 | 
					          console_print(id,"Disabled %s" , g_menuData[a] )
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if ( enabled )
 | 
				
			||||||
 | 
					      console_print(id,"%L", id, "TOTAL_NUM", enabled )
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      console_print(id,"%L",id,"NO_OPTION",var )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if ( equali(cmds, "save" )  ) {
 | 
				
			||||||
 | 
					    if ( saveSettings( g_fileToSave ) ){
 | 
				
			||||||
 | 
					      g_modified = false
 | 
				
			||||||
 | 
					      console_print(id,"%L",id,"CONF_SAVED")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      console_print(id,"%L",id,"CONF_FAILED")  
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if ( equali(cmds, "load" )  ) {
 | 
				
			||||||
 | 
					    if ( loadSettings( g_fileToSave ) ){
 | 
				
			||||||
 | 
					      g_modified = false
 | 
				
			||||||
 | 
					      console_print(id,"%L",id,"CONF_LOADED")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      console_print(id,"%L",id,"CONF_FAIL_LOAD")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if ( equali(cmds, "list" )  ) {
 | 
				
			||||||
 | 
					    new arg1[8]
 | 
				
			||||||
 | 
					    new start = read_argv(2,arg1,7) ? str_to_num(arg1) : 1
 | 
				
			||||||
 | 
					    if (--start < 0) start = 0
 | 
				
			||||||
 | 
					    if (start >= g_menuDataNum) start = g_menuDataNum - 1
 | 
				
			||||||
 | 
					    new end = start + 10
 | 
				
			||||||
 | 
					    if (end > g_menuDataNum) end = g_menuDataNum  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    new lName[16],lVariable[16],lStatus[16]
 | 
				
			||||||
 | 
					    format(lName,15,"%L",id,"NAME")
 | 
				
			||||||
 | 
					    format(lVariable,15,"%L",id,"VARIABLE")
 | 
				
			||||||
 | 
					    format(lStatus,15,"%L",id,"STATUS")
 | 
				
			||||||
 | 
					    console_print(id, "^n----- %L: -----",id,"STATS_CONF")
 | 
				
			||||||
 | 
					    console_print(id, "     %-29.28s   %-24.23s   %-9.8s",lName,lVariable,lStatus)
 | 
				
			||||||
 | 
					    if ( start != -1 ) { 
 | 
				
			||||||
 | 
					      new lOnOff[16]
 | 
				
			||||||
 | 
					      for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					        format(lOnOff,15,"%L",id,get_xvar_num( g_menuDataId[ a ] ) ? "ON" : "OFF")
 | 
				
			||||||
 | 
					        console_print(id, "%3d: %-29.28s   %-24.23s   %-9.8s",a + 1,
 | 
				
			||||||
 | 
					        g_menuData[a], g_menuDataVar[a], lOnOff)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    console_print(id,"----- %L -----",id,"ENTRIES_OF",start+1,end,g_menuDataNum)    
 | 
				
			||||||
 | 
					    if (end < g_menuDataNum)
 | 
				
			||||||
 | 
					      console_print(id,"----- %L -----",id,"USE_MORE",end+1)
 | 
				
			||||||
 | 
					    else 
 | 
				
			||||||
 | 
					      console_print(id,"----- %L -----",id,"USE_BEGIN")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else if ( equali(cmds, "add" ) &&  read_argc() > 3 ) {
 | 
				
			||||||
 | 
					    if ( g_menuDataNum < MAX_MENU_DATA  ) {
 | 
				
			||||||
 | 
					      read_argv(2, g_menuData[g_menuDataNum] , 31 )
 | 
				
			||||||
 | 
					      read_argv(3, g_menuDataVar[g_menuDataNum] , 31 )
 | 
				
			||||||
 | 
					      g_menuDataId[g_menuDataNum] = get_xvar_id( g_menuDataVar[g_menuDataNum] )
 | 
				
			||||||
 | 
					      ++g_menuDataNum
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    else console_print(id, "%L",id,"CANT_ADD")
 | 
				
			||||||
 | 
					  }  
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_USAGE")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_COM")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_ON")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_OFF")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_SAVE")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_LOAD")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_LIST")
 | 
				
			||||||
 | 
					    console_print(id,"%L",id,"COM_ADD")
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public cmdCfgMenu(id,level,cid) {
 | 
				
			||||||
 | 
					  if (cmd_access(id,level,cid,1))
 | 
				
			||||||
 | 
					    displayCfgMenu(id,g_menuPosition[id] = 0)
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displayCfgMenu(id,pos) {
 | 
				
			||||||
 | 
					  if (pos < 0) return
 | 
				
			||||||
 | 
					  new menu_body[512], start = pos * 7
 | 
				
			||||||
 | 
					  if (start >= g_menuDataNum) start = pos = g_menuPosition[id] = 0
 | 
				
			||||||
 | 
					  new len = format(menu_body,511,"%L %d/%d^n^n",
 | 
				
			||||||
 | 
					    id,"STATS_CONF",pos + 1,((g_menuDataNum/7)+((g_menuDataNum%7)?1:0)))
 | 
				
			||||||
 | 
					  new end = start + 7, keys = MENU_KEY_0|MENU_KEY_8, k = 0
 | 
				
			||||||
 | 
					  if (end > g_menuDataNum) end = g_menuDataNum
 | 
				
			||||||
 | 
					  for (new a = start; a < end; ++a) {
 | 
				
			||||||
 | 
					    keys |= (1<<k)
 | 
				
			||||||
 | 
					    len += format(menu_body[len],511-len,"%d. %s %L^n",++k,
 | 
				
			||||||
 | 
					      g_menuData[a], id, get_xvar_num( g_menuDataId[ a ] ) ? "ON" : "OFF" )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if ( g_menuDataNum == 0 )
 | 
				
			||||||
 | 
					    len += format(menu_body[len],511-len,"%L ",id,"NO_STATS") 
 | 
				
			||||||
 | 
					  len += format(menu_body[len],511-len,"^n8. %L %s^n",id,"SAVE_CONF",g_modified ? "*" : "")
 | 
				
			||||||
 | 
					  if (end != g_menuDataNum) {
 | 
				
			||||||
 | 
					    format(menu_body[len],511-len,"^n9. %L...^n0. %s", id, "MORE", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					    keys |= MENU_KEY_9
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  else format(menu_body[len],511-len,"^n0. %L", id, pos ? "BACK" : "EXIT")
 | 
				
			||||||
 | 
					  show_menu(id,keys,menu_body,-1,"Stats Configuration")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public actionCfgMenu(id,key) {
 | 
				
			||||||
 | 
					  switch(key) {
 | 
				
			||||||
 | 
					    case 7: {
 | 
				
			||||||
 | 
					      if (saveSettings(g_fileToSave)) {
 | 
				
			||||||
 | 
					        g_modified = false
 | 
				
			||||||
 | 
					        client_print(id,print_chat,"* %L",id,"CONF_SAVED")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        client_print(id,print_chat,"* %L",id,"CONF_FAILED")
 | 
				
			||||||
 | 
					      displayCfgMenu(id,g_menuPosition[id])
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    case 8: displayCfgMenu(id,++g_menuPosition[id])
 | 
				
			||||||
 | 
					    case 9: displayCfgMenu(id,--g_menuPosition[id])
 | 
				
			||||||
 | 
					    default: {
 | 
				
			||||||
 | 
					      g_modified = true  
 | 
				
			||||||
 | 
					      new a = g_menuPosition[id] * 7 + key
 | 
				
			||||||
 | 
					      set_xvar_num( g_menuDataId[ a ] , 1 - get_xvar_num( g_menuDataId[ a ] )  )
 | 
				
			||||||
 | 
					      displayCfgMenu( id , g_menuPosition[ id ] )
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return PLUGIN_HANDLED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					saveSettings(filename[]) {
 | 
				
			||||||
 | 
					  if (file_exists(filename))
 | 
				
			||||||
 | 
					    delete_file(filename)
 | 
				
			||||||
 | 
					  if (!write_file(filename,";Generated by Stats Configuration Plugin. Do not modify!^n;Variable  Description"))
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  new text[256]
 | 
				
			||||||
 | 
					  for(new a = 0; a < g_menuDataNum; ++a){
 | 
				
			||||||
 | 
					    if ( get_xvar_num( g_menuDataId[ a ] ) ) {
 | 
				
			||||||
 | 
					      format(text,255,"%-24.23s ;%s",g_menuDataVar[a],g_menuData[a])
 | 
				
			||||||
 | 
					      write_file(filename,text)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } 
 | 
				
			||||||
 | 
					  return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loadSettings(filename[]) {
 | 
				
			||||||
 | 
					  if (!file_exists(filename)) 
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					  new text[256], name[32]
 | 
				
			||||||
 | 
					  new len, pos = 0, xid
 | 
				
			||||||
 | 
					  while (read_file(filename,pos++,text,255,len)) {
 | 
				
			||||||
 | 
					    if ( text[0] == ';' ) continue // line is a comment
 | 
				
			||||||
 | 
					    parse( text , name , 31 )
 | 
				
			||||||
 | 
					    if (  ( xid = get_xvar_id( name ) ) != -1  )
 | 
				
			||||||
 | 
					      set_xvar_num( xid , 1 )
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return 1
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										29
									
								
								plugins/tfc/statssounds.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								plugins/tfc/statssounds.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					* Plugin for sounds precache
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_precache(){
 | 
				
			||||||
 | 
						precache_sound( "misc/impressive.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/headshot.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/multikill.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/doublekill.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/godlike.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/ultrakill.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/killingspree.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/rampage.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/unstoppable.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/monsterkill.wav")
 | 
				
			||||||
 | 
						precache_sound( "misc/humiliation.wav")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						precache_sound( "misc/takenlead.wav" ) 
 | 
				
			||||||
 | 
						precache_sound( "misc/tiedlead.wav" ) 
 | 
				
			||||||
 | 
						precache_sound( "misc/lostlead.wav" ) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return PLUGIN_CONTINUE
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public plugin_init() {
 | 
				
			||||||
 | 
					  register_plugin("TFC Sounds Precache","0.20tfc","SidLuke")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										25
									
								
								plugins/tfc/tfcstats.sma
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								plugins/tfc/tfcstats.sma
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					/* Get Score for TFC STATS.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * (c) 2004, SidLuke
 | 
				
			||||||
 | 
					 * This file is provided as is (no warranties).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Function calculates position in rank.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Stats:
 | 
				
			||||||
 | 
					 * 0 - kills
 | 
				
			||||||
 | 
					 * 1 - deaths
 | 
				
			||||||
 | 
					 * 2 - headshots
 | 
				
			||||||
 | 
					 * 3 - teamkilling
 | 
				
			||||||
 | 
					 * 4 - shots
 | 
				
			||||||
 | 
					 * 5 - hits
 | 
				
			||||||
 | 
					 * 6 - damage
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * File location: $moddir/addons/amx
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <amxmodx>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public get_score(stats[8],body[8])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return stats[0] - stats[1] /* kills - deaths */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user