Очистка Decals индивидуально игроку

ssx

Сообщения
295
Реакции
86
Помогите плиз разобраться почему не работает функция fm_cs_remove_decals(id) для конкретного игрока.

Код:
// fakemeta_util.inc

#define FEV_RELIABLE (1<<1)
#define FEV_GLOBAL (1<<2)

// removes all created decals and players' corpses from the world
// set a specific index to remove decals only for the given client
stock fm_cs_remove_decals(index = 0) {
    static eventindex_decal_reset;
    if (!eventindex_decal_reset)
        eventindex_decal_reset = engfunc(EngFunc_PrecacheEvent, 1, "events/decal_reset.sc");

    new flags = FEV_RELIABLE;
    if (!index)
        flags |= FEV_GLOBAL;

    engfunc(EngFunc_PlaybackEvent, flags, index, eventindex_decal_reset, 0.0, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0}, 0.0, 0.0, 0, 0, 0, 0);
}

Как бы пишет что если указывать id игрока то только ему будет очищать. По факту всем.

Уже пробовал менять на
Код:
#define FEV_CLIENT      (1<<6)
- не помогает.

Хочу сделать на КСДМ сервере чтобы при смерте очищало декали пуль из-за чего у игроков лаги после пару минут игры на aim_ картах (ибо они не знают о r_decals и mp_decals).

Код:
#include amxmodx
#include fakemeta_util

#define FEV_RELIABLE    (1<<1)
#define FEV_GLOBAL (1<<2)
#define FEV_UPDATE      (1<<3)
#define FEV_CLIENT      (1<<6)

public plugin_init()
{
    register_plugin("Remove Decals", "1.0", "xxx)
    register_srvcmd("FuncRemoveDecals", "FuncRemoveDecals")
    register_clcmd("FuncRemoveDecals", "FuncRemoveDecals")
}

public FuncRemoveDecals(id)
{
    server_cmd("say [DEBUG 1] Remove decals for client %d", id)
    fm_cs_remove_decals_test(id)
}

stock fm_cs_remove_decals_test(index = 0) {
    static eventindex_decal_reset;
    if (!eventindex_decal_reset)
        eventindex_decal_reset = engfunc(EngFunc_PrecacheEvent, 1, "events/decal_reset.sc");

    new flags = FEV_RELIABLE;
    if (!index)
        flags |= FEV_GLOBAL;

    engfunc(EngFunc_PlaybackEvent, flags, index, eventindex_decal_reset, 0.0, Float:{0.0, 0.0, 0.0}, Float:{0.0, 0.0, 0.0}, 0.0, 0.0, 0, 0, 0, 0);
    server_cmd("say [DEBUG 2] EngFunc_PlaybackEvent flags %d | index %d", flags, index);
}

П.С. Так же заметил что когда отправляю функцию - на клиентах идёт дикий фриз на 2-3 сек после чего КС отлагивает и очищает. Тестирую с пару клиентов стим кс.
Но если лаг не избежен то между смертью и респавном игроку это не будет мешать. Осталось решить как очищать только конкретному игроку.
П.С. П.С. Сервер на reHLDS - может для reAPI есть что-то подобное?
 
Сообщения
500
Реакции
275
Помог
6 раз(а)
Каким образом декали-то могут быть виноваты? Это же безобидные "наклейки" на текстуры, которые совсем не садят FPS. Скорее посадит то, что в кадре много игроков или armoury_entity (epoly++).
 

ssx

Сообщения
295
Реакции
86
CHEL74, у меня даже на Nvidia RTX 2080 Max-Q с 400 проседает до 130 ФПС при дефолтном r_decals 4096 на карте aim_headshot в КСДМ режиме.

Кровь и т д блокануть (хотя зачем блокировать если fm_cs_remove_decals удаляет кровь и трупы) проще а вот с декалями второй день занимаюсь сексом.

что в кадре много игроков или armoury_entity
Игроков в среднем 5х5 а броня и оружие удаляется сразу (КСДМ).

П.С. не под реАПИ бы тоже было бы хорошо ибо на ХЛ сервере у меня много трупов\крови\эффектов\декалей - тоже хотелось бы оптимизировать с помощью удаления декалей при смерте.

Вообще, как происходит работа с декалями?
Это чисто клиентская хрень или же сервер посылает (каждый или нет?) кадр где рисовать декали (все или новые?).
Реально ли сервером контролировать клиентские квары mp_decals/r_decals ? - то есть удалять только те декали что вылазят за значение квара ?
Игроки невероятно тупы и ленивы и даже если им писать в чат "у тебя просадки ФПС из-за большого кол-ва крови\декалей, сделай mp_decals/r_decals меньше" - они же все равно проигнорируют это.

П.С. я даже готов заплатить за реализацию плагина но хотелось бы это публично и совместно обсудить\сделать.
 
Последнее редактирование:
Сообщения
500
Реакции
275
Помог
6 раз(а)
ssx, могу ошибаться, но насколько я помню, r_decals ограничивается кваром mp_decals, из-за чего не удастся нарисовать больше декалей, чем установлено в mp_decals.
 

ssx

Сообщения
295
Реакции
86
CHEL74, mp_decals default = 300
По сути просадки ФПС (тестил на встроенной intel HD графике) даже на деф значениях (на КСДМ aim_ / Fy_ картах).
Я б не заморачивался бы над этим если бы сам не играл с ноутбуков со встройками и т д слабым железом.
И я так понимаю кровь это такие же энтити (спрайты) как и декали и по сути просадки от кол-во.
На соседнем форуме там вообще флуд пошёл типа "декали вообще FPS не просаживают ни на сколько ".

Суть этой темы в понимании как сделать так чтобы очищать конкретному игроку декали (кровь\пули) через fm_cs_remove_decals или же аналог какой-то. А там уже тесты проведём и определим просаживает ФПС или нет.
В идеале бы контролировать сервером клиентские квары r_decals/mp_decals для удаления только тех что выходят за значение квара но если это невозможно то хотя бы очищать все декали (к примеру в событие смерти игрока вызывать функцию).
 
Последнее редактирование:

Garey

ninjaCow
Сообщения
440
Реакции
1,094
Помог
11 раз(а)
Код:
// Only send to entity specified as the invoker
#define    FEV_HOSTONLY    (1<<4)
 
Сообщения
105
Реакции
194
Каким образом декали-то могут быть виноваты? Это же безобидные "наклейки" на текстуры, которые совсем не садят FPS. Скорее посадит то, что в кадре много игроков или armoury_entity (epoly++).
В GoldSrc рендерер так устроен, что там даже 2D текст на экране нихерово может садить FPS (glBegin/glEnd на каждую букву, очень мощно)
 
Сообщения
500
Реакции
275
Помог
6 раз(а)
SNMetamorph, у меня сильно садит чат. Когда у людей общение горит там, отключаю) В том и дело, что у меня компьютер очень слабый, но декали вообще никак не влияют на FPS. Первый раз слышу, чтобы из-за них проблемы возникали у кого-то.
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
ssx, могу ошибаться, но насколько я помню, r_decals ограничивается кваром mp_decals, из-за чего не удастся нарисовать больше декалей, чем установлено в mp_decals.
Ошибаешься. Ровно наоборот
 
Сообщения
500
Реакции
275
Помог
6 раз(а)
Nordic Warrior, простестил, у меня ограничивается. Но чтобы ограничение сработало, надо перезайти на сервер.

UPD: Они друг друга ограничивают) Если в одном меньше другого, берётся меньшее значение.
 

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

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