I don't know where's the error ...
PHP Code:
/* ZP Dev Team & AlferD Point System Version 1.0 */
/* | */
/* Thanks for ZP Dev Team */
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <cromchat>
#include <nvault>
#include <hamsandwich>
#include <fakemeta>
#include <ad_points>
#define UPDATE_HUD 1.0
#define KILL_POINTS 3
#define PLUGIN "Points System"
#define VERSION "1.0"
#define AUTHOR "AlferD&ZP Dev Team"
#define POINTS ADMIN_IMMUNITY
#define SHOW_MENU ADMIN_KICK
#define ADP_INVALID_ITEM -1
#define ADP_ITEM_AVAILABLE 0
#define ADP_ITEM_NOT_AVAILABLE 1
#define ADP_ITEM_DONT_SHOW 2
#define ADP_PLUGIN_HANDLED 97
#define LIBRARY_ITEMS "adp_items"
#define MENU_PAGE_ITEMS g_menu_data[id]
#define MAX_PLAYERS 32
new const ITEM_FILE[] = "adp_items.ini"
new g_menu_data[MAX_PLAYERS+1]
enum _:TOTAL_FORWARDS
{
FW_ITEM_SELECT_PRE = 0,
FW_ITEM_SELECT_POST,
FW_EXTRA_ITEM_SELECTED
}
new g_Forwards[TOTAL_FORWARDS]
new g_ForwardResult
new Array:g_ItemRealName
new Array:g_ItemName
new Array:g_ItemPoint
new Array:g_ItemID
new g_ItemCount
new g_AdditionalMenuText[32]
const OFFSET_CSMENUCODE = 205
const MAX_NAME = 32
new g_Point[64], g_VaultKey[64],g_VaultData[256], szAuth[64], szPlayerPoint[64], szPlayerName[64], szAdminName[64], szPlayerAuth[32], szAdminAuth[32], szTime[32], szLog[128], gidPlayer[33];
new g_nVault, gHudSync
new const szLogFile[ ] = "addons/amxmodx/configs/AD-Points/Points_log-%s.log"
new const szLogFile_Donate[ ] = "addons/amxmodx/configs/AD-Points/Donate_log-%s.log"
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("amx_give_points", "GivePoint", POINT, "<nick> <value>");
register_clcmd("amx_take_points", "TakePoint", POINT, "<nick> <value>");
register_clcmd("donate_points", "DonatePoint", 0, "<nick> <value>");
register_clcmd("say /donatepoints", "DonatePoint_Menu");
register_clcmd("say /donatep", "DonatePoint_Menu");
register_clcmd("say /dpm", "DonatePoint_Menu");
register_clcmd("_playerpoint", "PlayerPoint");
register_clcmd("say /showpoints", "ShowPoints", SHOW_MENU);
register_clcmd("say /sp", "ShowPoints", SHOW_MENU);
register_clcmd("say /items", "Shop_Item");
register_clcmd("say /ps", "Shop_Item");
register_clcmd("say /pshop", "Shop_Item");
mkdir("addons/amxmodx/configs/AD-Point");
register_event("DeathMsg", "Kill", "a");
g_nVault = nvault_open("AD_Point");
set_task(UPDATE_HUD, "UpdatePoint", _, _, _, "b");
gHudSync = CreateHudSyncObj();
CC_SetPrefix("&x07[&x04AD-Point&x07]");
g_Forwards[FW_EXTRA_ITEM_SELECTED] = CreateMultiForward("adp_extra_item_selected", ET_CONTINUE, FP_CELL, FP_CELL);
g_Forwards[FW_ITEM_SELECT_PRE] = CreateMultiForward("adp_fw_items_select_pre", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL);
g_Forwards[FW_ITEM_SELECT_POST] = CreateMultiForward("adp_fw_items_select_post", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL);
}
public plugin_natives()
{
register_library("adp_items"); // ZP Dev Team
register_native("ad_get_user_points", "native_get_user_points", 1);
register_native("ad_set_user_points", "native_set_user_points", 1);
register_native("adp_items_register", "native_items_register"); // ZP Dev Team
register_native("adp_items_get_id", "native_items_get_id"); // ZP Dev Team
register_native("adp_items_get_name", "native_items_get_name"); // ZP Dev Team
register_native("adp_items_get_real_name", "native_items_get_real_name"); // ZP Dev Team
register_native("adp_items_get_point", "native_items_get_point"); // ZP Dev Team
register_native("adp_items_show_menu", "native_items_show_menu"); // ZP Dev Team
register_native("adp_items_force_buy", "native_items_force_buy"); // ZP Dev Team
register_native("adp_items_menu_text_add", "native_items_menu_text_add"); // ZP Dev Team
register_native("adp_register_extra_item", "native_register_extra_item"); // ZP Dev Team
g_ItemRealName = ArrayCreate(32, 1); // ZP Dev Team
g_ItemName = ArrayCreate(32, 1); // ZP Dev Team
g_ItemPoint = ArrayCreate(1, 1); // ZP Dev Team
}
public client_putinserver(id)
{
g_Point[id] = 0
LoadPoint(id)
}
public Kill()
{
new attacker = read_data( 1 )
new victim = read_data( 2 )
if( cs_get_user_team( attacker ) != cs_get_user_team( victim ) )
{
g_Point[ attacker ] += KILL_POINT
}
return PLUGIN_HANDLED;
}
public ShowPoints(id)
{
new iPlayers[32], iPnum
get_players(iPlayers, iPnum, "a")
new iMenu = menu_create("Show Player Points", "Handled_Menu")
for(new szItem[128], zName[MAX_NAME], iPlayer, i; i < iPnum; i++)
{
iPlayer = iPlayers[i]
get_user_name(iPlayer, zName, charsmax(zName))
formatex(szItem, charsmax(szItem), "%s [ %d Points ]", zName, g_Point[iPlayer])
menu_additem(iMenu, szItem)
}
menu_display(id, iMenu)
return PLUGIN_HANDLED
}
public Handled_Menu(id, wMenu, item)
{
menu_destroy(wMenu)
return PLUGIN_HANDLED
}
public DonatePoint_Menu(id)
{
new Item[512]
new szItem[128]
formatex(Item, charsmax(Item), "\rDonate \yPoints \wMenu^nYour Points: \r%d\y^n", g_Point[id])
new wMenu = menu_create(Item, "Handled_Menu_Donate")
new Pos[3]
new iPlayers[MAX_PLAYERS], iPnum
get_players(iPlayers, iPnum);
for (new szName[MAX_NAME_LENGTH], iPlayer, i; i < iPnum; i++)
{
iPlayer = iPlayers[i]
num_to_str(iPlayer, Pos, charsmax(Pos))
get_user_name(iPlayer, szName, charsmax(szName))
formatex(szItem, charsmax(szItem), "\w%s \r[ \y%d Points \r]", szName, g_Point[iPlayer])
menu_additem(wMenu, szItem, Pos)
}
menu_setprop(wMenu, MPROP_EXIT, szItem)
menu_display(id, wMenu, 0)
}
public Handled_Menu_Donate(id, wMenu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(wMenu)
return PLUGIN_HANDLED
}
new Data[6], Name[64]
new Access, Callback
menu_item_getinfo(wMenu, item, Access, Data, sizeof(Data)-1, Name, sizeof(Name)-1, Callback)
new key = str_to_num(Data)
gidPlayer[key] = id
client_cmd(id, "messagemode _playerpoint")
menu_destroy(wMenu)
return PLUGIN_HANDLED
}
public DonatePoint(id)
{
new arg[32], arg2[32]
read_argv(1,arg,32)
read_argv(2,arg2,31)
new name = cmd_target(id,arg,2)
if(!name) return PLUGIN_HANDLED
new value = str_to_num(arg2)
get_user_name(name, szPlayerName, charsmax(szPlayerName))
get_user_name(id, szAdminName, charsmax(szAdminName))
get_user_authid(name, szPlayerAuth, charsmax(szPlayerName))
get_user_authid(id, szAdminAuth, charsmax(szAdminName))
get_time("%Y%d%m", szTime, charsmax(szTime))
formatex(szLog, charsmax(szLog), szLogFile_Donate, szTime)
if(g_Point[id] >= 0)
{
g_Point[id] -= value
g_Point[name] += value
log_to_file(szLog, "Donate Points: Name: [ %s ] | SteamID: [ %s ] |Donate| Name: [ %s ] SteamID: [ %s ] %i Points", szAdminName, szAdminAuth, szPlayerName, szPlayerAuth, value)
CC_SendMessage(id, " &x04You Give &x01%s &x05%i &x04Points", szPlayerName, value)
CC_SendMessage(name, " &x04%s &x05Give You &x04%i &x01Points", szAdminName, value, szPlayerName)
}
else
{
CC_SendMessage(id, " &x04You Have No Points")
}
return PLUGIN_HANDLED;
}
public GivePoint(id,level,cid)
{
if(!cmd_access(id,level,cid,3))
return PLUGIN_HANDLED;
new arg[32], arg2[32]
read_argv(1,arg,32)
read_argv(2,arg2,31)
new name = cmd_target(id,arg,2)
if(!name) return PLUGIN_HANDLED
new value = str_to_num(arg2)
g_Point[name] += value
get_user_name(name, szPlayerName, charsmax(szPlayerName))
get_user_name(id, szAdminName, charsmax(szAdminName))
get_user_authid(name, szPlayerAuth, charsmax(szPlayerName))
get_user_authid(id, szAdminAuth, charsmax(szAdminName))
get_time("%Y%d%m", szTime, charsmax(szTime))
formatex(szLog, charsmax(szLog), szLogFile, szTime);
log_to_file(szLog, "Give Points: Name: [ %s ] | SteamID: [ %s ] |Give| Name: [ %s ] SteamID: [ %s ] %i Points", szAdminName, szAdminAuth, szPlayerName, szPlayerAuth, value)
CC_SendMessage(0, "ADMIN %s Give %i Points a %s", szAdminName, value, szPlayerName)
return PLUGIN_HANDLED;
}
public TakePoint(id,level,cid)
{
if(!cmd_access(id,level,cid,3))
return PLUGIN_HANDLED;
new arg[32], arg2[32]
read_argv(1,arg,32)
read_argv(2,arg2,31)
new name = cmd_target(id,arg,2)
if(!name) return PLUGIN_HANDLED
new value = str_to_num(arg2)
g_Point[name] -= value
get_user_name(name, szPlayerName, charsmax(szPlayerName))
get_user_name(id, szAdminName, charsmax(szAdminName))
get_user_authid(name, szPlayerAuth, charsmax(szPlayerName))
get_user_authid(id, szAdminAuth, charsmax(szAdminName))
get_time("%Y%d%m", szTime, charsmax(szTime))
formatex(szLog, charsmax(szLog), szLogFile, szTime);
log_to_file(szLog, "Take Points: Name: [ %s ] | SteamID: [ %s ] |Take| Name: [ %s ] SteamID: [ %s ] %i Points", szAdminName, szAdminAuth, szPlayerName, szPlayerAuth, value)
CC_SendMessage(0, "ADMIN %s Take %i Points a %s", szAdminName, value, szPlayerName)
return PLUGIN_HANDLED
}
public SavePoint(id)
{
new szAuth[32]
get_user_authid(id, szAuth, charsmax(szAuth))
format(g_VaultKey, charsmax(g_VaultKey), "%s", szAuth)
format(g_VaultData,charsmax(g_VaultData),"%i#",g_Point[id])
nvault_set(g_nVault, g_VaultKey, g_VaultData)
}
public LoadPoint(id)
{
get_user_authid(id, szAuth, charsmax(szAuth))
format(g_VaultKey, charsmax(g_VaultKey),"%s", szAuth)
format(g_VaultData, charsmax(g_VaultData),"%i#", g_Point[id])
nvault_get(g_nVault, g_VaultKey, g_VaultData,charsmax(g_VaultData))
replace_all(g_VaultData, charsmax(g_VaultData), "#", " ")
parse(g_VaultData, szPlayerPoint, charsmax(szPlayerPoint))
g_Point[id] = str_to_num(szPlayerPoint)
}
public UpdatePoint(id)
{
new iPlayers[ 32 ], iNum, id;
get_players( iPlayers, iNum );
for( new i; i < iNum; i++ )
{
id = iPlayers[ i ]
if (is_user_alive( id ) )
{
set_hudmessage( 209, 167, 0, 0.42, 0.0, 0, 6.0, UPDATE_HUD + 0.1 );
ShowSyncHudMsg( id, gHudSync, "Your Points: %d", g_Point[id] );
SavePoint(id);
}
}
return PLUGIN_HANDLED;
}
public PlayerPoint(id)
{
new say[300]
read_args(say, charsmax(say))
remove_quotes(say)
if(!is_str_num(say) || equal(say, ""))
return PLUGIN_HANDLED
PointPlayer(id, say)
return PLUGIN_CONTINUE
}
public PointPlayer(id, say[])
{
new value = str_to_num(say)
new name = gidPlayer[id]
get_time("%Y%d%m", szTime, charsmax(szTime))
formatex(szLog, charsmax(szLog), szLogFile_Donate, szTime)
if( name > 0 )
{
new name1[32], name2[32]
new auth1[32], auth2[32]
get_user_name(id, name1, charsmax(name1))
get_user_name(name, name2, 31)
get_user_authid(id, auth1, charsmax(auth1))
get_user_authid(name, auth2, charsmax(auth2))
if(g_Point[id] >= 1)
{
g_Point[id] -= value
g_Point[name] += value
CC_SendMessage(id, " &x04You Give &x01%s &x05%i &x04Points", name2, value)
CC_SendMessage(name, " &x04%s &x05Give You &x04%i &x01Points", name1, value)
log_to_file(szLog, "Donate Points: Name: [ %s ] | SteamID: [ %s ] |Donate| Name: [ %s ] SteamID: [ %s ] %i Points", name1, auth1, name2, auth2, value)
}
else {
CC_SendMessage(id, " &x04You Dont Have Enough Points")
client_cmd(id, "messagemode _playerpoint")
}
}
else
{
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public native_get_user_points(id)
{
return g_Point[id]
}
public native_set_user_points(id, PointNum)
{
g_Point[id] = PointNum
}
public adp_fw_items_select_post(id, itemid)
{
ExecuteForward(g_Forwards[FW_EXTRA_ITEM_SELECTED], g_ForwardResult, id, itemid)
if (g_ForwardResult >= ADP_PLUGIN_HANDLED)
{
new item_point = adp_items_get_point(itemid)
g_Point[id] += item_point
}
}
public native_register_extra_item(plugin_id, num_params)
{
new name[32]
get_string(1, name, charsmax(name))
new point = get_param(2)
new itemid = adp_items_register(name, point)
if (itemid < 0) return itemid;
ArrayPushCell(g_ItemID, itemid)
return itemid;
}
public native_items_register(plugin_id, num_params)
{
new name[32], point = get_param(2)
get_string(1, name, charsmax(name))
if (strlen(name) < 1)
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Can't register item with an empty name")
return ADP_INVALID_ITEM;
}
new index, item_name[32]
for (index = 0; index < g_ItemCount; index++)
{
ArrayGetString(g_ItemRealName, index, item_name, charsmax(item_name))
if (equali(name, item_name))
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Item already registered (%s)", name)
return ADP_INVALID_ITEM;
}
}
new real_name[32]
copy(real_name, charsmax(real_name), name)
ArrayPushString(g_ItemRealName, real_name)
if (!amx_load_setting_string(ITEM_FILE, real_name, "NAME", name, charsmax(name)))
amx_save_setting_string(ITEM_FILE, real_name, "NAME", name)
ArrayPushString(g_ItemName, name)
if (!amx_load_setting_int(ITEM_FILE, real_name, "POINTS", point))
amx_save_setting_int(ITEM_FILE, real_name, "POINTS", point)
ArrayPushCell(g_ItemPoint, point)
g_ItemCount++
return g_ItemCount - 1;
}
public native_items_get_id(plugin_id, num_params)
{
new real_name[32]
get_string(1, real_name, charsmax(real_name))
new index, item_name[32]
for (index = 0; index < g_ItemCount; index++)
{
ArrayGetString(g_ItemRealName, index, item_name, charsmax(item_name))
if (equali(real_name, item_name))
return index;
}
return ADP_INVALID_ITEM;
}
public native_items_get_name(plugin_id, num_params)
{
new item_id = get_param(1)
if (item_id < 0 || item_id >= g_ItemCount)
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid item id (%d)", item_id)
return false;
}
new name[32]
ArrayGetString(g_ItemName, item_id, name, charsmax(name))
new len = get_param(3)
set_string(2, name, len)
return true;
}
public native_items_get_real_name(plugin_id, num_params)
{
new item_id = get_param(1)
if (item_id < 0 || item_id >= g_ItemCount)
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid item id (%d)", item_id)
return false;
}
new real_name[32]
ArrayGetString(g_ItemRealName, item_id, real_name, charsmax(real_name))
new len = get_param(3)
set_string(2, real_name, len)
return true;
}
public native_items_get_point(plugin_id, num_params)
{
new item_id = get_param(1)
if (item_id < 0 || item_id >= g_ItemCount)
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid item id (%d)", item_id)
return -1;
}
return ArrayGetCell(g_ItemPoint, item_id);
}
public native_items_show_menu(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid Player (%d)", id)
return false;
}
Shop_Item(id)
return true;
}
public native_items_force_buy(plugin_id, num_params)
{
new id = get_param(1)
if (!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid Player (%d)", id)
return false;
}
new item_id = get_param(2)
if (item_id < 0 || item_id >= g_ItemCount)
{
log_error(AMX_ERR_NATIVE, "[AD-Points] Invalid item id (%d)", item_id)
return false;
}
new ignorepoint = get_param(3)
buy_item(id, item_id, ignorepoint)
return true;
}
public native_items_menu_text_add(plugin_id, num_params)
{
static text[32]
get_string(1, text, charsmax(text))
format(g_AdditionalMenuText, charsmax(g_AdditionalMenuText), "%s%s", g_AdditionalMenuText, text)
}
#if AMXX_VERSION_NUM < 190
public client_disconnect(id)
#else
public client_disconnected(id)
#endif
{
MENU_PAGE_ITEMS = 0
}
public Shop_Item(id)
{
if (!is_user_alive(id))
return;
show_items_menu(id)
}
show_items_menu(id)
{
static menu[128], name[32], point, transkey[64]
new menuid, index, itemdata[2]
menuid = menu_create("\rADP \yItem \dMenu", "menu_itemss")
for (index = 0; index < g_ItemCount; index++)
{
g_AdditionalMenuText[0] = 0
ExecuteForward(g_Forwards[FW_ITEM_SELECT_PRE], g_ForwardResult, id, index, 0)
if (g_ForwardResult >= ADP_ITEM_DONT_SHOW)
continue;
ArrayGetString(g_ItemName, index, name, charsmax(name))
point = ArrayGetCell(g_ItemPoint, index)
formatex(transkey, charsmax(transkey), "ITEMNAME %s", name)
if (GetLangTransKey(transkey) != TransKey_Bad) formatex(name, charsmax(name), "%L", id, transkey)
if (g_ForwardResult >= ADP_ITEM_NOT_AVAILABLE)
formatex(menu, charsmax(menu), "\d%s %d %s", name, point, g_AdditionalMenuText)
else
formatex(menu, charsmax(menu), "%s \y%d \w%s", name, point, g_AdditionalMenuText)
itemdata[0] = index
itemdata[1] = 0
menu_additem(menuid, menu, itemdata)
}
if (menu_items(menuid) <= 0)
{
CC_SendMessage(id, " &x04No Item.")
menu_destroy(menuid)
return;
}
formatex(menu, charsmax(menu), "\yBack")
menu_setprop(menuid, MPROP_BACKNAME, menu)
formatex(menu, charsmax(menu), "\yNext")
menu_setprop(menuid, MPROP_NEXTNAME, menu)
formatex(menu, charsmax(menu), "\rExit")
menu_setprop(menuid, MPROP_EXITNAME, menu)
MENU_PAGE_ITEMS = min(MENU_PAGE_ITEMS, menu_pages(menuid)-1)
set_pdata_int(id, OFFSET_CSMENUCODE, 0)
menu_display(id, menuid, MENU_PAGE_ITEMS)
}
public menu_itemss(id, menuid, item)
{
if (item == MENU_EXIT)
{
MENU_PAGE_ITEMS = 0
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
MENU_PAGE_ITEMS = item / 7
if (!is_user_alive(id))
{
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
new itemdata[2], dummy, itemid
menu_item_getinfo(menuid, item, dummy, itemdata, charsmax(itemdata), _, _, dummy)
itemid = itemdata[0]
buy_item(id, itemid)
menu_destroy(menuid)
return PLUGIN_HANDLED;
}
buy_item(id, itemid, ignorepoint = 0)
{
ExecuteForward(g_Forwards[FW_ITEM_SELECT_PRE], g_ForwardResult, id, itemid, ignorepoint)
if (g_ForwardResult >= ADP_ITEM_NOT_AVAILABLE)
return;
ExecuteForward(g_Forwards[FW_ITEM_SELECT_POST], g_ForwardResult, id, itemid, ignorepoint)
}