Баг с flare гранатами в Zombie Plague 4.3 Fix 5a

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
9
Реакции
6
Ошибка
Баг с flare гранатами в Zombie Plague 4.3 Fix 5a
ОС
Linux
Amx Mod X
1.9.0
Билд
Не имеет значения (тестил на двух билдах)
ReGamedll
нету
Версия Metamod
1.21p37
Список метамодулей
[ 1] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0-d ini Start ANY
[ 2] Reunion RUN - reunion_mm_i386. v0.1.92d ini Start Never
[ 3] Rechecker RUN - rechecker_mm_i38 v2.3 ini Chlvl ANY
[ 4] VoiceTranscoder RUN - VoiceTranscoder. v2017RC5 ini ANY ANY
[ 5] Ham Sandwich RUN - hamsandwich_amxx v1.9.0-d pl1 ANY ANY
[ 6] CSX RUN - csx_amxx_i386.so v1.9.0-d pl1 ANY ANY
[ 7] Engine RUN - engine_amxx_i386 v1.9.0-d pl1 ANY ANY
[ 8] CStrike RUN - cstrike_amxx_i38 v1.9.0-d pl1 ANY ANY
[ 9] Fun RUN - fun_amxx_i386.so v1.9.0-d pl1 ANY ANY
[10] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0-d pl1 ANY ANY
[11] GeoIP RUN - geoip_amxx_i386. v1.9.0-d pl1 ANY ANY
Список плагинов
[ 1] Admin Base 1.9.0-dev+ AMXX Dev Team admin.amxx running
[ 2] Admin Commands 1.9.0-dev+ AMXX Dev Team admincmd.amxx running
[ 3] Admin Help 1.9.0-dev+ AMXX Dev Team adminhelp.amxx running
[ 4] Slots Reservation 1.9.0-dev+ AMXX Dev Team adminslots.amxx running
[ 5] Menus Front-End 1.9.0-dev+ AMXX Dev Team menufront.amxx running
[ 6] Commands Menu 1.9.0-dev+ AMXX Dev Team cmdmenu.amxx running
[ 7] Players Menu 1.9.0-dev+ AMXX Dev Team plmenu.amxx running
[ 8] Maps Menu 1.9.0-dev+ AMXX Dev Team mapsmenu.amxx running
[ 9] Plugin Menu 1.9.0-dev+ AMXX Dev Team pluginmenu.amxx running
[ 10] Admin Chat 1.9.0-dev+ AMXX Dev Team adminchat.amxx running
[ 11] Anti Flood 1.9.0-dev+ AMXX Dev Team antiflood.amxx running
[ 12] Scrolling Message 1.9.0-dev+ AMXX Dev Team scrollmsg.amxx running
[ 13] Info. Messages 1.9.0-dev+ AMXX Dev Team imessage.amxx running
[ 14] Admin Votes 1.9.0-dev+ AMXX Dev Team adminvote.amxx running
[ 15] NextMap 1.9.0-dev+ AMXX Dev Team nextmap.amxx running
[ 16] Nextmap Chooser 1.9.0-dev+ AMXX Dev Team mapchooser.amxx running
[ 17] TimeLeft 1.9.0-dev+ AMXX Dev Team timeleft.amxx running
[ 18] Pause Plugins 1.9.0-dev+ AMXX Dev Team pausecfg.amxx running
[ 19] Stats Configuration 1.9.0-dev+ AMXX Dev Team statscfg.amxx running
[ 20] Zombie Plague 4.3 MeRcyLeZZ zombie_plague40 debug
[ 21] [ZP] Default Zombie Cl 4.3 Fix5 MeRcyLeZZ zp_zclasses40.a running
Автор плагина
MeRcyLeZZ
Версия плагина
Zombie Plague 4.3 Fix 5a (https://forums.alliedmods.net/showthread.php)
Исходный код
// Flare Lighting Effects
flare_lighting(entity, duration)
{
// Get origin and color
static Float:originF[3], color[3]
pev(entity, pev_origin, originF)
pev(entity, PEV_FLARE_COLOR, color)

// Lighting
engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_DLIGHT) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
write_byte(get_pcvar_num(cvar_flaresize)) // radius
write_byte(color[0]) // r
write_byte(color[1]) // g
write_byte(color[2]) // b
write_byte(21) //life
write_byte((duration < 2) ? 3 : 0) //decay rate
message_end()

// Sparks
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_SPARKS) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
message_end()
}
Приветствую,

Световые гранаты (Flare grenades) в Zombie Plague применяются для освещения в темноте. Но иногда эти гранаты взрываются без светового эффекта. Периодичность разная. Бывает несколько гранат вподряд не срабатывают, бывает это происходит очень и очень редко поэтому про баг иногда забываешь.

Я много лет знаю об этом баге так как играл долго на Zombie серверах. Сейчас хочу наконецто это пофиксить для своего сервера. Полагаю, что баг может быть даже на уровне движка игры, но тем не менее, думаю можно как то это исправить, или придумать альтернативу. Помогите, пожалуйста, разобраться, в чем здесь дело, может придумать какой то костыль, или подскажите альтернативные плагины, а то у меня уже заканчиваються идеи. Знаю только что моим игрокам было бы приятно если бы этот баг был пофикшен.

Записал видео чтоб вы могли посмотреть как вовремя моих раскидок некоторые гранаты не сработали (выставил таймкод на 1-й случай):




Вот что я нашел в Интернете на эту тему, но там нету решения, лишь упоминания о существующем баге:

Оригинальный плагин: https://forums.alliedmods.net/showthread.php?t=72505
Обязательно: 4.3 Fix5a, а не 5.0!

Что я пробовал?
1)
Тестил на своем тестовом сервере (91.211.118.156:27067, пароль 123) и на основном сервере, отключал все плагины кроме базовых плагинов AMXX мода и Zombie Plague 4.3 плагинов (zombie_plague40.amxx, zp_classes40.amxx)
2) Пробовал разные настройки плагина, включая длительность flare_duration выставлял 999, менял цвета гранаты подозревая что это может быть связано с тем что у меня стоят рандом цвета.
3) Копировал и восстанавливал стандартные настройки zombie_plague.cfg той секции которая относиться к настройке гранат:

Оригинальные настройки для Flare Grenade из Zombie Plague 4.3 Fix5a:
zp_flare_grenades 1 // Enable flare grenades (overrides SG)
zp_flare_duration 60 // Flare lightning duration in seconds
zp_flare_size 25 // Flare lightning size (radius)
zp_flare_color 0 // Flare color [0-white // 1-red // 2-green // 3-blue // 4-full random // 5-random between r,g,b]


4) Сравнивал исходный код Zombie Plague 4.3 и Zombie Plague 5.0 (zp50_grenade_flare.sma), в надежде что там есть фикс.
5) Смотрел патч ноуты от автора мода и нашел это в версии Version: 4.3 Fix 2 (Jun 19, 2011) "Fixed flares lighting issues", но подробностей что именно фиксили нету, поэтому кажется бесполезная информация
6) Переписывал Zombie Plague Flare гранаты на Biohazard гранаты (bio_smokeflare.sma), но после пару тестов отказался от этой идеи - принцип освещения там видимо другой, хоть и бага не заметил, но он сильно поднимает FPS.

Вот код функции flare_lighing из zombie_plague40.sma, но здесь нету ничего подозрительного. Ниже сброшу весь код zombie_plague40.sma.

Код:
// Flare Lighting Effects

flare_lighting(entity, duration)
{
    // Get origin and color
    static Float:originF[3], color[3]
    pev(entity, pev_origin, originF)
    pev(entity, PEV_FLARE_COLOR, color)

    // Lighting
    engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
    write_byte(TE_DLIGHT) // TE id
    engfunc(EngFunc_WriteCoord, originF[0]) // x
    engfunc(EngFunc_WriteCoord, originF[1]) // y
    engfunc(EngFunc_WriteCoord, originF[2]) // z
    write_byte(get_pcvar_num(cvar_flaresize)) // radius
    write_byte(color[0]) // r
    write_byte(color[1]) // g
    write_byte(color[2]) // b
    write_byte(21) //life
    write_byte((duration < 2) ? 3 : 0) //decay rate
    message_end()

    // Sparks
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
    write_byte(TE_SPARKS) // TE id
    engfunc(EngFunc_WriteCoord, originF[0]) // x
    engfunc(EngFunc_WriteCoord, originF[1]) // y
    engfunc(EngFunc_WriteCoord, originF[2]) // z
    message_end()
}
Кстати, если вы не знаете конкретно как помочь, но допустим знаете какие то другие способы работы с освещением в AMXX, или у вас есть примеры кода других плагинов для световых гранат, которые я мог бы изучить, сбросьте мне их, пожалуйста, или напишите названия. Буду очень благодарен!
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Последнее редактирование:
  • Нравится
Реакции: ifx
Сообщения
9
Реакции
6
Я уже кажется нашел решение.

У меня возникла идея что скорей всего граната не раскрываются потому что грубо говоря вовремя скольжения по полу застряет в карте. Я проверил свою теорию попробовав при приземлении гранаты всадить её по оси Z вниз в пол. Все гранаты таким образом не срабатывают.

Снимок экрана 2025-03-14 222859.png

Теперь я могу сделать тоже самое только приподнять гранату при приземлении на пару юнитов вверх, чтоб это не было заметно игроку

Снимок экрана 2025-03-14 222406.png

Ща я допишу свои правки, нормально скомпилирую и думаю все получиться. Опубликую код как закончу.
 
Сообщения
9
Реакции
6
Вообщем, я буду тестировать дальше свою теорию. Наверное приподнимая гранату на пару юнитов при приземлении этот баг теперь будет возникать реже.

Вот код, который я дописал в zombie_plague40.sma:

Код:
#define MAX_ENTITIES 2048

new bool:wasLifted[MAX_ENTITIES]

// Event Round Start
public event_round_start()
{
    // Какой то код...
  
    for (new i = 0; i < MAX_ENTITIES; i++)
    {
        wasLifted[i] = false;
    }

    // Какой то код...
}

// Flare Lighting Effects
flare_lighting(entity, duration)
{
    // Get origin and color
    static Float:originF[3], color[3]
    pev(entity, pev_origin, originF)
    pev(entity, PEV_FLARE_COLOR, color)
   
    if (!wasLifted[entity])
    {
        // Lift the grenade (e.g, on 1.5 units)
        originF[2] += 1.5;
        set_pev(entity, pev_origin, originF);
       
        // Set the flag so that the grenade is no longer lifted
        wasLifted[entity] = true
    }
   
    // Lighting
    engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0)
    write_byte(TE_DLIGHT) // TE id
    engfunc(EngFunc_WriteCoord, originF[0]) // x
    engfunc(EngFunc_WriteCoord, originF[1]) // y
    engfunc(EngFunc_WriteCoord, originF[2]) // z
    write_byte(get_pcvar_num(cvar_flaresize)) // radius
    write_byte(color[0]) // r
    write_byte(color[1]) // g
    write_byte(color[2]) // b
    write_byte(21) //life
    write_byte((duration < 2) ? 3 : 0) //decay rate
    message_end()
   
    // Sparks
    engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
    write_byte(TE_SPARKS) // TE id
    engfunc(EngFunc_WriteCoord, originF[0]) // x
    engfunc(EngFunc_WriteCoord, originF[1]) // y
    engfunc(EngFunc_WriteCoord, originF[2]) // z
    message_end()
}

Я неуверен что это правильно создавать такой большой буфер под каждую световую гранату что летает на сервере и запоминать таким образом её состояние (приподнята она или нет). Я сбрасываю wasLifted в начале каждого раунде. Дайте знать если есть лучше способы это обрабатывать.

Спасибо
 
  • Нравится
Реакции: ifx
Сообщения
926
Реакции
548
Помог
13 раз(а)
Скорее всего ты напоролся на лимит TE_DLIGHT
Вроде бы есть лимит равным 24 (точно не помню) на количество динамических источников света
Как только пытаешься переваливать за это значение, следующее значение просто перестает обрабатываться , пока предыдущие не исчезнут
 
Сообщения
9
Реакции
6
Спасибо. Это интересно. Я обязательно поищу про это информацию и уже собственно успел пробежаться глазами по этой теме - https://dev-cs.ru/threads/26540

Но у меня сразу возник вопрос. Я всего лишь рассуждаю. Подправьте меня если я неправильно понимаю как это работает. Допустим я кидаю каждый раз новую гранату и тем самым создаю новый динамический источник света. Но этот баг возникает и при выставленной настройке zp_flare_duration 999. Я хочу сказать что свет от гранат не исчезает в течении одного игрового раунда, и источники света только добавляются, а не исчезают. Или нет?

Если не исчезают, то баг заключался бы в том что как только превысил лимит начиная с какой то гранаты все последующие световые гранаты тоже не будут работать до удаление из игры "лишних" источников света. А у меня получается что после гранаты неотработавшей, следующая может отработать.
 
Сообщения
9
Реакции
6
Так же мне дали совет, что лучше использовать MSG_BROADCAST вместо MSG_PAS. Буду тестить.
 
Сообщения
926
Реакции
548
Помог
13 раз(а)
Так же мне дали совет, что лучше использовать MSG_BROADCAST вместо MSG_PAS. Буду тестить.
советую разобраться что такое MSG_BROADCAST и MSG_PAS
по хорошему время апдейтов поменять надо, чтобы те, что подальше TE_DLIGHT'ы не засылались повторно, если далеко и наоборот засылались если близко

BROADCAST - заслать всем по ненадежному каналу
PAS - по принципу нахождения получателя для отправки звуковых эффектов
PVS - по принципу видит ли игрок точку
 
Сообщения
9
Реакции
6
Тему можно закрывать. Отметил как решение свои правки выше, возможно есть и другие способы - я приподнимаю гранаты при окончательном столкновении с полом на полтора юнита. Поигрывая я наблюдал целую неделю за своими световыми гранатами и гранатами других игроков - на моих глазах все отрабатывает хорошо.

Уверен, что я видел работу более 1000 гранат за это время 😅
 
  • Нравится
Реакции: ifx
Статус
В этой теме нельзя размещать новые ответы.

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

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