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

Легкий Anti Team kill 1.1

Черная вдова

Участник
Сообщения
2,795
Реакции
670
  • Автор ресурса
  • #1
Вот попытался реализовать более легкую версию anti team kill
Уложился в достаточно небольшое количество строк
Функции:

1)Система очков
a)За попадание по напарнику +1 очко
b)За попадание по напарнику в начале раунда(первые 10 сек) +9 очков + смерть
c)За убийство напарника + 9 очков

2)Очки не даются если урон меньше 3 hp

3)При убийстве напарника, ему открывается окно с выбором (убить/простить)
a)В случае прощения убийце прощаются 3 очка

4)Система сохранения очков при входе/выходе

5)Система прощения очков за некоторое сыгранное время

5)При попадании наноситься зеркальный урон равный нанесенному
a)Если урон превысил здоровье, то убьет

6)Система Бана по SB если игрок набрал 20 и более очков
a)Если игрок вышел не получив наказание (Убил кого то и сразу вышел), то его забанит

7)Если игрок имеет флаг A, то для него лимит в 2 раза больше, зеркальный урон с 20 очков и бан с 40

Плагин еще толком не протестирован, буду благодарен за нахождение ошибок.
Версия 1.1: Приняты поправки 1,4,5 от R1ko
 
Последнее редактирование модератором:

Черная вдова

Участник
Сообщения
2,795
Реакции
670
  • Автор ресурса
  • #4
я тот плагин не смотрел, но брал некоторый(ые) за основу и указал их в авторах
тем более тот плагин 40 кб а мой 6.6, но без кваров и переводов, вобщем для себя писал сначала
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
1.
PHP:
if(GetUserFlagBits(client) & ADMFLAG_RESERVATION || GetUserFlagBits(client) & ADMFLAG_ROOT)

Лучше 1 раз получи флаги, запиши в переменную и тогда сравнивай.

PHP:
new iFlags = GetUserFlagBits(client);
if(iFlags & ADMFLAG_RESERVATION || iFlags & ADMFLAG_ROOT)
2.
PHP:
#include <sourcebans>
SBBanPlayer(0, client, 20, "Убийство товарищей по команде");
Без СБ плагин не будет работать. Лучше сделать так:
PHP:
ServerCommand("sm_ban #%i 20 \"Убийство товарищей по команде\"", GetClientUserId(client));
Будет банить всегда, а если сб - бан будет в него заноситься.

3.
PHP:
#include <colors>
CPrintToChatAllEx(attacker, "[SM]{teamcolor} %N {default}был убит за атаку товарища по команде на спавне", attacker);
Вообще молчу. Зачем инкудить библиотеку если и без неё это можно сделать. Тем более вывода в phases нет.
4.
PHP:
DrawPanelItem(menu, "Не жмите просто так 1,", ITEMDRAW_DISABLED);
DrawPanelItem(menu, "подумайте стоит ли убивать или прощать игрока,", ITEMDRAW_DISABLED);
DrawPanelItem(menu, "сделавшего это убийство", ITEMDRAW_DISABLED);
А не лучше ли сделать так:
PHP:
DrawPanelText(menu, "Не жмите просто так 1,");
DrawPanelText(menu, "подумайте стоит ли убивать или прощать игрока,");
DrawPanelText(menu, "сделавшего это убийство");
Но тогда в Select_Panel будет:
PHP:
if(option == 0)
{
	CPrintToChatAllEx(client, "[SM]{teamcolor} %N {default}Убил {teamcolor}%N {default}за тимкилл", client , cankill[client]);
	ForcePlayerSuicide(cankill[client]);
}
else if(option == 1)
{
	CPrintToChatAllEx(client, "[SM]{teamcolor} %N {default}Простил {teamcolor}%N {default}за тимкилл", client , cankill[client]);
	teamattack[cankill[client]] = teamattack[cankill[client]] - 3;
	if(teamattack[cankill[client]] < 0) teamattack[cankill[client]] = 0;
}
5.
PHP:
SendPanelToClient(menu, victim, Select_Panel, 10);
После этого закрой Handle панели.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
Черная вдова, Смотри.
PHP:
DrawPanelItem(menu, "Не жмите просто так 1,", ITEMDRAW_DISABLED);
Добавляет пункт, но его нельзя выбрать.
Тоесть как param он будет.


PHP:
DrawPanelText(menu, "Не жмите просто так 1,");
Добавляет текст, по сути тот же пункт, но он не будет учитываться в param.


Тоесть выходит так:
PHP:
DrawPanelItem(menu, "Пункт 1", ITEMDRAW_DISABLED);
DrawPanelItem(menu, "Пункт 2", ITEMDRAW_DISABLED);
DrawPanelItem(menu, "Пункт 3");
DrawPanelItem(menu, "Пункт 4", ITEMDRAW_DISABLED);

В обратном вызове param может быть только = 2 (пункт 3 но номерация с 0)
Ты сможешь выбрать только "Пункт 3".


В другом случае:
PHP:
DrawPanelText(menu, "Пункт 1");
DrawPanelText(menu, "Пункт 2");
DrawPanelItem(menu, "Пункт 3");
DrawPanelText(menu, "Пункт 4");

В обратном вызове param может быть только = 0 (пункт 3 но пунктов у нас 1, а остальное тескт.)
Ты сможешь выбрать только "Пункт 3".
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
  • Автор ресурса
  • #9
а насчет закрытия, я утечку получается сделал? И закрыть надо сразу после строки отправки?
 
Сверху Снизу