С К И Л Л О В А Я С И Б И Р Ь
⛔ Сервер : С К И Л Л О В А Я С И Б И Р Ь Public: 37.230.137.147:27015
© skillpub.ru - 21 янв 2026, 08:38
Место свободно
Здесь вы сможете купить рекламу на данном форуме
Стоимость за 1 день 12 ₽

Mode SnowGame

Аватара пользователя
Kurtis
Сообщения: 0
Зарегистрирован: 05 янв 2025, 13:41
Контактная информация:

Re: Mode SnowGame

Kurtis »
11 янв 2026, 19:34
Интересна обратная связь от тех, у кого большой онлайн. Садит ли ФПС на нормальных машинах большое количество объектов. Если да, интересует какой у вас `sys_ticrate` и какой режим pingboost при запуске.

И если вдруг нужен плагин с голосованием за запуск данного режима (без смены карты вручную). Команды меняйте как угодно, доступные смотрите в коде (register_clcmd).

Код: Выделить всё

#include <amxmodx>

// Сколько процентов голосов нужно для запуска режима
const SnowGameVotePercent = 50;

const TaskChangeModeIndex = 127;

new bool: g_bIsSnowGameVote[MAX_PLAYERS+1];

public client_disconnected(pPlayer) {
	g_bIsSnowGameVote[pPlayer] = false;
}

public plugin_init() {
	register_plugin("Mode: Game SnowMans (Vote)", "0.1", "Kurtis");

	new szMapName[32];
	get_mapname(szMapName, charsmax(szMapName));

	if(!equal(szMapName, "mode_snowgame")) {
		register_clcmd("say /snowgame", "clcmd_snowgame_vote");
		register_clcmd("say /snowman", "clcmd_snowgame_vote");
		register_clcmd("snowgame_vote", "clcmd_snowgame_vote");
		register_clcmd("snowman_vote", "clcmd_snowgame_vote");

		set_task(60.0, "_task_showinfo", .flags = "b");
	}
}

public clcmd_snowgame_vote(pPlayer) {
	if(!is_user_connected(pPlayer)) {
		return;
	}

	if(task_exists(TaskChangeModeIndex)) {
		return;
	}

	if(!g_bIsSnowGameVote[pPlayer]) {
		g_bIsSnowGameVote[pPlayer] = true;

		client_print_color(0, print_team_default, "^4[Зимний режим]^3 %n ^1проголосовал за запуск режима", pPlayer);
	}

	new iVotePercent = _check_snowgame_vote();

	if(iVotePercent >= SnowGameVotePercent) {
		client_print_color(0, print_team_default, "^4[Зимний режим]^1 Все голоса набраны. Запуск режима через^3 10 секунд");

		set_task(10.0, "_task_change_mode", TaskChangeModeIndex);
	}
	else {
		client_print_color(0, print_team_default, "^4[Зимний режим]^1 Для запуска режима набрано:^3 %i%%/%i%%", iVotePercent, SnowGameVotePercent);
	}
}

public _task_change_mode() {
	engine_changelevel("mode_snowgame");
}

public _task_showinfo() {
	client_print_color(0, print_team_default, "^4[Зимний режим]^1 Для запуска режима напишите:^3 /snowgame");
}

public _check_snowgame_vote() {
	new iVoteCount, iPlayersCount;

	for(new id = 1; id <= MaxClients; id++) {
		if(!is_user_connected(id)) {
			continue;
		}

		if(is_user_bot(id) || is_user_hltv(id)) {
			continue;
		}

		iPlayersCount++;

		if(g_bIsSnowGameVote[id]) {
			iVoteCount++;
		}
	}

	return (iVoteCount * 100 / iPlayersCount);
}
Вложения
mode_snowman_vote.sma
(2.28 КБ) 9 скачиваний
Последний раз редактировалось Kurtis 11 янв 2026, 19:36, всего редактировалось 1 раз.
Заказы не беру и не помогаю.
Поддержка только по своим плагинам.
Для помощи есть форум.
Аватара пользователя
Сергей Панов
Сообщения: 0
Зарегистрирован: 03 авг 2023, 15:04
Контактная информация:

Re: Mode SnowGame

12 янв 2026, 19:46
Kurtis писал(а):11 янв 2026, 19:34(без смены карты вручную)
А как потом прервать режим? Или после смены карты прервется?
есть возможность добавить команду для админов?
Аватара пользователя
Kurtis
Сообщения: 0
Зарегистрирован: 05 янв 2025, 13:41
Контактная информация:

Re: Mode SnowGame

Kurtis »
12 янв 2026, 20:42
Сергей Панов, по сути просто сменить карту и всё. На любую, кроме режимной, тогда продолжится стандартная работа сервера. Режим работает только на карте `mode_snowgame`.
По изначальной задумке ваш мапчузер сам сменит карту спустя заданное в нём кваром времени.
Также игроки могут через то же голосование `/rtv` сменить карту, и режим прекратится (если у вас есть мапчузер с голосованием `/rtv`).
Стандартные amxmodx плагины и мапчузер только не прописывайте в конфиге режима, где плагины уходят в паузу.

Я, конечно, могу сделать какую-нибудь настройку в виде времени игры на карте, или же прекращение режима, если какое-то количество NPC будет убито, но не уверен, что это это продуктивно.
Заказы не беру и не помогаю.
Поддержка только по своим плагинам.
Для помощи есть форум.
Аватара пользователя
Сергей Панов
Сообщения: 0
Зарегистрирован: 03 авг 2023, 15:04
Контактная информация:

Re: Mode SnowGame

12 янв 2026, 23:47
Kurtis писал(а):12 янв 2026, 20:42По изначальной задумке ваш мапчузер сам сменит карту спустя заданное в нём кваром времени.
Также игроки могут через то же голосование `/rtv` сменить карту, и режим прекратится (если у вас есть мапчузер с голосованием `/rtv`).
У меня нет rtv на сервере, и игра идет по победам, через N побед - голосование. Значит должно быть норм?
Аватара пользователя
Kurtis
Сообщения: 0
Зарегистрирован: 05 янв 2025, 13:41
Контактная информация:

Re: Mode SnowGame

Kurtis »
13 янв 2026, 21:17
Сергей Панов, если убить всех игроков, то будет рестарт. А как у вас там победы считаются я не знаю.
Вот вам вариант с настраиваемым временем игры отдельный плагин.

Код: Выделить всё

#include <amxmodx>

// Время работы режима в минутах (сколько минут будет игра на карте).
const SnowGameTime = 15;

// Выводить информацию об оставшемся времени игры в dhud? (закоментировать, чтобы отключить)
#define DHUD_SNOWGAME_TIME_ENABLE 1

#if defined DHUD_SNOWGAME_TIME_ENABLE
new g_iSnowGameTimeSeconds;
#endif

// Список карт (смена будет на случайную, можно добавлять сколько угодно, главное, чтобы была хотя бы одна)
new const MapChangeList[][] = { "de_dust2", "de_nuke" };

public plugin_init() {
	register_plugin("Mode: Game SnowMans (Game Time)", "0.1", "Kurtis");

	new szMapName[16];
	get_mapname(szMapName, charsmax(szMapName));

	if(!equal(szMapName, "mode_snowgame")) {
		set_fail_state("Плагин отключён. Работает только на карте `mode_snowgame`");
	}
#if defined DHUD_SNOWGAME_TIME_ENABLE
	g_iSnowGameTimeSeconds = SnowGameTime * 60;
	set_task(1.0, "_task_game_timeleft", .flags = "b");
#else
	set_task(float(SnowGameTime * 60), "_task_game_timeleft");
#endif
}

public _task_game_timeleft() {
#if defined DHUD_SNOWGAME_TIME_ENABLE
	g_iSnowGameTimeSeconds--;

	set_dhudmessage(0, 255, 0, -1.0, 0.04, 0, 0.0, 1.0, 0.0, 0.0);

	if(g_iSnowGameTimeSeconds > 3600.0) {
		show_dhudmessage(0, "До конца игры: %i:%i:%i", g_iSnowGameTimeSeconds / 3600, g_iSnowGameTimeSeconds / 60 % 60, g_iSnowGameTimeSeconds % 60);
	}
	else if(g_iSnowGameTimeSeconds > 60.0) {
		show_dhudmessage(0, "До конца игры: %i:%i", g_iSnowGameTimeSeconds / 60, g_iSnowGameTimeSeconds % 60);
	}
	else {
		if(g_iSnowGameTimeSeconds <= 0) {
			engine_changelevel(MapChangeList[random_num(0, charsmax(MapChangeList))]);
		}
		else {
			show_dhudmessage(0, "До конца игры: %i сек.", g_iSnowGameTimeSeconds % 60);
		}
	}
	
#else
	engine_changelevel(MapChangeList[random_num(0, charsmax(MapChangeList))]);
#endif
}
Если что больше 1440 минут (это 24 часа = 1 день) не советую ставить настройку вместе с включенным дхудом, ибо я не завез вариант высчитывания дней. Только часы, минуты и секунды.

Пока настройки в плагине, если что с обновой закину позже вариант с настройкой в конфиге.
Вложения
mode_snowman_timeleft.sma
(2.08 КБ) 4 скачивания
Последний раз редактировалось Kurtis 13 янв 2026, 21:18, всего редактировалось 1 раз.
Заказы не беру и не помогаю.
Поддержка только по своим плагинам.
Для помощи есть форум.

Кто сейчас на конференции

Зарегистрированные пользователи: Ahrefs [Bot], Роман Коневин, Semrush [Bot]

Место свободно
Здесь вы сможете купить рекламу на данном форуме
Стоимость за 1 день 10 ₽