Raised This Month: $ Target: $400
 0% 

Solved natives usage (not sure about title)


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
kww
Senior Member
Join Date: Feb 2021
Location: Russia
Old 06-08-2021 , 04:21   Re: natives usage (not sure about title)
Reply With Quote #7

ok here it is:
PHP Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>

#define PLUGIN_NAME "plugin name okay"

// Game vars
new g_arrays_created // to prevent stuff from being registered before initializing arrays

// Extra Items vars
new Array:ItemName
new Array:ItemCost
new g_extraitems_count // loaded extra items counter

// Some forward handlers
new g_extraItemSelectedg_result

public plugin_init() {
    
register_plugin(PLUGIN_NAME"stolen from ZP by MeRcyLeZZ""kww")
    
    
register_clcmd("menu""menu_main"ADMIN_ALL_)
    
register_clcmd("say /menu""menu_main"ADMIN_ALL_)
    
register_clcmd("say_team /menu""menu_main"ADMIN_ALL_)
    
    
g_extraItemSelected CreateMultiForward("item_selected"ET_CONTINUEFP_CELLFP_CELL)
}

public 
plugin_precache() {    
    
ItemName ArrayCreate(321)
    
ItemCost ArrayCreate(11)
    
    
// Allow registering stuff now
    
g_arrays_created true
}

public 
plugin_end() {
    
//Destroy arrays to free up memory
    
ArrayDestroy(ItemName)
    
ArrayDestroy(ItemCost)
    
    
g_arrays_created false
}

public 
plugin_natives()
    
register_native("register_item""native_register_item"1)

// Native: zp_register_extra_item
public native_register_item(const name[], cost) {
    
// Strings passed byref
    
param_convert(1)
    
    
// Arrays not yet initialized
    
if (!g_arrays_created) {
        
log_error(AMX_ERR_NATIVE"[%s] Can't register extra item yet (%s)"PLUGIN_NAMEname)
        return -
1
    
}
    
    
// Item name is empty
    
if (strlen(name) < 1) {
        
log_error(AMX_ERR_NATIVE"[%s] Can't register extra item with an empty name"PLUGIN_NAME)
        return -
1
    
}
    
    
// Already registered
    
new indexextraitem_name[32]
    for (
index 0index g_extraitems_countindex++)
    {
        
ArrayGetString(ItemNameindexextraitem_namecharsmax(extraitem_name))
        if (
equali(nameextraitem_name))
        {
            
log_error(AMX_ERR_NATIVE"[%s] Extra item already registered (%s)"PLUGIN_NAMEname)
            return -
1
        
}
    }
    
    
// Add the item
    
ArrayPushString(ItemNamename)
    
ArrayPushCell(ItemCostcost)
    
    
// Increase registered items counter
    
g_extraitems_count++
    
    
// Inform in server console that item is registered
    
log_amx("An item ^"%s^" successfully registered with ID: %i"nameg_extraitems_count-1)
    
    
// Return id under which we registered the item
    
return g_extraitems_count-1;
}

// Extra Items Menu
//show_menu_extras(id)
public menu_main(id) {
    if(!
is_user_connected(id))
        return 
PLUGIN_HANDLED
    
    
static menuszText[128], item_iditem_name[32], item_costszInfo[6]
    
    
// Title
    
formatex(szTextcharsmax(szText), "Server menu")
    
menu menu_create(szText"menu_handler")
    
    
// Item List
    
for(item_id 0item_id g_extraitems_countitem_id++)
    {
        
ArrayGetString(ItemNameitem_iditem_namecharsmax(item_name))
        
item_cost ArrayGetCell(ItemCostitem_id)
        
        
// Add Item Name and Cost
        
if(item_cost == -1) {
            
formatex(szTextcharsmax(szText), "%s"item_name)
        }
        else {
            
formatex(szTextcharsmax(szText), "%s \r[\y$\w%i\r]"item_nameitem_cost)
        }
        
        
num_to_str(item_idszInfocharsmax(szInfo))
        
menu_additem(menuszTextszInfo)
    }
    
    
// No items to display?
    
if (menu_items(menu) <= 0) {
        
client_print(idprint_chat"ERROR: There are no items in menu")
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    
menu_display(idmenu)
    return 
PLUGIN_HANDLED
}

// Extra Items Menu
public menu_handler(idmenuitem) {
    if(
item == MENU_EXIT) {
        
menu_destroy(menu)
        return 
PLUGIN_HANDLED
    
}
    
    
// Retrieve extra item id
    
static szData[6], dummyitem_id
    menu_item_getinfo
(menuitemdummyszDatacharsmax(szData), __dummy)
    
item_id str_to_num(szData)
    
    
// Attempt to choose the item
    
ExecuteForward(g_extraItemSelectedg_resultiditem_id)
    
menu_destroy(menu)
    return 
PLUGIN_HANDLED;


Last edited by kww; 06-08-2021 at 04:23.
kww is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 02:33.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode