AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   problem ArrayGetString() in api menu (https://forums.alliedmods.net/showthread.php?t=184912)

spirit 05-10-2012 10:54

problem ArrayGetString() in api menu
 
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:09:33: Invalid array handle provided (0)
L 05/09/2012 - 06:09:33: [AMXX] Displaying debug trace (plugin "model_test.amxx")
L 05/09/2012 - 06:09:33: [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")
}



All times are GMT -4. The time now is 00:21.

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