warning 213: tag mismatch не найду способа как его убрать

Статус
Закрыто для дальнейших ответов.
Сообщения
7
Реакции
1
Баллы
3
Ошибка
$ ./amxxpc ggmat_chooser.sma                                                                                                                                                                  
AMX Mod X Compiler 1.10.0.5461
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team

ggmat_chooser.sma(102) : warning 213: tag mismatch
ggmat_chooser.sma(104) : warning 213: tag mismatch
ggmat_chooser.sma(127) : warning 213: tag mismatch
ggmat_chooser.sma(132) : warning 213: tag mismatch
ggmat_chooser.sma(136) : warning 217: loose indentation
ggmat_chooser.sma(141) : warning 217: loose indentation
ggmat_chooser.sma(155) : warning 217: loose indentation
ggmat_chooser.sma(155) : warning 213: tag mismatch
ggmat_chooser.sma(156) : warning 213: tag mismatch
ggmat_chooser.sma(158) : warning 217: loose indentation
ggmat_chooser.sma(166) : warning 217: loose indentation
ggmat_chooser.sma(168) : warning 217: loose indentation
ggmat_chooser.sma(199) : warning 213: tag mismatch
ggmat_chooser.sma(200) : warning 213: tag mismatch
ggmat_chooser.sma(262) : warning 217: loose indentation
ggmat_chooser.sma(287) : warning 217: loose indentation
ggmat_chooser.sma(328) : warning 213: tag mismatch
ggmat_chooser.sma(329) : warning 213: tag mismatch
ggmat_chooser.sma(329) : warning 213: tag mismatch
ggmat_chooser.sma(334) : warning 213: tag mismatch
Header size: 1168 bytes
Code size: 8688 bytes
Data size: 5796 bytes
Stack/heap size: 16384 bytes
Total requirements: 32036 bytes

20 Warnings.
Done.
AMX Mod X
AMX Mod X 1.10.0.5461 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Dec 6 2021 10:40:01
Built from: https://github.com/alliedmodders/amxmodx/commit/ec82e3f
Build ID: 5461:ec82e3f
Core mode: JIT+ASM32
Билд сервера
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.14.0.857-dev
Build date: 19:52:21 Mar 27 2025 (4002)
Build from: https://github.com/rehlds/ReHLDS/commit/89958d3
ReGameDLL
ReGameDLL version: 5.28.0.756-dev
Build date: 19:19:31 Mar 27 2025
Build from: https://github.com/rehlds/ReGameDLL_CS/commit/96b2ef2
Metamod версия
Metamod-r v1.3.0.149, API (5:13)
Metamod-r build: 11:31:17 Apr 23 2024
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/603a257
Metamod плагины
Currently loaded plugins:
description stat pend file vers src load unload
[ 1] SafeNameAndChat RUN - SafeNameAndChat.so v1.1 ini ANY ANY
[ 2] Reunion RUN - reunion_mm_i386.so v0.2.0.25 ini Start Never
[ 3] AMX Mod X RUN - amxmodx_mm_i386.so v1.10.0.5461 ini Start ANY
[ 4] VoiceTranscoder RUN - VoiceTranscoder.so v2017RC5 ini ANY ANY
[ 5] ReSemiclip RUN - resemiclip_mm_i386.so v2.4.3 ini Chlvl ANY
[ 6] HitBox Fix RUN - hitbox_fix_mm_i386.so v1.0.11 ini Start ANY
[ 7] MySQL RUN - mysql_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[ 8] CSX RUN - csx_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[ 9] FakeMeta RUN - fakemeta_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[10] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[11] Engine RUN - engine_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[12] ReAPI RUN - reapi_amxx_i386.so v5.26.0.338-dev pl3 ANY Never
[13] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl3 ANY Never
[14] SxGeo RUN - sxgeo_amxx_i386.so v2.2 pl3 ANY Never
[15] CStrike RUN - cstrike_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
[16] Fun RUN - fun_amxx_i386.so v1.10.0.5461 pl3 ANY ANY
16 plugins, 16 running
Список плагинов
Currently loaded plugins:
id name version author url file status
[ 1] 0 Admin Base 1.10.0.546 AMXX Dev Team admin.amxx running
[ 2] 1 Admin Commands 1.10.0.546 AMXX Dev Team admincmd.am debug
[ 3] 2 Admin Help 1.10.0.546 AMXX Dev Team adminhelp.a running
[ 4] 3 Slots Reservation 1.10.0.546 AMXX Dev Team adminslots. running
[ 5] 4 Multi-Lingual System 1.10.0.546 AMXX Dev Team multilingua running
[ 6] 5 Menus Front-End 1.10.0.546 AMXX Dev Team menufront.a running
[ 7] 6 Commands Menu 1.10.0.546 AMXX Dev Team cmdmenu.amx running
[ 8] 7 Players Menu 1.10.0.546 AMXX Dev Team plmenu.amxx running
[ 9] 8 Teleport Menu 1.10.0.546 AMXX Dev Team telemenu.am running
[ 10] 9 Maps Menu 1.10.0.546 AMXX Dev Team mapsmenu.am running
[ 11] 10 Plugin Menu 1.10.0.546 AMXX Dev Team pluginmenu. running
[ 12] 11 Admin Chat 1.10.0.546 AMXX Dev Team adminchat.a running
[ 13] 12 Anti Flood 1.10.0.546 AMXX Dev Team antiflood.a running
[ 14] 13 Admin Votes 1.10.0.546 AMXX Dev Team adminvote.a running
[ 15] 14 Map Manager: Core 3.1.5 Mistrick map_manager running
[ 16] 15 Map Manager: Scheduler 0.1.10 Mistrick map_manager running
[ 17] 16 Map Manager: Rtv 0.1.2 Mistrick map_manager running
[ 18] 17 Map Manager: Nominatio 0.2.1 Mistrick map_manager running
[ 19] 18 Map Manager: BlockList 0.0.4 Mistrick map_manager running
[ 20] 19 Map Manager: Online so 0.0.4 Mistrick map_manager running
[ 21] 20 Map Manager: Effects 0.1.1 Mistrick map_manager running
[ 22] 21 Map Manager: GUI 0.0.6 Mistrick map_manager running
[ 23] 22 Map Manager: Sounds 0.0.2 Mistrick map_manager running
[ 24] 23 Pause Plugins 1.10.0.546 AMXX Dev Team pausecfg.am running
[ 25] 24 Stats Configuration 1.10.0.546 AMXX Dev Team statscfg.am running
[ 26] 25 CSStatsX SQL 0.7.4 serfreeman1337 csstatsx_sq running
[ 27] 26 AES: StatsX 2 0.5 Vega serfreeman1337 aes_statsx_ running
[ 28] 27 StatsX 1.10.0.546 AMXX Dev Team statsx_n.am running
[ 29] 28 DevMs ForkFlag 1.0 gyxoBka DevMs_ForkF running
[ 30] 29 DevMsCore 1.2 gyxoBka DevMs_Core. running
[ 31] 30 QSound Combo Messages 1.2.1 juice Mode IDC qscombo2.am running
[ 32] 31 DM AutoBalance 1.0.0 Nordic Warrior AutoBalance running
[ 33] 32 RE Vampire 1.0.4 MakapoH, AcE re_vampire. running
[ 34] 33 Models Manager 1.4.2 gyxoBka ModelsManag debug
[ 35] 34 No Shoot Through Walls 0.0.2 hornet & the_hun no_walls.am running
[ 36] 35 ReAimDetector API 0.2.2 ReHLDS Team reaimdetect debug
[ 37] 36 AFK Control ReNew 1.2(a) neygomon afk_control running
[ 38] 37 [ReAPI] Block 'Fire in 0.0.1 sergrib reapi_block running
[ 39] 38 [SxGeo] Connect Info 1.0 s1lent sxgeo_conne running
[ 40] 39 Kick Spamers 1.0.3c gyxoBka KickSpamer. running
[ 41] 40 Hats 1.5 Psycrow next21_hats running
[ 42] 41 Damager 0.0.5 steelzzz damager.amx running
[ 43] 42 TeamMenu 1.0 gyxoBka gg_teammenu debug
[ 44] 43 AES: StatsX Info Rank 0.1 serfreeman1337 aes_statsx_ running
[ 45] 44 Custom Radio TH 1.0.2 the_hunter custom_radi debug
[ 46] 45 Team Grenade Trail 1.2 Numb GreTrail.am running
[ 47] 46 HeadShot Blood 1.1 [CSMods] & tuty kill_bloods running
[ 48] 47 Default FOV 1.1 God Of Gaming fov_hd.amxx running
[ 49] 48 pieces of meat 1.0.1 iPlague & fl0wer kill_meat.a debug
[ 50] 49 fadetoblack_hack 0.1 YourName fadetoblack running
[ 51] 50 Knife Kill Notificatio 1.2.3 kkvan Knife_Kill_ debug
[ 52] 51 HEADSHOT_Kill_SOUNDS 0.0.21 kakavan HEADSHOT_Ki running
[ 53] 52 Advanced Tracers 0.1 [email protected] advanced_tr running
[ 54] 53 regg_BlockHintHud 1.1.1 gyxoBka ggmat_Block debug
[ 55] 54 ggmat_cleaner 0.1 YourName ggmat_clean debug
[ 56] 55 GunGame Mat Warmup 1.0.3 YourName ggmat_warmu debug
[ 57] 56 Simple Chooser (No Lan 1.0.1 Me ggmat_choos debug
[ 58] 57 ReAPI Weapon Rotation 1.2.4 kakavan_AI ggmat_team_ debug
58 plugins, 58 running
Исходный код плагина
#include <amxmodx>
#include <amxmisc>
#include <reapi>

//#include "include/GGMat/ggmat_modes.inl"

// Режимы игры для системы ggmat
enum ModeType {
Single, // 0 — Одиночный режим (индивидуальный прогресс)
Command, // 1 — Командный режим (общий прогресс по командам)
FFA // 2 — Free-for-all (без команд)
}


// Заголовки и пункты меню — встроены в код
new const g_szMenuHeader[] = "Выберите режим:";
new const g_szMenuItem[ModeType][] = {
"Одиночный",
"Командный",
"Каждый сам за себя"
};

//Все что нужно для отсчета времени и вывода на экран сообщения
#define TASK_SHOWTIMER 102
new g_iVoteTimer = 5; // текущее значение таймера (в секундах)
new g_iHudTime = 5; // сколько последних секунд показывать HUD (можно настроить)
new g_iSoundTime = 5; // до скольки секунд проигрывать звуки (макс. 10)
//new g_iTimer = 5; //Счетчик звука g_szSound
// Цвет и позиция HUD
new g_iTimerColor[3] = {255, 100, 0}; // оранжевый по умолчанию
new Float:g_fTimerHud[2] = {0.45, 0.85}; // центр-низ экрана

// Звуки обратного отсчёта
new const g_szSound[][] = {
"", "fvox/one", "fvox/two", "fvox/three", "fvox/four", "fvox/five",
"fvox/six", "fvox/seven", "fvox/eight", "fvox/nine", "fvox/ten"
};

////////////////////////////////////////////////////////////

// === Глобальные переменные для заморозки и затемнения ===
new g_msgScreenFade; // ID сообщения ScreenFade
new HookChain:HookSpawn; // Хук на спавн
new HookChain:HookResetSpeed; // Хук на сброс скорости
new bool:g_bVoteInProcess = false; // Идёт ли голосование
new g_iTotalVotes; // Общее число голосующих
new g_iVotedCount; // Счётчик проголосовавших (только увеличивается)
new bool:g_bVoted[33]; // Флаг проголосовал ли игрок (индексация с 1)
new g_iVotes[ModeType]; // Счётчики голосов за режимы
new g_iAlpha = 200; // Прозрачность затемнения (0-255)
new bool:g_bWasVote = false; // Было ли голосование на этой карте

////////////////////////////////////////////////////////////



new g_iFwdSetGameMode; // Форвард для установки режима игры


// Инициализация
public plugin_init() {
register_plugin("Simple Chooser (No Lang File)", "1.0.1", "Me");
register_clcmd("say /choose", "cmd_choose");
register_clcmd("say_team /choose", "cmd_choose");
// Регистрируем хуки (цепочки вызовов) на ключевые игровые события:
RegisterForwards();
// Получаем уникальный ID системного сообщения "ScreenFade" из движка игры.
g_msgScreenFade = get_user_msgid("ScreenFade");

// Создаём мультифорвард для передачи выбранного режима игры
g_iFwdSetGameMode = CreateMultiForward("gg_set_game_mode", ET_IGNORE, FP_CELL);

register_logevent("EventGameCommencing", 2, "0=World triggered", "1=Game_Commencing");

}


RegisterForwards()
{
// Хук на отключение игрока (для корректного завершения голосования)
RegisterHookChain(RH_SV_DropClient, "SV_DropClient", true);

// Хук на спавн — отключаем сразу, включим только во время голосования
DisableHookChain(HookSpawn = RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", true));

// Хук на сброс скорости — блокируем разморозку во время голосования
DisableHookChain(HookResetSpeed = RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed, "CBasePlayer_ResetMaxSpeed", false));
}




// Обработчик начала карты — СБРАСЫВАЕМ ВСЁ состояние голосования
public EventGameCommencing()
{
g_bWasVote = false; // ← КРИТИЧЕСКИ ВАЖНО: разрешаем новое голосование
g_bVoteInProcess = false; // на случай, если предыдущее не завершилось
g_iVoteTimer = 5; // сбрасываем таймер в начальное значение

// Опционально: очищаем остаточные данные
//arrayset(g_iVotes, 0, ModeType);
for (new i = 0; i < ModeType; i++)
{
g_iVotes[i] = 0;
}
arrayset(g_bVoted, false, 33);
g_iTotalVotes = 0;
g_iVotedCount = 0;
}


// Обработчик меню — ничего не делает (можно расширить позже)
public MenuHandler(id, menu, item)
{
if (item == MENU_EXIT || !g_bVoteInProcess) {
return PLUGIN_HANDLED;
}

// Проверка: уже голосовал?
if (g_bVoted[id]) {
client_print(id, print_chat, "Вы уже проголосовали!");
return PLUGIN_HANDLED;
}

// === ЗАПИСЬ ВЫБОРА ===
g_bVoted[id] = true; // Помечаем игрока как проголосовавшего
g_iVotes[item]++; // Увеличиваем счётчик за выбранный режим
g_iVotedCount++; // Увеличиваем счётчик голосов
// Выводим в чат информацию о выборе
new szName[32];
get_user_name(id, szName, charsmax(szName));
client_print(0, print_chat, "^3%s^1 выбрал режим: ^4%s", szName, g_szMenuItem[item]);

// === ДОСРОЧНОЕ ЗАВЕРШЕНИЕ ===
// Считаем, сколько игроков уже проголосовало
if (g_iVotedCount >= g_iTotalVotes)
{
EndVoting();
}

return PLUGIN_HANDLED;
}


// Форвард, вызываемый из другого плагина (например, ggmat_warmup)
// Используется для запуска обратного отсчёта перед показом меню выбора режима
public gg_show_chooser()
{
remove_task(TASK_SHOWTIMER);
DebugVoteVariables("BEFORE gg_show_chooser");
// ← ДОБАВЬ ЭТИ СТРОКИ:
g_bVoteInProcess = true; // Начинаем голосование
g_iTotalVotes = 0; // Сбрасываем счётчики
//arrayset(g_iVotes, 0, ModeType);
for (new i = 0; i < ModeType; i++) {
g_iVotes[i] = 0;
}
arrayset(g_bVoted, false, 33);

// Получаем число живых игроков
new players[32], num;
get_players(players, num, "ach");
g_iTotalVotes = num;
g_iVotedCount = 0; // Сбрасываем счётчик голосов

DebugVoteVariables("AFTER gg_show_chooser");
// Запускаем таймер
set_task(1.0, "Show_Timer", TASK_SHOWTIMER);
return PLUGIN_HANDLED;
// // Удаляем предыдущую задачу (если она была), чтобы избежать дублирования
// remove_task(TASK_SHOWTIMER);
//
// // Запускаем повторяющуюся задачу:
// // - первый вызов через 1.0 секунду,
// // - функция Show_Timer будет вызываться каждую секунду,
// // - всего вызовов: g_iVoteTimer + 1 = 6 раз.
// // Почему +1? Потому что в Show_Timer мы сразу делаем g_iVoteTimer--,
// // и чтобы отсчитать 5 → 4 → 3 → 2 → 1 → 0 (6 состояний),
// // нужно 6 вызовов.
// set_task(1.0, "Show_Timer", TASK_SHOWTIMER, _, _, "a", g_iVoteTimer);
//
// return PLUGIN_HANDLED;
}




// Команда для вызова меню
public cmd_choose(id) {
ShowChooseMenu(id);
return PLUGIN_HANDLED;
}

// Функция показа меню
ShowChooseMenu(id) {
new menu = menu_create(g_szMenuHeader, "MenuHandler");

// Добавляем все 3 пункта
for (new i = 0; i < ModeType; i++) {
menu_additem(menu, g_szMenuItem[i], "", 0);
}

menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}

public Show_Timer()
{
// 1. Получаем правильную форму слова "секунда/секунды/секунд"
// в зависимости от текущего значения g_iVoteTimer (например: "5 секунд", "1 секунда")
new szSec[16];
get_ending_simple(g_iVoteTimer, szSec, charsmax(szSec));

// 2. Если осталось <= g_iHudTime секунд — показываем HUD всем подключённым игрокам
// (например, если g_iHudTime = 5, то HUD покажется при 5, 4, 3, 2, 1 секунде)
if (g_iVoteTimer <= g_iHudTime) {
for (new i = 1; i <= 32; i++) { // Перебираем всех возможных игроков (ID от 1 до 32)
if (!is_user_connected(i)) continue; // Пропускаем, если игрок не подключён

// Устанавливаем параметры HUD-сообщения:
// - цвет из массива g_iTimerColor,
// - позицию из g_fTimerHud[X], g_fTimerHud[Y],
// - длительность отображения — 1.0 секунда,
// - остальные параметры — стандартные (без эффектов, без канала и т.д.)
set_hudmessage(
g_iTimerColor[0], g_iTimerColor[1], g_iTimerColor[2], // RGB цвет
g_fTimerHud[0], g_fTimerHud[1], // X, Y позиция
0, // канал (авто)
0.0, // время появления
1.0, // время удержания
0.0, // fade-in
0.0, // fade-out
1 // приоритет
);

// Отображаем сообщение: "До выбора режима осталось 3 секунды!"
show_hudmessage(i, "До выбора режима осталось %d %s!", g_iVoteTimer, szSec);
}
}
/*
// 3. Проверяем, пора ли завершить отсчёт
if (g_iVoteTimer-- <= g_iTimer)
{
if( g_iTimer <= 1)
{
new players[32], num;
get_players(players, num, "ch");

for (new i = 0; i < num; i++)
{
ShowChooseMenu(players[i]);
}
}
client_cmd(0, "spk %s", g_szSound[g_iTimer--]);
}
*/




// Проигрываем звук ДО уменьшения таймера (для текущего значения)
if (g_iVoteTimer <= g_iSoundTime && g_iVoteTimer <= 10 && g_iVoteTimer > 0) {
client_cmd(0, "spk %s", g_szSound[g_iVoteTimer]);
}


if (g_iVoteTimer-- <= 0) {
// Включаем хуки для новых спавнов
EnableHookChain(HookSpawn);
EnableHookChain(HookResetSpeed);

// Затемняем всех
BlackScreen(0);

// Замораживаем и показываем меню всем живым игрокам
new players[32], num;
get_players(players, num, "ach");
for (new i = 0; i < num; i++) {
FreezePlayer(players[i]);
ShowChooseMenu(players[i]);
}

return; // СТОП — не ставим новую задачу
}

// Продолжаем таймер
set_task(1.0, "Show_Timer", TASK_SHOWTIMER);
}

// Функция определяет правильную форму слова "секунда" в русском языке
// в зависимости от числа (например: 1 секунда, 2 секунды, 5 секунд).
// Результат записывается в строку output[].
stock get_ending_simple(num, output[], len)
{
// Получаем последнюю цифру числа (например, у 23 → 3, у 101 → 1)
new mod10 = num % 10;

// Получаем последние две цифры числа (например, у 112 → 12, у 5 → 5)
// Это нужно, чтобы обработать исключения: 11, 12, 13, 14 — они не склоняются как обычные
new mod100 = num % 100;

// Правило 1: если число оканчивается на 1, но НЕ на 11 → "секунда"
// Примеры: 1, 21, 31, 101 → "секунда"
// Исключение: 11, 111, 211 → не "секунда", а "секунд"
if (mod10 == 1 && mod100 != 11) {
formatex(output, len, "секунда");
}
// Правило 2: если число оканчивается на 2, 3 или 4,
// И при этом НЕ входит в диапазон 10–19 (где 12, 13, 14 — исключения),
// то используется форма "секунды"
// Примеры: 2, 3, 4, 22, 23, 34, 102 → "секунды"
// Исключения: 12, 13, 14, 112, 113 → "секунд"
else if (mod10 >= 2 && mod10 <= 4 && (mod100 < 10 || mod100 >= 20)) {
formatex(output, len, "секунды");
}
// Правило 3: во всех остальных случаях — "секунд"
// Это включает: 0, 5–20, 25–30, 100, 111, 112 и т.д.
else {
formatex(output, len, "секунд");
}
}



EndVoting() {
// Находим режим с максимальным числом голосов
new winner = 0;
for (new i = 1; i < ModeType; i++) {
if (g_iVotes[i] > g_iVotes[winner]) winner = i;
}


// Вывод результата
client_print(0, print_chat, "Голосованием выбран режим: %s", g_szMenuItem[winner]);



//Вызов форварда с параметром режима
new iRet;
ExecuteForward(g_iFwdSetGameMode, iRet, winner);



// Разморозка и очистка эффектов
UnFreezePlayers();
DelBlackScreen(0);
DisableHookChain(HookSpawn);
DisableHookChain(HookResetSpeed);

g_bVoteInProcess = false;
g_bWasVote = true;

}

// === Хук: игрок спавнится во время голосования ===
public CBasePlayer_Spawn(id)
{
if (is_user_alive(id) && g_bVoteInProcess) {
FreezePlayer(id); // Заморозить
BlackScreen(id); // Затемнить
g_iTotalVotes++; // Увеличить счётчик голосующих
ShowChooseMenu(id); // Показать меню
}
return HC_CONTINUE;
}

// === Хук: попытка сбросить скорость (разморозиться) ===
public CBasePlayer_ResetMaxSpeed(id)
{
if (g_bVoteInProcess && is_user_alive(id)) {
return HC_SUPERCEDE; // БЛОКИРУЕМ сброс скорости
}
return HC_CONTINUE;
}

// === Хук: игрок отключился во время голосования ===
public SV_DropClient(id, bCrash, szFmt[])
{
if (g_bVoteInProcess) {
g_iTotalVotes--; // ← Уменьшаем ТОЛЬКО число участников

// Если игрок уже проголосовал — корректируем счётчик
if (g_bVoted[id]) {
g_iVotedCount--;
}

// Проверяем завершение
if (g_iVotedCount >= g_iTotalVotes && g_iTotalVotes > 0) {
EndVoting();
}
}
return HC_CONTINUE;
}





// === Заморозка игрока ===
FreezePlayer(const id)
{
set_entvar(id, var_maxspeed, 0.1); // Скорость ≈ 0
set_member(id, m_bIsDefusing, true); // Визуальный эффект "дефуз"
}

// === Разморозка игрока ===
UnFreezePlayer(const id)
{
rg_reset_maxspeed(id); // Восстанавливаем скорость
set_member(id, m_bIsDefusing, false);
}

// === Разморозка всех игроков ===
UnFreezePlayers()
{
new players[32], num;
get_players(players, num, "ach"); // alive + connected + human
for (new i = 0; i < num; i++) {
UnFreezePlayer(players[i]);
}
}

// === Затемнение экрана ===
BlackScreen(const id)
{
message_begin(id ? MSG_ONE : MSG_ALL, g_msgScreenFade, _, id ? id : 0);
write_short(1<<0); // duration
write_short(1<<0); // holdtime
write_short(1<<2); // flags: FFADE_STAYOUT
write_byte(0); // R
write_byte(0); // G
write_byte(0); // B
write_byte(g_iAlpha); // Alpha (прозрачность)
message_end();
}

// === Убрать затемнение ===
DelBlackScreen(const id)
{
message_begin(id ? MSG_ONE : MSG_ALL, g_msgScreenFade, _, id ? id : 0);
write_short(1<<0);
write_short(1<<0);
write_short(1<<0); // flags: FFADE_OUT
write_byte(0);
write_byte(0);
write_byte(0);
write_byte(0); // Alpha = 0 (полная прозрачность)
message_end();
}




// Выводит в консоль сервера значения всех переменных, используемых в системе голосования режимов
// Вызывается для отладки перед/после запуска голосования через gg_show_chooser
stock DebugVoteVariables(const szContext[])
{
server_print("=== DebugVoteVariables [%s] ===", szContext);

// Основные флаги состояния
server_print("g_bVoteInProcess = %s", g_bVoteInProcess ? "true" : "false");
server_print("g_bWasVote = %s", g_bWasVote ? "true" : "false");

// Счётчики голосования
server_print("g_iTotalVotes = %d", g_iTotalVotes);
server_print("g_iVotedCount = %d", g_iVotedCount);

// Счётчики голосов за режимы (одиночный/командный/каждый сам за себя)
server_print("g_iVotes[Single] = %d", g_iVotes[Single]);
server_print("g_iVotes[Command] = %d", g_iVotes[Command]);
server_print("g_iVotes[FFA] = %d", g_iVotes[FFA]);

// Состояние проголосовавших игроков (индексы 1-32)
server_print("g_bVoted players:");
new iVotedPlayers = 0;
for (new i = 1; i <= 32; i++) {
if (g_bVoted[i]) {
server_print(" Player %d: voted", i);
iVotedPlayers++;
}
}
if (!iVotedPlayers) server_print(" (no players voted yet)");

// Таймеры и настройки отображения
server_print("g_iVoteTimer = %d", g_iVoteTimer);
server_print("g_iHudTime = %d", g_iHudTime);
server_print("g_iSoundTime = %d", g_iSoundTime);
server_print("g_iAlpha = %d", g_iAlpha);

// Текущий выбранный режим (после голосования)
// server_print("g_iCurMode = %d (%s)", g_iCurMode, g_szMenuItem[g_iCurMode]);

// Список живых игроков (для проверки количества участников голосования)
new players[32], num;
get_players(players, num, "ach"); // alive + connected + human
server_print("Current alive players: %d", num);
for (new i = 0; i < num; i++) {
new name[32];
get_user_name(players[i], name, charsmax(name));
server_print(" Player %d: %s (voted: %s)", players[i], name, g_bVoted[players[i]] ? "YES" : "no");
}

server_print("=== End DebugVoteVariables ===");
}
На 8 строчке я создаю перечисление режимов игры.
На 49 строчке я создаю переменную для подсчета голосов за каждый из режимов
Далее я хочу сбросить счетчики за каждый режим.
Сначала я пытался сделать это методом на 101 строчке, компилятор выдает предупреждение,
ниже 101 строчки вы увидите другой способ, но компилятор также выдает предупреждение.

Подскажите как мне правильно сбросить массив что бы избавиться от предупреждения?
Вместо ModeType подставить цифру 3 не хочется.
 
Статус
Закрыто для дальнейших ответов.

Кто просматривает тему

Назад
Верх