Veteran Member
|
10-02-2008
, 13:31
Re: Individual Weapon Restrictions
|
#17
|
I finally got around to doing it with hamsandwich.
It really is more elegant: your code is ~800 lines, my code is ~380 lines, and they both do the same thing. There might be slight differences in the chat messages displayed to clients.
Feel free to criticize, copy+paste, comment, etc.
Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <nvault>
#define PLUGIN "Individual Weapon Restriction"
#define VERSION "1.0"
#define AUTHOR "stupok69"
#define OFFSET_WEAPONTYPE 43
#define OFFSET_CSMONEY 115
#define NVAULT_FILE "iwr_data"
new const g_weapons[][] =
{
"empty",
"p228", //1
"empty",
"scout", //3
"hegrenade", //4
"xm1014", //5
"c4", //6
"mac10", //7
"aug", //8
"smokegrenade",//9
"elite", //10
"fiveseven", //11
"ump45", //12
"sg550", //13
"galil", //14
"famas", //15
"usp", //16
"glock18", //17
"awp", //18
"mp5navy", //19
"m249", //20
"m3", //21
"m4a1", //22
"tmp", //23
"g3sg1", //24
"flashbang", //25
"deagle", //26
"sg552", //27
"ak47", //28
"knife", //29
"p90" //30
}
new bool:g_idwid[33][31]
new g_nvaulth
new g_oldmoney[33][3]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_concmd("amx_restrictadd", "AddRestrict", ADMIN_CVAR , "- <player> <weapon> - Add weapon restriction to player.")
register_concmd("amx_restrictremove" ,"RemoveRestrict", ADMIN_CVAR, "- <player> <weapon> - Remove weapon restriction to player.")
register_concmd("amx_restrictclear" , "ClearRestrict", ADMIN_CVAR, "- <player> - Clear all weapon restrictions for player.")
register_concmd("amx_restrictshow" , "ShowRestrict", ADMIN_CVAR, "- <player> - Display a players weapon restrictions.")
register_clcmd("say /restrict" , "NotifyPlayer", ADMIN_ALL, "- Display your weapon restrictions")
register_event("Money", "event_money", "be")
new temp[32]
for(new i = 1; i < sizeof g_weapons; i++)
{
if(i == 2)
continue
formatex(temp, 31, "weapon_%s", g_weapons[i])
RegisterHam(Ham_Item_AddToPlayer, temp, "bacon_item_addtoplayer", 0)
}
g_nvaulth = nvault_open(NVAULT_FILE)
}
public plugin_end()
{
nvault_close(g_nvaulth)
}
public event_money(id)
{
// If player deserves his money back.
if(g_oldmoney[id][0])
{
g_oldmoney[id][0] = 0
fm_set_user_money(id, g_oldmoney[id][1])
}
}
public client_authorized(id)
{
for(new i = 1; i < sizeof g_weapons; i++)
{
g_idwid[id][i] = false
}
load_from_vault(id)
}
public bacon_item_addtoplayer(this, id)
{
// Player's money before the transaction.
g_oldmoney[id][1] = fm_get_user_money(id)
if(g_idwid[id][fm_get_weapon_id(this)])
{
client_print(id, print_chat, "* You have been restricted from using %s.", g_weapons[fm_get_weapon_id(this)])
client_print(id, print_chat,"* Say '/restrict' in chat to view your restrictions.")
engfunc(EngFunc_RemoveEntity, this)
// Player should get his money back.
g_oldmoney[id][0] = 1
return HAM_SUPERCEDE
}
return HAM_IGNORED
}
public AddRestrict(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new argName[32]
read_argv(1, argName, 31)
new targetid
targetid = cmd_target(id, argName)
if(!targetid)
return PLUGIN_HANDLED
new argWeap[32], weaponid
read_argv(2, argWeap, 31)
weaponid = PLUGIN_HANDLED
for(new i = 1; i < sizeof g_weapons; i++)
{
if(containi(g_weapons[i], argWeap) != -1)
{
weaponid = i
}
}
if(weaponid == -1)
return PLUGIN_HANDLED
g_idwid[targetid][weaponid] = true
new targetname[32]
get_user_name(targetid, targetname, 31)
console_print(id, "* Restricted %s for %s.", g_weapons[weaponid], targetname)
client_print(targetid, print_chat, "* You have been restricted from using %s.", g_weapons[weaponid])
client_print(targetid, print_chat,"* Say '/restrict' in chat to view your restrictions.")
save_to_vault(targetid)
return PLUGIN_HANDLED
}
public RemoveRestrict(id, level, cid)
{
if(!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED
new argName[32]
read_argv(1, argName, 31)
new targetid
targetid = cmd_target(id, argName)
if(!targetid)
return PLUGIN_HANDLED
new argWeap[32], weaponid
read_argv(2, argWeap, 31)
weaponid = PLUGIN_HANDLED
for(new i = 1; i < sizeof g_weapons; i++)
{
if(containi(g_weapons[i], argWeap) != -1)
{
weaponid = i
}
}
if(weaponid == -1)
return PLUGIN_HANDLED
g_idwid[targetid][weaponid] = false
new targetname[32]
get_user_name(targetid, targetname, 31)
console_print(id, "* %s no longer restricted for %s.", g_weapons[weaponid], targetname)
client_print(targetid, print_chat, "* You have been unrestricted from using %s.", g_weapons[weaponid])
client_print(targetid, print_chat,"* Say '/restrict' in chat to view your restrictions.")
save_to_vault(targetid)
return PLUGIN_HANDLED
}
public ClearRestrict(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new argName[32]
read_argv(1, argName, 31)
new targetid
targetid = cmd_target(id, argName)
if(!targetid)
return PLUGIN_HANDLED
for(new i = 1; i < sizeof g_weapons; i++)
{
g_idwid[targetid][i] = false
}
new targetname[32]
get_user_name(targetid, targetname, 31)
console_print(id, "* %s no longer has any restricted weapons.", targetname)
client_print(targetid, print_chat, "* You are no longer restricted from using any weapons.")
save_to_vault(targetid)
return PLUGIN_HANDLED
}
public ShowRestrict(id, level, cid)
{
if(!cmd_access(id, level, cid, 2))
return PLUGIN_HANDLED
new argName[32]
read_argv(1, argName, 31)
new targetid
targetid = cmd_target(id, argName)
if(!targetid)
return PLUGIN_HANDLED
new restricted_weapons[256]
for(new i = 1; i < sizeof g_weapons; i++)
{
if(g_idwid[targetid][i])
{
add(restricted_weapons, 255, g_weapons[i])
add(restricted_weapons, 255, ", ")
}
}
new targetname[32]
get_user_name(targetid, targetname, 31)
console_print(id, "* %s has the following weapons restricted: %s", targetname, restricted_weapons)
client_print(targetid, print_chat, "* You are restricted from using the following weapons: %s", restricted_weapons)
client_print(targetid, print_chat,"* Say '/restrict' in chat to view your restrictions.")
return PLUGIN_HANDLED
}
public NotifyPlayer(id, level, cid)
{
new restricted_weapons[256]
for(new i = 1; i < sizeof g_weapons; i++)
{
if(g_idwid[id][i])
{
add(restricted_weapons, 255, g_weapons[i])
add(restricted_weapons, 255, ", ")
}
}
client_print(id, print_chat, "* You are restricted from using the following weapons: %s", restricted_weapons)
return PLUGIN_HANDLED
}
public save_to_vault(id)
{
if(!is_user_connected(id))
return PLUGIN_HANDLED
new key[32]
get_user_authid(id, key, 31)
new value[64], buffer[8]
for(new i = 1; i < sizeof g_weapons; i++)
{
if(g_idwid[id][i])
{
num_to_str(i, buffer, 7)
add(value, 255, buffer)
add(value, 255, ", ")
}
}
nvault_set(g_nvaulth, key, value)
return PLUGIN_HANDLED
}
public load_from_vault(id)
{
new key[32]
get_user_authid(id, key, 31)
new value[64], buffer[64]
if(!nvault_get(g_nvaulth, key, value, 63))
{
return PLUGIN_HANDLED
}
buffer = value
for(new i = 1; i < sizeof g_weapons; i++)
{
split(value, buffer, 63, value, 63, ",")
if(!buffer[1])
break
g_idwid[id][str_to_num(buffer)] = true
}
return PLUGIN_HANDLED
}
stock fm_get_weapon_id(index)
{
return get_pdata_int(index, OFFSET_WEAPONTYPE, is_linux_server() ? 4 : 0)
}
stock fm_get_user_money(index)
{
return get_pdata_int(index, OFFSET_CSMONEY)
}
stock fm_set_user_money(index, money, flash = 0)
{
set_pdata_int(index, OFFSET_CSMONEY, money)
message_begin(MSG_ONE, get_user_msgid("Money"), {0,0,0}, index)
write_long(money)
write_byte(flash ? 1 : 0)
message_end()
}
Last edited by stupok; 10-02-2008 at 16:41.
|
|