[Addons] Weapon Skin Manager

Сообщения
95
Реакции
21
Sonyx, уже поставил на логировку и отлов момента оффа. хочу тоже увидеть, что оно такое передает туда.
 
Сообщения
95
Реакции
21
Sonyx,
Выдавать должно было только АК \ МКА\ АВП\ со скинами + нож скин + Дигл Скин.........

Debug с мистрика плагина:

Код:
L 02/22/2018 - 10:04:23: deploy: id 16, weapon 127, weaponid 12
L 02/22/2018 - 10:04:25: drop: id 2, weaponbox 167, weapon 199, weaponid 18
L 02/22/2018 - 10:04:25: holster: id 2, weapon 197, weaponid 29
Debug с моего плагина:

Код:
L 02/22/2018 - 10:04:24: Plugins: id 40, weapon 127 , weaponid 12
L 02/22/2018 - 10:04:25: Plugins: id 40, weapon 127 , weaponid 12
L 02/22/2018 - 10:04:25: Plugins: id 40, weapon 127 , weaponid 12
Ошибка:
Код:
L 02/22/2018 - 10:04:25: Start of error session.
L 02/22/2018 - 10:04:25: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180222.log")
L 02/22/2018 - 10:04:25: [ReAPI] get_member: invalid or uninitialized entity
L 02/22/2018 - 10:04:25: [AMXX] Displaying debug trace (plugin "power_damage_test.amxx", version "0.1")
L 02/22/2018 - 10:04:25: [AMXX] Run time error 10: native error (native "get_member")


Код

if(is_user_connected(pevAttacker) && pevAttacker != this)
    {
        new id = get_user_userid(pevAttacker);
        new weapon = get_member(pevAttacker, m_pActiveItem);
        new weaponid = get_member(weapon, m_iId);
        
        log_to_file("addons/amxmodx/configs/test1.txt", "Plugins: id %d, weapon %d , weaponid %d", id, weapon, weaponid);
            
        if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }

Строка ошибки new weaponid = get_member(weapon, m_iId); ...
22 Фев 2018
с проверкой на валидность через is_entity() , через фейкмету is_valid_pev() так ловим офф, id оружий разные....
 
Сообщения
95
Реакции
21
Mistrick, с этой проверкой мы не получаем ошибок и отключение сервера

Код:
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);
}
 
Сообщения
95
Реакции
21
А теперь гадаем)

Ставим логировку при нанесении урона:

Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{   
    if(is_user_connected(pevAttacker))
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
        
        if(!is_entity(weapon))
        {
            new weaponid = get_member(weapon, m_iId);
            log_to_file("addons/amxmodx/logs/test.txt", "weapon %d, weaponid %d", weapon, weaponid);
            
            return HC_CONTINUE;
        }
        
        if(wss_get_weapon_skin_index(weapon) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
    
    return HC_CONTINUE;
}
Cпустя некоторое время:

Код:
L 02/23/2018 - 18:05:42: Start of error session.
L 02/23/2018 - 18:05:42: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20180223.log")
L 02/23/2018 - 18:05:42: [ReAPI] get_member: invalid or uninitialized entity
L 02/23/2018 - 18:05:42: [AMXX] Displaying debug trace (plugin "power_damage.amxx", version "0.1")
L 02/23/2018 - 18:05:42: [AMXX] Run time error 10: native error (native "get_member")
L 02/23/2018 - 18:05:42: [AMXX]    [0] weapons_menu.sma::CBasePlayer_TakeDamage_Pre (line 9)
Вопрос: Что возвращает такое m_pActiveItem?
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame,
Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{   
    if(is_user_connected(pevAttacker) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
        log_to_file("addons/amxmodx/logs/test.txt", "weapon %d", weapon);
        
        if(!is_entity(weapon))
        {
            new weaponid = get_member(weapon, m_iId);
            log_to_file("addons/amxmodx/logs/test.txt", "weaponid %d", weaponid);
            
            return HC_CONTINUE;
        }
        
        if(wss_get_weapon_skin_index(weapon))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
    
    return HC_CONTINUE;
}
так узнаешь что)
 
Сообщения
584
Реакции
1,006
Помог
18 раз(а)
Код:
if(!is_entity(weapon))
{
    new weaponid = get_member(weapon, m_iId);
У вас невалидный weapon и вы решили из него какую-то информацию получить?
 
Сообщения
95
Реакции
21
Mistrick, понимаешь, не смотря на это сервер начинает ложиться еще до передачи в твой натив. m_pActiveItem непонятно что возвращает, не зависимо от того - куда поставить new weaponid = get_member(weapon, m_iId); .... в конце получаем пустую строчку.
23 Фев 2018
в итоге выходит так \ ставь ты проверку на валидный is_entity или на оборот !is_entity с ретурном, оно все равно передает значение в натив, а тот в свою очередь (я так думаю) пытается считать weaponid но тоже не понимает, что это и тупо оффается.
 
Сообщения
95
Реакции
21
Mistrick, Sonyx, При таком условии, проблема вроде как исчезла, даже проверка в нативе не требуется.

Код:
-    if(is_user_connected(pevAttacker)
+    if(is_user_connected(pevAttacker) && !(bitsDamageType & (DMG_GRENADE|DMG_BLAST)))
23 Фев 2018
Mistrick, Sonyx, а нет ,так же оффнуло. строка с m_iId пустая, значение не вернуло.
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{   
    if(is_user_connected(pevAttacker) && (bitsDamageType & DMG_BULLET))
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
        log_to_file("addons/amxmodx/logs/test.txt", "weapon %d", weapon);
        
        new weaponid = get_member(weapon, m_iId);
        log_to_file("addons/amxmodx/logs/test.txt", "weaponid %d", weaponid);
        
        if(wss_get_weapon_skin_index(weapon))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
    
    return HC_CONTINUE;
}
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, каким способом выдаете оружие?
 
Сообщения
95
Реакции
21
Sonyx,
эвент: SpawnEquip
post : true

native: rg_give_item(index, weapon)
24 Фев 2018
что еще могу добавить, это то, что если поставить как вы сделали дамаг только от пуль, то ошибку гет мембера мы не получаем больше, а вот мпАктивИтемс так же шлет валидный энт с невалидным weaponid
 
Сообщения
95
Реакции
21
Sonyx, записал хлтв демку, чтоб увидеть когда оно крашнется. В итоге крашнулось когда взорвалась бомба на даст2.
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
Сообщения
95
Реакции
21
Sonyx, При pevAttacker != pevInflictor не работает урон от оружия, только от гранат.
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, это смотря как сделано, возможно Вы логику не поняли проверки
 
Сообщения
95
Реакции
21
Sonyx,
Код:
public CBasePlayer_TakeDamage_Pre(const this, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
if(is_user_connected(pevAttacker) && pevAttacker != this && pevAttacker != pevInflictor)
    {
        new weapon = get_member(pevAttacker, m_pActiveItem);
        
        if(wss_get_weapon_skin_index(weapon))
        {
            SetHookChainArg(4, ATYPE_FLOAT, flDamage * 1.4);
        }
    }
}
 
Сообщения
957
Реакции
1,185
Помог
52 раз(а)
thegame, в этом случае == надо, != когда ретурн ставится
 
Сообщения
95
Реакции
21
Sonyx, Выражаю большое спасибо , все работает как надо.
 

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

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