Hi,
I searched in many threads and still couldn't fix the error.
Error :
Quote:
[AMXX] Run time error 10: native error (native "callfunc_begin_i")
[AMXX] [0] VipManager.sma::OnVipMenuHandler (line 89)
Public function -1 is invalid
|
Error Plugin :
PHP Code:
#include < amxmodx >
#include < cstrike >
#include < basebuilder >
enum _:ItemData
{
szItemName[ 32 ],
iItemCost,
iItemPlugin,
iItemFuncID
}
new g_iTotalItems ;
new Array:g_aItems ;
public plugin_init( ) {
register_plugin( "[BB] VIP Manager", "1.0", "DoNii" ) ;
register_clcmd( "say /shop", "ShowShopMenu" ) ;
g_aItems = ArrayCreate( ItemData ) ;
}
public plugin_natives( ) {
register_library( "bb_vip" ) ;
register_native( "bb_vip_register_extra_item", "native_register_extra_item", 0 ) ;
}
public ShowShopMenu( id ) {
if( bb_is_user_zombie( id ) )
return PLUGIN_HANDLED ;
new eItemData[ ItemData ], szItem[ 64 ], szNum[ 3 ], iPage ;
iPage = clamp( iPage, 0, ( g_iTotalItems - 1 ) / 7 ) ;
new iMenu = menu_create( "\r[VIP] \yExtra Item Menu", "OnVipMenuHandler" ) ;
for( new iItems ; iItems < g_iTotalItems ; iItems++ ) {
ArrayGetArray( g_aItems, iItems, eItemData ) ;
num_to_str( iItems, szNum, charsmax ( szNum ) ) ;
new iMoney = cs_get_user_money( id ) ;
new iCost = eItemData[ iItemCost ] ;
if( iMoney < iCost )
formatex( szItem, charsmax( szItem ), "\d%s | $%d", eItemData[ szItemName ], iCost ) ;
else
formatex( szItem, charsmax( szItem ), "%s | $%d", eItemData[ szItemName ], iCost ) ;
menu_additem( iMenu, szItem, szNum ) ;
}
menu_display( id, iMenu, iPage ) ;
return PLUGIN_CONTINUE ;
}
public OnVipMenuHandler( id, iMenu, iItem ) {
new iAccess, szNum[ 3 ], iCallback ;
menu_item_getinfo( iMenu, iItem, iAccess, szNum, charsmax( szNum ), _, _, iCallback ) ;
menu_destroy( iMenu ) ;
new iItemIndex = str_to_num( szNum ) ;
new eItemData[ ItemData ] ;
ArrayGetArray( g_aItems, iItemIndex, eItemData ) ;
new iMoney = cs_get_user_money( id ) ;
if( iMoney < eItemData[ iItemCost ] ) {
client_print( id, print_chat, "[BB] Not Enough Money" ) ;
return PLUGIN_HANDLED ;
}
cs_set_user_money( id, iMoney - eItemData[ iItemCost ] ) ;
callfunc_begin_i( eItemData[ iItemFuncID ], eItemData[ iItemPlugin ] )
callfunc_push_int( id )
callfunc_end( )
return PLUGIN_CONTINUE ;
}
public native_register_extra_item( iPlugin, iParams )
{
new eItemData[ ItemData ], szHandler[ 32 ] ;
get_string( 1, eItemData[ szItemName ], charsmax( eItemData[ szItemName ] ) ) ;
eItemData[ iItemCost ] = get_param( 2 ) ;
eItemData[ iItemPlugin ] = iPlugin ;
get_string( 4, szHandler, charsmax( szHandler ) ) ;
eItemData[ iItemFuncID ] = get_func_id( szHandler, iPlugin ) ;
ArrayPushArray( g_aItems, eItemData );
g_iTotalItems++ ;
return ( g_iTotalItems - 1 ) ;
}
Error Line :
Code:
callfunc_begin_i( eItemData[ iItemFuncID ], eItemData[ iItemPlugin ] )
callfunc_push_int( id )
callfunc_end( )
Sub-Plugin that uses the native.
PHP Code:
#include < amxmodx >
#include < bb_vip >
public plugin_init( ) {
register_plugin( "Test Plug", "1.0", "DoNii" ) ;
bb_vip_register_extra_item( "Test", 500, "OnTest" ) ;
}
public OnTest( id ) {
client_print( id, print_chat, "It Prints !" ) ;
}
Info :
The menu works just fine, the item appears, when you click it you lose your money ($500) but the 'It Prints !' never prints, and I get that error. Means that the problem is in the callfunc part (as the error says)
Thanks.
__________________