|
Junior Member
|

12-29-2020
, 16:57
Re: load_data (error)
|
#6
|
Quote:
Originally Posted by Bugsy
^
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_max, g_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(id) load_data(id);
public client_authorized(id) load_data(id);
public client_disconnect(id) save_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] == 0 && !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", 1 );
register_native( "hud", "native_get_user_hud", 1 );
}
public native_get_user_level( id )
{
return g_level[ id ];
}
public native_get_user_hud( id )
{
active( id );
}
///** ---------------------------------------- [ Level Up ] ----------------------------------------------- **///
public event_death()
{
new name[32], attacker = read_data(1);
get_user_name(attacker, name, sizeof name - 1); new y = 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)
{
y ++; g_exp2[attacker] = y * 5;
}
message_begin(MSG_ONE_UNRELIABLE, g_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(attacker, CHAN_STREAM, sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
ChatColor(0, "!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!", name, g_level[attacker]);
}
else
{
if(!(g_level[attacker] == get_pcvar_num(g_max))) g_exp[attacker] ++;
}
}
///** ---------------------------------------- [ Give Level ] ----------------------------------------------- **///
public give_level(id, level, cid)
{
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_id, name[32], level_id;
level_id = str_to_num(count);
target_id = find_player("bl", target);
get_user_name(target_id, name, sizeof 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) > 0 ) )
{
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_UNRELIABLE, g_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_id, CHAN_STREAM, sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
ChatColor(0, "!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!", name, g_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_UNRELIABLE, g_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_id, CHAN_STREAM, sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
ChatColor(0, "!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!", name, g_level[target_id]);
}
}
else
{
console_print(id, "Operation Invalid");
}
return PLUGIN_HANDLED;
}
///** ---------------------------------------- [ Give EXP ] ----------------------------------------------- **///
public give_exp(id, level, cid)
{
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_id, name[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_id, name, sizeof name - 1); new y = 1;
get_user_name(id, nameid, sizeof 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)
{
y ++; g_exp2[target_id] = y * 5;
}
message_begin(MSG_ONE_UNRELIABLE, g_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_id, CHAN_STREAM, sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
ChatColor(0, "!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!", name, g_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)
{
y ++; g_exp2[target_id] = y * 5;
}
if( g_exp2[target_id] < g_exp[target_id] )
{
g_level[target_id] ++;
while(g_level[target_id] != y)
{
y ++; g_exp2[target_id] = y * 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)
{
y ++; g_exp2[target_id] = y * 5;
}
}
message_begin(MSG_ONE_UNRELIABLE, g_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_id, CHAN_STREAM, sound, 1.0, ATTN_NORM, 0, PITCH_HIGH);
ChatColor(0, "!g[Red-Devils] !nPlayer!t %s !nUp Level to!g %d !t!", name, g_level[target_id]);
}
return PLUGIN_HANDLED;
}
///** ---------------------------------------- [ Reset Level ] ----------------------------------------------- **///
public reset_level(id, level, cid)
{
if(!(get_user_flags(id) & ADMIN_IMMUNITY))
return PLUGIN_HANDLED;
new target[32];
read_argv(1,target,31);
new target_id, name[32], nameid[32];
target_id = find_player("bl", target);
get_user_name(target_id, name, sizeof name - 1);
get_user_name(id, nameid, sizeof 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(id, pev_spec);
get_user_name(spec, name, charsmax(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.0, 0.80, 0, 0.0, 1.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(191, 0, 255, -1.0, 0.80, 0, 0.0, 1.1);
show_hudmessage(id, "Spectating: %s^n[ Level: %d | Exp: %d/%d ]", name, g_level[spec], g_exp[spec], g_exp2[spec]);
}
}
///** --------------------------------------- [ Save/Load level ] --------------------------------------------- **///
public save_data(id)
{
if(!is_user_bot(id))
{
get_user_name(id, name, 34);
format(key, 63, "%s", name);
format(data_, 327, "^"%d^" ^"%d^" ^"%d^"", g_level[id], g_exp[id], g_exp2[id]);
fvault_set_data("exs-level", key, data_);
}
}
public load_data(id)
{
get_user_name(id, name, 34);
format(key, 63, "%s", name);
format(data_, 327, "^"%d^" ^"%d^" ^"%d^"", g_level[id], g_exp[id], g_exp2[id]);
fvault_get_data("exs-level", key, data_, charsmax(data_));
new level[32], exp[32], exp2[32];
parse(data_, level, sizeof(level) - 1, exp, sizeof(exp) - 1, exp2, sizeof(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) == 3 && !is_user_bot(id)) return;
save_data(id); update_top(id, g_level[id], g_exp[id], g_exp2[id]);
}
public save_top()
{
formatex(path, 127, "%s/exs-toplevel.txt", file_dir);
if(file_exists(path))
delete_file(path);
new f = fopen(path, "at");
for(new i = 0; i < TOP; i++)
{
formatex(data, 255, "^"%s^" ^"%d^" ^"%d^" ^"%d^"^n", top_name[i], top_level[i], top_exp[i], top_exp2[i]);
fputs(f, data);
}
fclose(f);
}
public read_top()
{
formatex(path, 127, "%s/exs-toplevel.txt", file_dir);
new f = fopen(path, "rt");
new i = 0;
new level[25], exp[25], exp2[25];
while(!feof(f) && i < TOP+1)
{
fgets(f, data, 255);
parse(data, top_name[i], 31, level, 25, exp, 25, exp2, 25);
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], len, i;
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(i = 0; i < TOP; i++)
{
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, "<") != -1) replace(name, 129, "<", "<");
while(containi(name, ">") != -1) replace(name, 129, ">", ">");
len += format(buffer[len], 2367-len, "<tr><td>%d<td>%s<td>%d<td>%d/%d</tr>", (i+1), name, top_level[i], top_exp[i], top_exp2[i]);
}
}
static strin[20]; format(strin,33, "[RD] Top 15 Level");
show_motd(id, buffer, strin);
}
public update_top(id, level, exp, exp2)
{
static name[32]; get_user_name(id, name, charsmax(name) - 1);
for(new i = 0; i < TOP; i++)
{
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 j = pos; j > i; j--)
{
formatex(top_name[j], 31, top_name[j-1]);
top_level[j] = top_level[j-1];
top_exp[j] = top_exp[j-1];
}
formatex(top_name[i], charsmax(name) - 1, name);
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],pnum, tempid;
get_players(players, pnum, "c");
for(new i; i< pnum; i++)
{
tempid = players[i];
get_user_name(tempid, name, charsmax(name));
formatex(text, charsmax(text), "%s \y: \r[ Level : %i | Exp : %i/%i ]", name, g_level[tempid], g_exp[tempid], g_exp2[tempid]);
num_to_str(get_user_userid(tempid), pid, 9);
menu_additem(menu, text, pid, 0);
}
menu_display(id, menu);
return PLUGIN_CONTINUE;
}
public level_handle(id, menu, item)
{
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 = 1, players[32];
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!n", "^1");
replace_all(msg, 190, "!t", "^3");
replace_all(msg, 190, "!t2", "^0");
if (id) players[0] = id; else get_players(players, count, "ch");
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
|
|