Русское сообщество по скриптингу

Не наносить урон снарядом через стены.

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Не наносить урон снарядом через стены.

Сообщение JustProOnline » 24 фев 2018, 22:21

Возможно ли в этом отрывке кода предотвратить урон снарядом через стену(ы)?

Код: Выделить всё
RegisterHam(Ham_Touch, "info_target", "touch_re", 1


Код: Выделить всё
public touch_re(touched, toucher)
{
    static zsClassname[32]

    pev(touched, pev_classname, zsClassname, charsmax(zsClassname))

    if(!equal(zsClassname, "fg_launcher_grenade"))
    {
        return HAM_IGNORED
    
}
    
    new Float
:originF[3]
    
    pev
(touched, pev_origin, originF)
    
    new victim 
= FM_NULLENT, attacker

    attacker 
= pev(touched, pev_owner)
    
    while
((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, 150.0)) != 0)
    {    
        if
(is_user_alive(victim) && zp_get_user_zombie(victim) && !zp_class_re_crab(victim) && !zp_class_re_crow(victim))
        {        
            ExecuteHamB
(Ham_TakeDamage, victim, touched, attacker, 350.0, DMG_BULLET)
        }
    }

    set_pev(touched, pev_flags, FL_KILLME)
    
    return HAM_IGNORED
}
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не наносить урон снарядом через стены.

Сообщение Hilarious » 25 фев 2018, 02:10

Во включении fakemeta_util есть готовая функция, с помощью которой можно проверить видимость игрока.
В принципе это то, что вам и нужно. Ну или можно её упростить проверяя расстояние и видимость цели другими способами (впрочем, здесь тоже самое хД)
fm_is_ent_visible(iAttacker, iVictim);
В матрице :-[
Аватара пользователя
Hilarious
 
Сообщения: 69
Зарегистрирован: 07 фев 2018, 08:46
Благодарил (а): 6 раз.
Поблагодарили: 29 раз.

Re: Не наносить урон снарядом через стены.

Сообщение JustProOnline » 14 мар 2018, 15:27

Hilarious, подскажи куда именно данную функцию вставить?
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не наносить урон снарядом через стены.

Сообщение артист666 » 16 мар 2018, 15:36

Перед функцией нанесения урона.
Код: Выделить всё
ExecuteHamB(Ham_TakeDamagevictimtouchedattacker350.0DMG_BULLET
Если вы хотите чему-то научиться, пробуйте, задавайте вопросы.
Иначе компенсируйте потраченное время на ваши "проблемы".
Аватара пользователя
артист666
 
Сообщения: 2706
Зарегистрирован: 09 апр 2013, 17:46
Благодарил (а): 284 раз.
Поблагодарили: 639 раз.
Опыт программирования: Больше трех лет
Языки программирования: С, C++
Delphi
HTML, CSS, Java Script
Pawn

Re: Не наносить урон снарядом через стены.

Сообщение JustProOnline » 16 мар 2018, 22:12

артист666, сделал, но ничего не поменялось :D

Код: Выделить всё
    while((victim engfunc(EngFunc_FindEntityInSpherevictimoriginF180.0)) != 0)
    {        
        if(
is_user_alive(victim) && zp_get_user_zombie(victim) && !zp_class_re_crab(victim) && !zp_class_re_crow(victim))
        {
            
fm_is_ent_visible(attackervictim)
            
            
ExecuteHamB(Ham_TakeDamagevictimtouchedattacker350.0DMG_BULLET)
        }
    } 
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Не наносить урон снарядом через стены.

Сообщение Stimul » 16 мар 2018, 22:51

Код: Выделить всё
fm_is_ent_visible(attacker, victim)
            
ExecuteHamB
(Ham_TakeDamage, victim, touched, attacker, 350.0, DMG_BULLET)
===>
Код: Выделить всё
if(fm_is_ent_visible(attacker, victim))
    
ExecuteHamB(Ham_TakeDamage, victim, touched, attacker, 350.0, DMG_BULLET)
Аватара пользователя
Stimul
 
Сообщения: 3582
Зарегистрирован: 04 янв 2012, 19:51
Благодарил (а): 192 раз.
Поблагодарили: 1163 раз.
Опыт программирования: Больше трех лет


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3