[Addons] Weapon Skin Manager

Сообщения
95
Реакции
21
Использую плагин Мистрика и Реапи.


Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{   
    if(is_user_connected(pevAttacker) && get_user_flags(pevAttacker) & WM_ACCESS_FLAG && pevAttacker != this)
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
    
        if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
}
Получаем ошибку

Код:
L 02/21/2018 - 20:52:47: [FAKEMETA] Invalid entity
L 02/21/2018 - 20:52:47: [AMXX] Run time error 10 (plugin "weapon_skin_system.amxx") (native "pev") - debug not enabled!
L 02/21/2018 - 20:52:47: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 02/21/2018 - 20:52:47: Unhandled dynamic native error
L 02/21/2018 - 20:52:47: [AMXX] Displaying debug trace (plugin "power_damage.amxx", version "0.1")
L 02/21/2018 - 20:52:47: [AMXX] Run time error 10: native error (native "wss_get_weapon_skin_index")

//line

 if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
//
Суть: new weapon = get_member(pevAttacker, m_pActiveItem); посылает некорректный энтити в плагин мистрика, тот в свою очередь тупо оффает сервер.
Тестил только с этими двумя плагинами, поэтому "конфликт или другие плагины" исключены сразу...

Мистрик призываю Тебя.
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
А где return HC_CONTINUE; в конце функции?

Да и нужен включенный debug на плагине, ибо ошибка не из-за ReAPI.
 
Сообщения
95
Реакции
21
Minni, по поводу return HC_CONTINUE ------->
Если до этого есть какие-то ретурны то определенно нужною. А если оно там просто так, то в принципе нет, по умолчанию функция и так продолжает работать.

По поводу дебага. Дебаг на мистрика плагине не происходит, а там стоит пункт debug. дебажится только сам плагин-аддон. И я неоднократно слышал от неугомона, макарона, что m_pActiveItem возвращает не правильный индекс энтити в игре.
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Если до этого есть какие-то ретурны то определенно нужною. А если оно там просто так, то в принципе нет, по умолчанию функция и так продолжает работать.
Порядок должен быть в любом случае. Не нужно разводить грязь.

По поводу дебага. Дебаг на мистрика плагине не происходит, а там стоит пункт debug. дебажится только сам плагин-аддон. И я неоднократно слышал от неугомона, макарона, что m_pActiveItem возвращает не правильный индекс энтити в игре.
Да, но прикол в том, что это от FakeMeta, а не от ReAPI.

Код:
L 02/21/2018 - 20:52:47: [FAKEMETA] Invalid entity
L 02/21/2018 - 20:52:47: [AMXX] Run time error 10 (plugin "weapon_skin_system.amxx") (native "pev") - debug not enabled!
21 Фев 2018
И по-сути, больше инфы нет. Включи дебаг, предоставь нормальные логи ошибок и тогда будет проще найти ошибку. А пока - это бессмысленно.
 
Сообщения
95
Реакции
21
Minni, а это от плагина использующего его инклюды.
[AMXX] Run time error 10: native error (native "wss_get_weapon_skin_index")

Плагин-аддон ----> запрашивает у плагина мистрика имеет ли этот энтити скин ? Плагин отвечает Да\Нет ( при условии что энтити вообще валиден)
если плагин аддон-посылает невалидный энт ,тот тупо крашится.

>Порядок должен быть в любом случае. Не нужно разводить грязь.
- Скажи это ПростоТеме, он покажет как оформлять надо ;)


и так вдобавок о Вашей находчивости.
https://dev-cs.ru/threads/1032/post-10395

там вы тоже говорили, что дело не в плагине, это у меня что-то не так работает...но увы оказалось реально баг ------- вот так поворот)
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, ошибку сыпет все время? Не из-за грены ли весь сыр-бор?
 
Сообщения
95
Реакции
21
и да Minni, за попытки помощи спасибо, у меня нету желания батл тут какой-то устраивать, просто хочу довести до ума работу плагина.

Одним из вариантов было предложено сделать так:

в плагине мистрика

Код:
public native_get_weapon_skin_index(plugin, params)
{
    enum { arg_weapon = 1 };
   
    new weapon = get_param(arg_weapon);
   
+   if(!is_valid_pev(weapon)) return 0;
   
    return get_weapon_skin(weapon);
}

но в течении минут 20 поймал выедание ядра на 100%
21 Фев 2018
Sonyx, нет ошибка появляется один раз и сразу офф сервер
21 Фев 2018
та и дамаг от грены я исключил if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
 
Последнее редактирование модератором:
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, ну во первых вы дамаг от грены исключили только для множителя, а в натив все летит.
во вторых попробуйте проверять в хуке валидность:

Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{   
    if(is_user_connected(pevAttacker) && get_user_flags(pevAttacker) & WM_ACCESS_FLAG && pevAttacker != this)
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
        if(!is_entity(weapon))
        {
            return HC_CONTINUE;
        }
        if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
}
 
Сообщения
95
Реакции
21
Sonyx, делал примерно так же, но вот так:

Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{  
    if(is_user_connected(pevAttacker) && get_user_flags(pevAttacker) & WM_ACCESS_FLAG && pevAttacker != this)
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
       
-       if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
+       if(is_entity(weapon) && wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
}
 
Последнее редактирование модератором:
Сообщения
6
Реакции
7
Код:
new weapon = get_member(pevAttacker, m_pActiveItem);
=>
Код:
new pActiveItem = get_member(pevAttacker, m_pActiveItem);
new pWeaponID = get_member(pActiveItem, m_iId);
Передавай не ActiveItem, а WeaponID.
 
Сообщения
95
Реакции
21
Salvatore, возьми передай и увидишь, что будет. Ответ: Ничего, ибо там идет отлов индекса энтити в игре
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
Сообщения
95
Реакции
21
Mistrick, скажите может ли вот эта проверка от ПростоТемы в вашем плагине создать выедание ядра на 100%?

Код:
public native_get_weapon_skin_index(plugin, params)
{
    enum { arg_weapon = 1 };
  
    new weapon = get_param(arg_weapon);
  
+   if(!is_valid_pev(weapon)) return 0;
  
    return get_weapon_skin(weapon);
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
thegame, не помню чтобы подобное даже в синке могло грузить. Но я бы лучше проверял валидность оружия до вызова wss_get_weapon_skin_index(), чем добавлять проверку в натив.
 
Сообщения
95
Реакции
21
Mistrick, к сожалению в реапи is_entity() пропускает летящий невалидный энт и получаем ошибку + офф.
Как вариант подключить или фейкмету или енджин и через нее делать проверку на валидность в самом плагине, а натив оставить впокое
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, для улучшения понимания картины, прологируй id ентити сразу после получения.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу