Raised This Month: $ Target: $400
 0% 

Hard problem for resolve


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
dingtian
Member
Join Date: May 2006
Old 06-03-2006 , 05:55   Hard problem for resolve
Reply With Quote #1

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
}
dingtian is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 16:22.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode