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

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

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

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

Поймать func_breakable

Статус пользователя paraz1t15
сообщение 28.2.2017, 19:15
Сообщение #1
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

Суть такая, что нужно поймать что кем то сломан func_breakable и оповестить в чат
Понимаю что можно ловить то что его ломают через RegisterHam( Ham_TakeDamage, "func_breakable", "TakeDamage__Pre" , false );
Но как узнать же что его кто то сломал?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя SISA
сообщение 28.2.2017, 19:18
Сообщение #2
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Можно попробовать отловить через Kill, если там этот бреак чекается. Если чекается только в уроне, то смотри HP жертвы и смотри наносимый урон. Если урон больше HP, то attacker и будет тем, кто разбил объект.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Subb98
сообщение 28.2.2017, 19:18
Сообщение #3


Стаж: 15 лет
Город: Пермь

Сообщений: 216
Благодарностей: 281
Полезность: 1246

Чекать inflictor и его owner'а.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Mistrick
сообщение 28.2.2017, 19:46
Сообщение #4


Стаж: 13 лет

Сообщений: 543
Благодарностей: 426
Полезность: 1034

func_breakable может ломаться и при таче, если у него есть такие флаги.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя paraz1t15
сообщение 28.2.2017, 19:59
Сообщение #5
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

Цитата(Mistrick @ 28.2.2017, 20:46) *
func_breakable может ломаться и при таче, если у него есть такие флаги.


Да понимаю, доски без флага touch, сломаются только от дамага
суть ловить засранцев на ZE картах которые ломают всё подряд.

Цитата(Subb98 @ 28.2.2017, 20:18) *
Чекать inflictor и его owner'а.

таким образом будет показывать каждого кто выстрелил и т.д., нужен сам момент поломки этого энтити и последнего кто нанёс дамагу
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Subb98
сообщение 28.2.2017, 20:19
Сообщение #6


Стаж: 15 лет
Город: Пермь

Сообщений: 216
Благодарностей: 281
Полезность: 1246

Цитата(paraz1t15 @ 28.2.2017, 22:59) *
таким образом будет показывать каждого кто выстрелил и т.д., нужен сам момент поломки этого энтити и последнего кто нанёс дамагу

Я написал, что нужно проверять, а не в каком событии это делать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.2.2017, 20:28
Сообщение #7
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

paraz1t15,

Я же написал, как чекать.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя paraz1t15
сообщение 28.2.2017, 20:31
Сообщение #8
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

Всё благодарю, немного не так подумал просто, попробую реализовать
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя paraz1t15
сообщение 1.3.2017, 1:09
Сообщение #9
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

Кому мож понадобиться.

Код
RegisterHam(Ham_TakeDamage, "func_breakable", "FwdBreakableTakeDamage");

public FwdBreakableTakeDamage(this, attacker, inflictor, Float: damage)
{
    static name[32];
    get_user_name(attacker, name, charsmax(name));
    new Float: health;
    pev(this,pev_health, health);
    if (health - damage <= 0.0)
    {
        chat(0, "!g***!t %s", name);
    }
}


Отредактировал: paraz1t15, - 1.3.2017, 1:09
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя SISA
сообщение 1.3.2017, 2:03
Сообщение #10
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(paraz1t15 @ 28.2.2017, 21:59) *
Да понимаю, доски без флага touch, сломаются только от дамага
суть ловить засранцев на ZE картах которые ломают всё подряд.


таким образом будет показывать каждого кто выстрелил и т.д., нужен сам момент поломки этого энтити и последнего кто нанёс дамагу


Код
RegisterHam(Ham_TakeDamage, "func_breakable", "FwdBreakableTakeDamage_Post", 1);

public FwdBreakableTakeDamage_Post(victim, attacker, inflictor, Float:damage)
{
    new Float:fHealth;
    pev(victim, pev_health, fHealth);

    if (damage >= fHealth)
    {
        new name[32];
        get_user_name(attacker, name, charsmax(name));

        chat(0, "!g***!t %s", name);
    }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя paraz1t15
сообщение 1.3.2017, 4:34
Сообщение #11
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

SISA,
Ну хорошо:D
Вычитал где то что Ham_Killed не будет срабатывать на поломку
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Subb98
сообщение 1.3.2017, 7:49
Сообщение #12


Стаж: 15 лет
Город: Пермь

Сообщений: 216
Благодарностей: 281
Полезность: 1246

Цитата(paraz1t15 @ 1.3.2017, 4:09) *
Код
RegisterHam(Ham_TakeDamage, "func_breakable", "FwdBreakableTakeDamage");

public FwdBreakableTakeDamage(this, attacker, inflictor, Float: damage)
{
    static name[32];
    get_user_name(attacker, name, charsmax(name));
    new Float: health;
    pev(this,pev_health, health);
    if (health - damage <= 0.0)
    {
        chat(0, "!g***!t %s", name);
    }
}

Код:
/**
* Description: Usually called whenever an entity takes any kind of damage.
* Inflictor is the entity that caused the damage (such as a gun).
* Attacker is the entity that tirggered the damage (such as the gun's owner).
* Forward params: function(this, idinflictor, idattacker, Float:damage, damagebits);
* Return type: Integer.
* Execute params: ExecuteHam(Ham_TakeDamage, this, idinflictor, idattacker, Float:damage, damagebits);
*/
Ham_TakeDamage,

1. Вы нарушаете порядок аргументов.
2. Если я разрушу объект с гранаты, то attacker'ом будет entity гранаты.

Написал же изначально:

Цитата(Subb98)
Чекать inflictor и его owner'а.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя SISA
сообщение 1.3.2017, 12:18
Сообщение #13
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата
Если я разрушу объект с гранаты, то attacker'ом будет entity гранаты.


В 1.6 гранаты не разрушают объекты breakable. Просто аттакера надо проверить:

if(attacker <= 0 || attacker > g_iMaxPlayers)
return HAM_IGNORED;

Отредактировал: SISA, - 1.3.2017, 12:28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Subb98
сообщение 1.3.2017, 13:12
Сообщение #14


Стаж: 15 лет
Город: Пермь

Сообщений: 216
Благодарностей: 281
Полезность: 1246

SISA, не раз гранатой выбивал стёкла, ну ОК.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 1.3.2017, 13:34
Сообщение #15
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Subb98 @ 1.3.2017, 15:12) *
SISA, не раз гранатой выбивал стёкла, ну ОК.


Дык ТСу нужен чек досок, а не стекол. Тут или аттакера чекать или инфликтора с rendermode жертвы.

Отредактировал: SISA, - 1.3.2017, 13:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя paraz1t15
сообщение 1.3.2017, 14:17
Сообщение #16
Стаж: 11 лет
Город: Красноярск

Сообщений: 240
Благодарностей: 49
Полезность: 171

Пробежался по картам, поматерился на создателя редактора карт из за того что свойство name не обязательно для обьектов, но немного потрудится, можно и доскам присвоить имена, пока глядел, заметил у всех досок есть свойство material 1, уж наверно означающее что это дерево, так вот, каким образом можно проверить свойства обьектов?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 1.3.2017, 14:37
Сообщение #17
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(paraz1t15 @ 1.3.2017, 16:17) *
Пробежался по картам, поматерился на создателя редактора карт из за того что свойство name не обязательно для обьектов, но немного потрудится, можно и доскам присвоить имена, пока глядел, заметил у всех досок есть свойство material 1, уж наверно означающее что это дерево, так вот, каким образом можно проверить свойства обьектов?


material вряд ли, но на сами энтити досок в карте можно навесить каких-то данных, в том числе строк (тот же targetname, netname или frags должны по идее сработать). Собсна я бы добавил в каждой доске строку с уникальным названием и вывел это дело в lang файлы, чтобы уж сразу знать, какая доска и в каком месте разрушена smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя fl0werD
сообщение 13.3.2017, 14:49
Сообщение #18
Стаж: 9 лет 2 месяца

Сообщений: 155
Благодарностей: 114
Полезность: 692

SISA, немного некорректно. В посте сравнивать здоровье и урон. Логичнее: if( flHealth <= 0.0 ) { }
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: