Иконка ресурса

Advanced c4 timer 1.4.1

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254

Вложения

  • advancedc4timer.sp
    14.1 КБ · Просмотры: 63

XAER

Участник
Сообщения
48
Реакции
1
Приветствую всех.
Кто подскажет.
Звуки воспроизводятся только с 20 или 10 секунд. Таймер стоит 35 секунд.
В консоле ошибок нет.
При компиляции тоже не было.
 

Аластар

GunGame Style 24/7
Сообщения
430
Реакции
134
Приветствую, а как-то громкость голосового отсчёта регулируется в данном плагине? Уж больно громко отсчёт ведётся...
 

babka68

Участник
Сообщения
2,137
Реакции
978
C-подобный:
1.5.1
/*
     * Заменены все экземпляры GetClientAuthString() на GetClientAuthId.
     * Убрано warning 234: symbol "FCVAR_PLUGIN" is marked as deprecated: No logic using this flag ever existed in a released game. It only ever appeared in the first hl2sdk.
     * Добавлена пропущенная фраза чата "Bomb"
     * Переделано объявление и изменение ConVars
     * Код переписан на новый синтаксис.
     * В файл перевода добавлен ru перевод.
     * Конфигурационный файл переведен на ru
     * Добавлен новый конвар sm_announce_timer - Через какое время отобразить сообщение от плагина (объявлений)
     * Переименованы название переменных в конфигурационном файле и их объявленные типы
     * Возможно что то забыл описать, но сделал.
     * Добавлена поддержка morecolors, можете разукрасить на свой вкус фразы announce и bomb
*/

111.png

222.png

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

Приветствую всех.
Кто подскажет.
Звуки воспроизводятся только с 20 или 10 секунд. Таймер стоит 35 секунд.
В консоле ошибок нет.
При компиляции тоже не было.
Приложите архивом звуки, и c4soundslist.cfg и advancedc4timer.cfg
Сообщения автоматически склеены:

Приветствую, а как-то громкость голосового отсчёта регулируется в данном плагине? Уж больно громко отсчёт ведётся...
Звуки воспроизвудятся через
C-подобный:
stock void EmitSoundToClient(int client,
                 const char[] sample,
                 int entity = SOUND_FROM_PLAYER,
                 int channel = SNDCHAN_AUTO,
                 int level = SNDLEVEL_NORMAL,
                 int flags = SND_NOFLAGS,
                 float volume = SNDVOL_NORMAL,
                 int pitch = SNDPITCH_NORMAL,
                 int speakerentity = -1,
                 const float origin[3] = NULL_VECTOR,
                 const float dir[3] = NULL_VECTOR,
                 bool updatePos = true,
                 float soundtime = 0.0)
 

Вложения

  • Advanced c4 timer 1.5.1.zip
    129.3 КБ · Просмотры: 83
Последнее редактирование:

SKORAGON

Участник
Сообщения
140
Реакции
17
Ошибка при запуске карты на CSS:OB(v92-steam), на sm 1.12:

C-подобный:
L 05/19/2024 - 15:41:38: [SM] Exception reported: Convar "sm_chat" was not created. A console command with the same might already exist.
L 05/19/2024 - 15:41:38: [SM] Blaming: advancedc4timer.smx
L 05/19/2024 - 15:41:38: [SM] Call stack trace:
L 05/19/2024 - 15:41:38: [SM]   [0] CreateConVar
L 05/19/2024 - 15:41:38: [SM]   [1] Line 179, C:\Users\grodi\Desktop\Advanced c4 timer 1.5.1\addons\sourcemod\scripting\advancedc4timer.sp::OnPluginStart
L 05/19/2024 - 15:41:38: [SM] Unable to load plugin "advancedc4timer.smx": Error detected in plugin startup (see error logs)

Исправил заменой в исходнике sm_chat на sm_sourcemodchat
Сообщения автоматически склеены:

C-подобный:
1.5.1
/*
     * Заменены все экземпляры GetClientAuthString() на GetClientAuthId.
     * Убрано warning 234: symbol "FCVAR_PLUGIN" is marked as deprecated: No logic using this flag ever existed in a released game. It only ever appeared in the first hl2sdk.
     * Добавлена пропущенная фраза чата "Bomb"
     * Переделано объявление и изменение ConVars
     * Код переписан на новый синтаксис.
     * В файл перевода добавлен ru перевод.
     * Конфигурационный файл переведен на ru
     * Добавлен новый конвар sm_announce_timer - Через какое время отобразить сообщение от плагина (объявлений)
     * Переименованы название переменных в конфигурационном файле и их объявленные типы
     * Возможно что то забыл описать, но сделал.
     * Добавлена поддержка morecolors, можете разукрасить на свой вкус фразы announce и bomb
*/

Посмотреть вложение 116928
Посмотреть вложение 116931
Сообщения автоматически склеены:


Приложите архивом звуки, и c4soundslist.cfg и advancedc4timer.cfg
Сообщения автоматически склеены:


Звуки воспроизвудятся через
C-подобный:
stock void EmitSoundToClient(int client,
                 const char[] sample,
                 int entity = SOUND_FROM_PLAYER,
                 int channel = SNDCHAN_AUTO,
                 int level = SNDLEVEL_NORMAL,
                 int flags = SND_NOFLAGS,
                 float volume = SNDVOL_NORMAL,
                 int pitch = SNDPITCH_NORMAL,
                 int speakerentity = -1,
                 const float origin[3] = NULL_VECTOR,
                 const float dir[3] = NULL_VECTOR,
                 bool updatePos = true,
                 float soundtime = 0.0)
 

Вложения

  • advancedc4timer.smx
    16.6 КБ · Просмотры: 21
  • advancedc4timer.sp
    17.6 КБ · Просмотры: 34

Nekro

Терра инкогнита
Сообщения
4,169
Реакции
2,500
C-подобный:
1.5.1
/*
     * Заменены все экземпляры GetClientAuthString() на GetClientAuthId.
     * Убрано warning 234: symbol "FCVAR_PLUGIN" is marked as deprecated: No logic using this flag ever existed in a released game. It only ever appeared in the first hl2sdk.
     * Добавлена пропущенная фраза чата "Bomb"
     * Переделано объявление и изменение ConVars
     * Код переписан на новый синтаксис.
     * В файл перевода добавлен ru перевод.
     * Конфигурационный файл переведен на ru
     * Добавлен новый конвар sm_announce_timer - Через какое время отобразить сообщение от плагина (объявлений)
     * Переименованы название переменных в конфигурационном файле и их объявленные типы
     * Возможно что то забыл описать, но сделал.
     * Добавлена поддержка morecolors, можете разукрасить на свой вкус фразы announce и bomb
*/

Посмотреть вложение 116928
Посмотреть вложение 116931
Сообщения автоматически склеены:


Приложите архивом звуки, и c4soundslist.cfg и advancedc4timer.cfg
Сообщения автоматически склеены:


Звуки воспроизвудятся через
C-подобный:
stock void EmitSoundToClient(int client,
                 const char[] sample,
                 int entity = SOUND_FROM_PLAYER,
                 int channel = SNDCHAN_AUTO,
                 int level = SNDLEVEL_NORMAL,
                 int flags = SND_NOFLAGS,
                 float volume = SNDVOL_NORMAL,
                 int pitch = SNDPITCH_NORMAL,
                 int speakerentity = -1,
                 const float origin[3] = NULL_VECTOR,
                 const float dir[3] = NULL_VECTOR,
                 bool updatePos = true,
                 float soundtime = 0.0)
Обновление:
1. Оптимизирован код
2. Убраны не используемые переменные, такие как g_sSteam
3. Переименован файл конфигурации, теперь он cfg/sourcemod/advanced_c4timer.cfg
4. Переименованы все переменные кфг во избежании ошибок
C-подобный:
Exception reported: Convar "sm_chat" was not created. A console command with the same might already exist.
5. Код уменьшен примерно на третью часть, с 583 до 381 строки
6. Изменен файл перевода для более корректного отображения
7. Изменены названия и описания Куков

Возможно есть смысл добавить еще один HUD..
 

Вложения

  • c4_timer.zip
    125.1 КБ · Просмотры: 100

Nekro

Терра инкогнита
Сообщения
4,169
Реакции
2,500
Обновление:
1. Оптимизирован код
2. Убраны не используемые переменные, такие как g_sSteam
3. Переименован файл конфигурации, теперь он cfg/sourcemod/advanced_c4timer.cfg
4. Переименованы все переменные кфг во избежании ошибок
C-подобный:
Exception reported: Convar "sm_chat" was not created. A console command with the same might already exist.
5. Код уменьшен примерно на третью часть, с 583 до 381 строки
6. Изменен файл перевода для более корректного отображения
7. Изменены названия и описания Куков

Возможно есть смысл добавить еще один HUD..
Перезалил, обновление v1.6.2 :
1. Исправлена опечатка, что изменяло в куках значения только музыки
2. Исправлена ошибка в логике плагина, теперь у вышедшего игрока обнуляется значения, в следствии чего больше нет путаницы в индексах игроков
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,805
Реакции
5,254
глянул код: там же простора для оптимизации ещё поле непаханое =)

Те же проверки валидности игрока: сделана отдельная функция для этого, а используются в большей части плагина проверки по отдельности из неё.
 

Nekro

Терра инкогнита
Сообщения
4,169
Реакции
2,500
глянул код: там же простора для оптимизации ещё поле непаханое =)

Те же проверки валидности игрока: сделана отдельная функция для этого, а используются в большей части плагина проверки по отдельности из неё.
Правил только менюшки, куки, саму логику не смотрел. Только что в галаз бросилось.
 

LichStalker

Участник
Сообщения
85
Реакции
2
Может кто скинет , где озвучка женская и когда остоеться 10 секунд он кажду сек стонет.
 

7pElllHuK

Участник
Сообщения
1,654
Реакции
639

FokS

Участник
Сообщения
428
Реакции
59
Обновление:
1. Оптимизирован код
2. Убраны не используемые переменные, такие как g_sSteam
3. Переименован файл конфигурации, теперь он cfg/sourcemod/advanced_c4timer.cfg
4. Переименованы все переменные кфг во избежании ошибок
C-подобный:
Exception reported: Convar "sm_chat" was not created. A console command with the same might already exist.
5. Код уменьшен примерно на третью часть, с 583 до 381 строки
6. Изменен файл перевода для более корректного отображения
7. Изменены названия и описания Куков

Возможно есть смысл добавить еще один HUD..
Можешь сделать так, что бы когда раунд завершился - установленная бомба удалялась ?
Например как тут: Bomb Events v1.1 - Форум есть настройка - Удалять бомбу в конце раунда.
 

ShmoNiX

Участник
Сообщения
541
Реакции
219
Переписанный плагин под SM v1.12 от google ai + теперь все в одном конфиге и никакого мусора в папке translations


c4timer.sp:
#include <sourcemod>
#include <sdktools>
#include <clientprefs>

#pragma newdecls required
#pragma semicolon 1

#define PLUGIN_VERSION "2.1.0"

// Фразы (вшиты в код)
#define MSG_PLANTED     " \x04[C4]\x01 Бомба заложена! До взрыва: {time} сек."
#define MSG_DEFUSED     " \x04[C4]\x01 Бомба обезврежена!"
#define MSG_EXPLODED    " \x04[C4]\x01 Бомба взорвана!"
#define HINT_TIMER      "Таймер C4: {time}"
#define MSG_INFO        " \x04[C4]\x01 Чтобы отключить звуки таймера для себя, напишите \x03!c4"

// Настройки
int g_iPluginEnabled = 1;
int g_iSoundStartAt = 30;

ConVar g_hCvarTimer = null;
Handle g_hCountdownTimer = null;
Handle g_cPrefClient = null;

int g_iCounter;
char g_sSoundPath[66][PLATFORM_MAX_PATH];
bool g_bClientEnabled[MAXPLAYERS + 1];

public Plugin myinfo =
{
    name = "Advanced c4 Timer (Announcer Logic + Comments)",
    author = "AI Adaptation",
    version = PLUGIN_VERSION
};

public void OnPluginStart()
{
    g_hCvarTimer = FindConVar("mp_c4timer");
    g_cPrefClient = RegClientCookie("c4timer_client_pref", "C4 Timer Client Toggle", CookieAccess_Private);

    RegConsoleCmd("sm_c4", Command_ToggleC4);
    RegConsoleCmd("sm_с4", Command_ToggleC4);

    HookEvent("bomb_planted", Event_BombPlanted);
    HookEvent("bomb_exploded", Event_BombStop);
    HookEvent("bomb_defused", Event_BombStop);
    HookEvent("round_start", Event_BombStop);

    LoadSingleConfig();
}

public void OnMapStart()
{
    LoadSingleConfig();
}

void LoadSingleConfig()
{
    char sPath[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, sPath, sizeof(sPath), "../../cfg/sourcemod/c4timer.cfg");
   
    if (!FileExists(sPath)) {
        File hFile = OpenFile(sPath, "w");
        if (hFile != null) {
            hFile.WriteLine("\"c4timer\"");
            hFile.WriteLine("{");
            hFile.WriteLine("    \"settings\"");
            hFile.WriteLine("    {");
            hFile.WriteLine("        // 1 - Включить плагин, 0 - Выключить");
            hFile.WriteLine("        \"enable\"         \"1\"");
            hFile.WriteLine("");
            hFile.WriteLine("        // С какой секунды начинать звуковой отсчет");
            hFile.WriteLine("        \"sound_start_at\" \"30\"");
            hFile.WriteLine("    }");
            hFile.WriteLine("");
            hFile.WriteLine("    \"sounds\"");
            hFile.WriteLine("    {");
            hFile.WriteLine("        \"1\"  \"ural-stable/bomb/1.mp3\"");
            hFile.WriteLine("        \"2\"  \"ural-stable/bomb/2.mp3\"");
            hFile.WriteLine("        \"3\"  \"ural-stable/bomb/3.mp3\"");
            hFile.WriteLine("        \"4\"  \"ural-stable/bomb/4.mp3\"");
            hFile.WriteLine("        \"5\"  \"ural-stable/bomb/5.mp3\"");
            hFile.WriteLine("        \"6\"  \"ural-stable/bomb/6.mp3\"");
            hFile.WriteLine("        \"7\"  \"ural-stable/bomb/7.mp3\"");
            hFile.WriteLine("        \"8\"  \"ural-stable/bomb/8.mp3\"");
            hFile.WriteLine("        \"9\"  \"ural-stable/bomb/9.mp3\"");
            hFile.WriteLine("        \"10\" \"ural-stable/bomb/10.mp3\"");
            hFile.WriteLine("        \"20\" \"ural-stable/bomb/20.mp3\"");
            hFile.WriteLine("        \"30\" \"ural-stable/bomb/30.mp3\"");
            hFile.WriteLine("    }");
            hFile.WriteLine("}");
            delete hFile;
        }
    }

    KeyValues kv = new KeyValues("c4timer");
    if (kv.ImportFromFile(sPath)) {
        if (kv.JumpToKey("settings")) {
            g_iPluginEnabled = kv.GetNum("enable", 1);
            g_iSoundStartAt = kv.GetNum("sound_start_at", 30);
            kv.Rewind();
        }
       
        if (kv.JumpToKey("sounds")) {
            for (int i = 1; i <= 64; i++) {
                char sKey[10];
                IntToString(i, sKey, sizeof(sKey));
                kv.GetString(sKey, g_sSoundPath[i], PLATFORM_MAX_PATH);
               
                if (g_sSoundPath[i][0] != '\0') {
                    char sBuffer[PLATFORM_MAX_PATH];
                    Format(sBuffer, sizeof(sBuffer), "sound/%s", g_sSoundPath[i]);
                    if (FileExists(sBuffer)) AddFileToDownloadsTable(sBuffer);
                    PrecacheSound(g_sSoundPath[i], true);
                }
            }
        }
    }
    delete kv;
}

public void OnClientCookiesCached(int client)
{
    char sValue[4];
    GetClientCookie(client, g_cPrefClient, sValue, sizeof(sValue));
    if (sValue[0] == '\0') g_bClientEnabled[client] = true;
    else g_bClientEnabled[client] = (StringToInt(sValue) != 0);
}

public Action Command_ToggleC4(int client, int args)
{
    if (client <= 0) return Plugin_Handled;
    g_bClientEnabled[client] = !g_bClientEnabled[client];
    char sValue[4];
    IntToString(view_as<int>(g_bClientEnabled[client]), sValue, sizeof(sValue));
    SetClientCookie(client, g_cPrefClient, sValue);
    PrintToChat(client, " \x04[C4]\x01 Таймер: %s", g_bClientEnabled[client] ? "\x04ВКЛ" : "\x02ВЫКЛ");
    return Plugin_Handled;
}

public void Event_BombPlanted(Event event, const char[] name, bool dontBroadcast)
{
    if (g_iPluginEnabled == 0) return;
    g_iCounter = (g_hCvarTimer != null) ? g_hCvarTimer.IntValue : 35;
   
    char sTime[10];
    IntToString(g_iCounter, sTime, sizeof(sTime));

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            char sMsg[192];
            strcopy(sMsg, sizeof(sMsg), MSG_PLANTED);
            ReplaceString(sMsg, sizeof(sMsg), "{time}", sTime);
            PrintToChat(i, sMsg);
            PrintToChat(i, MSG_INFO);
        }
    }
    if (g_hCountdownTimer != null) delete g_hCountdownTimer;
    g_hCountdownTimer = CreateTimer(1.0, Timer_Countdown, _, TIMER_REPEAT);
}

public void Event_BombStop(Event event, const char[] name, bool dontBroadcast)
{
    if (g_hCountdownTimer != null) {
        delete g_hCountdownTimer;
        g_hCountdownTimer = null;
    }
    if (g_iPluginEnabled == 0) return;

    char sMsg[192];
    bool bIsDefused = StrEqual(name, "bomb_defused");
    if (bIsDefused) strcopy(sMsg, sizeof(sMsg), MSG_DEFUSED);
    else if (StrEqual(name, "bomb_exploded")) strcopy(sMsg, sizeof(sMsg), MSG_EXPLODED);
    else return;

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            PrintToChat(i, sMsg);
            if (bIsDefused) PrintToChat(i, MSG_INFO);
        }
    }
}

public Action Timer_Countdown(Handle timer)
{
    if (g_iCounter <= 0) {
        g_hCountdownTimer = null;
        return Plugin_Stop;
    }
   
    char sTime[10], sHint[128];
    IntToString(g_iCounter, sTime, sizeof(sTime));
    strcopy(sHint, sizeof(sHint), HINT_TIMER);
    ReplaceString(sHint, sizeof(sHint), "{time}", sTime);

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            PrintHintText(i, sHint);
            if (g_iCounter <= g_iSoundStartAt && g_iCounter < 66 && g_sSoundPath[g_iCounter][0] != '\0') {
                EmitSoundToClient(i, g_sSoundPath[g_iCounter]);
            }
        }
    }
    g_iCounter--;
    return Plugin_Continue;
}
 

babka68

Участник
Сообщения
2,137
Реакции
978
Переписанный плагин под SM v1.12 от google ai + теперь все в одном конфиге и никакого мусора в папке translations


c4timer.sp:
#include <sourcemod>
#include <sdktools>
#include <clientprefs>

#pragma newdecls required
#pragma semicolon 1

#define PLUGIN_VERSION "2.1.0"

// Фразы (вшиты в код)
#define MSG_PLANTED     " \x04[C4]\x01 Бомба заложена! До взрыва: {time} сек."
#define MSG_DEFUSED     " \x04[C4]\x01 Бомба обезврежена!"
#define MSG_EXPLODED    " \x04[C4]\x01 Бомба взорвана!"
#define HINT_TIMER      "Таймер C4: {time}"
#define MSG_INFO        " \x04[C4]\x01 Чтобы отключить звуки таймера для себя, напишите \x03!c4"

// Настройки
int g_iPluginEnabled = 1;
int g_iSoundStartAt = 30;

ConVar g_hCvarTimer = null;
Handle g_hCountdownTimer = null;
Handle g_cPrefClient = null;

int g_iCounter;
char g_sSoundPath[66][PLATFORM_MAX_PATH];
bool g_bClientEnabled[MAXPLAYERS + 1];

public Plugin myinfo =
{
    name = "Advanced c4 Timer (Announcer Logic + Comments)",
    author = "AI Adaptation",
    version = PLUGIN_VERSION
};

public void OnPluginStart()
{
    g_hCvarTimer = FindConVar("mp_c4timer");
    g_cPrefClient = RegClientCookie("c4timer_client_pref", "C4 Timer Client Toggle", CookieAccess_Private);

    RegConsoleCmd("sm_c4", Command_ToggleC4);
    RegConsoleCmd("sm_с4", Command_ToggleC4);

    HookEvent("bomb_planted", Event_BombPlanted);
    HookEvent("bomb_exploded", Event_BombStop);
    HookEvent("bomb_defused", Event_BombStop);
    HookEvent("round_start", Event_BombStop);

    LoadSingleConfig();
}

public void OnMapStart()
{
    LoadSingleConfig();
}

void LoadSingleConfig()
{
    char sPath[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, sPath, sizeof(sPath), "../../cfg/sourcemod/c4timer.cfg");
  
    if (!FileExists(sPath)) {
        File hFile = OpenFile(sPath, "w");
        if (hFile != null) {
            hFile.WriteLine("\"c4timer\"");
            hFile.WriteLine("{");
            hFile.WriteLine("    \"settings\"");
            hFile.WriteLine("    {");
            hFile.WriteLine("        // 1 - Включить плагин, 0 - Выключить");
            hFile.WriteLine("        \"enable\"         \"1\"");
            hFile.WriteLine("");
            hFile.WriteLine("        // С какой секунды начинать звуковой отсчет");
            hFile.WriteLine("        \"sound_start_at\" \"30\"");
            hFile.WriteLine("    }");
            hFile.WriteLine("");
            hFile.WriteLine("    \"sounds\"");
            hFile.WriteLine("    {");
            hFile.WriteLine("        \"1\"  \"ural-stable/bomb/1.mp3\"");
            hFile.WriteLine("        \"2\"  \"ural-stable/bomb/2.mp3\"");
            hFile.WriteLine("        \"3\"  \"ural-stable/bomb/3.mp3\"");
            hFile.WriteLine("        \"4\"  \"ural-stable/bomb/4.mp3\"");
            hFile.WriteLine("        \"5\"  \"ural-stable/bomb/5.mp3\"");
            hFile.WriteLine("        \"6\"  \"ural-stable/bomb/6.mp3\"");
            hFile.WriteLine("        \"7\"  \"ural-stable/bomb/7.mp3\"");
            hFile.WriteLine("        \"8\"  \"ural-stable/bomb/8.mp3\"");
            hFile.WriteLine("        \"9\"  \"ural-stable/bomb/9.mp3\"");
            hFile.WriteLine("        \"10\" \"ural-stable/bomb/10.mp3\"");
            hFile.WriteLine("        \"20\" \"ural-stable/bomb/20.mp3\"");
            hFile.WriteLine("        \"30\" \"ural-stable/bomb/30.mp3\"");
            hFile.WriteLine("    }");
            hFile.WriteLine("}");
            delete hFile;
        }
    }

    KeyValues kv = new KeyValues("c4timer");
    if (kv.ImportFromFile(sPath)) {
        if (kv.JumpToKey("settings")) {
            g_iPluginEnabled = kv.GetNum("enable", 1);
            g_iSoundStartAt = kv.GetNum("sound_start_at", 30);
            kv.Rewind();
        }
      
        if (kv.JumpToKey("sounds")) {
            for (int i = 1; i <= 64; i++) {
                char sKey[10];
                IntToString(i, sKey, sizeof(sKey));
                kv.GetString(sKey, g_sSoundPath[i], PLATFORM_MAX_PATH);
              
                if (g_sSoundPath[i][0] != '\0') {
                    char sBuffer[PLATFORM_MAX_PATH];
                    Format(sBuffer, sizeof(sBuffer), "sound/%s", g_sSoundPath[i]);
                    if (FileExists(sBuffer)) AddFileToDownloadsTable(sBuffer);
                    PrecacheSound(g_sSoundPath[i], true);
                }
            }
        }
    }
    delete kv;
}

public void OnClientCookiesCached(int client)
{
    char sValue[4];
    GetClientCookie(client, g_cPrefClient, sValue, sizeof(sValue));
    if (sValue[0] == '\0') g_bClientEnabled[client] = true;
    else g_bClientEnabled[client] = (StringToInt(sValue) != 0);
}

public Action Command_ToggleC4(int client, int args)
{
    if (client <= 0) return Plugin_Handled;
    g_bClientEnabled[client] = !g_bClientEnabled[client];
    char sValue[4];
    IntToString(view_as<int>(g_bClientEnabled[client]), sValue, sizeof(sValue));
    SetClientCookie(client, g_cPrefClient, sValue);
    PrintToChat(client, " \x04[C4]\x01 Таймер: %s", g_bClientEnabled[client] ? "\x04ВКЛ" : "\x02ВЫКЛ");
    return Plugin_Handled;
}

public void Event_BombPlanted(Event event, const char[] name, bool dontBroadcast)
{
    if (g_iPluginEnabled == 0) return;
    g_iCounter = (g_hCvarTimer != null) ? g_hCvarTimer.IntValue : 35;
  
    char sTime[10];
    IntToString(g_iCounter, sTime, sizeof(sTime));

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            char sMsg[192];
            strcopy(sMsg, sizeof(sMsg), MSG_PLANTED);
            ReplaceString(sMsg, sizeof(sMsg), "{time}", sTime);
            PrintToChat(i, sMsg);
            PrintToChat(i, MSG_INFO);
        }
    }
    if (g_hCountdownTimer != null) delete g_hCountdownTimer;
    g_hCountdownTimer = CreateTimer(1.0, Timer_Countdown, _, TIMER_REPEAT);
}

public void Event_BombStop(Event event, const char[] name, bool dontBroadcast)
{
    if (g_hCountdownTimer != null) {
        delete g_hCountdownTimer;
        g_hCountdownTimer = null;
    }
    if (g_iPluginEnabled == 0) return;

    char sMsg[192];
    bool bIsDefused = StrEqual(name, "bomb_defused");
    if (bIsDefused) strcopy(sMsg, sizeof(sMsg), MSG_DEFUSED);
    else if (StrEqual(name, "bomb_exploded")) strcopy(sMsg, sizeof(sMsg), MSG_EXPLODED);
    else return;

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            PrintToChat(i, sMsg);
            if (bIsDefused) PrintToChat(i, MSG_INFO);
        }
    }
}

public Action Timer_Countdown(Handle timer)
{
    if (g_iCounter <= 0) {
        g_hCountdownTimer = null;
        return Plugin_Stop;
    }
  
    char sTime[10], sHint[128];
    IntToString(g_iCounter, sTime, sizeof(sTime));
    strcopy(sHint, sizeof(sHint), HINT_TIMER);
    ReplaceString(sHint, sizeof(sHint), "{time}", sTime);

    for (int i = 1; i <= MaxClients; i++) {
        if (IsClientInGame(i) && g_bClientEnabled[i]) {
            PrintHintText(i, sHint);
            if (g_iCounter <= g_iSoundStartAt && g_iCounter < 66 && g_sSoundPath[g_iCounter][0] != '\0') {
                EmitSoundToClient(i, g_sSoundPath[g_iCounter]);
            }
        }
    }
    g_iCounter--;
    return Plugin_Continue;
}
Люди с конфигами некоторые не могут справится, а вы им усложнили задачу в 10 раз😺
 

danil253467

💘Italo-Disco One Love💘
Сообщения
110
Реакции
67
в чем усложнил? все в одном файле, а не разбросано куда попало
А тем, что такой плагин теперь могут настроить люди, которые хоть как-то базово разбираются в скриптинге. Как верно подметил @babka68, "некоторые люди с конфигами не могут справиться", а тут целый исходник, с которым многие не понимают, что делать...
 
Сверху Снизу