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

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

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

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

Ошибки в плагине.

, cs_set_weapon_ammo
Статус пользователя CH0CAPIC
сообщение 6.9.2014, 11:29
Сообщение #1


Стаж: 12 лет

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

Добрый день. Имеется плагин от RuneMod, который выкидывает ошибки:

Код
L 06/15/2011 - 12:50:53: [CSTRIKE] Non-player entity 0 out of range
L 06/15/2011 - 12:50:53: [AMXX] Run time error 10 (plugin "runemod_theif.amxx") (native "cs_get_weapon_ammo") - debug not enabled!
L 06/15/2011 - 12:50:53: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).


Код:
#include <amxmodx>
#include <engine>
#include <cstrike>
#include "runemod.inc" // We need to include this file, as it contains info we need. Like #define`s and stocks

#define AMMO2STEAL 3

new g_HasRune[MAXPLAYERS+1] // This is the Array used to store if the user is holding a rune.(Remember the base plugin informs this plugin once he picks up a rune.)
new g_MaxEnts
new g_MaxPlayers
new g_WarnMessage[MAXPLAYERS+1]
new g_WeapEntIndex[MAXPLAYERS+1]

new g_iMsgSayText

new const gs_WeaponList[31][25] = {" ","weapon_p228"," ","weapon_scout","weapon_hegrenade","weapon_xm1014","weapon_c4","weapon_mac10","weapon_aug","weapon_smokegrenade",
"weapon_elite","weapon_fiveseven","weapon_ump45","weapon_sg550","weapon_galil","weapon_famas","weapon_usp","weapon_glock18","weapon_awp","weapon_mp5navy","weapon_m249",
"weapon_m3","weapon_m4a1","weapon_tmp","weapon_g3sg1","weapon_flashbang","weapon_deagle","weapon_sg552","weapon_ak47","weapon_knife","weapon_p90" }

public plugin_init()
{
register_plugin("RuneMod Theif", "1.1.0", "EKS")
g_MaxEnts = get_global_int(GL_maxEntities)
g_MaxPlayers = get_maxplayers()
RegisterPlugin("TheifName","TheifDisc",{53,150,240},API_EVENTDAMAGEDONE+API_ROUNDSTARTED+API_EVENTCHANGEWEAPON+AP
I_USELANGSYSTEM)

g_iMsgSayText = get_user_msgid("SayText")
}

public plugin_modules()
{
require_module("cstrike")
}
public API_CurWeaponChange(id,WeaponIndex)
{
g_WeapEntIndex[id] = GenWeaponEntId(id,WeaponIndex)
}
public API_DamageDone(victim,attacker,damage)
{
if(!g_HasRune[attacker]) return PLUGIN_CONTINUE

new winx = get_user_curweaponindex(victim);
if(winx == CSW_HEGRENADE || winx == CSW_SMOKEGRENADE || winx == CSW_FLASHBANG || winx ==CSW_C4)
return PLUGIN_CONTINUE;

StealAmmo(victim,attacker)
if(g_WarnMessage[victim] != attacker)
{
new Name[32]
get_user_name(attacker,Name,31)

ChatColor(victim,"%L",LANG_PLAYER,"TheifStealing",Name)
}
return PLUGIN_CONTINUE
}

stock StealAmmo(victim,attacker)
{
new EntNum = GenWeaponEntId(victim,get_user_curweaponindex(victim) )
new Ammo = cs_get_weapon_ammo(EntNum)
Ammo = Ammo - AMMO2STEAL
if(Ammo < 0) Ammo = 0
cs_set_weapon_ammo(EntNum,Ammo)

if(Ammo > 0) // This means we stole ammo
{
Ammo = cs_get_weapon_ammo(g_WeapEntIndex[attacker])
Ammo = Ammo + AMMO2STEAL
cs_set_weapon_ammo(g_WeapEntIndex[attacker],Ammo)
}
}

public API_DropedRune(id,Reason) //This function is called by the base plugin to inform about the user droped his rune for whatever reason ( he could have used droprune or died )
{
g_HasRune[id] = 0
g_WeapEntIndex[id] = 0
}
public API_PickUpRune(id) // This function is used base plugin to inform this plugin that a user has picked up the rune.
{
g_HasRune[id] = 1
g_WeapEntIndex[id] = GenWeaponEntId(id,get_user_weaponindex(id))
}
public API_RoundStarted()
{
for(new i=1;i<=g_MaxPlayers;i++)
{
g_WarnMessage[i] = 0
}
}
stock GenWeaponEntId(id,WeaponIndex)
{
new Class[24]
for(new i=g_MaxPlayers;i<=g_MaxEnts;i++)
if(is_valid_ent(i) && entity_get_edict(i, EV_ENT_owner) == id)
{
entity_get_string(i,EV_SZ_classname,Class,23)
if(equal(gs_WeaponList[WeaponIndex],Class))
{
return i
}
}
return 0
}

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") // 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, g_iMsgSayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}


Знаю, что ошибка именно в этой части кода:

Код:
stock StealAmmo(victim,attacker)
{
new EntNum = GenWeaponEntId(victim,get_user_curweaponindex(victim) )
new Ammo = cs_get_weapon_ammo(EntNum)
Ammo = Ammo - AMMO2STEAL
if(Ammo < 0) Ammo = 0
cs_set_weapon_ammo(EntNum,Ammo)

if(Ammo > 0) // This means we stole ammo
{
Ammo = cs_get_weapon_ammo(g_WeapEntIndex[attacker])
Ammo = Ammo + AMMO2STEAL
cs_set_weapon_ammo(g_WeapEntIndex[attacker],Ammo)
}
}


Только не знаю, как исправить. is_user_alive, is_user_connected или чем-то другим? Заранее благодарен.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя qvadro
сообщение 6.9.2014, 11:39
Сообщение #2


Стаж: 16 лет

Сообщений: 358
Благодарностей: 147
Полезность: 579

Код
(plugin "runemod_theif.amxx") (native "cs_get_weapon_ammo") - debug not enabled!

Для начала дебаг включите.


Достойно парировать, к сожалению, умеют далеко не многие. Нельзя наказывать людей за критику.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 6.9.2014, 11:47
Сообщение #3


Стаж: 12 лет

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

Цитата(qvadro @ 6.9.2014, 10:39) *
Код
(plugin "runemod_theif.amxx") (native "cs_get_weapon_ammo") - debug not enabled!

Для начала дебаг включите.

Включил, но ошибка выявляется крайне редко.



Цитата(CH0CAPIC @ 6.9.2014, 10:29) *
Знаю, что ошибка именно в этой части кода:

Код:
stock StealAmmo(victim,attacker)
{
new EntNum = GenWeaponEntId(victim,get_user_curweaponindex(victim) )
new Ammo = cs_get_weapon_ammo(EntNum)
Ammo = Ammo - AMMO2STEAL
if(Ammo < 0) Ammo = 0
cs_set_weapon_ammo(EntNum,Ammo)

if(Ammo > 0) // This means we stole ammo
{
Ammo = cs_get_weapon_ammo(g_WeapEntIndex[attacker])
Ammo = Ammo + AMMO2STEAL
cs_set_weapon_ammo(g_WeapEntIndex[attacker],Ammo)
}
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 6.9.2014, 19:38
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

CH0CAPIC,
делайте проверку is_user_connected(id)
похожий баг был с самописом /rs...
без debug - были ошибки... а включал - их нет....

и на будущее, перед тем, как чтото делать с игроком, с начало проверяй подобной проверок...

Отредактировал: Orty_Hart, - 6.9.2014, 19:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 6.9.2014, 20:21
Сообщение #5


Стаж: 12 лет

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

Цитата(Orty_Hart @ 6.9.2014, 18:38) *
CH0CAPIC,
делайте проверку is_user_connected(id)
похожий баг был с самописом /rs...
без debug - были ошибки... а включал - их нет....

и на будущее, перед тем, как чтото делать с игроком, с начало проверяй подобной проверок...


Мм, а точно is_user_connected(id) ? Не victim или attacker? И где конктретно проверять?

ps.gif Включил дебаг:

Код
L 06/15/2011 - 22:16:05: [CSTRIKE] Non-player entity 0 out of range
L 06/15/2011 - 22:16:05: [AMXX] Displaying debug trace (plugin "runemod_theif.amxx")
L 06/15/2011 - 22:16:05: [AMXX] Run time error 10: native error (native "cs_get_weapon_ammo")
L 06/15/2011 - 22:16:05: [AMXX]    [0] runemod_theif.sma::StealAmmo (line 82)
L 06/15/2011 - 22:16:05: [AMXX]    [1] runemod_theif.sma::StealAmmo (line 81)
L 06/15/2011 - 22:16:05: [AMXX]    [2] runemod_theif.sma::API_DamageDone (line 68)


Отредактировал: CH0CAPIC, - 6.9.2014, 20:21
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 6.9.2014, 20:29
Сообщение #6
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

CH0CAPIC,
Код
Non-player entity 0 out of range


ошибка говорит за себя...

Цитата
Мм, а точно is_user_connected(id) ? Не victim или attacker? И где конктретно проверять?


проверяйте тогда 2 игрока.... id я указал, чтоб вам было понятно как воспользоваться функцией.
Пробуйте, не поможет - найдем альтернативу.
Но я уверен проблема в этом...

CH0CAPIC,
тут ещё может быть баг в том, что был получен 0 или не корректный аргумен в строке

Код
new EntNum = GenWeaponEntId(victim,get_user_curweaponindex(victim) )


получаем мы его от victim.... Следовательно у игрока плохое соединение или функция работает не корректно (в чем мало сомнений)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 6.9.2014, 20:35
Сообщение #7
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

CH0CAPIC,
Прошу прощение, предложенный мной фикс, если есть ошибка:

Код
[FUN] Invalid player 28


у вас не много другая....
можете скопировать код кусок кода с API_DamageDone...?

Отредактировал: Orty_Hart, - 6.9.2014, 20:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя CH0CAPIC
сообщение 6.9.2014, 20:39
Сообщение #8


Стаж: 12 лет

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

Цитата(Orty_Hart @ 6.9.2014, 19:35) *
CH0CAPIC,
Прошу прощение, предложенный мной фикс, если есть ошибка:

Код
[FUN] Invalid player 28


у вас не много другая....
можете скопировать код кусок кода с API_DamageDone...?


Код:
79 stock StealAmmo(victim,attacker)
80 {
81 new EntNum = GenWeaponEntId(victim,get_user_curweaponindex(victim) )
82 new Ammo = cs_get_weapon_ammo(EntNum)
83 Ammo = Ammo - AMMO2STEAL
84 if(Ammo < 0) Ammo = 0
85 cs_set_weapon_ammo(EntNum,Ammo)
86
87 if(Ammo > 0) // This means we stole ammo
88 {
89 Ammo = cs_get_weapon_ammo(g_WeapEntIndex[attacker])
90 Ammo = Ammo + AMMO2STEAL
91 cs_set_weapon_ammo(g_WeapEntIndex[attacker],Ammo)
92 }
93 }


От API_DamageDone:

Код:
public API_DamageDone(victim,attacker,damage)
{
if(!g_HasRune[attacker]) return PLUGIN_CONTINUE

new winx = get_user_curweaponindex(victim);
if(winx == CSW_HEGRENADE || winx == CSW_SMOKEGRENADE || winx == CSW_FLASHBANG || winx ==CSW_C4)
return PLUGIN_CONTINUE;

StealAmmo(victim,attacker)
if(g_WarnMessage[victim] != attacker)
{
new Name[32]
get_user_name(attacker,Name,31)

ChatColor(victim,"%L",LANG_PLAYER,"TheifStealing",Name)
}
return PLUGIN_CONTINUE
}


Отредактировал: CH0CAPIC, - 6.9.2014, 20:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 6.9.2014, 20:41
Сообщение #9
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

CH0CAPIC,
Добавь проверку

Код
is_user_alive(id)


а на конект убери....
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя qvadro
сообщение 6.9.2014, 22:37
Сообщение #10


Стаж: 16 лет

Сообщений: 358
Благодарностей: 147
Полезность: 579

Цитата
Non-player entity 0 out of range

Ошибка говорит сама за себя, но надо проверять на валидность объект, а не игрока.


Достойно парировать, к сожалению, умеют далеко не многие. Нельзя наказывать людей за критику.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 7.9.2014, 5:10
Сообщение #11
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

я бы посоветовал переписать всю функцию используя offset для получения колва патронов обоймы текущего оружия


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 7.9.2014, 9:55
Сообщение #12
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

csnet,
Тоже правильно, но это уже если хочет сам пользователь...
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Stimul1
сообщение 8.9.2014, 21:06
Сообщение #13


Стаж: 13 лет

Сообщений: 227
Благодарностей: 262
Полезность: 977

http://amx-x.ru/viewtopic.php?f=8&t=24791
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: