BANNED
Join Date: Mar 2019
Location: https://t.me/pump_upp
03-16-2019
, 17:45
Hud message
#1
Hi, is this even possible?
Trying to do HUD Menu with other colors, the only problem is
hudmenu_additem . I want different colors between menu title and menu items...
Using inc:
Spoiler
Code:
#if defined _hudmenu_included
#endinput
#endif
#define _hudmenu_included
native hudmenu_create(titulo[], handler[], r, g, b, Float:x, Float:y, autopage)
native hudmenu_additem(menu, item[], num)
native hudmenu_settext(menu, item[])
native hudmenu_show(player, menu, keysmenu, page=0)
native hudmenu_destroy(menu)
Code:
Spoiler
Code:
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Hud Menu"
#define VERSION "1.0Beta"
#define AUTHOR "Destro"
#define MAX_MENUES 45
#define is_valid_menu(%1) ((0 <= %1 < MAX_MENUES) && g_hud_menu[%1][0])
const KEYSMENU = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<8)|(1<<9)
enum _:hudm_config
{
hudm_plugin,
hudm_handler,
hudm_color[3],
hudm_posicion[2]
}
enum _:hudm_smalldata
{
hudm_autopages,
hudm_destroyer
}
new g_hudm_small_data[MAX_MENUES][hudm_smalldata]
new Array:g_hud_menu[MAX_MENUES][3]
enum _:hudm_pages
{
p_current,
p_allowed_back,
p_allowed_next
}
new g_pages[33][hudm_pages]
new g_current_menu[33][2]
new g_MsgSync, g_maxplayers, null
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_menu("null_hudmenu", KEYSMENU, "menu_handler")
g_MsgSync = CreateHudSyncObj()
g_maxplayers = get_maxplayers()
set_task(0.2, "check_menu", 81263, _, _, "b")
}
public plugin_natives()
{
register_library("hudmenu")
register_native("hudmenu_create", "create_menu")
register_native("hudmenu_additem", "add_item", 1)
register_native("hudmenu_settext", "set_text", 1)
register_native("hudmenu_show", "show_hudmenu", 1)
register_native("hudmenu_destroy", "destroy_menu", 1)
}
public check_menu()
{
static menu
for(new id; id <= 32; id++)
{
if(!is_user_connected(id) || g_current_menu[id][0] == -1)
continue
player_menu_info(id, menu, null, null)
if(menu != g_current_menu[id][1])
menu_handler(id, MENU_EXIT, 0)
}
}
public client_connect(id)
g_current_menu[id] = { -1, 0 }
public create_menu(plugin, params)
{
new menu = get_menu_index()
if(menu == -1)
{
log_error(AMX_ERR_NATIVE, "Max Menu >> %d", MAX_MENUES)
return -1
}
new func_name[32], title[256], config[hudm_config], autopages = get_param(8)
g_hud_menu[menu][0] = ArrayCreate(hudm_config, 1)
g_hud_menu[menu][1] = ArrayCreate(autopages?467:512, 1)
g_hud_menu[menu][2] = ArrayCreate(1, 1)
get_string(2, func_name, charsmax(func_name))
config[hudm_plugin] = plugin
config[hudm_handler] = get_func_id(func_name, plugin)
config[hudm_color][0] = get_param(3)
config[hudm_color][1] = get_param(4)
config[hudm_color][2] = get_param(5)
config[hudm_posicion][0] = floatround((get_param_f(6)* 100))
config[hudm_posicion][1] = floatround((get_param_f(7)* 100))
if(autopages)
get_string(1, title, charsmax(title))
g_hudm_small_data[menu][hudm_autopages] = autopages
g_hudm_small_data[menu][hudm_destroyer] = false
ArrayPushArray(g_hud_menu[menu][0], config)
ArrayPushString(g_hud_menu[menu][1], title)
return menu
}
public add_item(menu, item_input[], num)
{
if(!is_valid_menu(menu)) {
log_error(AMX_ERR_NATIVE, "Invalid Menu: %d", menu)
return 0
}
if(!g_hudm_small_data[menu][hudm_autopages]) {
log_error(AMX_ERR_NATIVE, "Autopaginar esta deshabilitado.Use hudmenu_settext")
return 0
}
new config[hudm_config];
param_convert(2)
ArrayPushString(g_hud_menu[menu][1], item_input)
ArrayPushCell(g_hud_menu[menu][2], num)
return 1
}
public set_text(menu, item_input[])
{
if(!is_valid_menu(menu)) {
log_error(AMX_ERR_NATIVE, "Invalid Menu: %d", menu)
return 0
}
if(g_hudm_small_data[menu][hudm_autopages]) {
log_error(AMX_ERR_NATIVE, "Use hudmenu_additem")
return 0
}
param_convert(2)
ArraySetString(g_hud_menu[menu][1], 0, item_input)
return 1
}
public show_hudmenu(id, menu, keysmenu, page)
{
if(!is_valid_menu(menu)) {
log_error(AMX_ERR_NATIVE, "Invalid Menu: %d", menu)
return 0
}
if(id && !is_user_connected(id)) {
log_error(AMX_ERR_NATIVE, "Invalid Player: %d", id)
return 0
}
new text[512], config[hudm_config], len, pages_allowed[2]
ArrayGetArray(g_hud_menu[menu][0], 0, config)
ArrayGetString(g_hud_menu[menu][1], 0, text, charsmax(text))
len = strlen(text)
if(g_hudm_small_data[menu][hudm_autopages])
{
new init, util, show_items, items = ArraySize(g_hud_menu[menu][1])
keysmenu = 0
if(page) {
util = page*7
if(util < items) init = util
else page=0
}
util=1;init++;show_items = min(init+7, items)
len += formatex(text[len], charsmax(text)-len, " [%d/%d]^n", page+1, get_maxpages(items))
for(new i=init; i < show_items && len < 467; i++)
{
len += formatex(text[len], charsmax(text)-len, "^n%d.", util++)
ArrayGetString(g_hud_menu[menu][1], i, text[len], charsmax(text)-len)
len = strlen(text)
}
if(items > 8) {
if(page) {
keysmenu |= (1<<7)
len = add(text[len], charsmax(text)-len, "^n^n8.Back")
pages_allowed[0] = true
}
else
len = add(text[len], charsmax(text)-len, "^n^n#.Back")
if(items > init+7) {
keysmenu |= (1<<8)
len = add(text[len], charsmax(text)-len, "^n9.Next")
pages_allowed[1] = true
}
else
len = add(text[len], charsmax(text)-len, "^n#.Next")
}
add(text[len], charsmax(text)-len, "^n^n0.Exit")
keysmenu |= get_keysmenu(show_items-init)
}
show_menu(id, keysmenu, " ", -1, "null_hudmenu")
set_hudmessage(config[hudm_color][0], config[hudm_color][1], config[hudm_color][2],
config[hudm_posicion][0]/100.0, config[hudm_posicion][1]/100.0, 0, 6.0, 999.0)
ShowSyncHudMsg(id, g_MsgSync, text)
if(!id) for(new i=1; i <= g_maxplayers; i++)
{
if(!is_user_connected(i)) continue
if(g_current_menu[id][0] != -1)
menu_handler(id, MENU_EXIT, 1)
g_current_menu[i][0] = menu
g_pages[i][p_current] = page
g_pages[i][p_allowed_back] = pages_allowed[0]
g_pages[i][p_allowed_next] = pages_allowed[1]
player_menu_info(i, g_current_menu[i][1], null, null)
}
else {
if(g_current_menu[id][0] != -1)
menu_handler(id, MENU_EXIT, 1)
g_current_menu[id][0] = menu
g_pages[id][p_current] = page
g_pages[id][p_allowed_back] = pages_allowed[0]
g_pages[id][p_allowed_next] = pages_allowed[1]
player_menu_info(id, g_current_menu[id][1], null, null)
}
return 1
}
public menu_handler(id, key, hud)
{
new menu=g_current_menu[id][0]
g_current_menu[id] = { -1, 0 }
if(!hud) ClearSyncHud(id, g_MsgSync)
if(!is_valid_menu(menu))
return 1
new config[hudm_config], item_num
if(key != MENU_EXIT && g_hudm_small_data[menu][hudm_autopages])
{
if(key == 7 || key == 8) {
if(key == 7 && g_pages[id][p_allowed_back])
g_pages[id][p_current]--
else if(key == 8 && g_pages[id][p_allowed_next])
g_pages[id][p_current]++
show_hudmenu(id, menu, KEYSMENU, g_pages[id][p_current])
return 1
}
if(key == 9)
key = MENU_EXIT
else {
item_num = ArrayGetCell(g_hud_menu[menu][2], key+(7*g_pages[id][p_current]))
key++
}
}
ArrayGetArray(g_hud_menu[menu][0], 0, config)
callfunc_begin_i(config[hudm_handler], config[hudm_plugin])
callfunc_push_int(id)
callfunc_push_int(key)
callfunc_push_int(item_num)
callfunc_push_int(menu)
callfunc_end()
return 1
}
public destroy_menu(menu)
{
if(!is_valid_menu(menu)) {
log_error(AMX_ERR_NATIVE, "Invalid Menu: %d", menu)
return 0
}
if(g_hudm_small_data[menu][hudm_destroyer])
return 1
g_hudm_small_data[menu][hudm_destroyer] = true
for(new id=1; id <= g_maxplayers; id++)
{
if(!is_user_connected(id)) continue
if(g_current_menu[id][0] == menu)
menu_handler(id, MENU_EXIT, 0)
}
ArrayDestroy(g_hud_menu[menu][0])
ArrayDestroy(g_hud_menu[menu][1])
ArrayDestroy(g_hud_menu[menu][2])
g_hud_menu[menu][0] = Array:0
return 1
}
get_menu_index()
{
for(new i; i < MAX_MENUES; i++)
if(!g_hud_menu[i][0])
return i
return -1
}
get_keysmenu(items)
{
new key = (1<<9)
for(new i; i < items; i++)
key |= (1<<i)
return key
}
get_maxpages(items)
{
new p=1, i=7
while(items-1 > i) {
i+=7
p++
}
return p
}
What im trying:
Code:
#include <amxmodx>
#include <amxmisc>
#include <hudmenu>
public plugin_init()
{
register_plugin("Hud Color","0.1","Destro")
register_concmd("say menu", "test" );
}
public test(id)
{
new menu = hudmenu_create("Color red", "menu_test", 255, 0, 0, 0.03, 0.50, 1)
hudmenu_additem(menu, "Blue 0, 0, 255", 1 )
hudmenu_additem(menu, "Green 0, 255, 0", 2 )
hudmenu_show(id, menu, 0)
}
public menu_test(id, menu, item)
{
if( item == MENU_EXIT )
{
//menu_destroy(menu);
return PLUGIN_HANDLED;
}
switch(item)
{
case 1: { client_print( id, print_chat, "Test 1" ); }
case 2: { client_print( id, print_chat, "Test2 " ); }
}
//menu_destroy(menu);
return PLUGIN_HANDLED;
}
Last edited by DexterProduct; 03-16-2019 at 17:47 .