Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Ошибки в логах плагина Level & Point System

[РЕШЕНО]
Статус пользователя soneekk
сообщение 26.8.2016, 11:40
Сообщение #1


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

здравствуйте, помогите исправит ошибки в плагине пожалуйста.
logs:
[AMXX] [0] Level_and_Point_Systeme.sma::EV_DeathMsg (line 100)
[AMXX] Displaying debug trace (plugin "Level_and_Point_Systeme.amxx")
[AMXX] Run time error 4: index out of bounds


праблема исходит от суда:
Код:
public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !is_user_connected( iVictim ) )
return;

if( iKiller == iVictim || !iKiller )
return;

g_iExp[ iKiller ] += 1;
g_Points[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;
}
}


вес код
Код:
#include < amxmodx >
#include < fakemeta >
#include <hamsandwich>

#define PLUGIN_NAME "Level & Point System"
#define PLUGIN_VERSION "1.5"
#define PLUGIN_AUTHOR "NONAME"

#define MAX_CLIENTS 32

const PEV_SPEC_TARGET = pev_iuser2;

new g_HudSterVVVXXXxyz;

new const MAX_LEVELS[16] =
{
0, //1
150, //2
400, //3
800, //4
1500, //5
2000, //6
2200, //7
2400, //8
2600, //9
2900, //10
3200, //11
3500, //12
3750, //13
3950, //14
4200, //15
4500 //16
}

const PEV_SPEC_TARGET = pev_iuser2

new g_iLevel[ MAX_CLIENTS + 1 ], g_iExp[ MAX_CLIENTS + 1 ], g_Points[ MAX_CLIENTS + 1 ], g_playername[ MAX_CLIENTS + 1 ][ MAX_CLIENTS ];

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

register_event( "DeathMsg", "EV_DeathMsg", "a" );
register_event("ResetHUD", "event_ResetHud", "be");

g_HudSterVVVXXXxyz = CreateHudSyncObj();

}

public plugin_natives()
{
register_native("get_user_level", "native_get_user_level", 1)
register_native("get_user_points", "native_get_user_points", 1);
register_native("get_user_exp", "native_get_user_exp", 1)

register_native("set_user_level", "native_set_user_level", 1)
register_native("set_user_exp", "native_set_user_exp", 1)
register_native("set_user_points", "native_set_user_points", 1);

register_native("add_user_points", "native_add_user_points", 1);
register_native("del_user_points", "native_del_user_points", 1);
}

public client_putinserver(id)
{
set_task(1.0, "ShowHud", id, _, _, "b");
}

public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !is_user_connected( iVictim ) )
return;

if( iKiller == iVictim || !iKiller )
return;

g_iExp[ iKiller ] += 1;
g_Points[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;
}
}

public event_ResetHud(id)
{
ShowHud(id);
}

public ShowHud(id)
{
new idSpec;
new iPlayerName[32];
idSpec = pev(id, PEV_SPEC_TARGET);
get_user_name(idSpec, iPlayerName, 31);

if (is_user_connected(id) && is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2) && g_iLevel[id] == 16)
{
set_hudmessage(0, 255, 0, 0.01, 0.13, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "[HP: %d] | [Broni: %d]^n[Leveli: 16 (MAX)] | [Exp: MAX]^n[Ertguleba: 0] | [Qula: %d]", get_user_health(id), get_user_armor(id), g_Points[id]);
}
else if (is_user_connected(id) && is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2))
{
set_hudmessage(0, 255, 0, 0.01, 0.13, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "[HP: %d] [Broni: %d]^n[Leveli: %d] [Exp: %d / %d]^n[Ertguleba: 0] [Qula: %d]", get_user_health(id), get_user_armor(id), g_iLevel[id], g_iExp[id], (MAX_LEVELS[g_iLevel[id]]), g_Points[id]);
}
else if(g_iLevel[idSpec] == 16)
{
set_hudmessage(100, 100, 100, -1.0, 0.8, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "Spectating: %s^n[HP: %d] | [Broni: %d]^n[Leveli: 16 (MAX)] | [Exp: MAX]^n[Ertguleba: 0] | [Qula: %d]", iPlayerName, get_user_health(idSpec), get_user_armor(idSpec), g_Points[idSpec]);
}
else
{
set_hudmessage(100, 100, 100, -1.0, 0.8, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "Spectating: %s^n[HP: %d] | [Broni: %d]^n[Leveli: %d] | [Exp: %d / %d]^n[Ertguleba: 0] | [Qula: %d]", iPlayerName, get_user_health(idSpec), get_user_armor(idSpec), g_iLevel[idSpec], g_iExp[idSpec], (MAX_LEVELS[g_iLevel[idSpec]]), g_Points[idSpec]);
}
}

public native_get_user_exp(id)
{
return g_iExp[id];
}

public native_set_user_exp(id, amount)
{
g_iExp[id] = amount;
}

public native_get_user_level(id)
{
return g_iLevel[id];
}

public native_set_user_level(id, amount)
{
g_iLevel[id] = amount;
}


public native_get_user_points(id)
{
return g_Points[id];
}

public native_set_user_points(id, amount)
{
g_Points[id] = amount;
}

public native_add_user_points(id, amount)
{
g_Points[id] += amount;
}

public native_del_user_points(id, amount)
{
g_Points[id] -= amount;
}

stock color_print( const id , const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4" ) // Green Color
replace_all(msg, 190, "!y", "^1" ) // Default Color
replace_all(msg, 190, "!team", "^3" ) // Team Color

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();
}
}
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Sonikplus
сообщение 26.8.2016, 13:41
Сообщение #2
Стаж: 11 лет

Сообщений: 18
Благодарностей: 11
Полезность: 0

soneekk, можно попробовать так сделать Код:
#define IsPlayer(%1)    ( 1 <= %1 <= g_iMaxPlayers )
new g_iMaxPlayers

public plugin_init() {
g_iMaxPlayers = get_maxplayers()
}

public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !IsPlayer(iKiller) || iKiller == iVictim || !is_user_connected( iVictim ) )
return;

g_iExp[ iKiller ] += 1;
g_Points[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 26.8.2016, 14:43
Сообщение #3


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

Игрока может убить не только другой игрок. Проверяйте индекс на валидность. У вас размер массива 33, когда убийца может быть энтити с индексом 100.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Unknown
сообщение 26.8.2016, 16:21
Сообщение #4
Стаж: 10 лет

Сообщений: 291
Благодарностей: 70
Полезность: < 0

нативе is_user_connected есть проверка IsPlayer вот только там вы проверяете victim а надо проверить killer


Аткажитесъ от плагенов бес исходника.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Sonikplus
сообщение 26.8.2016, 20:46
Сообщение #5
Стаж: 11 лет

Сообщений: 18
Благодарностей: 11
Полезность: 0

да, is_user_connected( iVictim ) здесь не нужно, но в коде было, вот я и оставил blush2.gif
в данном случае, проверки IsPlayer, думаю достаточно для ошибки index out of bounds
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 27.8.2016, 10:53
Сообщение #6


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Sonikplus,
спасибо тестирую, вроде всё норм.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 28.8.2016, 18:41
Сообщение #7


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Sonikplus,

не помогло:
[0] Level_and_Point_Systeme.sma::EV_DeathMsg (line 85)
[AMXX] Displaying debug trace (plugin "Level_and_Point_Systeme.amxx")
[AMXX] Run time error 4: index out of bounds
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 28.8.2016, 18:46
Сообщение #8


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

А где у тебя в коде 85 строка ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 28.8.2016, 18:52
Сообщение #9


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Цитата(Andrei @ 28.8.2016, 18:46) *
А где у тебя в коде 85 строка ?



Код:
public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !IsPlayer(iKiller) || iKiller == iVictim || !is_user_connected( iVictim ) )
return;

g_iExp[ iKiller ] += 1;
g_Points[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;
}
}


85: Код:
while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] ) 
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 28.8.2016, 18:57
Сообщение #10


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Покажи g_iExp, g_iLevel, MAX_LEVELS, просто думаю игрок достиг макс левала MAX_LEVELS и выходит дальше за рамки. Проверка то не стоит при максимальном уровне.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя soneekk
сообщение 28.8.2016, 19:30
Сообщение #11


Стаж: 13 лет

Сообщений: 335
Благодарностей: 13
Полезность: < 0

Цитата(Andrei @ 28.8.2016, 18:57) *
Покажи g_iExp, g_iLevel, MAX_LEVELS, просто думаю игрок достиг макс левала MAX_LEVELS и выходит дальше за рамки. Проверка то не стоит при максимальном уровне.


да вроде так и есть.
вес код
Код:
#include < amxmodx >
#include < fakemeta >
#include <hamsandwich>

#define PLUGIN_NAME "Level & Point System"
#define PLUGIN_VERSION "0.2"
#define PLUGIN_AUTHOR "Bos93 & FirsT, SoNeeKK1"

#define MAX_CLIENTS 32
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )

new g_iMaxPlayers;

const PEV_SPEC_TARGET = pev_iuser2;
new g_HudSterVVVXXXxyz;

new const MAX_LEVELS[16] =
{
0, //1
150, //2
400, //3
800, //4
1500, //5
2000, //6
2200, //7
2400, //8
2600, //9
2900, //10
3200, //11
3500, //12
3750, //13
3950, //14
4200, //15
4500 //16
}

const PEV_SPEC_TARGET = pev_iuser2

new g_iLevel[ MAX_CLIENTS + 1 ], g_iExp[ MAX_CLIENTS + 1 ], g_Points[ MAX_CLIENTS + 1 ], g_playername[ MAX_CLIENTS + 1 ][ MAX_CLIENTS ];

public plugin_init( )
{
register_plugin ( PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR );

register_event( "DeathMsg", "EV_DeathMsg", "a" );
register_event("ResetHUD", "event_ResetHud", "be");

g_HudSterVVVXXXxyz = CreateHudSyncObj();
g_iMaxPlayers = get_maxplayers();
}

public plugin_natives()
{
register_native("get_user_level", "native_get_user_level", 1)
register_native("get_user_points", "native_get_user_points", 1);
register_native("get_user_exp", "native_get_user_exp", 1)

register_native("set_user_level", "native_set_user_level", 1)
register_native("set_user_exp", "native_set_user_exp", 1)
register_native("set_user_points", "native_set_user_points", 1);

register_native("add_user_points", "native_add_user_points", 1);
register_native("del_user_points", "native_del_user_points", 1);
}

public client_putinserver(id)
{
set_task(1.0, "ShowHud", id, _, _, "b");
}

public EV_DeathMsg( )
{
static iVictim, iKiller;
iVictim = read_data( 2 );
iKiller = read_data( 1 );

if( !IsPlayer(iKiller) || iKiller == iVictim || !is_user_connected( iVictim ) )
return;

g_iExp[ iKiller ] += 1;
g_Points[ iKiller ] += 1;

while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] )
{
g_iLevel[ iKiller ] += 1;
}
}

public event_ResetHud(id)
{
ShowHud(id);
}

public ShowHud(id)
{
new idSpec;
new iPlayerName[32];
idSpec = pev(id, PEV_SPEC_TARGET);
get_user_name(idSpec, iPlayerName, 31);

if (is_user_connected(id) && is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2) && g_iLevel[id] == 16)
{
set_hudmessage(0, 255, 0, 0.01, 0.13, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "[HP: %d] | [Broni: %d]^n[Leveli: 16 (MAX)] | [Exp: MAX]^n[Ertguleba: 0] | [Qula: %d]", get_user_health(id), get_user_armor(id), g_Points[id]);
}
else if (is_user_connected(id) && is_user_alive(id) && (get_user_team(id) == 1 || get_user_team(id) == 2))
{
set_hudmessage(0, 255, 0, 0.01, 0.13, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "[HP: %d] [Broni: %d]^n[Leveli: %d] [Exp: %d / %d]^n[Ertguleba: 0] [Qula: %d]", get_user_health(id), get_user_armor(id), g_iLevel[id], g_iExp[id], (MAX_LEVELS[g_iLevel[id]]), g_Points[id]);
}
else if(g_iLevel[idSpec] == 16)
{
set_hudmessage(100, 100, 100, -1.0, 0.8, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "Spectating: %s^n[HP: %d] | [Broni: %d]^n[Leveli: 16 (MAX)] | [Exp: MAX]^n[Ertguleba: 0] | [Qula: %d]", iPlayerName, get_user_health(idSpec), get_user_armor(idSpec), g_Points[idSpec]);
}
else
{
set_hudmessage(100, 100, 100, -1.0, 0.8, 0, 5.0, 3.0, 1.0, 1.0, -1);
ShowSyncHudMsg(id, g_HudSterVVVXXXxyz, "Spectating: %s^n[HP: %d] | [Broni: %d]^n[Leveli: %d] | [Exp: %d / %d]^n[Ertguleba: 0] | [Qula: %d]", iPlayerName, get_user_health(idSpec), get_user_armor(idSpec), g_iLevel[idSpec], g_iExp[idSpec], (MAX_LEVELS[g_iLevel[idSpec]]), g_Points[idSpec]);
}
}

public native_get_user_exp(id)
{
return g_iExp[id];
}

public native_set_user_exp(id, amount)
{
g_iExp[id] = amount;
}

public native_get_user_level(id)
{
return g_iLevel[id];
}

public native_set_user_level(id, amount)
{
g_iLevel[id] = amount;
}


public native_get_user_points(id)
{
return g_Points[id];
}

public native_set_user_points(id, amount)
{
g_Points[id] = amount;
}

public native_add_user_points(id, amount)
{
g_Points[id] += amount;
}

public native_del_user_points(id, amount)
{
g_Points[id] -= amount;
}

stock color_print( const id , const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)

replace_all(msg, 190, "!g", "^4" ) // Green Color
replace_all(msg, 190, "!y", "^1" ) // Default Color
replace_all(msg, 190, "!team", "^3" ) // Team Color

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();
}
}
}
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 28.8.2016, 20:13
Сообщение #12


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Код:
		if( g_iLevel[ iKiller ] >= sizeof( MAX_LEVELS ) )
return;


Перед Код:
 while( g_iExp[ iKiller ] >= MAX_LEVELS[ g_iLevel[ iKiller ] ] ) 
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Unknown
сообщение 29.8.2016, 9:53
Сообщение #13
Стаж: 10 лет

Сообщений: 291
Благодарностей: 70
Полезность: < 0

Не думаю что это поможет и не понятно зачем там цикл while


Аткажитесъ от плагенов бес исходника.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: