#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <dhudmessage>
/*--Variables--*/
new T_Count
new CT_Count
new g_maxplayers
new iNum
new Attacker
new Victim
new Team_attacker
new Team_victim
new money
new onoff
new speed_per_sec
new iPlayers[32]
new plr_money[33]
new plr_cur_money[33]
new g_menuPosition[33]
new g_menuPlayers[33][32]
new g_menuPlayersNum[33]
new g_menuOption[33]
new g_menuSettings[33]
new g_coloredMenus
new imonn[33]
new bool:plr_prespawn[33]
/*-------------*/
public plugin_init()
{
register_plugin("[ZE] Money-System", "1.2", "Raheem")
/*-------Infection\Kill Bouns--------*/
register_event("DeathMsg", "death", "a")
/*------Block Kill Command--------*/
register_forward(FM_ClientKill,"HookKill")
/*------Money Hud Effect------*/
register_event("Money","update_money","b")
onoff = register_cvar("amx_mhe_money","1")
speed_per_sec = register_cvar("amx_mhe_money_speed","10")
RegisterHam(Ham_Spawn,"player","player_prespawn",0)
RegisterHam(Ham_Spawn,"player","player_spawn",1)
money = get_user_msgid("Money")
register_message(money,"hook_money")
/*------Damage Bonus-------*/
register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")
/*------Donate System-----*/
register_clcmd("say donate","cmdDonateMenu")
register_clcmd("say /donate","cmdDonateMenu")
register_clcmd("say_team donate","cmdDonateMenu")
register_clcmd("say_team /donate","cmdDonateMenu")
register_cvar("amx_donate_max","16000")
register_menucmd(register_menuid("Donate Menu"),1023,"actionDonateMenu")
g_maxplayers = get_maxplayers()
}
/*-----------------Escape Bouns-----------------*/
public ze_roundend()
{
T_Count = GetPlayersNum(CsTeams:CS_TEAM_T)
CT_Count = GetPlayersNum(CsTeams:CS_TEAM_CT)
get_players(iPlayers, iNum, "ace", "CT")
for (new i = 0; i < iNum; i++)
{
if(CT_Count > T_Count) //Mean CT Win
{
cs_set_user_money (iPlayers[i] , cs_get_user_money(iPlayers[i]) + 1000)
client_print_color(iPlayers[i], "!n[!gMoney!n-!gSystem!n] !n+!t1000!n$ !gEscape Bonus!n.")
}
else
{
return;
}
}
get_players(iPlayers, iNum, "ce", "TERRORIST")
for (new i = 0; i < iNum; i++)
{
if(CT_Count > T_Count)
{
cs_set_user_money (iPlayers[i] , cs_get_user_money(iPlayers[i]) - 1400) //Don't Change This
}
else
{
return;
}
}
}
/*-----------------Infection\Kill Bouns-----------------*/
public death()
{
Attacker = read_data(1)
Victim = read_data(2)
Team_attacker = get_user_team(Attacker)
Team_victim = get_user_team(Victim)
if(Team_attacker != Team_victim)
{
cs_set_user_money(Attacker, cs_get_user_money(Attacker) + 1500)
client_print_color(Attacker, "!n[!gMoney!n-!gSystem!n] !n+!t1500!n$ !gInfection!n\!gKill Bonus!n.")
}
else
{
return;
}
}
/*-----------------Block Kill Command-----------------*/
public HookKill(id)
{
client_print(id,print_console,"[Money-System] This command has been disabled.")
return FMRES_SUPERCEDE
}
/*-----------------Money Hud Effect-----------------*/
public client_disconnect(id) {
plr_money[id]=0
plr_cur_money[id]=0
plr_prespawn[id]=false
remove_task(id)
}
public player_prespawn(id) {
if(get_pcvar_num(onoff) && is_user_connected(id)) {
plr_prespawn[id]=true
plr_money[id]=get_pdata_int(id,115,5)
plr_cur_money[id]=0
set_pdata_int(id,115,0,5)
set_plr_money(id,0)
}
}
public player_spawn(id) {
if(get_pcvar_num(onoff) && is_user_connected(id)) {
plr_prespawn[id]=false
set_pdata_int(id,115,plr_money[id],5)
set_plr_money(id,plr_money[id])
}
}
public update_money(id) {
if(!get_pcvar_num(onoff) || !is_user_connected(id) || plr_prespawn[id]) return PLUGIN_HANDLED
new cur_money=read_data(1)
if(cur_money!=plr_money[id]) {
plr_money[id]=cur_money
if(!task_exists(id)) set_task(0.1,"money_effect",id,_,_,"b")
set_plr_money(id,plr_cur_money[id])
}
return PLUGIN_HANDLED
}
public hook_money(msg_id,msg_dest,id) {
if(!get_pcvar_num(onoff)) return PLUGIN_CONTINUE
new cash = get_msg_arg_int(1)
if(plr_cur_money[id]!=cash) return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public money_effect(id) {
static Add
if(plr_cur_money[id]==plr_money[id]) {
remove_task(id)
plr_cur_money[id]=plr_money[id]
return PLUGIN_HANDLED
}
else if(plr_cur_money[id] < plr_money[id]) {
Add=(plr_money[id]-plr_cur_money[id])/get_pcvar_num(speed_per_sec)
if(!Add) Add=1
plr_cur_money[id]+=Add
}
else {
Add=(plr_cur_money[id]-plr_money[id])/get_pcvar_num(speed_per_sec)
if(!Add) Add=1
plr_cur_money[id]-=Add
}
set_plr_money(id,plr_cur_money[id])
return PLUGIN_CONTINUE
}
set_plr_money(id,Money,flash=0) {
message_begin(MSG_ONE_UNRELIABLE,money,_,id)
write_long(Money)
write_byte(flash)
message_end()
}
/*-----------------Damage Bonus-----------------*/
public on_damage(id)
{
static attacker
attacker = get_user_attacker(id)
static damage
damage = read_data(2)
if((damage >= 60) && is_user_connected(attacker) && is_user_alive(attacker) && (cs_get_user_team(attacker) == CS_TEAM_CT))
{
cs_set_user_money(attacker, cs_get_user_money(attacker) + 30)
set_dhudmessage(random(256), random(256), random(256), -1.0, 0.7, 1, 3.0, 3.0, 0.5, 0.5)
show_dhudmessage(attacker, "[Money-System] +30 $ Damage Bouns.")
}
}
/*----------------Donate System---------------*/
public actionDonateMenu(id,key) {
switch (key) {
case 7: {
++g_menuOption[id]
g_menuOption[id] %= 1
switch (g_menuOption[id]) {
case 1: g_menuSettings[id] = 3000
}
displayDonateMenu(id,g_menuPosition[id])
}
case 8: displayDonateMenu(id,++g_menuPosition[id])
case 9: displayDonateMenu(id,--g_menuPosition[id])
default: {
new player = g_menuPlayers[id][g_menuPosition[id] * 7 + key]
new name2[32]
get_user_name(player,name2,31)
new name[32]
get_user_name(id,name,31)
imonn[id] = g_menuSettings[id]
new setidmoney[32]
new setplmoney[32]
new maxmoney = get_cvar_num("amx_donate_max")
setplmoney[id] = (cs_get_user_money(player) + imonn[id])
if (cs_get_user_money(id) < imonn[id]){
client_print_color(id, "!n[!gMoney!n-!gSystem!n] !tYou don't have enough money!n!")
return PLUGIN_HANDLED
}else if (maxmoney < (setplmoney[id])){
new overplmoney[32]
overplmoney[id]= (maxmoney - cs_get_user_money(player))
setidmoney[id] = (cs_get_user_money(id) - overplmoney[id])
cs_set_user_money(id,setidmoney[id])
cs_set_user_money(player,maxmoney)
client_print_color(id, "!n[!gMoney!n-!gSystem!n] !t%d$ !nwas donated to !t%s!n.",imonn[id],name2)
client_print_color(player, "!n[!gMoney!n-!gSystem!n] !t%d$ !nwas donated from !t%s!n.",imonn[id],name)
return PLUGIN_HANDLED
}else{
setidmoney[id] = (cs_get_user_money(id) - imonn[id])
cs_set_user_money(id,setidmoney[id])
cs_set_user_money(player,setplmoney[id])
client_print_color(id, "!n[!gMoney!n-!gSystem!n] !t%d$ !nwas donated to !t%s!n.",imonn[id],name2)
client_print_color(player, "!n[!gMoney!n-!gSystem!n] !t%d$ !nwas donated from !t%s!n.",imonn[id],name)
return PLUGIN_HANDLED
}
displayDonateMenu(id,g_menuPosition[id])
}
}
return PLUGIN_HANDLED
}
displayDonateMenu(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], team[4]
new start = pos * 7
if (start >= g_menuPlayersNum[id])
start = pos = g_menuPosition[id] = 0
new len = format(menuBody,511, g_coloredMenus ?
"\rDonate Menu \r%d/%d^n \r^n" : "\y[\rMoney-System\y] \w- \yPlayer-List \r%d\w/\r%d^n^n",
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)
get_user_team(i,team,3)
if ( is_user_bot(i)||i == id) {
++b
if ( g_coloredMenus )
len += format(menuBody[len],511-len,"\d%d. %s\R%s^n\w", b,name,team)
else
len += format(menuBody[len],511-len,"\d%d. %s\R%s^n\w", b,name,team)
}
else
{
keys |= (1<<b)
len += format(menuBody[len],511-len, g_coloredMenus ?
"%d. %s\R%s^n\w" : "\y%d. \w%s\r\R%s^n",++b,name,team)
}
}
if ( g_menuOption[id] )
len += format(menuBody[len],511-len,"^n\y8. \wThe amount of money : \r$ %d^n",g_menuSettings[id] )
else
len += format(menuBody[len],511-len,"^n\y8. \wThe amount of money : \r$ 1000^n")
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,"^n\y0. \w%L", id, pos ? "BACK" : "EXIT")
show_menu(id,keys,menuBody,-1,"Donate Menu")
}
public cmdDonateMenu(id,level,cid)
{
if (!cmd_access(id,level,cid,1)) return PLUGIN_HANDLED
g_menuOption[id] = 0
g_menuSettings[id] = 1000
displayDonateMenu(id,g_menuPosition[id] = 0)
return PLUGIN_HANDLED
}
/*-----------------Get Players Number Stock-----------------*/
stock GetPlayersNum(CsTeams:iTeam) {
new iNum;
for( new i = 1; i <= g_maxplayers; i++ ) {
if( is_user_connected(i) && is_user_alive(i) && cs_get_user_team(i) == iTeam )
iNum++;
}
return iNum;
}
/*-----------------Colored Message Stock-----------------*/
stock client_print_color(const id, const input[], any:...)
{
new count = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^x04"); // Green Color
replace_all(msg, 190, "!n", "^x01"); // Default Color
replace_all(msg, 190, "!t", "^x03"); // Team Color
if (id) players[0] = id; else get_players(players, count, "ch");
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}