If you are a superior to please to solve
This plug-in uses a period of time future reunion to make an automatic close of server
Please the help for understand see is wrong exactly there
The plug-in code is as follows
/*
Share and have fun.
if you modify this code, please share with others.
thanks.
Marshall
*/
//includes
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <fun>
#include <cstrike>
#define PLUGIN "LANCLUB"
#define VERSION "2006.05.22"
#define AUTHOR "Marshall"
//define some task id
#define t_corner_id 1001
#define t_checkreg_id 1101
#define t_checkinfo_id 1201
#define t_bindkey_id 1301
#define t_hook_minute_id 2001
#define t_db_check_id 2002
//declare some variables
new g_level_exp[11] = {0,200,1600,5400,12800,25000,43200,68600,1024 00,145800,200000}
new g_p_id[33] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0}
new g_p_level[33] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0}
new g_p_point[33] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0}
new g_p_exp[33] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0}
new g_menuPosition[33]
new g_menuPlayers[33][32]
new g_menuPlayersNum[33]
new g_coloredMenus
//declare global sql handle
new Handle:g_DbInfo
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("idreg2.txt")
//register commands
register_clcmd("say","cmd_say",-1," - say something")
register_clcmd("reg","cmd_reg",-1," [PASSWORD] register an account.")
register_clcmd("login","cmd_login",-1," [ID] [PASSWORD] login an account.")
register_clcmd("amx_me", "cmd_mymenu",0," - view my menu" )
register_clcmd("amx_myfriend", "cmd_myfriendmenu",0," - view my friend menu")
//here are OP commands
register_clcmd("amx_mban", "cmd_banip",ADMIN_BAN," - [IP] ban an IP" )
register_clcmd("amx_munban", "cmd_unbanip",ADMIN_BAN," - [IP] unban an IP" )
register_clcmd("amx_munblock", "cmd_unblockid",ADMIN_BAN," - [ID] unblock menu" )
//register cvars
register_cvar("amx_m_point_enable","1")
register_cvar("amx_m_allow_reg","1")
register_cvar("amx_m_kick_notvip","0")
register_cvar("amx_m_default_point","15")
register_cvar("amx_m_default_exp","0")
register_cvar("amx_m_vipglow","0")
register_cvar("amx_m_viphp","0")
register_cvar("amx_m_viparmor","0")
register_cvar("amx_m_levelhp","2")
register_cvar("amx_m_levelap","3")
register_cvar("amx_m_notvip_maxmoney","3000")
register_cvar("amx_m_exps","1")
register_cvar("amx_m_exp_change_map","180")
register_cvar("amx_m_exp_change_team","80")
register_cvar("amx_m_exp_kick","90")
register_cvar("amx_m_exp_slay","60")
register_cvar("amx_m_exp_money","30")
register_cvar("amx_m_exp_restartround","150")
register_cvar("amx_m_exp_givemoney","40")
register_cvar("amx_m_exp_giveexp","75")
register_cvar("amx_m_exp_givepoint","20")
register_cvar("amx_m_level_changemap","5")
register_cvar("amx_m_level_kick","4")
register_cvar("amx_m_level_slay","4")
register_cvar("amx_m_level_changeteam","4")
register_cvar("amx_m_level_changemoney","3")
register_cvar("amx_m_level_restartround","5")
register_cvar("amx_m_level_givemoney","4")
register_cvar("amx_m_level_giveexp","4")
register_cvar("amx_m_level_givepoint","4")
//menus
register_menucmd(register_menuid("Choose_an_o ption?"), 1023, "actionmymenu")
register_menucmd(register_menuid("Change_map? "), 1023, "actionmapmenu")
register_menucmd(register_menuid("KICK_PLAYER ?"), 1023, "actionKickMenu")
register_menucmd(register_menuid("Change_team ?"), 1023, "actionTeamMenu")
register_menucmd(register_menuid("Kill_a_play er?"), 1023, "actionSlayMenu")
register_menucmd(register_menuid("Block_ID?") , 1023, "actionBlockMenu")
register_menucmd(register_menuid("Add_Point?" ), 1023, "actionAddPointMenu")
register_menucmd(register_menuid("My_friend?" ), 1023, "actionmyfriendmenu")
register_menucmd(register_menuid("Give_money? "), 1023, "actionGiveMoneyMenu")
register_menucmd(register_menuid("Give_exp?") , 1023, "actionGiveExpMenu")
register_menucmd(register_menuid("Give_point? "), 1023, "actionGivePointMenu")
//events
register_logevent("hook_roundstart",2,"0=Worl d triggered","1=Round_Start")
register_event("DeathMsg", "hook_death", "a")
register_event("Money","hook_money","b")
//set global task, it will reduce the point and increase the experience
set_task(60.0,"hook_minute",t_hook_minute_id, "",0,"b",0)
//get sql config from file,if don't do this, will return error: no password
new configsDir[64]
get_configsdir(configsDir, 63)
server_cmd("exec %s/sql.cfg", configsDir)
server_exec()
g_coloredMenus = colored_menus()
}
//ready to execute sql query
public plugin_cfg(){
new c_host[64]
new c_user[64]
new c_pass[64]
new c_db[64]
get_cvar_string("amx_sql_host",c_host,63)
get_cvar_string("amx_sql_user",c_user,63)
get_cvar_string("amx_sql_pass",c_pass,63)
get_cvar_string("amx_sql_db",c_db,63)
//
g_DbInfo = SQL_MakeDbTuple(c_host, c_user, c_pass, c_db)
//set task, it will create databases if not exist.
set_task(1.0,"db_check",t_db_check_id)
}
//database create
public db_check(){
//create database if not exists
new c_lastserver[32]
get_cvar_string("hostname",c_lastserver,31)
new query[1024]
format(query,1023,"CREATE TABLE IF NOT EXISTS `member` (`id` int(11) unsigned NOT NULL auto_increment,`online` tinyint(4) NOT NULL default '0',`exp` int(11) NOT NULL default '0',`block` tinyint(4) NOT NULL default '0',")
format(query,1023,"%s `password` text,`name` text character set utf8,`point` int(11) NOT NULL default '0', `lastip` text, `lasttime` text, `lastserver` text character set utf8, ",query)
format(query,1023,"%s `md5` tinytext, `level` int(11) default '0', PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))",query)
SQL_ThreadQuery(g_DbInfo, "db_create", query)
format(query,1023,"CREATE TABLE IF NOT EXISTS `banip` (`id` int(11) unsigned NOT NULL auto_increment, `ip` tinytext NOT NULL, `time` tinytext NOT NULL, `server` text character set utf8, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`))")
SQL_ThreadQuery(g_DbInfo, "db_create", query)
//clear online tag, so you should not change the server hostname.
format(query,1023,"UPDATE member SET online = '0' WHERE lastserver = '%s'",c_lastserver)
SQL_ThreadQuery(g_DbInfo, "db_query", query)
}
//return the SQL db check result
public db_create(failstate, Handle:query, error[], errnum, data[], size){
if (failstate){
if (failstate == TQUERY_CONNECT_FAILED){
server_print("%L",LANG_PLAYER,"SQL_CONNECT_FA ILED")
} else if (failstate == TQUERY_QUERY_FAILED) {
server_print("%L",LANG_PLAYER,"SQL_QUERY_FAIL ED")
}
server_print("%L",LANG_PLAYER,"SQL_ERROR_CODE ", errnum, error)
} else {
//server_print("%L",LANG_PLAYER,"SQL_QUERY_OK")
server_print("%L",LANG_PLAYER,"SQL_DB_CHECK_O K")
}
}
//execute a common query, without return
public db_query(failstate, Handle:query, error[], errnum, data[], size){
if (failstate){
if (failstate == TQUERY_CONNECT_FAILED){
server_print("%L",LANG_PLAYER,"SQL_CONNECT_FA ILED")
} else if (failstate == TQUERY_QUERY_FAILED) {
server_print("%L",LANG_PLAYER,"SQL_QUERY_FAIL ED")
}
server_print("%L",LANG_PLAYER,"SQL_ERROR_CODE ", errnum, error)
} else {
//server_print("%L",LANG_PLAYER,"SQL_QUERY_OK")
}
}
//when a player request to connect to the server, execute below
public client_connect(id){
//mark player as an unreg player
g_p_id[id] = -1
//clear player's level, experience, etc.
g_p_level[id] = 0
g_p_exp[id] = 0
g_p_point[id] = 0
new p_playerip[16]
new q_query[512]
new p_id_data[1]
get_user_ip(id,p_playerip,15,1)
p_id_data[0] = id
format(q_query, 511, "SELECT id FROM banip WHERE ip = '%s'",p_playerip)
//check if ip was banned.
SQL_ThreadQuery(g_DbInfo, "player_ip_checkban", q_query, p_id_data, 1)
}
//about IP ban
//Check the player IP whether it was banned, if yes, kick the player.
public player_ip_checkban(failstate, Handle:query, error[], errnum, data[], size){
if (failstate){
if (failstate == TQUERY_CONNECT_FAILED){
server_print("%L",LANG_PLAYER,"SQL_CONNECT_FA ILED")
} else if (failstate == TQUERY_QUERY_FAILED) {
server_print("%L",LANG_PLAYER,"SQL_QUERY_FAIL ED")
}
server_print("%L",LANG_PLAYER,"SQL_ERROR_CODE ", errnum, error)
} else {
new q_rows = SQL_NumResults(query)
if(q_rows>0){
//if the player's ip had been banned, kick the player.
server_cmd("kick #%d ^"%L^"",get_user_userid(data[0]),data[0],"KICK_BY_BANNED")
server_exec()
}
}
}
//banip command
public cmd_banip(id){
if(!access(id,ADMIN_BAN)){
return PLUGIN_HANDLED
}
new q_query[512]
new a_ip[16]
new s_lasttime[32]
get_time("%m/%d/%Y - %H:%M:%S",s_lasttime,31)
read_argv (1, a_ip,15)
format(q_query, 511, "INSERT INTO banip (ip,time) VALUES('%s','%s')",a_ip,s_lasttime)
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
client_print(id,print_chat,"%L",id,"MESSAGE_C MD_BAN_IP")
return PLUGIN_CONTINUE
}
//remove ip from banip table
public cmd_unbanip(id){
if(!access(id,ADMIN_BAN)){
return PLUGIN_HANDLED
}
new q_query[512]
new a_ip[16]
read_argv (1, a_ip,15)
format(q_query, 511, "DELETE FROM banip WHERE ip = '%s'",a_ip)
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
client_print(id,print_chat,"%L",id,"MESSAGE_C MD_UNBAN_IP")
return PLUGIN_CONTINUE
}
//reg process
//reg command
public cmd_reg(id){
new c_allowreg = get_cvar_num("amx_m_allow_reg")
if (c_allowreg==0){
set_hudmessage(255, 255, 255, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_NOT_ALLOW_REG")
return PLUGIN_HANDLED
}
if (g_p_id[id]>0){
set_hudmessage(255, 255, 255, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_ALREADY_LOGIN")
return PLUGIN_HANDLED
}
new a_password[11]
new p_lastip[32]
new p_lasttime[32]
new p_lastserver[32]
new md5buffer[34],md5str[96],md5password[34]
//make a mark in the database
read_argv (1, a_password,10)
get_user_ip(id,p_lastip,31,0)
get_time("%m/%d/%Y - %H:%M:%S",p_lasttime,31)
get_cvar_string("hostname",p_lastserver,31)
format(md5str,95,"%s%s%s",p_lastip,p_lasttime ,p_lastserver)
md5(md5str,md5buffer)
md5(a_password,md5password)
//set default value
g_p_level[id] = 0
g_p_point[id] = get_cvar_num("amx_m_default_point")
g_p_exp[id] = get_cvar_num("amx_m_default_exp")
//insert new record
new q_query[1024]
format(q_query , 1023 ,"INSERT INTO member (password,exp,point,online,lastip,lasttime,la stserver,md5) VALUES('%s','%d','%d','1','%s','%s','%s','%s' )",md5password,g_p_exp[id],g_p_point[id],p_lastip,p_lasttime,p_lastserver,md5buffer)
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
//let the player setinfo
client_cmd(id, "setinfo mloginpassword %s", a_password)
//get id
new p_id_data[1]
p_id_data[0] = id
format(q_query,1023,"SELECT id FROM member WHERE md5 = '%s'",md5buffer)
SQL_ThreadQuery(g_DbInfo, "db_reg_getid", q_query,p_id_data,1)
return PLUGIN_CONTINUE
}
//continue reg
public db_reg_getid(failstate, Handle:query, error[], errnum, data[], size){
if (failstate){
if (failstate == TQUERY_CONNECT_FAILED){
server_print("%L",LANG_PLAYER,"SQL_CONNECT_FA ILED")
} else if (failstate == TQUERY_QUERY_FAILED) {
server_print("%L",LANG_PLAYER,"SQL_QUERY_FAIL ED")
}
server_print("%L",LANG_PLAYER,"SQL_ERROR_CODE ", errnum, error)
} else {
new id = data[0]
g_p_id[id] = SQL_ReadResult(query,0)
//let the player setinfo
client_cmd(id, "setinfo mloginid %d", g_p_id[id])
//show stat on the left corner
if (task_exists(t_corner_id +id))
remove_task(t_corner_id+id)
set_task(1.0,"show_corner_stat",t_corner_id+i d,"",0,"b",0)
//show stats on the center
show_center_stat(id)
//bind key
cmd_bindkey(id+t_bindkey_id)
}
}
//end reg process
//function show player's state in the center
show_center_stat(p_id){
new l_message[32]
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 10.0, 1)
format(l_message,31,"MESSAGE_STAT_SIMPLE_%d", g_p_level[p_id])
show_hudmessage(p_id,"%L",p_id,l_message,g_p_ id[p_id],g_p_level[p_id],g_p_exp[p_id],g_p_point[p_id])
}
//function show the player corner state
public show_corner_stat(id){
id = id - t_corner_id
new l_message[32]
set_hudmessage(255, 255, 255, 0.0, 0.98, 0, 0.1, 1.0, 0.1, 0.1, 2)
format(l_message,31,"MESSAGE_STAT_CORNER_%d", g_p_level[id])
show_hudmessage(id, "%L",id,l_message,g_p_id[id],g_p_exp[id],g_level_exp[g_p_level[id]+1],g_p_point[id])
}
//function bind key , you can add keys or edit key here
public cmd_bindkey(id){
id = id -t_bindkey_id
client_cmd (id,"bind F12 amx_me")
client_cmd (id,"bind F11 amx_myfriend")
}
//disconnect process
public client_disconnect(id){
//if player has logged in , save the state.
if(g_p_id[id]>0){
remove_task(t_corner_id+id)
new errnum, error[255]
new q_query[1024]
format(q_query,1023,"UPDATE member SET online = '0',exp = '%d',point = '%d',level = '%d' WHERE id = '%d'",g_p_exp[id],g_p_point[id],g_p_level[id],g_p_id[id])
//SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
new Handle:db = SQL_Connect(g_DbInfo, errnum, error, 254)
new Handle:query = SQL_PrepareQuery(db, q_query)
SQL_Execute(query)
server_print("%L",LANG_PLAYER,"MESSAGE_DISCON NECT_USER",id)
SQL_FreeHandle(query)
SQL_FreeHandle(db)
}
//remove the player's check reg task if exist.
if (task_exists(t_checkreg_id +id))
remove_task(t_checkreg_id +id)
//clear player's state
g_p_id[id] = 0
}
//client putinserver process
public client_putinserver(id){
//set task to check if player is log in
set_task(25.0,"t_checkreg",t_checkreg_id + id)
//show notice
new c_allowmessage = get_cvar_num("amx_m_kick_notvip")
new c_allowreg = get_cvar_num("amx_m_allow_reg")
if (c_allowmessage!=0 && c_allowreg!=0 ){
set_task(5.0,"show_notice_message",id)
}
//set task bind key
set_task(1.0,"cmd_bindkey",t_bindkey_id + id)
//set task check info, if there is not null, automatically log in .
set_task(5.0,"p_checkinfo",t_checkinfo_id + id)
}
//task: check if log in
public t_checkreg(id){
id = id - t_checkreg_id
if (g_p_id[id]>0)
{
return PLUGIN_HANDLED
}
new c_kicknovip = get_cvar_num("amx_m_kick_notvip")
if(c_kicknovip!=0){
server_cmd("kick #%d %L",get_user_userid(id),id,"KICK_BY_NOVIP")
}
return PLUGIN_CONTINUE
}
//function show notice
public show_notice_message(id){
set_hudmessage(0, 255, 0, 0.04, -1.0, 0, 0.1, 0.1, 0.1, 8.0, 3)
show_hudmessage(id,"%L",id,"MESSAGE_NOTICE")
}
//about login process
//login command
public cmd_login(id){
//check if logged in
if (g_p_id[id]>0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_ALREADY_LOGIN")
return PLUGIN_HANDLED
}
//get id and password
new i_id[7]
new p_id_data[12]
new q_query[1024]
read_argv ( 1, i_id,6 )
read_argv ( 2, p_id_data,10 )
p_id_data[11]=id
format(q_query,1023,"SELECT password,block,online,point,id,exp,level,last ip,lasttime,lastserver FROM member WHERE id = '%s'",i_id)
SQL_ThreadQuery(g_DbInfo, "db_login_check", q_query,p_id_data,12)
return PLUGIN_CONTINUE
}
//continue login
public db_login_check(failstate, Handle:query, error[], errnum, data[], size){
if (failstate){
if (failstate == TQUERY_CONNECT_FAILED){
server_print("%L",LANG_PLAYER,"SQL_CONNECT_FA ILED")
} else if (failstate == TQUERY_QUERY_FAILED) {
server_print("%L",LANG_PLAYER,"SQL_QUERY_FAIL ED")
}
server_print("%L",LANG_PLAYER,"SQL_ERROR_CODE ", errnum, error)
} else {
new id = data[11]
new q_rows = SQL_NumResults(query)
//check if registered.
if (q_rows == 0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_IDNOTREG")
return PLUGIN_HANDLED
}
//check if the password match.
new p_password[11],q_password[35],md5password[34]
SQL_ReadResult(query,0,q_password,34)
format(p_password,10,"%s",data)
md5(p_password,md5password)
if(strcmp(md5password,q_password)!=0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_PASSWORDNOTMATCH")
return PLUGIN_HANDLED
}
//check if the account is blocked
new q_block = SQL_ReadResult(query,1)
if(q_block!=0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_BLOCKED")
return PLUGIN_HANDLED
}
//check if the account is online
new q_online = SQL_ReadResult(query,2)
if(q_online!=0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_ONLINE")
return PLUGIN_HANDLED
}
//check if the account still have points
new q_point = SQL_ReadResult(query,3)
if(q_point<=0){
set_hudmessage(0, 255, 0, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 6.0, 1)
show_hudmessage(id, "%L",id,"MESSAGE_NOPOINT")
return PLUGIN_HANDLED
}
//if all above is true, get id,experience, etc.
g_p_id[id] = SQL_ReadResult(query,4)
g_p_exp[id] = SQL_ReadResult(query,5)
g_p_level[id] = SQL_ReadResult(query,6)
g_p_point[id] = q_point
new p_lasttime[32]
new p_lastip[32]
new p_lastserver[32]
SQL_ReadResult(query,7,p_lastip,31)
SQL_ReadResult(query,8,p_lasttime,31)
SQL_ReadResult(query,9,p_lastserver,31)
//set userinfo, then when he/she join the server next time, he/she will automatically log in.
client_cmd(id, "setinfo mloginid %d", g_p_id[id])
client_cmd(id, "setinfo mloginpassword %s", p_password)
//show last login time message
new l_message[32]
set_hudmessage(255, 255, 255, -1.0, 0.5, 0, 0.1, 0.1, 0.1, 8.0, 1)
format(l_message,31,"MESSAGE_STAT_%d",g_p_lev el[id])
show_hudmessage(id,"%L",id,l_message,g_p_id[id],g_p_level[id],g_p_exp[id],g_p_point[id],p_lasttime,p_lastip,p_lastserver)
//save the login time and server
get_user_ip(id,p_lastip,31,0)
get_time("%m/%d/%Y - %H:%M:%S",p_lasttime,31)
get_cvar_string("hostname",p_lastserver,31)
new q_query[1024]
format(q_query,1023,"UPDATE member SET online = '1',lastip = '%s',lasttime = '%s',lastserver = '%s' WHERE id = '%d'",p_lastip,p_lasttime,p_lastserver,g_p_id[id])
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
//show stat on the left corner
if (task_exists(t_corner_id +id))
remove_task(t_corner_id+id)
set_task(1.0,"show_corner_stat",t_corner_id+i d,"",0,"b",0)
}
return PLUGIN_CONTINUE
}
//end login process
//every minute will execute
public hook_minute(){
new q_query[1024]
new c_enable_point = get_cvar_num("amx_m_point_enable")
new c_exps = get_cvar_num("amx_m_exps")
for(new i=1;i<=32;i++){
if (g_p_id[i]>0){
if(c_enable_point!=0)
//point - 1
g_p_point[i]=g_p_point[i]-1
//experience + 1 * N
g_p_exp[i]=g_p_exp[i]+1*c_exps
//calculate the level
calclevel(i)
//update player's state
format(q_query,1023,"UPDATE member SET exp = '%d',point = '%d',level = '%d' WHERE id = '%d'",g_p_exp[i],g_p_point[i],g_p_level[i],g_p_id[i])
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
//if no point left, kick
if(g_p_point[i]<=0){
server_cmd("kick #%d %L",get_user_userid(i),i,"MESSAGE_NOPOINT")
}
}
}
}
//experience calculation
public hook_death(){
new p_message[128]
new c_exps = get_cvar_num("amx_m_exps")
new Killer = read_data(1)
new Victim = read_data(2)
new headshot = read_data(3)
if(g_p_id[Killer]>0){
//experience increase
g_p_exp[Killer]=g_p_exp[Killer] + (2 + headshot)*c_exps
format(p_message,127,"%L",Killer,"MESSAGE_KIL LER_GOTEXP",(2 + headshot)*c_exps)
set_hudmessage(255, 255, 255, 0.01, 0.73, 0,1.0,1.0,0.1,3.0,3)
show_hudmessage(Killer,"%L",Killer,"MESSAGE_K ILLER_GOTEXP",(2 + headshot)*c_exps)
calclevel(Killer)
}
if(g_p_id[Victim]>0){
//experience reduce
g_p_exp[Victim]=g_p_exp[Victim] - 2*c_exps
set_hudmessage(255, 255, 255, 0.01, 0.73, 0,1.0,1.0,0.1,3.0,3)
show_hudmessage(Victim,"%L",Victim,"MESSAGE_V ICTIM_GOTEXP")
calclevel(Victim)
}
}
//round start process
public hook_roundstart(){
for(new i=1;i<=32;i++){
if(g_p_id[i]>0){
//vip hp
new c_viphp = get_cvar_num("amx_m_viphp")
if(c_viphp!=0){
new c_levelhp = get_cvar_num("amx_m_levelhp")
set_user_health(i,100+g_p_level[i]*c_levelhp)
}
//vip ap
new c_viparmor = get_cvar_num("amx_m_viparmor")
if(c_viparmor!=0){
new c_levelap = get_cvar_num("amx_m_levelap")
new p_tarmor = get_user_armor(i)
if (p_tarmor>=100){
p_tarmor=100+g_p_level[i]*c_levelap
}else {
p_tarmor=p_tarmor+g_p_level[i]*c_levelap
}
set_user_armor (i,p_tarmor)
}
//vip glow color
new c_vipglow = get_cvar_num("amx_m_vipglow")
if(c_vipglow!=0)
set_user_rendering(i,kRenderFxGlowShell,150+g _p_level[i]*8,150+g_p_level[i]*8,150+g_p_level[i]*8,kRenderNormal,25)
}
}
}
//calculate the level, don't laugh

calclevel(id){
if(g_p_exp[id]<g_level_exp[0]){
g_p_exp[id]=0
g_p_level[id]=0
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[0]&&g_p_exp[id]<g_level_exp[1]){
g_p_level[id]=0
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[1]&&g_p_exp[id]<g_level_exp[2]){
g_p_level[id]=1
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[2]&&g_p_exp[id]<g_level_exp[3]){
g_p_level[id]=2
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[3]&&g_p_exp[id]<g_level_exp[4]){
g_p_level[id]=3
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[4]&&g_p_exp[id]<g_level_exp[5]){
g_p_level[id]=4
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[5]&&g_p_exp[id]<g_level_exp[6]){
g_p_level[id]=5
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[6]&&g_p_exp[id]<g_level_exp[7]){
g_p_level[id]=6
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[7]&&g_p_exp[id]<g_level_exp[8]){
g_p_level[id]=7
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[8]&&g_p_exp[id]<g_level_exp[9]){
g_p_level[id]=8
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[9]&&g_p_exp[id]<g_level_exp[10]){
g_p_level[id]=9
return PLUGIN_HANDLED
}
if(g_p_exp[id]>=g_level_exp[10]){
g_p_level[id]=10
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
//if money change ,,,,
public hook_money(id){
if(g_p_id[id]==-1) {
new c_novipmoney = get_cvar_num("amx_m_notvip_maxmoney")
new Amount = read_data(1)
if(c_novipmoney>0){
if( Amount>c_novipmoney)
cs_set_user_money(id,c_novipmoney,0)
}
}
}
//get userinfo and automatically login
public p_checkinfo(id){
id = id - t_checkinfo_id
new mregid[7] ,mregpassword[11]
get_user_info(id, "mloginid", mregid, 6)
get_user_info(id, "mloginpassword", mregpassword, 10)
if(strlen(mregid)>0)
client_cmd(id,"login %s %s",mregid,mregpassword)
}
//function check player's state
cmd_checkmypoint(id){
if(g_p_id[id]>0){
show_center_stat(id)
}
}
//about menus
//amx_me
public cmd_mymenu(id){
if (g_p_id[id]>0){
new menu[512]
format(menu, 511, "Choose_an_option?^n")
new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|M ENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|ME NU_KEY_8|MENU_KEY_9
new c_level_changemap = get_cvar_num("amx_m_level_changemap")
new c_level_changeteam = get_cvar_num("amx_m_level_changeteam")
new c_level_kick = get_cvar_num("amx_m_level_kick")
new c_level_slay = get_cvar_num("amx_m_level_slay")
new c_level_restartround = get_cvar_num("amx_m_level_restartround")
new c_level_changemoney = get_cvar_num("amx_m_level_changemoney")
if (g_p_level[id]>=c_level_changemap){
format(menu, 511, "%s^n\w1.%L",menu,id,"MENU_CHANGE_MAP")
}else{
format(menu, 511, "%s^n\d1.%L",menu,id,"MENU_CHANGE_MAP")
}
if (g_p_level[id]>=c_level_kick){
format(menu, 511, "%s^n\w2.%L",menu,id,"MENU_KICK_PLAYER")
}else{
format(menu, 511, "%s^n\d2.%L",menu,id,"MENU_KICK_PLAYER")
}
if (g_p_level[id]>=c_level_restartround){
format(menu, 511, "%s^n\w3.%L",menu,id,"MENU_RESTARTROUND")
}else{
format(menu, 511, "%s^n\d3.%L",menu,id,"MENU_RESTARTROUND")
}
if (g_p_level[id]>=c_level_changeteam){
format(menu, 511, "%s^n\w4.%L",menu,id,"MENU_CHANGE_PLAYER_TEAM ")
}else{
format(menu, 511, "%s^n\d4.%L",menu,id,"MENU_CHANGE_PLAYER_TEAM ")
}
if (g_p_level[id]>=c_level_slay){
format(menu, 511, "%s^n\w5.%L",menu,id,"MENU_KILL_PLAYER")
}else{
format(menu, 511, "%s^n\d5.%L",menu,id,"MENU_KILL_PLAYER")
}
if (g_p_level[id]>=c_level_changemoney){
format(menu, 511, "%s^n\w6.%L",menu,id,"MENU_CHANGE_MONEY")
}else{
format(menu, 511, "%s^n\d6.%L",menu,id,"MENU_CHANGE_MONEY")
}
if(access(id,ADMIN_BAN)){
format(menu, 511, "%s^n\w7.%L",menu,id,"MENU_BLOCK_ID")
}else{
format(menu, 511, "%s^n\d7.%L",menu,id,"MENU_BLOCK_ID")
}
if(!access(id,ADMIN_BAN)){
if(g_p_id[id]>0){
format(menu, 511, "%s^n\w8.%L",menu,id,"MENU_MY_STAT")
}else{
format(menu, 511, "%s^n\d8.%L",menu,id,"MENU_MY_STAT")
}
}else{
if(g_p_id[id]>0){
format(menu, 511, "%s^n\w8.%L",menu,id,"MENU_ADD_POINT")
}else{
format(menu, 511, "%s^n\d8.%L",menu,id,"MENU_ADD_POINT")
}
}
if (g_p_id[id]>0){
format(menu, 511, "%s^n\w9.%L",menu,id,"MENU_LOGOUT")
}else{
format(menu, 511, "%s^n\d9.%L",menu,id,"MENU_LOGOUT")
}
format(menu, 511, "%s^n\w0.%L",menu,id,"MENU_EXIT")
show_menu(id, keys, menu)
}
}
//action mymenu
public actionmymenu(id, key){
switch(key)
{
case 0: {
new c_level_changemap = get_cvar_num("amx_m_level_changemap")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_changemap){
new menu[192]
format(menu, 191, "Change_map?^n^n1.de_dust2^n2.de_inferno^n3.d e_nuke^n4.de_aztec^n5.de_cbble^n6.de_train^n7 .de_dust^n^n^n0.Exit")
new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|M ENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|ME NU_KEY_8|MENU_KEY_9
show_menu(id, keys, menu)
}
}
case 1: {
new c_level_kick = get_cvar_num("amx_m_level_kick")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_kick){
displayKickMenu(id, g_menuPosition[id] = 0)
}
}
case 2: {
new c_level_restartround = get_cvar_num("amx_m_level_restartround")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_restartround){
server_cmd("sv_restartround 3")
server_exec()
client_print(id,print_chat,"%L",id,"MESSAGE_R ESTARTROUND_OK")
new c_restartround = get_cvar_num ("amx_m_exp_restartround")
g_p_exp[id]=g_p_exp[id]-c_restartround
calclevel(id)
}
}
case 3: {
new c_level_changeteam = get_cvar_num("amx_m_level_changeteam")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_changeteam){
displayTeamMenu(id, g_menuPosition[id] = 0)
}
}
case 4: {
new c_level_slay = get_cvar_num("amx_m_level_slay")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_slay){
displaySlayMenu(id, g_menuPosition[id] = 0)
}
}
case 5: {
new c_level_changemoney = get_cvar_num("amx_m_level_changemoney")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_changemoney&&cs_get_user_money (id )<15000){
new c_money = get_cvar_num ("amx_m_exp_money")
g_p_exp[id] = g_p_exp[id] - c_money
calclevel(id)
cs_set_user_money(id,cs_get_user_money(id)+10 00,1)
client_print(id,print_chat,"%L",id,"MESSAGE_C HANGE_MONEY_OK")
cmd_mymenu(id)
}
}
case 6: {
if (access(id,ADMIN_BAN)){
displayBlockMenu(id, g_menuPosition[id] = 0)
}
}
case 7: {
if(!access(id,ADMIN_BAN)){
if (g_p_id[id]>0){
cmd_checkmypoint(id)
}
}else{
displayAddPointMenu(id, g_menuPosition[id] = 0)
}
}
case 8: {
if (g_p_id[id]>0){
client_cmd(id, "setinfo mloginid ^"^"")
client_cmd(id, "setinfo mloginpassword ^"^"")
new userid2 = get_user_userid(id)
server_cmd("kick #%d %L", userid2,id,"MESSAGE_YOU_HAVE_LOGOUT")
server_exec()
}
}
case 9:return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
//delay change map
public delayedChangeMap(mapname[]){
server_cmd("changelevel %s",mapname)
//do not add server_exec , it will crash the server.
//server_exec()
}
//change map menu action
public actionmapmenu(id,key){
new c_change_map = get_cvar_num ("amx_m_exp_change_map")
switch(key)
{
case 0: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_dust2", strlen("de_dust2") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 1: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_inferno", strlen("de_inferno") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 2: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_nuke", strlen("de_nuke") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 3: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_aztec", strlen("de_aztec") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 4: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_cbble", strlen("de_cbble") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 5: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_train", strlen("de_train") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 6: {
set_task(2.0, "delayedChangeMap", 9977+id, "de_dust", strlen("de_dust") + 1)
g_p_exp[id]=g_p_exp[id]-c_change_map
calclevel(id)
}
case 9: cmd_mymenu(id)
}
return PLUGIN_HANDLED
}
//display kick menu
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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","KICK_PLAYER?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1, "KICK_PLAYER?")
}
//kick action
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 userid2 = get_user_userid(player)
server_cmd("kick #%d", userid2)
server_exec()
new c_kick_player = get_cvar_num ("amx_m_exp_kick")
g_p_exp[id] = g_p_exp[id] - c_kick_player
calclevel(id)
new sname[32]
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_K ICK_OK",sname)
//displayKickMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//display team menu
public actionTeamMenu(id, key)
{
switch (key)
{
case 8: displayTeamMenu(id, ++g_menuPosition[id])
case 9: displayTeamMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
new CsTeams:tteam = cs_get_user_team(player)
if (tteam==CS_TEAM_T){
cs_set_user_team(player,CS_TEAM_CT)
}
if (tteam==CS_TEAM_CT){
cs_set_user_team(player,CS_TEAM_T)
}
new c_change_team = get_cvar_num ("amx_m_exp_change_team")
g_p_exp[id] = g_p_exp[id] - c_change_team
calclevel(id)
new sname[32]
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_C HANGE_PLAYER_TEAM_OK",sname)
displayTeamMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//team change action
displayTeamMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Change_team?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1, "Change_team?")
}
//action kill
public actionSlayMenu(id, key)
{
switch (key)
{
case 8: displaySlayMenu(id, ++g_menuPosition[id])
case 9: displaySlayMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if (is_user_alive(player)==1){
user_kill(player)
new c_slay_player = get_cvar_num ("amx_m_exp_slay")
g_p_exp[id] = g_p_exp[id] - c_slay_player
calclevel(id)
new sname[32]
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_S LAY_OK",sname)
}
displaySlayMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//display kill menu
displaySlayMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n", "Kill_a_player?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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)
if (is_user_alive(i)!=1){
len += format(menuBody[len], 511-len, "\d%d. %s [%L]^n\w", ++b, name,id,"MENU_WORD_DEAD")
}else{
len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
}
}
}
if (end != g_menuPlayersNum[id])
{
format(menuBody[len], 511-len, "^n9. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1,"Kill_a_player?")
}
//display block menu
displayBlockMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Block_ID?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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)
if(g_p_id[i]>0){
len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
}else{
len += format(menuBody[len], 511-len, "\d%d. %s [%L]^n\w", ++b, name,id,"MENU_WORD_UNREG")
}
}
}
if (end != g_menuPlayersNum[id])
{
format(menuBody[len], 511-len, "^n9. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1,"Block_ID?")
}
//action block
public actionBlockMenu(id, key)
{
switch (key)
{
case 8: displayBlockMenu(id, ++g_menuPosition[id])
case 9: displayBlockMenu(id, --g_menuPosition[id])
default:
{
if(access(id,ADMIN_BAN)){
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if (g_p_id[player]>0){
blockuser(player)
new sname[32]
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_B LOCK_OK",sname)
}
displayBlockMenu(id, g_menuPosition[id])
}
}
}
return PLUGIN_HANDLED
}
//block query
blockuser(id){
new q_query[1024]
format(q_query,1023,"UPDATE member SET block = '1' WHERE id = '%d'",g_p_id[id])
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
new userid2 = get_user_userid(id)
server_cmd("kick #%d %L", userid2,id,"MESSAGE_BLOCKED")
server_exec()
return PLUGIN_CONTINUE
}
//unblock id command
public cmd_unblockid(id){
if(!access(id,ADMIN_BAN)){
return PLUGIN_HANDLED
}
new a_id[7]
read_argv ( 1, a_id,6 )
new q_query[1024]
format(q_query,1023,"UPDATE member SET block = '0' WHERE id = '%s'",a_id)
SQL_ThreadQuery(g_DbInfo, "db_query", q_query)
client_print(id,print_chat,"%L",id,"MESSAGE_U NBLOCK_OK",a_id)
return PLUGIN_HANDLED
}
//display add point menu
displayAddPointMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Add_Point?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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)
if(g_p_id[i]>0){
len += format(menuBody[len], 511-len, "%d. %s^n", ++b, name)
}else{
len += format(menuBody[len], 511-len, "\d%d. %s [%L]^n\w", ++b, name,id,"MENU_WORD_UNREG")
}
}
}
if (end != g_menuPlayersNum[id])
{
format(menuBody[len], 511-len, "^n9. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1, "Add_Point?")
}
//action block
public actionAddPointMenu(id, key)
{
switch (key)
{
case 8: displayAddPointMenu(id, ++g_menuPosition[id])
case 9: displayAddPointMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if (g_p_id[player]>0){
g_p_point[player]=g_p_point[player] + 30
calclevel(player)
new sname[32]
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_A DD_POINT_OK",sname)
}
displayAddPointMenu(id, g_menuPosition[id])
}
}
}
//display my friend menu
public displaymyfriendmenu(id){
if (g_p_id[id]>0){
new menu[255]
format(menu, 254, "My_friend?^n")
new keys = MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|M ENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|ME NU_KEY_8|MENU_KEY_9
new c_level_givemoney = get_cvar_num("amx_m_level_givemoney")
new c_level_giveexp = get_cvar_num("amx_m_level_giveexp")
new c_level_givepoint = get_cvar_num("amx_m_level_givepoint")
if (g_p_level[id]>=c_level_givemoney){
format(menu, 254, "%s^n\w1.%L",menu,id,"MENU_FRIEND_GIVE_MONEY" )
}else{
format(menu, 254, "%s^n\d1.%L",menu,id,"MENU_FRIEND_GIVE_MONEY" )
}
if (g_p_level[id]>=c_level_giveexp){
format(menu, 254, "%s^n\w2.%L",menu,id,"MENU_FRIEND_GIVE_EX P")
}else{
format(menu, 254, "%s^n\d2.%L",menu,id,"MENU_FRIEND_GIVE_EX P")
}
if (g_p_level[id]>=c_level_givepoint){
format(menu, 254, "%s^n\w3.%L",menu,id,"MENU_FRIEND_GIVE_POINT" )
}else{
format(menu, 254, "%s^n\d3.%L",menu,id,"MENU_FRIEND_GIVE_POINT" )
}
format(menu, 254, "%s^n\w0.%L",menu,id,"MENU_EXIT")
show_menu(id, keys, menu)
//return PLUGIN_HANDLED
}
}
//action my friend menu
public actionmyfriendmenu(id, key){
switch(key)
{
case 0: {
new c_level_givemoney = get_cvar_num("amx_m_level_givemoney")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_givemoney){
displayGiveMoneyMenu(id, g_menuPosition[id] = 0)
}
}
case 1: {
new c_level_giveexp = get_cvar_num("amx_m_level_giveexp")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_giveexp){
displayGiveExpMenu(id, g_menuPosition[id] = 0)
}
}
case 2: {
new c_level_givepoint = get_cvar_num("amx_m_level_givepoint")
if (g_p_id[id]>0 && g_p_level[id]>=c_level_givepoint){
displayGivePointMenu(id, g_menuPosition[id] = 0)
}
}
case 9:return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
//display give money menu
displayGiveMoneyMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Give_money?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1,"Give_money?")
}
//display money menu
public actionGiveMoneyMenu(id, key)
{
switch (key)
{
case 8: displayGiveMoneyMenu(id, ++g_menuPosition[id])
case 9: displayGiveMoneyMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if(cs_get_user_money(player)<=15000&&g_p_exp[id]>40){
cs_set_user_money(player,cs_get_user_money(pl ayer)+1000,0)
new sname[32]
get_user_name(id, sname, 31)
client_print(player,print_chat,"%L",id,"MESSA GE_GET_MONEY",sname)
new c_givemoney = get_cvar_num("amx_m_exp_givemoney")
g_p_exp[id] = g_p_exp[id] - c_givemoney
calclevel(id)
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_G IVE_MONEY_OK",sname)
}else{
client_print(id,print_chat,"%L",id,"MESSAGE_G IVE_MONEY_FAILED")
}
displayGiveMoneyMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//display give exp menu
displayGiveExpMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Give_exp?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1,"Give_exp?")
}
//action give exp
public actionGiveExpMenu(id, key)
{
switch (key)
{
case 8: displayGiveExpMenu(id, ++g_menuPosition[id])
case 9: displayGiveExpMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if(g_p_id[player]>0){
g_p_exp[player] = g_p_exp[player] + 50
new sname[32]
get_user_name(id, sname, 31)
client_print(player,print_chat,"%L",id,"MESSA GE_GIVE_EXP_OK",sname)
new c_giveexp = get_cvar_num("amx_m_exp_giveexp")
g_p_exp[id] = g_p_exp[id] - c_giveexp
calclevel(id)
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_G ET_EXP",sname)
}else{
client_print(id,print_chat,"%L",id,"MESSAGE_G IVE_EXP_FAILED")
}
displayGiveExpMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//display add point menu
displayGivePointMenu(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%s\R%d/%d^n\w^n" : "%s %d/%d^n^n","Give_point?", pos + 1, (g_menuPlayersNum[id] / 8 + ((g_menuPlayersNum[id] %

? 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. %s...^n0. %s", "More", pos ? "Back" : "Exit")
keys |= MENU_KEY_9
}
else
format(menuBody[len], 511-len, "^n0. %s", pos ? "Back" : "Exit")
show_menu(id, keys, menuBody, -1, "Give_point?")
}
//action give point
public actionGivePointMenu(id, key)
{
switch (key)
{
case 8: displayGivePointMenu(id, ++g_menuPosition[id])
case 9: displayGivePointMenu(id, --g_menuPosition[id])
default:
{
new player = g_menuPlayers[id][g_menuPosition[id] * 8 + key]
if(g_p_id[player]>0&&g_p_point[id]>30 ){
g_p_point[player] = g_p_point[player] + 30
new sname[32]
get_user_name(id, sname, 31)
client_print(player,print_chat,"%L",id,"MESSA GE_GET_POINT",sname)
new c_givepoint = get_cvar_num("amx_m_exp_givepoint")
g_p_exp[id] = g_p_exp[id] - c_givepoint
g_p_point[id] = g_p_point[id] - 30
get_user_name(player, sname, 31)
client_print(id,print_chat,"%L",id,"MESSAGE_G IVE_POINT_OK",sname)
}else{
client_print(id,print_chat,"%L",id,"MESSAGE_G IVE_POINT_FAILED")
}
displayGivePointMenu(id, g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
//display my friend menu
public cmd_myfriendmenu(id){
if (g_p_id[id]>0)
displaymyfriendmenu(id)
}
//when the plugin stop, free the sql handle
public plugin_end(){
SQL_FreeHandle(g_DbInfo)
}
//send a color print_chat
color_message_all(message[]){
message_begin(MSG_ALL, get_user_msgid("SayText"))
//message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, id)
write_byte(1)
write_string(message)
message_end()
}
//mark vip chat
public cmd_say(id){
if(g_p_id[id]>0){
new a_text[64],p_name[32],p_message[128]
read_args (a_text,63)
remove_quotes(a_text)
get_user_name(id,p_name,31)
format(p_message,127,"^x04[VIP]^x03%s^x01:%s",p_name,a_text)
color_message_all(p_message)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}