Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <nvault>
#define PLUGIN "[DR]MoneySystem"
#define VERSION "1.0"
#define AUTHOR "CrAsH"
new g_Cvar[11]
new g_Vault
new g_RoundEnd
new szPlayerMoney[33]
new szPlayerMoneyNew[33]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_Killed, "player", "PlayerKilled")
RegisterHam(Ham_Spawn, "player", "PlayerSpawn", 1)
register_event("HLTV", "RoundStart", "a", "1=0", "2=0")
register_event("SendAudio", "WinT", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "WinCT", "a", "2&%!MRAD_ctwin")
register_event("SendAudio", "Draw", "a", "2&%!MRAD_rounddraw")
g_Cvar[1] = register_cvar("dr_moneysystem_startmoney", "800")
g_Cvar[2] = register_cvar("dr_moneysystem_killmoney", "300")
g_Cvar[3] = register_cvar("dr_moneysystem_winmoney", "2500")
g_Cvar[4] = register_cvar("dr_moneysystem_losemoney", "1500")
g_Cvar[5] = register_cvar("dr_moneysystem_drawmoney", "1000")
g_Cvar[6] = register_cvar("dr_moneysystem_limit", "0")
g_Cvar[7] = register_cvar("dr_moneysystem_limit_player", "150000")
g_Cvar[8] = register_cvar("dr_moneysystem_limit_admin", "500000")
g_Cvar[9] = register_cvar("dr_moneysystem_save", "1")
g_Cvar[10] = register_cvar("dr_moneysystem_save_type", "1")
register_dictionary("dr_moneysystem.txt")
}
public plugin_natives()
{
register_native("dr_get_user_money", "native_dr_get_user_money", 1)
register_native("dr_set_user_money", "native_dr_set_user_money", 1)
}
public RoundStart()
{
g_RoundEnd = false
}
public client_connect(id)
{
if(get_pcvar_num( g_Cvar[9] ))
{
set_task(2.0, "Load", id)
}
}
public Load(id)
{
LoadingMoney(id)
}
public client_disconnect(id)
{
if(get_pcvar_num( g_Cvar[9] ))
{
SaveMoney(id)
}
}
public client_infochanged(id)
{
if(!is_user_connected(id))
{
return PLUGIN_CONTINUE
}
new szNewName[32], szOldName[32]
get_user_name(id, szOldName, charsmax( szOldName ))
get_user_info(id, "name", szNewName, charsmax( szNewName ))
if(!equal(szNewName, szOldName))
{
if(get_pcvar_num( g_Cvar[9] ))
{
SaveMoney(id)
set_task(0.3, "Load", id)
set_task(1.0, "UpdateMoney", id)
}
}
return PLUGIN_CONTINUE
}
public PlayerSpawn(id)
{
set_task(0.1, "UpdateMoney", id)
}
public PlayerKilled(szVictim, szAttacker, szGib)
{
if(!szAttacker || szVictim == szAttacker)
return HAM_IGNORED
if(!is_user_connected( szAttacker ) || !is_user_connected( szVictim ))
return HAM_IGNORED
szPlayerMoneyNew[szAttacker] = get_pcvar_num( g_Cvar[2] )
set_task(0.1, "UpdateMoney", szAttacker)
return HAM_IGNORED
}
public WinT()
{
SetRoundMoney(1)
g_RoundEnd = true
}
public WinCT()
{
SetRoundMoney(2)
g_RoundEnd = true
}
public Draw()
{
SetRoundMoney(3)
g_RoundEnd = true
}
public SetRoundMoney(szType)
{
new szPlayers[32]
new szNum, szPlayer
get_players(szPlayers, szNum)
for(new i;i < szNum; i++)
{
szPlayer = szPlayers[i]
if(!is_user_connected(szPlayer) || get_user_team(szPlayer) == 3 || is_user_bot(szPlayer) || is_user_hltv(szPlayer))
continue
if(szType != 3)
{
if(get_user_team(szPlayer) == szType)
{
szPlayerMoneyNew[szPlayer] = get_pcvar_num( g_Cvar[3] )
}else{
szPlayerMoneyNew[szPlayer] = get_pcvar_num( g_Cvar[4] )
}
}else{
szPlayerMoneyNew[szPlayer] = get_pcvar_num( g_Cvar[5] )
}
}
}
public UpdateMoney(id)
{
set_pdata_int(id, 115, 0, 5)
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, id)
write_long(szPlayerMoney[id])
write_byte(1)
message_end()
if(g_RoundEnd)
{
szPlayerMoney[id] = szPlayerMoney[id] + get_pcvar_num( g_Cvar[2] )
}else{
szPlayerMoney[id] = szPlayerMoney[id] + szPlayerMoneyNew[id]
szPlayerMoneyNew[id] = 0
}
if(get_pcvar_num( g_Cvar[6] ))
{
if(get_user_flags(id) & ADMIN_LEVEL_H)
{
if(szPlayerMoney[id] > get_pcvar_num( g_Cvar[7] ))
{
szPlayerMoney[id] = get_pcvar_num( g_Cvar[7] )
}
}else{
if(szPlayerMoney[id] > get_pcvar_num( g_Cvar[8] ))
{
szPlayerMoney[id] = get_pcvar_num( g_Cvar[8] )
}
}
}
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, id)
write_long(szPlayerMoney[id])
write_byte(1)
message_end()
}
public native_dr_get_user_money(id)
{
return szPlayerMoney[id]
}
public native_dr_set_user_money(id, szNum)
{
szPlayerMoney[id] = szNum
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("Money"), _, id)
write_long(szPlayerMoney[id])
write_byte(1)
message_end()
}
stock LoadingMoney(id)
{
g_Vault = nvault_open("dr_money")
if(g_Vault == INVALID_HANDLE)
{
new szError[512]
formatex(szError, charsmax( szError ), "NVault Error")
set_fail_state( szError )
}
new szKey[64], szData[256]
new szType
szType = get_pcvar_num( g_Cvar[10] )
switch( szType )
{
case 1:
{
new szName[32]
get_user_name(id, szName, charsmax( szName ))
formatex(szKey, charsmax( szKey ),"%s", szName)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
case 2:
{
new szSteamID[32]
get_user_authid(id, szSteamID, charsmax( szSteamID ))
formatex(szKey, charsmax( szKey ),"%s", szSteamID)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
case 3:
{
new szIP[32]
get_user_ip(id, szIP, charsmax( szIP ), 1)
formatex(szKey, charsmax( szKey ),"%s", szIP)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
}
nvault_get(g_Vault, szKey, szData, charsmax( szData ))
szPlayerMoney[id] = str_to_num( szData )
if(szPlayerMoney[id] == 0)
{
szPlayerMoney[id] = get_pcvar_num( g_Cvar[1] )
}
nvault_close(g_Vault)
}
stock SaveMoney(id)
{
g_Vault = nvault_open("dr_money")
if(g_Vault == INVALID_HANDLE)
{
new szError[512]
formatex(szError, charsmax( szError ), "NVault Error")
set_fail_state( szError )
}
new szKey[32], szData[256]
new szType
szType = get_pcvar_num( g_Cvar[10] )
switch( szType )
{
case 1:
{
new szName[32]
get_user_name(id, szName, charsmax( szName ))
formatex(szKey, charsmax( szKey ),"%s", szName)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
case 2:
{
new szSteamID[32]
get_user_authid(id, szSteamID, charsmax( szSteamID ))
formatex(szKey, charsmax( szKey ),"%s", szSteamID)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
case 3:
{
new szIP[32]
get_user_ip(id, szIP, charsmax( szIP ), 1)
formatex(szKey, charsmax( szKey ),"%s", szIP)
formatex(szData, charsmax( szData ), "%i", szPlayerMoney[id])
}
}
nvault_set(g_Vault, szKey, szData)
nvault_close(g_Vault)
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
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();
}
}
}
}
Здравствуйте, можете показать как сделать лимит денег для каждого игрока по выдачи или чтоб можно было как то прописывать, вообщем чтобы это была покупная функция на сервере, допусти у всех лимит 50к, а какой то игрок за реальные деньги увеличил его до 100к