Убийство с гранаты

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
gyxoBka, а ее не существует. Все зависит от задачи. Если задача стоит проверить только на убийство от гранаты, то вот следующий код будет верным
Код:
if (victim != attacker && inflictor != attacker && get_member(victim, m_bKilledByGrenade)) {}
Тут только для гранаты. Не вижу смысла городить универсальный способ в виде стока. Нам аттакер в данном случае не нужен, ровно как и активайтем. А вот нужен он становится при чеке на нож. Если только нож, то примерно следующее
Код:
if (victim != attacker && inflictor == attacker && is_user_conencted(attacker)) {
    new item = get_member(attacker, m_pActiveItem);
    if (!is_nullent(item) && get_member(item, m_iId) == WEAPON_KNIFE)) {}
}
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
fantom, есть смысл городить унив способ или нет уже другой вопрос. Не понадобится в данном случае то понадобится в другом.

На счет проверок на валидность илт простым не нулент это разговор для отдельноц темы, если коротко то лучше чем не юзать проверку на валидность с валидной приват датой.

Можно назвать параноиком, но после нескольких бессонных ночей я пришел к выводу, что так лучше
 
Последнее редактирование:
Сообщения
1,022
Реакции
822
Помог
10 раз(а)
d3m37r4, работает, но блин, почему итем не проверять на валидность? Если лучше проверить, чем не проверить, нет?
 

d3m37r4

111111
Сообщения
1,430
Реакции
1,170
Помог
10 раз(а)
fantom, товарищи путаются, когда при проверке энтити, которая имеет приватдату не двоечка прилетит и всё. А вообще Духовка не про это, а про простую проверку на индекс (макрос, который в cssdk)
 
Сообщения
702
Реакции
54
d3m37r4, протестил, но вылазила какая-то ошибка с мембером, а я дебаг не включил, в общем, в итоге отвалился сервер с причиной в дебаге ReAPI модуль :D
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
fantom, тем что приходил не нул, но битый инт и не раз такое видел.
И последовательность тестов: не нуллент -> valid_ent -> pev_data 2 и очевидно что ток пев дата решает, если смотреть сурсы, то очевидно что последний вариант медленный, но самый надежный, конечно, не под все случаи подходит, но все же
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
d3m37r4, конечно, это камень в твой огород был (нет :)) к тому что медленее не значит хуже.
А если рассматривать в масштабах текущей задачи, то все одно что сток что проверкк на конкретный ивент - разница настолько мала, что попросту не будет заметна
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
gyxoBka, Честно? Ничего не понял в твоем сообщении.
Какой инт? индекс едикта?
is_nullent это index != 0 + is_entity
в is_entity также как и в pev_valid проверяется индекс едикта и проверяется pvPrivateData
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
fantom, вероятно если завтра перечитаю сообщение, то тоже большую часть не пойму по объективным причинам.
В общем, я не говорю что не угодил, а лишь то, что методом тыка выяснилось что дата == 2 решило краш. Я для себя осознал, что буду юзать его.
 
Сообщения
1,022
Реакции
822
Помог
10 раз(а)
ThePhoenix, в общем я хз че у тебя там падает, у меня есть код, похожий на твой, только не со звуками, я написал его таким образом, да немного своеобразно, хз, мне так удобнее. Он работает у меня на протяжении 3 месяцев на боевом сервере, где средний онлайн 25 рыл в течении суток. Никаких ошибок, не падений, ничего не встречал.

C++:
public hook_CSGameRulesPlayerKilled( const iVictim, const iKiller )
{
    if( iVictim == iKiller || !is_user_connected( iVictim ) || !is_user_connected( iKiller ) )
    {
        return HC_CONTINUE;
    }
    
    /* ------------------------------ */
    
    if( get_member( iVictim, m_bKilledByGrenade ) )
    {
        // код
        
        return HC_CONTINUE;
    }
    
    /* ------------------------------ */
    
    new iActiveItem = get_member( iKiller, m_pActiveItem );
    
    if( is_nullent( iActiveItem ) )
    {
        return HC_CONTINUE;
    }
    
    /* ------------------------------ */
    
    new WeaponIdType: iWeaponID = get_member( iActiveItem, m_iId );
    
    if( iWeaponID && iWeaponID == WEAPON_KNIFE )
    {
        // код
    }
    
    return HC_CONTINUE;
}
Да, тут можно провести всякие типа оптимизации, убрать создание каждый раз переменной, сократить все пробелы, строки и прочие манипуляции, просто хз зачем и ради чего, я увы не знаю/ не шарю.
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
Javekson, получаешь активитем у гипотетически мертвого игрока, но зато сервере
 
Сообщения
1,022
Реакции
822
Помог
10 раз(а)
gyxoBka, я думал об этом, как ты говоришь, гипотетически, и пришел к мнению, что вряд ли возникнет ситуация когда киллер убивший с ножа окажется мертвым, хотя если он только ножом не кидается, возможно. Но, есть ли разница в получение итема у inflictor ? Это же по сути тот же игрок(энтити), если убийство произошло с оружия, так в чем разница получать мембер у киллера или инфликтора? Или ты предлогаешь проверить на жив ли киллер?
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
Javekson, всё зависит от задач и возможных сценариев. я не говорил, что код плох. Каждый сам решает, что ему надо, а что нет.
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
Javekson, почти все верно. Убери только проверку на конект виктима. А также добавь проверку на инфликтор ниже проверки на гранату. Он у тебя должен быть равен игроку. Пример когда в твоем варианте сработает не как нужно: игрок умирает от бомбы, и в этот момент у руках того, кто заложил бомбу, будет нож в руках.
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
fantom,
if( get_member( iVictim, m_bKilledByGrenade ) )
нормально с работает с игроком не на сервере?
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
gyxoBka, а как виктим может быть не на сераере в этот момент?
22 Апр 2020
Разве что кто-то решит зафорсить дисконект в пре хуке. Тогда да. Такое вполне возможно. Но это увы уже черезчур
 
Сообщения
1,022
Реакции
822
Помог
10 раз(а)
fantom, хук RG_CSGameRules_PlayerKilled не вызывает при взрыве от бомбы, как выяснилось, потому проверку на инфликтор не делал, а проверку на конект виктима согласен, можно убрать, хз зачем я его делал у себя :D наверное на всякий случай
 
Сообщения
219
Реакции
183
Помог
3 раз(а)
fantom, ох, повидал я кучу плагинов и уже ни в чем уверен.
Кстати, очень хотелось бы проверить ситуацию с зависшими игроками на сервере, но которые уже давно вышли, что в этом случае будет
22 Апр 2020
Javekson, в таких случаях, я пишу комент: // шобы было
 
Статус
В этой теме нельзя размещать новые ответы.

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

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