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

Отлов создания ентити  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

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

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

Отлов создания ентити  [Решено]

Сообщение MaG_i » 23 апр 2017, 01:18

Приветствую, мне нужна помощь.
Я хочу отловить момент создания ентити. Есть ли функция, которая делает это ?
Или подскажите пожалуйста варианты как это сделать.
Аватара пользователя
MaG_i
 
Сообщения: 97
Зарегистрирован: 14 апр 2011, 18:05
Благодарил (а): 36 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отлов создания ентити

Сообщение KOTOKU » 23 апр 2017, 01:39

forward fm_spawn, если я тебя правильно понял.
А лучше скажи, что конкретно ты хочешь сделать
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Отлов создания ентити

Сообщение MaG_i » 23 апр 2017, 01:50

Конкретно, хочу поймать момент создания ентити по класнейму(из стороннего плагина) и удалить её.

А через register_think(сlassname, "ent_cl_name") можно это сделать ?
Аватара пользователя
MaG_i
 
Сообщения: 97
Зарегистрирован: 14 апр 2011, 18:05
Благодарил (а): 36 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отлов создания ентити

Сообщение Garey » 23 апр 2017, 17:02

можешь попытаться при спауне с FM_Spawn как написали выше, если не получится с небольшой задержкой ищи по classname и удаляй
Аватара пользователя
Garey
 
Сообщения: 85
Зарегистрирован: 24 дек 2010, 03:12
Благодарил (а): 4 раз.
Поблагодарили: 37 раз.

Re: Отлов создания ентити

Сообщение flymic24 » 24 апр 2017, 10:00

MaG_i, Должен удалять объект в первый же доступный момент

Код: Выделить всё
register_think("ClassName", "Think_Func");

public Think_Func(const iEntity)
{
    if (!is_valid_ent(iEntity))    return;
    
    remove_entity
(iEntity);
    
    return
;

Или же, как писали ранее отлавливай спавн по класснейму и удаляй его.
Аватара пользователя
flymic24
 
Сообщения: 209
Зарегистрирован: 05 окт 2012, 17:29
Откуда: Bryansk
Благодарил (а): 4 раз.
Поблагодарили: 76 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

Re: Отлов создания ентити

Сообщение Subb98 » 24 апр 2017, 10:17

В think'е не безопасно использовать remove_entity. Нужно вешать флаг FL_KILLME и устанавливать nextthink равным gametime, чтобы движок тут же обратился к entity и удалил её.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов создания ентити

Сообщение MaG_i » 24 апр 2017, 13:31

Через FM_Spawn не получается, делал для проверки сообщение в чат, вообще ноль реакции.

Код: Выделить всё
register_forward(FM_Spawn, "Forward_Spawn_Post", 1)

public Forward_Spawn_Post(iEntity)
{
    if(!pev_valid(iEntity))
        return PLUGIN_CONTINUE
    
    new classEnt
[32]
    pev(iEntity, pev_classname, classEnt, sizeof classEnt- 1)
    if(equal(classEnt, "Мой класс нейм"))
        engfunc(EngFunc_RemoveEntity, iEntity)

    return PLUGIN_CONTINUE

Через register_think работает хорошо, делал с начала удаление ентити по старинке, но по совету выше сделал через FL_KILLME.

Код: Выделить всё
register_think("Мой класс нейм", "EntityThink")

public EntityThink(iEntity)
{
    if(!pev_valid(iEntity))
        return PLUGIN_CONTINUE
    
    set_pev
(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
    set_pev(iEntity, pev_nextthink, get_gametime() + 0.01)

    return PLUGIN_CONTINUE
Аватара пользователя
MaG_i
 
Сообщения: 97
Зарегистрирован: 14 апр 2011, 18:05
Благодарил (а): 36 раз.
Поблагодарили: 4 раз.
Опыт программирования: Меньше месяца
Языки программирования: Counter-Strike 1.6

Re: Отлов создания ентити

Сообщение Subb98 » 24 апр 2017, 13:47

MaG_i, попробуйте так:

Код: Выделить всё
register_forward(FM_Spawn, "Forward_Spawn_Post", 1)

>>

Код: Выделить всё
register_forward(FM_Spawn, "Forward_Spawn_Post", 0)


Добавлено спустя 5 минут 11 секунд:
П.с.: и используйте константы Fakemeta:

Код: Выделить всё
#define FMRES_IGNORED    1    // Calls target function, returns normal value
#define FMRES_HANDLED    2    // Tells metamod you did something, still calls target function and returns normal value
#define FMRES_OVERRIDE    3    // Supposed to still call the target function but return your value instead
                            // however this does not work properly with metamod; use supercede instead.
#define FMRES_SUPERCEDE    4    // Block the target call, and use your return value (if applicable) 

Вы должны зарегистрироваться, чтобы видеть ссылки.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Отлов создания ентити

Сообщение Garey » 24 апр 2017, 13:48

да и форвард можно отключить после выполнения если энитити создается конечно 1 раз за карту
Аватара пользователя
Garey
 
Сообщения: 85
Зарегистрирован: 24 дек 2010, 03:12
Благодарил (а): 4 раз.
Поблагодарили: 37 раз.

Re: Отлов создания ентити

Сообщение lop50956 » 24 апр 2017, 13:50

Ещеб форварды без проблем отключались на фейкмете, красиво бы было.
(пресинк отключаться не хотел после множесвенных вкл/выкл)
Аватара пользователя
lop50956
 
Сообщения: 178
Зарегистрирован: 29 ноя 2016, 00:36
Забанен
Благодарил (а): 18 раз.
Поблагодарили: 16 раз.
Опыт программирования: Больше трех лет
Языки программирования: Php

След.

Вернуться в Вопросы по AMXX и его плагинам

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

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

cron