Nade Wave Effect/Эффект волн от взрыва гранат

Nade Wave Effect/Эффект волн от взрыва гранат 1.3.6

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
  • Автор ресурса
  • #21
Nekro обновил(а) ресурс [CSS/CSGO] Nade Wave Effect/Эффект волн от взрыва гранат новой записью:

1.3.1.7

Добавлено по дополнительному эффекту на каждую гранату и за каждую сторону. Дополнительный эффект является с рандомным цветом.

Узнать больше об этом обновлении...
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #22
А почему плагин в разделе вип?
 

Flotz

Участник
Сообщения
21
Реакции
3
Thank you for this plugin ! A suggestion for future updates: client in-game command to turn them on/off.
 

mr.skala.johnsohn

Участник
Сообщения
87
Реакции
18
Так когда полноценно исправят эффект дыма?😳🤬 Первый эффект - супер. Второй эффект - чёрная бяка
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
  • Автор ресурса
  • #27
Nekro обновил(а) ресурс [CSS/CSGO] Nade Wave Effect/Эффект волн от взрыва гранат новой записью:

Обновление 1.3.3

1. Плагин переписан на новый синтаксис
2. Оптимизация кода
3. Добавлены проверки на версии игр, теперь плагин сам определяет какие стандартные файлы какой игры считывать
4. Теперь скачивать кустомные файлы не обязательно
5. Включение/Отключение отображения взрывов через стены теперь меняется через файл настроек плагина
6. Размер кустомных файлов значительно снижен (игроки и не заметят, что что то скачивают)
7. Включение/Отключение скачивание кустомных файлов теперь меняется через файл...

Узнать больше об этом обновлении...
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
А не подскажешь, для чего для каждой волны выполнять проверку if (iClient > 0 && IsClientInGame(iClient)), если во время выполнения каллбэка события ничего не изменится (и команда у игрока тоже не сменится, которую ты тоже 3 раза проверяешь)?
Та же самая ботва с получением координат из события.
И вообще там проверка IsClientInGame(iClient) без надобности, т.к. GetClientOfUserId() вернёт 0, если игрок не в игре.

Кстати, когда ты создаёшь массив int color[4], то все ячейки у него имеют значение 0, так что присваивать им значения нужно только тогда когда они должны менять значения. А учитывая то, что ты из раза в раз эти значения для каждой из волн присваиваешь без изменений то было бы правильнее создать несколько массивов (или лучше один двумерный) с константными значениями и использовать их для задания цвета эффекта.
И так для каждого из 4 эффектов для каждой из 3 гранат.

В общем можно существенно сократить код, который ещё и работать будет несколько быстрее и меньше нагружать сервер.

А вот это вообще за гранью моего понимания (копипаста - наше фсйо):
C-подобный:
                if (GetClientTeam(iClient) == 2)
                {
                    color[0] = GetRandomInt(0, 255);
                    color[1] = GetRandomInt(0, 255);
                    color[2] = GetRandomInt(0, 255);
                }
                else
                {
                    color[0] = GetRandomInt(0, 255);
                    color[1] = GetRandomInt(0, 255);
                    color[2] = GetRandomInt(0, 255);
                }
Нафейхуа тут тебе знать в какой команде игрок, бросивший гранату, если в результате будет выполняться та же последовательность действий с теми же параметрами?
Сообщения автоматически склеены:

И ещё для чего тут else, ведь условие совпадает?
загадка.jpg

Сообщения автоматически склеены:

И вот этот кусок просто прекрасен:
C-подобный:
public void CVarChanged_Enable(ConVar CVar, const char[] oldValue, const char[] newValue)
{
    bHeeffectEnable = CVar.BoolValue;
    bFleffectEnable = CVar.BoolValue;
    bSmokeeffectEnable = CVar.BoolValue;
    bInvis = CVar.BoolValue;
    hInvisModels = CVar.BoolValue;
}
Меняешь значение одного квара и это значение присваивается всем переменным. Нафига 5 кваров, если это получился 1 квар с 5 именами и описаниями?
 
Последнее редактирование:

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
  • Автор ресурса
  • #29
Сообщения автоматически склеены:

И ещё для чего тут else, ведь условие совпадает?
Посмотреть вложение 63508
Тут я сам не понял, эту проверку я взял у Фроздака из [CS: Source] - Custom weapons v1.1.12 решил, что ему виднее и лучше не трогать.


А вот это вообще за гранью моего понимания (копипаста - наше фсйо):
C-подобный:
                if (GetClientTeam(iClient) == 2)
                {
                    color[0] = GetRandomInt(0, 255);
                    color[1] = GetRandomInt(0, 255);
                    color[2] = GetRandomInt(0, 255);
                }
                else
                {
                    color[0] = GetRandomInt(0, 255);
                    color[1] = GetRandomInt(0, 255);
                    color[2] = GetRandomInt(0, 255);
                }
Нафейхуа тут тебе знать в какой команде игрок, бросивший гранату, если в результате будет выполняться та же последовательность действий с теми же параметрами?
Тут видимо была идея сделать разными эффекты, но как видно пропустил этот момент и действительно коль одно и тоже смысла нет проверять. Исправлю.

А не подскажешь, для чего для каждой волны выполнять проверку if (iClient > 0 && IsClientInGame(iClient)), если во время выполнения каллбэка события ничего не изменится (и команда у игрока тоже не сменится, которую ты тоже 3 раза проверяешь)?
Та же самая ботва с получением координат из события.
И вообще там проверка IsClientInGame(iClient) без надобности, т.к. GetClientOfUserId() вернёт 0, если игрок не в игре.

Кстати, когда ты создаёшь массив int color[4], то все ячейки у него имеют значение 0, так что присваивать им значения нужно только тогда когда они должны менять значения. А учитывая то, что ты из раза в раз эти значения для каждой из волн присваиваешь без изменений то было бы правильнее создать несколько массивов (или лучше один двумерный) с константными значениями и использовать их для задания цвета эффекта.
И так для каждого из 4 эффектов для каждой из 3 гранат.

В общем можно существенно сократить код, который ещё и работать будет несколько быстрее и меньше нагружать сервер.
Можно по подробнее? Вот сократил чуть чуть

Глянь ещё пожалуйста Bomb Effects+ как тут можно улучшить код.
 

Вложения

  • nade_wave_efect.sp
    24.7 КБ · Просмотры: 2

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Nekro, так у него там определялось какая из версий SM используется, чтобы в любом случае можно было определить движок:
C-подобный:
GetCSGame()
{
    if (GetFeatureStatus(FeatureType_Native, "GetEngineVersion") == FeatureStatus_Available)
    {
        switch (GetEngineVersion()) // новый способ
        {
            case Engine_SourceSDK2006: return GAME_CSS_34;
            case Engine_CSS: return GAME_CSS;
            case Engine_CSGO: return GAME_CSGO;
        }
    }
    else if (GetFeatureStatus(FeatureType_Native, "GuessSDKVersion") == FeatureStatus_Available)
    {
        switch (GuessSDKVersion()) // старый способ
        {
            case SOURCE_SDK_EPISODE1: return GAME_CSS_34;
            case SOURCE_SDK_CSS: return GAME_CSS;
            case SOURCE_SDK_CSGO: return GAME_CSGO;
        }
    }
    return GAME_UNDEFINED;
}
 

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
  • Автор ресурса
  • #33
было бы правильнее создать несколько массивов (или лучше один двумерный) с константными значениями и использовать их для задания цвета эффекта.
И так для каждого из 4 эффектов для каждой из 3 гранат.
Можно пример? Не могу понять.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,980
Почистил и оптимизировал код:
C-подобный:
//// nade_wave_efect 1.3.3.sp
//
// Z:\nade_wave_efect 1.3.3.sp(37) : warning 213: tag mismatch (expected "EngineVersion", got "int")
// Z:\nade_wave_efect 1.3.3.sp(38) : warning 213: tag mismatch (expected "EngineVersion", got "int")
// Z:\nade_wave_efect 1.3.3.sp(39) : warning 213: tag mismatch (expected "EngineVersion", got "int")
// Code size:            39896 bytes
// Data size:             4856 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   61136 bytes
//
// 3 Warnings.
//
// Compilation Time: 0,23 sec
// ----------------------------------------

//// nade_wave_efect 1.3.4.sp
//
// Code size:            39316 bytes
// Data size:             4712 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   60412 bytes
//
// Compilation Time: 0,2 sec
// ----------------------------------------

//// nade_wave_efect 1.3.5.sp
//
// Code size:            22364 bytes
// Data size:             4180 bytes
// Stack/heap size:      16384 bytes
// Total requirements:   42928 bytes
//
// Compilation Time: 0,19 sec
// ----------------------------------------

По-хорошему следовало бы ещё вырубать хуки взрыва гранат при выключении соответствующего квара и сделать массив констант с цветами, но мне было лень.
И так сократил код до 549 строк (с 937 в 1.3.3 и 867 в 1.3.4).
Убрал квар sm_effectinvis_downloads (если квар sm_effectinvis_enable включён, то загрузка будет автоматически включена, не вижу никакого смысла в дополнительном кваре для этого).
 
Последнее редактирование:

Димок

Участник
Сообщения
153
Реакции
7
C-подобный:
//SourceMod Batch Compiler
// by the SourceMod Dev Team


//// nade_wave_efect.sp
//
// D:\script\include\sdktools_tempents_stocks.inc(278) : error 017: undefined symbol "TE_Start"
// D:\script\include\sdktools_tempents_stocks.inc(278) : warning 215: expression has no effect
// D:\script\include\sdktools_tempents_stocks.inc(278) : error 001: expected token: ";", but found ")"
// D:\script\include\sdktools_tempents_stocks.inc(278) : error 029: invalid expression, assumed zero
// D:\script\include\sdktools_tempents_stocks.inc(278) : fatal error 190: too many error messages on one line
//
// Compilation aborted.
// 4 Errors.
//
// Compilation Time: 0,19 sec
// ----------------------------------------

SM:1.10 6545
 

Max Rhine

Участник
Сообщения
172
Реакции
29
C-подобный:
case 1:
        {
            //Первая волна
            color[1] = 0;
            color[3] = 255;
            if (GetClientTeam(client) == 2)    //т
            {
                color[0] = 0;        //#000080 тёмно синяя
                color[1] = 0;
                color[2] = 128;
            }
            else
            {
                color[0] = 0;            //#00a3cc
                color[1] = 163;
                color[2] = 204;
            }
            pos[0] = GetEventFloat(hEvent, "x"); pos[1] = GetEventFloat(hEvent, "y"); pos[2] = GetEventFloat(hEvent, "z");
            TE_SetupBeamRingPoint(pos, 10.0, 390.0, iLaser, iHalo, 0, 0, 0.5, 20.0, 5.0, color, 50, 0);
            TE_SendToAll();

            //вторая внешняя волна
            color[1] = 0;
            color[3] = 255;
            if (GetClientTeam(client) == 2)    //т
            {
                color[0] = 179;    //#b30000 тёмная вишня
                color[1] = 0;
                color[2] = 0;
            }
            else
            {
                color[0] = 46;        //#2eb82e зелёный
                color[1] = 184;
                color[2] = 46;
            }
            pos[0] = GetEventFloat(hEvent, "x"); pos[1] = GetEventFloat(hEvent, "y"); pos[2] = GetEventFloat(hEvent, "z");
            TE_SetupBeamRingPoint(pos, 390.0, 10.0, iLaser, iHalo, 0, 0, 0.5, 20.0, 10.0, color, 50, 0);
            TE_SendToAll();
            
            //третья волна ядро
            color[1] = 0;
            color[3] = 255;
            if (GetClientTeam(client) == 2)
            {
                color[0] = 128;        //#800000
                color[1] = 0;
                color[2] = 0;
            }
            else
            {
                color[0] = 0;            //#005266
                color[1] = 82;
                color[2] = 102;
            }
            pos[0] = GetEventFloat(hEvent, "x"); pos[1] = GetEventFloat(hEvent, "y"); pos[2] = GetEventFloat(hEvent, "z");
            pos[2] += 50.0;    //значение высоты
            for (int i = 1; i <= 15; i++) // Создаем цикл. На этот раз радиус один. i просто счетчик высоты. Цилиндр будет высотой 150 единиц.
            {                           // Создаем маяк (кольцо) с нач. диаметром 50.0 ед. и конечным 51.0 единица, чтобы все работало.
                TE_SetupBeamRingPoint(pos, 40.0, 41.0, iLaser, iHalo, 0, 0, 0.5, 10.0, 0.0, color, 50, 0);
                TE_SendToAll();
                pos[2] = pos[2] + 1.0; // Добавляем + 1 единицу к координате Z, чтобы фигура росла в высоту.
            }
        }
Зачем каждый раз делать проверку GetClientTeam? Можно же сделать перед switch(GetRandomInt(1, 5)) один раз проверку и через if/switch выполнять условие
C-подобный:
int Team = GetClientTeam(client);
Сообщения автоматически склеены:

Так в описание не указано какой SM нужен
1.11 нужно ставить
 

Похожие темы

Сверху Снизу