Raised This Month: $ Target: $400
 0% 

load_data (error)


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Id0x.
Junior Member
Join Date: Dec 2020
Old 12-29-2020 , 13:44   load_data (error)
Reply With Quote #1

Code:
L 12/29/2020 - 15:24:50: [AMXX] Displaying debug trace (plugin "level.amxx", version "v5.2")
L 12/29/2020 - 15:24:50: [AMXX] Run time error 4: index out of bounds 
L 12/29/2020 - 15:24:50: [AMXX]    [0] level.sma::load_data (line 183)
PHP Code:
public load_data(id)    
{    
    new 
iVault;
        
    
iVault nvault_open"exs-level" );
    
get_user_name(idname34);    
    
    
format(key63"%s"name);    
    
format(data_327"^"%d^" ^"%d^" ^"%d^""g_level[id], g_exp[id], g_exp2[id]);
    
nvault_get(iVaultkeydata_charsmax(data_));   
    
fvault_get_data("exs-level"keydata_charsmax(data_));
    
    new 
level[32], exp[32],  exp2[32];
    
    
parse(data_levelsizeof(level) - 1expsizeof(exp) - 1exp2sizeof(exp2) - 1);
    
    
g_level[id] = str_to_num(level);   
    
g_exp[id] = str_to_num(exp);
    
g_exp2[id] = str_to_num(exp2);

Line 183 :

PHP Code:
format(data_327"^"%d^" ^"%d^" ^"%d^""g_level[id], g_exp[id], g_exp2[id]); 
Id0x. is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 12-29-2020 , 16:15   Re: load_data (error)
Reply With Quote #2

This will occur when slot 32 is used on your server. level[32] has a valid range of 0 to 31, causing the index out of bounds error on slot 32.

Change each '32' to 'MAX_PLAYERS + 1'

PHP Code:
new level[32], exp[32],  exp2[32]; 
Also, declare the name, key, and data_ variables locally. Use charsmax( variable ) instead of the size-1 value.

Use formatex() instead of format(). For the key value, you can use copy() instead of formatex().

You must close the vault after opening it. You should declare iVault globally and open the vault at plugin_init() or plugin_cfg() and then close the vault at plugin_end()

Why are you using nvault and fvault? Consider using nvault array

Read through this tut
__________________

Last edited by Bugsy; 12-29-2020 at 16:19.
Bugsy is offline
fysiks
Veteran Member
Join Date: Sep 2007
Location: Flatland, USA
Old 12-29-2020 , 16:29   Re: load_data (error)
Reply With Quote #3

Quote:
Originally Posted by Bugsy View Post
This will occur when slot 32 is used on your server. level[32] has a valid range of 0 to 31, causing the index out of bounds error on slot 32.

Change each '32' to 'MAX_PLAYERS + 1'

PHP Code:
new level[32], exp[32],  exp2[32]; 
Those variables are being used as string, they are not being indexed by id. You probably mean to reference g_level, g_exp, and g_exp2 (though we can't see how those are actually being declared because the OP hasn't provided enough code).
__________________
fysiks is offline
Old 12-29-2020, 16:36
Id0x.
This message has been deleted by Id0x..
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 12-29-2020 , 16:50   Re: load_data (error)
Reply With Quote #4

^

Correct, I was referring to the g_ version of these variables. This has the be the cause, there is no other way index out of bounds can occur.
__________________
Bugsy is offline
Id0x.
Junior Member
Join Date: Dec 2020
Old 12-29-2020 , 16:57   Re: load_data (error)
Reply With Quote #5

Quote:
Originally Posted by Bugsy View Post
^

Correct, I was referring to the g_ version of these variables. This has the be the cause, there is no other way index out of bounds can occur.
can you fix the problem for me if you want this my full sma.


PHP Code:
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fvault>
#include <hamsandwich>

#define TOP 15

new key[64], name[65], data_[328];
new 
g_level[32], g_exp[32], g_exp2[32];
new 
g_maxg_fade;
const 
pev_spec pev_iuser2;

new const 
file_dir[] = "addons/amxmodx/data/file_vault";
new 
path[128], data[256], top_level[33], top_exp[33], top_exp2[33], top_name[33][33];

new  
sound[] = "misc/level_up.wav";
public 
plugin_precache() precache_sound(sound);

new 
Remove[33];

public 
plugin_init()
{
    
register_plugin("Level Exp""v5.2""No");
    
    
register_clcmd("say /toplevel""show_top"); 
    
register_clcmd("say /level""show_level");
    
register_clcmd("say /mylevel""mylevel");

    
register_clcmd("give_level","give_level"ADMIN_IMMUNITY"Use To Give Level");
    
register_clcmd("give_exp","give_exp"ADMIN_IMMUNITY"Use To Give EXP");
    
register_clcmd("reset_level","reset_level"ADMIN_IMMUNITY"Use To restart Players Level");    
    
    
register_event("DeathMsg""event_death""a");    
    
set_task(2.0"save_data"___"b");

    
g_max register_cvar("max_level""1000");
    
g_fade =  get_user_msgid("ScreenFade");
    
    
read_top();
    if(!
dir_exists(file_dir)) mkdir(file_dir);    
}

public 
client_connected(idload_data(id);
public 
client_authorized(idload_data(id);
public 
client_disconnect(idsave_data(id), remove_task(id);    

public 
client_putinserver(id)
{
    
load_data(id); 
    
set_task(1.0 ,"show_hud"id__"b");
    
set_task(2.0 ,"check_save"id__"b");
    
    
Remove[id] = false;
    
    if(
g_level[id] == && !is_user_bot(id))
    {    
        
g_level[id] = 1;
        
g_exp[id] = 0;
        
g_exp2[id] = 5;    
    }    
}

///** ---------------------------------------- [ Native ] ------------------------------------------------- **///

public plugin_natives( )
{
    
register_native"get_level""native_get_user_level");
    
register_native"hud""native_get_user_hud");
    
}

public 
native_get_user_levelid )
{
    return 
g_levelid ];
}

public 
native_get_user_hudid )
{
    
activeid );
}

///** ---------------------------------------- [ Level Up ] ----------------------------------------------- **///

public event_death()
{
    new 
name[32], attacker read_data(1);
    
get_user_name(attackernamesizeof name 1); new 1;
    
    if((
g_exp[attacker] >= (g_exp2[attacker] - 1)) && (g_level[attacker] <= get_pcvar_num(g_max)) && is_user_alive(attacker))
    {
        
g_level[attacker] ++;
        
g_exp[attacker] = 0;    
        
        while(
g_level[attacker] != y)
        {
            
++; g_exp2[attacker] = 5;
        }
        
        
message_begin(MSG_ONE_UNRELIABLEg_fade_attacker);
        
write_short(1<<12);
        
write_short(1);
        
write_short(0x0000);
        
write_byte(1);
        
write_byte(200); 
        
write_byte(0);
        
write_byte(205);
        
message_end();
        
        
emit_sound(attackerCHAN_STREAMsound1.0ATTN_NORM0PITCH_HIGH);
        
ChatColor(0"!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!"nameg_level[attacker]);
    }
    else
    {        
        if(!(
g_level[attacker] == get_pcvar_num(g_max))) g_exp[attacker] ++;            
    }
}

///** ---------------------------------------- [ Give Level ] ----------------------------------------------- **///

public give_level(idlevelcid)
{
    if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
        return 
PLUGIN_HANDLED;

    new 
target[32];
    new 
count[32];
    
    
read_argv(1,target,31);
    
read_argv(2,count,31);
    new 
target_idname[32], level_id;
    
level_id str_to_num(count);
    
target_id find_player("bl"target);
    
get_user_name(target_idnamesizeof name 1);
    if(!
target_id)
    {
        
console_print(id"Ce Player n'existe pas");
        return 
PLUGIN_HANDLED;
    }
    if(
read_argc() != 3)
    return 
PLUGIN_HANDLED;

    if( ((
g_level[target_id] + level_id) <=get_pcvar_num(g_max)) && (level_id != 0) && ((g_level[target_id] + level_id) > ) )
    {
        if(
level_id 0)
        {
            
g_level[target_id] = g_level[target_id] + level_id;
            
g_exp[target_id] = 0;
            
g_exp2[target_id] = g_level[target_id] * 5;
            
message_begin(MSG_ONE_UNRELIABLEg_fade_target_id);
            
write_short(1<<12);
            
write_short(1);
            
write_short(0x0000);
            
write_byte(1);
            
write_byte(200); 
            
write_byte(0);
            
write_byte(205);
            
message_end();
            
emit_sound(target_idCHAN_STREAMsound1.0ATTN_NORM0PITCH_HIGH);
            
ChatColor(0"!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!"nameg_level[target_id]);
        }
        else
            {
            
g_level[target_id] = g_level[target_id] + level_id;
            
g_exp[target_id] = 0;
            
g_exp2[target_id] = g_level[target_id] * 5;
            
message_begin(MSG_ONE_UNRELIABLEg_fade_target_id);
            
write_short(1<<12);
            
write_short(1);
            
write_short(0x0000);
            
write_byte(1);
            
write_byte(200); 
            
write_byte(0);
            
write_byte(205);
            
message_end();
            
emit_sound(target_idCHAN_STREAMsound1.0ATTN_NORM0PITCH_HIGH);
            
ChatColor(0"!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!"nameg_level[target_id]);
        }
    }
    else
    {
            
console_print(id"Operation Invalid");
    }
    return 
PLUGIN_HANDLED;
}

///** ---------------------------------------- [ Give EXP ] ----------------------------------------------- **///

public give_exp(idlevelcid)
{
    if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
        return 
PLUGIN_HANDLED;

    new 
target[32];
    new 
count[32];
    
    
read_argv(1,target,31);
    
read_argv(2,count,31);
    new 
target_idname[32], nameid[32];
    
target_id find_player("bl"target);
    new 
g_exp_add str_to_num(count) - (g_exp2[target_id] - g_exp[target_id]);
    new 
g_exp_add2 g_exp[target_id] + (g_exp2[target_id] - g_exp[target_id]);
    
get_user_name(target_idnamesizeof name 1); new 1;
    
get_user_name(idnameidsizeof nameid 1);
    if(!
target_id
    {
        
console_print(id"Ce Player n'existe pas");
        return 
PLUGIN_HANDLED;
    }
    if(
read_argc() != 3)
    return 
PLUGIN_HANDLED;

    if( 
str_to_num(count) < (g_exp2[target_id] - g_exp[target_id]) )
    {
        
g_exp[target_id] = g_exp[target_id] + str_to_num(count);
    }
    else
    if( 
str_to_num(count) == (g_exp2[target_id] - g_exp[target_id]) )
    {
        
g_level[target_id] ++;
        
g_exp[target_id] = 0;
        
        while(
g_level[target_id] != y)
        {
            
++; g_exp2[target_id] = 5;
        }
        
message_begin(MSG_ONE_UNRELIABLEg_fade_target_id);
        
write_short(1<<12);
        
write_short(1);
        
write_short(0x0000);
        
write_byte(1);
        
write_byte(200); 
        
write_byte(0);
        
write_byte(205);
        
message_end();
        
emit_sound(target_idCHAN_STREAMsound1.0ATTN_NORM0PITCH_HIGH);
        
ChatColor(0"!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!"nameg_level[target_id]);
    }
    else
    if( 
str_to_num(count) > (g_exp2[target_id] - g_exp[target_id]) )
    {
        
g_level[target_id] ++;
        
g_exp[target_id] = g_exp_add;

        while(
g_level[target_id] != y)
        {
            
++; g_exp2[target_id] = 5;
        }

        if( 
g_exp2[target_id] < g_exp[target_id] )
        {
            
g_level[target_id] ++;

            while(
g_level[target_id] != y)
            {
                
++; g_exp2[target_id] = 5;
            }

            
g_exp[target_id] = g_exp_add2;
        }

        if( 
g_exp2[target_id] == g_exp[target_id] )
        {
            
g_level[target_id] ++;
            
g_exp[target_id] = 0;    
        
            while(
g_level[target_id] != y)
            {
                
++; g_exp2[target_id] = 5;
            }
        }
        
message_begin(MSG_ONE_UNRELIABLEg_fade_target_id);
        
write_short(1<<12);
        
write_short(1);
        
write_short(0x0000);
        
write_byte(1);
        
write_byte(200); 
        
write_byte(0);
        
write_byte(205);
        
message_end();
        
emit_sound(target_idCHAN_STREAMsound1.0ATTN_NORM0PITCH_HIGH);
        
ChatColor(0"!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!"nameg_level[target_id]);
    }
    return 
PLUGIN_HANDLED;
}

///** ---------------------------------------- [ Reset Level ] ----------------------------------------------- **///

public reset_level(idlevelcid)
{
    if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
        return 
PLUGIN_HANDLED;

    new 
target[32];
    
    
read_argv(1,target,31);
    new 
target_idname[32], nameid[32];
    
target_id find_player("bl"target);
    
get_user_name(target_idnamesizeof name 1);
    
get_user_name(idnameidsizeof nameid 1);

    
g_level[target_id] = 1;
    
g_exp[target_id] = 0;
    
g_exp2[target_id] = 5;
    return 
PLUGIN_HANDLED;
}

///** ---------------------------------------- [ Show Hud msg ] ----------------------------------------------- **///

public show_hud(id)
{
    new 
name[33], spec pev(idpev_spec);
    
get_user_name(specnamecharsmax(name)); 
    
    if(
Remove[id])
    {
        return
    }
    
    else if(!
Remove[id])
    if(
is_user_alive(id))
    {
        
set_hudmessage(random_num(0,255), random_num(0,255), random_num(0,255), -1.00.8000.01.1);
        
show_hudmessage(id"[ Level: %d | Exp: %d/%d ]"g_level[id], g_exp[id], g_exp2[id]);
    }
    if(
is_user_alive(spec))
    {
        
set_hudmessage(1910255, -1.00.8000.01.1);
        
show_hudmessage(id"Spectating: %s^n[ Level: %d | Exp: %d/%d ]"nameg_level[spec], g_exp[spec], g_exp2[spec]);
    }
}

///** --------------------------------------- [ Save/Load level ] --------------------------------------------- **///
public save_data(id)    
{
    if(!
is_user_bot(id))
    {
        
get_user_name(idname34);   
        
        
format(key63"%s"name);     
        
format(data_327"^"%d^" ^"%d^" ^"%d^""g_level[id], g_exp[id], g_exp2[id]);
        
fvault_set_data("exs-level"keydata_);     
    }    


public 
load_data(id)    
{    
    
get_user_name(idname34);    
    
    
format(key63"%s"name);    
    
format(data_327"^"%d^" ^"%d^" ^"%d^""g_level[id], g_exp[id], g_exp2[id]);
    
fvault_get_data("exs-level"keydata_charsmax(data_));   
    
    new 
level[32], exp[32],  exp2[32];
    
    
parse(data_levelsizeof(level) - 1expsizeof(exp) - 1exp2sizeof(exp2) - 1);
    
    
g_level[id] = str_to_num(level);   
    
g_exp[id] = str_to_num(exp);
    
g_exp2[id] = str_to_num(exp2);


///** ----------------------------------------- [ Top level ] ------------------------------------------------- **///
public check_save(id)
{
    if(
get_user_team(id) == && !is_user_bot(id)) return;
    
    
save_data(id); update_top(idg_level[id], g_exp[id], g_exp2[id]);
}

public 
save_top()
{
    
formatex(path127"%s/exs-toplevel.txt"file_dir);
    
    if(
file_exists(path))
        
delete_file(path);
    
    new 
fopen(path"at");
    
    for(new 
0TOPi++)
    {
        
formatex(data255"^"%s^" ^"%d^" ^"%d^" ^"%d^"^n"top_name[i], top_level[i], top_exp[i], top_exp2[i]);
        
fputs(fdata);
    }
    
fclose(f);
}

public 
read_top()
{
    
formatex(path127"%s/exs-toplevel.txt"file_dir);
    
    new 
fopen(path"rt");
    new 
0;
    new 
level[25], exp[25], exp2[25]; 
    
    while(!
feof(f)  && TOP+1)
    {
        
fgets(fdata255);
        
parse(datatop_name[i], 31level25,  exp25exp225);
        
        
top_level[i] = str_to_num(level);
        
top_exp[i] = str_to_num(exp);
        
top_exp2[i] = str_to_num(exp2);
        
i++;
    }
    
fclose(f);    
}

public 
show_top(id
{    
    static 
buffer[2368], name[131], leni;
    
    
len format(buffer[len], 2367-len,"<meta charset=UTF-8><style>body{background:#000000;font-family:Tahoma}th{background:#303B4A;color:#FFF}table{padding:6px 2px;background:#EFF1F3;font-size:12px;color:#222;border:1px solid #CCC}h2,h3{color:#222}#c{background:#E9EBEE}img{height:7px;background:#F8931F;margin:0 3px}#r{height:7px;background:#D2232A}#clr{background:none;color:#303B4A;font-size:20px;border:0}</style>");
    
    
len += format(buffer[len], 2367-len"<body><table width=100%% border=0 align=center cellpadding=0 cellspacing=1>");    
    
len += format(buffer[len], 2367-len"<body><tr><th>%s<th>%s<th>%s<th>%s</tr>","#","Name","Level","Exp");    
    
    for(
0TOPi++)
    {        
        
name top_name[i];
        
        if(
top_level[i]== 0
        {
            
len += format(buffer[len], 2367-len"<tr><td>%d.<td>%s<td>%s<td>%s/%s</tr>", (i+1), "-""-""-""-");
        }
        else
        {
            while(
containi(name"<") != -1replace(name129"<""&lt;");
            while(
containi(name">") != -1replace(name129">""&gt;");            
            
len += format(buffer[len], 2367-len"<tr><td>%d<td>%s<td>%d<td>%d/%d</tr>", (i+1), nametop_level[i], top_exp[i], top_exp2[i]);
        }
    }
    
    static 
strin[20]; format(strin,33"[RD] Top 15 Level");
    
show_motd(idbufferstrin);
}

public 
update_top(idlevelexpexp2
{    
    static 
name[32]; get_user_name(idnamecharsmax(name) - 1);
    
    for(new 
0TOPi++)
    {
        if(
level top_level[i] || level == top_level[i] && exp top_exp[i])
        {
            new 
pos i;    
            while(!
equal(top_name[pos], name) && pos TOP)
                
pos++;
            
            for(new 
posij--)
            {
                
formatex(top_name[j], 31top_name[j-1]);
                
top_level[j] = top_level[j-1];
                
top_exp[j] = top_exp[j-1];
            }
            
            
formatex(top_name[i], charsmax(name) - 1name);
            
            
top_level[i] = level;
            
top_exp[i] = exp;
            
top_exp2[i] = exp2;
            
            
save_top();
            break;
        }
        else if(
equal(top_name[i], name)) 
            break;    
    }
}  

///** ----------------------------------------- [ Show level ] ------------------------------------------------ **///

public show_level(id)
{
    new 
menu menu_create("\r[RD] \yShow Players Level \w:""level_handle");
    
    new 
name[32], pid[32], players[32], text[555 char],pnumtempid;
    
get_players(playerspnum"c");
    
    for(new 
iipnumi++)
    {
        
tempid players[i];
        
        
get_user_name(tempidnamecharsmax(name)); 
        
formatex(textcharsmax(text), "%s \y: \r[ Level : %i | Exp : %i/%i ]"nameg_level[tempid], g_exp[tempid], g_exp2[tempid]);
        
num_to_str(get_user_userid(tempid), pid9);
        
menu_additem(menutextpid0);
    }
    
    
menu_display(idmenu);
    return 
PLUGIN_CONTINUE;
}

public 
level_handle(idmenuitem)
{
    if(
item == MENU_EXIT) return PLUGIN_HANDLED;
    
    
show_level(id);
    
    return 
PLUGIN_CONTINUE;
}

public 
mylevel(id)
{
    
ChatColor(id"!g[Red-Devils] !nYour Level is!g [!t %d!g ]"g_level[id])
}

public 
active(id)
{
    if(
Remove[id])
    {
        
Remove[id] = false;
    }
    
    else if(!
Remove[id])
    {
        
Remove[id] = true;
    }
}

///** ----------------------------------------- [ Chat Color ] ------------------------------------------------ **///

stock ChatColor(const id, const input[], any:...)
    {
    new 
count 1players[32];
    static 
msg[191];
    
vformat(msg190input3);
    
    
replace_all(msg190"!g""^4");
    
replace_all(msg190"!n""^1");
    
replace_all(msg190"!t""^3");
    
replace_all(msg190"!t2""^0");
    
    if (
idplayers[0] = id; else get_players(playerscount"ch");
    {
        for (new 
0counti++)
            {
            if (
is_user_connected(players[i]))
                {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i]);
                
write_byte(players[i]);
                
write_string(msg);
                
message_end();
            }
        }
    }

Id0x. is offline
Bugsy
AMX Mod X Moderator
Join Date: Feb 2005
Location: NJ, USA
Old 12-29-2020 , 17:03   Re: load_data (error)
Reply With Quote #6

For the error you are getting

replace
new g_level[32], g_exp[32], g_exp2[32];
with
new g_level[MAX_PLAYERS + 1], g_exp[MAX_PLAYERS + 1], g_exp2[MAX_PLAYERS + 1];
__________________
Bugsy is offline
Reply


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 14:10.


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