Форум Pawn.Wiki - Воплоти мечту в реальность!: Проверка на попытку слива (вреда главному) - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Проверка на попытку слива (вреда главному)
Оценка: -----

#1
Пользователь офлайн   Maksim_String(5000) 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Доброго времени суток Судари. Хочу выложить свою самописанную систему проверки на слив, пример:
Какой-то администратор прописывает например /ban на главного разработчика сервера что считается попыткой
слива или просто помехой, данная система решает эту проблему и теперь появляется дополнительная проверка.

Важно: Необходимо иметь инклуд foreach и sscanf/sscanf2

Различные нужные функции:
// Дефайн на используемый цвет
#define COLOR_LIGHTRED 0xFF4530FF

new totalstring[128]; // Переменная на весь мод (у меня такой способ использования format)

stock SCMA(color, text[]) // Функция на отправление сообщения всем администраторам в сети
{
	foreach(new i:Player) if(player_info[i][ADMIN] > 0) SCM(i, color, text); // тут используете свою переменную базы данных
	return 1;
}

// Новый кик, сделано чтобы видеть "предсмертные" сообщения в чате
stock fix_Kick(playerid) return SetTimerEx("kick_timer", 50, 0, "d", playerid);
forward kick_timer(playerid);
public kick_timer(playerid) return Kick(playerid);


Сам код:
stock CheckKrutoy(playerid, targetid)
{
     // Вписывайте сюда свои ники
    new KRUTOY_NAME1[36] = "Nikita_Balbes";
	new KRUTOY_NAME2[36] = "Maxim_Bashmak";
    if(strcmp(player_info[playerid][NAME], KRUTOY_NAME1, true) == 0 ||
	strcmp(player_info[playerid][NAME], KRUTOY_NAME2, true) == 0) return 0; // если игрок сам крутой то все хорошо
	
	else if(strcmp(player_info[targetid][NAME], KRUTOY_NAME1, true) == 0 ||
	strcmp(player_info[targetid][NAME], KRUTOY_NAME2, true) == 0) // Проверка если targetid является крутым
	{
                // Здесь можете сделать свои условия
		GameTextForPlayer(playerid, "~r~So bad!", 5000, 1);
		format(totalstring, 128, "%s попытался навредить крутому на проекте!", player_info[playerid][NAME]);
		SCMA(COLOR_LIGHTRED, totalstring);
		fix_Kick(playerid);
		return 1;
	}
	else return 0;
}


Пример использования (не является готовой командой):
CMD:ban(playerid, params[])
{
    if(sscanf(params, "d", params[0])) return SCM(playerid, COLOR_LIGHTRED, "Введите: /ban [ID игрока]");
    if(CheckKrutoy(playerid, params[0])) return 1; // Сама проверка
    return 1;
}


Надеюсь эта система Вам пригодиться, спасибо что посмотрели!
-1

#2
Пользователь офлайн   M I S T E V 

  • Вставить ник
  • Раскрыть информацию
if(GetPlayerAdminLevel(playerid) <= GetPlayerAdminLevel(targetid))
    return 0;

3

#3
Пользователь офлайн   Coquette 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Чем гуще лес if else if else...

Сообщение отредактировал Coquette: 28 июня 2026 - 21:19

0

#4
Пользователь офлайн   Coquette 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Раз уж используешь y_iterate(foreach), то хотя бы используй его на полную, как минимум не перебирать всех игроков и искать админов, а завести отдельный итератор:
new Iterator:Admins<MAX_PLAYERS>; // предположим что админов может быть весь онлайн
// потом при авторизации в админку:
Iter_Add(Admins, playerid);
// а в OnPlayerDisconnect:
Iter_Remove(Admins, playerid);

Можно не делать сверку через Iter_Check, потому что Iter_Remove сам сделает проверку, и удалит только в том случае, если игрок будет в итераторе.

Выделение 36 ячеек под ник выглядит забавно. Если что, максимальная длина игрового ника может быть всего 24, т.е 12 ячеек ты берёшь вообще в никуда. Это, если что, не комьюнити придумало, а в САМПе так устроено.

Сверка по никам тоже не оставляет желать лучшего. Если "крутой" захочет поменять ник, придётся ещё и лезть в код, менять данные... лучше тогда прикреплять к айди аккаунта.

Ну, а в вопросе красоты самого кода речь думаю можно не вести...
0

#5
Пользователь офлайн   nikpodvip 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Крутое название функции и табуляция в ней.

Кстати, а хватит тебе для чата 128 ячеек? В чате используется 144 + 1 символ для закрытия строки.
Ещё и переменные обычные которые используются как константы и написаны квасом, но почему то они не const. Выделяешь лишнюю память серверу на редко используемую функцию.

Ну и сменил твой крутой человек ник, занял его кто-то другой. Опа, дыра выходит т.к. этого человека уже нельзя забанить. Поэтому лучше юзать не по никак, а по accId, т.к. он статический. Ну и раз уж такое пилить, то запилил бы добавление/удаление этих аккаунтов во время работы. Ну и хранение тоже
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика