04-14-2021, 12:27 PM
Hey guys, I tried to add the unlock list but it didn't work for me
If one of you can help
I would be very grateful to him.
If one of you can help
I would be very grateful to him.
PHP Code:
#include <amxmodx>
#include <engine>
#include <amxmisc>
#include <fakemeta>
#include <fun>
#include <cstrike>
#include <nvault>
#include <gunxpmod>
#include <hamsandwich>
#define PLUGIN "Gun Xp Mod Shop"
#define AUTHOR "Scr"
#define VERSION "1.4"
#define TASK_SHOW_UPGRADES 10113
#define MAX_UNLOCKS 30
#define MAX_UNLOCKS_NAME_SIZE 64
#define MAX_UNLOCKS_DESC_SIZE 128
new g_menuPosition[33], gSelected[33];
enum _:iUnlocks
{
UL_Knife,
UL_Pistol,
UL_Rifle,
UL_Grenade,
UL_Item
};
//all
new g_numberofitems[iUnlocks];
new g_itemindex[iUnlocks][MAX_UNLOCKS+1];
new g_itemcost[iUnlocks][MAX_UNLOCKS+1];
new g_itemlevel[iUnlocks][MAX_UNLOCKS+1];
new g_itemaccess[iUnlocks][MAX_UNLOCKS+1];
new g_itemname[iUnlocks][MAX_UNLOCKS+1][MAX_UNLOCKS_NAME_SIZE+1];
new g_itemdesc[iUnlocks][MAX_UNLOCKS+1][MAX_UNLOCKS_DESC_SIZE+1];
new g_itemwpn[iUnlocks][MAX_UNLOCKS+1];
new bool:g_PlayerItem[33][iUnlocks][MAX_UNLOCKS+1];
new Enabled, show_unlocks_text, g_msgHudSync1;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("gunxpmod.txt");
register_clcmd("say /unlocks", "menus")
register_clcmd("say unlocks", "menus")
register_clcmd("say /ul", "menus")
register_clcmd("say ul", "menus")
Enabled = register_cvar( "hud_enable", "1" ); // Plugin enabled? 1 = Yes, 0 = No.
show_unlocks_text = register_cvar("gxm_unlocks_text","0"); // Show your level by : 1 = HUD message, 0 = Simple colored text message.
register_menucmd(register_menuid("Unlocks Shop"), 1023, "action_item_upgrades");
g_msgHudSync1 = CreateHudSyncObj()
}
public client_connect(id)
{
static i, j
for(i = 0; i < iUnlocks; ++i)
for(j = 0; j <= MAX_UNLOCKS; ++j)
g_PlayerItem[id][i][j] = false;
}
public client_disconnected(id)
{
remove_task( TASK_SHOW_UPGRADES + id );
}
public showhud(id, task, key, pos, selection)
{
if(!is_user_alive(id) || !get_pcvar_num(show_unlocks_text) || !get_pcvar_num(Enabled) )
return;
new id = task - TASK_SHOW_UPGRADES
new plugin_id = g_itemindex[gSelected[id]][g_menuPosition[id] * 8 + key]
new item_id = g_menuPosition[id] * 8 + key
new func = get_func_id("gxm_item_enabled", plugin_id)
new cost = g_itemcost[gSelected[id]][item_id] = true;
new item = g_PlayerItem[id][gSelected[id]][item_id] = true;
gSelected[id] = selection;
action_item_upgrades(id, key)
display_item_upgrades(id, pos, selection)
set_hudmessage(0, 255, 255, 0.00, 0.12, 0, 0.0, 0.3, 0.0, 0.0)
ShowSyncHudMsg(id, g_msgHudSync1, "%L", LANG_SERVER, "LEVEL_HUD_TEXT", g_itemname[gSelected[id]][item_id], cost, item, plugin_id, item_id, func)
set_task(0.1, "task_show_upgrades", TASK_SHOW_UPGRADES + id)
}
public menus(id)
{
new menu = menu_create("[\rGunXP] \yUnlocks", "upgrades_menu");
new call = menu_makecallback("Call_Back");
gSelected[id] = 0;
new szMsg[256];
format(szMsg, 255, "Knifes", (GetItemCount(g_PlayerItem[id][UL_Knife], g_numberofitems[UL_Knife]) == g_numberofitems[UL_Knife]) ? "\r" : "\y", GetItemCount(g_PlayerItem[id][UL_Knife], g_numberofitems[UL_Knife]), g_numberofitems[UL_Knife]);
menu_additem(menu, szMsg, _, _, g_numberofitems[UL_Knife] ? -1 : call);
format(szMsg, 255, "Pistols", (GetItemCount(g_PlayerItem[id][UL_Pistol], g_numberofitems[UL_Pistol]) == g_numberofitems[UL_Pistol]) ? "\r" : "\y", GetItemCount(g_PlayerItem[id][UL_Pistol], g_numberofitems[UL_Pistol]), g_numberofitems[UL_Pistol]);
menu_additem(menu, szMsg, _, _, g_numberofitems[UL_Pistol] ? -1 : call);
format(szMsg, 255, "Rifles", (GetItemCount(g_PlayerItem[id][UL_Rifle], g_numberofitems[UL_Rifle]) == g_numberofitems[UL_Rifle]) ? "\r" : "\y", GetItemCount(g_PlayerItem[id][UL_Rifle], g_numberofitems[UL_Rifle]), g_numberofitems[UL_Rifle]);
menu_additem(menu, szMsg, _, _, g_numberofitems[UL_Rifle] ? -1 : call);
format(szMsg, 255, "Granades", (GetItemCount(g_PlayerItem[id][UL_Grenade], g_numberofitems[UL_Grenade]) == g_numberofitems[UL_Grenade]) ? "\r" : "\y", GetItemCount(g_PlayerItem[id][UL_Grenade], g_numberofitems[UL_Grenade]), g_numberofitems[UL_Grenade]);
menu_additem(menu, szMsg, _, _, g_numberofitems[UL_Grenade] ? -1 : call);
format(szMsg, 255, "Items", (GetItemCount(g_PlayerItem[id][UL_Item], g_numberofitems[UL_Item]) == g_numberofitems[UL_Item]) ? "\r" : "\y", GetItemCount(g_PlayerItem[id][UL_Item], g_numberofitems[UL_Item]), g_numberofitems[UL_Item]);
menu_additem(menu, szMsg, _, _, g_numberofitems[UL_Item] ? -1 : call);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
return PLUGIN_HANDLED;
}
public Call_Back(id, menu, item)
return ITEM_DISABLED;
public upgrades_menu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
gSelected[id] = item;
g_menuPosition[id] = 0;
display_item_upgrades(id, 0, item);
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public plugin_natives()
{
register_native("register_gxm_item", "register_unlock")
register_native("register_item_gxm", "register_unlock")
}
public register_unlock(plugin, params)
{
static item_section
item_section = get_param(5)-1
g_numberofitems[item_section]++;
g_itemindex[item_section][g_numberofitems[item_section]] = plugin;
get_string(1, g_itemname[item_section][g_numberofitems[item_section]], MAX_UNLOCKS_NAME_SIZE)
get_string(2, g_itemdesc[item_section][g_numberofitems[item_section]], MAX_UNLOCKS_DESC_SIZE)
g_itemcost[item_section][g_numberofitems[item_section]] = get_param(3);
g_itemlevel[item_section][g_numberofitems[item_section]] = get_param(4);
g_itemaccess[item_section][g_numberofitems[item_section]] = get_param(6) ? get_param(6) : 0;
g_itemwpn[item_section][g_numberofitems[item_section]] = get_param(7);
}
//ALL
public display_item_upgrades(id, pos, selection)
{
if(!is_user_alive(id))
return;
static menuBody[510], len;
len = 0;
gSelected[id] = selection;
if(pos < 0)
return;
new start = pos * 8
if(start >= g_numberofitems[selection])
start = pos = g_menuPosition[id];
len += formatex(menuBody[len], sizeof menuBody - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_SHOP", get_user_xp(id), get_user_max_level(id))
new end = start + 8
new keys = MENU_KEY_0
if(end > g_numberofitems[selection])
end = g_numberofitems[selection];
new b = 0
for(new a = start; a < end; ++a)
{
new i = a + 1
new money, level
money = get_user_xp(id)
level = get_user_level(id)
if( g_PlayerItem[id][selection][i] )
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP_BOUGHT", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i])
else if(g_itemaccess[selection][i] == GUN_FIRST_ACCESS_ID && !(get_user_flags(id) & GUN_FIRST_ACCESS))
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP_ACCESS1", ++b, g_itemname[selection][i], GUN_FIRST_ACCESS_TEXT);
else if(g_itemaccess[selection][i] == GUN_SECOND_ACCESS_ID && !(get_user_flags(id) & GUN_SECOND_ACCESS))
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP_ACCESS2", ++b, g_itemname[selection][i], GUN_SECOND_ACCESS_TEXT);
else if(g_itemaccess[selection][i] == GUN_THIRD_ACCESS_ID && !(get_user_flags(id) & GUN_THIRD_ACCESS))
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP_ACCESS3", ++b, g_itemname[selection][i], GUN_THIRD_ACCESS_TEXT);
else if(level < g_itemlevel[selection][i])
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP_LEVEL", ++b, g_itemname[selection][i], g_itemlevel[selection][i], g_itemcost[selection][i])
else if(PatrArTuri(id, g_itemwpn[selection][i]))
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_NO_MORE", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i])
else if( money < g_itemcost[selection][i] )
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "INACTIVE_MENU_SHOP", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i])
else
{
keys |= (1<<b)
switch(g_itemaccess[selection][i])
{
case GUN_FIRST_ACCESS_ID:
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "ACTIVE_MENU_SHOP2", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i], GUN_FIRST_ACCESS_TEXT)
case GUN_SECOND_ACCESS_ID:
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "ACTIVE_MENU_SHOP2", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i], GUN_SECOND_ACCESS_TEXT)
case GUN_THIRD_ACCESS_ID:
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "ACTIVE_MENU_SHOP2", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i], GUN_THIRD_ACCESS_TEXT)
default:
len += formatex(menuBody[len], sizeof menuBody - 1 - len,"%L", id, "ACTIVE_MENU_SHOP", ++b, g_itemname[selection][i], g_itemcost[selection][i], g_itemlevel[selection][i])
}
}
}
if(end != g_numberofitems[selection])
{
len += formatex(menuBody[len], sizeof menuBody - 1 - len, "^n\r9. \w%L\r^n0. \w%L", id, "NEXT_MENU", id, pos ? "BACK_MENU" : "EXIT_MENU")
keys |= MENU_KEY_9
}
else
{
len += formatex(menuBody[len], sizeof menuBody - 1 - len, "^n\r0. \w%L", id, pos ? "BACK_MENU" : "EXIT_MENU")
}
show_menu(id, keys, menuBody, -1, "Unlocks Shop")
}
public action_item_upgrades(id, key)
{
switch(key)
{
case 8: display_item_upgrades(id, ++g_menuPosition[id], gSelected[id]);
case 9: display_item_upgrades(id, --g_menuPosition[id], gSelected[id]);
default:
{
if(!is_user_alive(id))
return PLUGIN_HANDLED;
++key
new money
new plugin_id = g_itemindex[gSelected[id]][g_menuPosition[id] * 8 + key]
new item_id = g_menuPosition[id] * 8 + key
new func = get_func_id("gxm_item_enabled", plugin_id)
money = get_user_xp(id)
new cost = g_itemcost[gSelected[id]][item_id];
if(money >= cost)
{
callfunc_begin_i(func, plugin_id)
callfunc_push_int(id)
callfunc_end()
g_PlayerItem[id][gSelected[id]][item_id] = true
new overall = money - cost
set_user_xp(id, overall)
client_printcolor(1, "/yItem Bought, Item: /g%s.", g_itemname[gSelected[id]][item_id])
client_printcolor(1, "/yDescripcion: /g%s.", g_itemdesc[gSelected[id]][item_id])
display_item_upgrades(id, g_menuPosition[id], gSelected[id]);
}
}
}
return PLUGIN_HANDLED;
}
stock client_printcolor( const id, const input[], any:... )
{
new iCount = 1, iPlayers[32]
new sNewMsg[191]
vformat( sNewMsg, charsmax ( sNewMsg ), input, 3 )
//format ( sNewMsg, charsmax ( sNewMsg ), "^4[x^1 %s", sNewMsg )
replace_all ( sNewMsg, charsmax ( sNewMsg ), "/g", "^4") // green txt
replace_all ( sNewMsg, charsmax ( sNewMsg ), "/y", "^1") // orange txt
replace_all ( sNewMsg, charsmax ( sNewMsg ), "/t", "^3") // team txt
if ( id )
iPlayers[0] = id
else
get_players ( iPlayers, iCount, "ch" )
for ( new i; i < iCount; i++ )
{
if ( is_user_connected ( iPlayers[i] ) )
{
message_begin ( MSG_ONE_UNRELIABLE, get_user_msgid ( "SayText" ), _, iPlayers[i] )
write_byte ( iPlayers[i])
write_string ( sNewMsg)
message_end ()
}
}
}
stock bool:PatrArTuri(id, wpn)
{
static i, j
for(i = 0; i < iUnlocks; ++i)
{
for(j = 0; j <= MAX_UNLOCKS; ++j)
{
if(g_PlayerItem[id][i][j])
{
if(g_itemwpn[i][j] == wpn)
return true
}
}
}
return false
}
GetItemCount(array[], size)
{
new count = 0;
for(new i = 1; i <= size; i++)
if(array[i])
count++;
return count;
}