Raised This Month: $ Target: $400
 0% 

problem ArrayGetString() in api menu


  
 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
Author Message
spirit
Senior Member
Join Date: Jul 2009
Location: Quimper
Old 05-10-2012 , 10:54   problem ArrayGetString() in api menu
Reply With Quote #1

Hi all,


I trying to made my api menu model with help of the zplague plugin.

I made this but i have a problem in the menu at this line ArrayGetString(gmodel_name, class, buffer, charsmax(buffer))

this is my error log:
L 05/09/2012 - 06:093: Invalid array handle provided (0)
L 05/09/2012 - 06:093: [AMXX] Displaying debug trace (plugin "model_test.amxx")
L 05/09/2012 - 06:093: [AMXX] Run time error 10: native error (native "ArrayGetString"

Can you help me for fix that please ?

Code:
#include <amxmodx>
#include <fun>
#include <cstrike>
#include <engine>
#include <fakemeta>

new Array:gmodel_name, Array:gmodel_new, Array:gmodel_realname, Array:gmodel_modelsstart, 
Array:gmodel_modelsend, Array:gmodel_playermodel, Array:gmodel_modelindex, gmodel_i 
new Array:gmodel2_realname, Array:gmodel2_name, Array:gmodel2_modelsstart,
Array:gmodel2_modelsend, Array:gmodel2_playermodel, Array:gmodel2_modelindex

new modelchoosing[33]

new const modelfile[] = "model_list.ini"

public plugin_init()
{
    register_clcmd("say /test", "menu_model")
}

public plugin_natives()
{
    register_native("register_model_class", "native_register_model", 1)
    register_native("get_model", "native_get_model", 1)
}

public plugin_precache()
{
    gmodel_name = ArrayCreate(32, 1)
    gmodel_realname = ArrayCreate(32, 1)
    gmodel_new = ArrayCreate(1, 1)
    gmodel_modelsstart = ArrayCreate(1, 1)
    gmodel_modelsend = ArrayCreate(1, 1)
    gmodel_playermodel = ArrayCreate(32, 1)
    gmodel_modelindex = ArrayCreate(1, 1)
    gmodel2_realname = ArrayCreate(32, 1)
    gmodel2_name = ArrayCreate(32, 1)
    gmodel2_modelsstart = ArrayCreate(1, 1)
    gmodel2_modelsend = ArrayCreate(1, 1)
    gmodel2_playermodel = ArrayCreate(32, 1)
    gmodel2_modelindex = ArrayCreate(1, 1)
    
    precache_modelfile()
}

public plugin_cfg()
{
    save_modelfile()
}

save_modelfile()
{
    new cfgdir[64]
    get_localinfo("amxx_configsdir", cfgdir, charsmax(cfgdir))
    format(cfgdir, charsmax(cfgdir), "%s/%s", cfgdir, modelfile)
    
    new i, k, buffer[512]
    
    new file = fopen(cfgdir, "at")
    new size = ArraySize(gmodel_name)
    
    for (i = 0; i < size; i++)
    {
        if (ArrayGetCell(gmodel_new, i))
        {
            ArrayGetString(gmodel_name, i, buffer, charsmax(buffer))
            format(buffer, charsmax(buffer), "^n[%s]", buffer)
            fputs(file, buffer)
            
            ArrayGetString(gmodel_name, i, buffer, charsmax(buffer))
            format(buffer, charsmax(buffer), "^nNAME = %s", buffer)
            fputs(file, buffer)
            
            for (k = ArrayGetCell(gmodel_modelsstart, i); k < ArrayGetCell(gmodel_modelsend, i); k++)
            {
                ArrayGetString(gmodel_playermodel, k, cfgdir, charsmax(cfgdir))
            }
            format(buffer, charsmax(buffer), "^nMODELS = %s", cfgdir)
            fputs(file, buffer)
        }
    }
    fclose(file)
    server_print("save custom complete !")
    ArrayDestroy(gmodel_realname)
    ArrayDestroy(gmodel_name)
    ArrayDestroy(gmodel_modelsstart)
    ArrayDestroy(gmodel_modelsend)
    ArrayDestroy(gmodel_playermodel)
    ArrayDestroy(gmodel_modelindex)    
}

precache_modelfile()
{
    new cfgdir[64]
    get_localinfo("amxx_configsdir", cfgdir, charsmax(cfgdir))
    format(cfgdir, charsmax(cfgdir), "%s/%s", cfgdir, modelfile)
    
    if (file_exists(cfgdir))
    {
        new linedata[1024], key[64], value[960]
        new file = fopen(cfgdir, "rt")
        
        while (file && !feof(file))
        {
            fgets(file, linedata, charsmax(linedata))
            
            replace(linedata, charsmax(linedata), "^n", "")
            
            if (!linedata[0] || linedata[0] == ';') 
            continue;
            
            if (linedata[0] == '[')
            {
                linedata[strlen(linedata) - 1] = 0
                copy(linedata, charsmax(linedata), linedata[1])
                
                ArrayPushString(gmodel2_realname, linedata)
                continue;
            }
            strtok(linedata, key, charsmax(key), value, charsmax(value), '=')
            
            trim(key)
            trim(value)
            
            if (equal(key, "NAME"))
            ArrayPushString(gmodel2_name, value)
            else if (equal(key, "MODELS"))
            {
                ArrayPushCell(gmodel2_modelsstart, ArraySize(gmodel2_playermodel))
                
                while (value[0] != 0 && strtok(value, key, charsmax(key), value, charsmax(value), ','))
                {
                    trim(key)
                    trim(value)
                    
                    ArrayPushString(gmodel2_playermodel, key)
                    ArrayPushCell(gmodel2_modelindex, -1)
                }
                ArrayPushCell(gmodel2_modelsend, ArraySize(gmodel2_playermodel))
            }
        }
        if (file) 
        fclose(file);
    }    
}

public menu_model(id)
{
    static menucar, menu[128], class, buffer[512]
    
    menucar = menu_create("Model Menu", "submenu_carsbuy")
    
    for (class = 0; class < gmodel_i; class++)
    {
        ArrayGetString(gmodel_name, class, buffer, charsmax(buffer))
        if(class > 0)
        {
            formatex(menu, charsmax(menu), "%s", buffer)
            buffer[0] = class
            buffer[1] = 0
            menu_additem(menucar, menu, buffer)
        }
    }
    menu_setprop(menucar, MPROP_BACKNAME, "Back")
    menu_setprop(menucar, MPROP_NEXTNAME, "Next")
    menu_setprop(menucar, MPROP_EXITNAME, "Quit")
    menu_display(id, menucar)
}

public submenu_carsbuy(id, menucar, item)
{
    if (item == MENU_EXIT)
        return PLUGIN_HANDLED;
    
    static buffer[2], dummy, classid
    menu_item_getinfo(menucar, item, dummy, buffer, charsmax(buffer), _, _, dummy)
    classid = buffer[0]
    
    modelchoosing[id] = classid
    
    static name[32]
    ArrayGetString(gmodel_name, modelchoosing[id], name, charsmax(name))
    client_print(id, print_chat, " %s", name)
    
    menu_destroy(menucar)
    return PLUGIN_HANDLED;
}

public native_register_model(const name[], model[])
{
    param_convert(1)
    param_convert(2)
    
    ArrayPushString(gmodel_name, name)
    
    ArrayPushCell(gmodel_modelsstart, ArraySize(gmodel_playermodel))
    ArrayPushString(gmodel_playermodel, model)
    ArrayPushCell(gmodel_modelsend, ArraySize(gmodel_playermodel))
    ArrayPushCell(gmodel_modelindex, -1)
    
    ArrayPushCell(gmodel_new, 1)
    
    new i, k, buffer[32], nummodels_custom, nummodels_default, prec_mdl[100], size = ArraySize(gmodel2_realname)
    for (i = 0; i < size; i++)
    {
        ArrayGetString(gmodel2_realname, i, buffer, charsmax(buffer))
        
        if (!equal(name, buffer))
            continue;
        
        ArraySetCell(gmodel_new, gmodel_i, 0)
        
        ArrayGetString(gmodel2_name, i, buffer, charsmax(buffer))
        ArraySetString(gmodel_name, gmodel_i, buffer)
        
        nummodels_custom = ArrayGetCell(gmodel2_modelsend, i) - ArrayGetCell(gmodel2_modelsstart, i)
        nummodels_default = ArrayGetCell(gmodel_modelsend, gmodel_i) - ArrayGetCell(gmodel_modelsstart, gmodel_i)
            
        for (k = 0; k < min(nummodels_custom, nummodels_default); k++)
        {
            ArrayGetString(gmodel2_playermodel, ArrayGetCell(gmodel2_modelsstart, i) + k, buffer, charsmax(buffer))
            ArraySetString(gmodel_playermodel, ArrayGetCell(gmodel_modelsstart, gmodel_i) + k, buffer)
                
            formatex(prec_mdl, charsmax(prec_mdl), "models/player/%s/%s.mdl", buffer, buffer)
            ArraySetCell(gmodel_modelindex, ArrayGetCell(gmodel_modelsstart, gmodel_i) + k, engfunc(EngFunc_PrecacheModel, prec_mdl))
        }
    }
    if (ArrayGetCell(gmodel_new, gmodel_i))
    {
        formatex(prec_mdl, charsmax(prec_mdl), "models/player/%s/%s.mdl", model, model)
        ArraySetCell(gmodel_modelindex, ArrayGetCell(gmodel_modelsstart, gmodel_i), engfunc(EngFunc_PrecacheModel, prec_mdl))
    }
    
    gmodel_i++
    return gmodel_i-1;
}

public native_get_model(id)
{
    return modelchoosing[id];
}
I made this little plugin for my test but the menu hasn't open.

Code:
#include <amxmodx>
#include <model_test>

new const myfirstmodel_name[] = "Daffy"
new const myfirstmodel_model[] = "daffyduck" 

new const mymodel2_name[] = "Bugs Bunny"
new const mymodel2_model[] = "rabbits" 

new firstmodel, model2

public plugin_init()
{
    firstmodel = register_model_class(myfirstmodel_name, myfirstmodel_model)
    model2 = register_model_class(mymodel2_name, mymodel2_model)
    
    register_clcmd("say model", "modelchoose")
}

public modelchoose(id)
{
    if(get_model(id) == firstmodel)
        client_print(id, print_chat, "you have choose first model")
    else if(get_model(id) == model2)
        client_print(id, print_chat, "you have choose second model")
}

Last edited by spirit; 05-10-2012 at 10:55.
spirit is offline
 


Thread Tools
Display Modes

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 00:21.


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