Примеры Insane Limits - автоматические правила для сервера BF3, BF4, BFH

Slawter

Support team
5 Сен 2014
22.381
874
В этой теме находятся примеры написания скриптов для плагина BF3 и BF4 Insane Limits
Как правильно пользоваться плагином, и создавать лимиты описано тут
Insane limits


Быстрые ссылки
Ограничение игроков по Рангу
Ограничение игроков по Рангу №2
Ограничение игроков по стране
Исключение игроков по статистике КД и точности из Battlelog
Запретить играть интенсивным Снайперам - Ограничить кемперам вход
Отслеживать чрезмерно быстрые убийства (античит в реальном времени)
Сообщения за серию убийств из определенного оружия
Позор самоубийцам-прыгунам
Ачивка за убийство с коротким промежутком времени (мультикилл)
Сообщения за убийство с Ножа
Первая кровь в раунде
Ограничение Убийств в минуту за раунд
Сервер Knife Only (разрешить на сервере убийства только с ножа)
Приветственное сообщение по странам
Авто-спам сообщение, в зависимости от кол-в игроков на сервере
Pistol only сервер (Создание сервера только на пистолетах)
!pistols on/off запуск сервера Only Pistol по команде
Запретить дробовики, C-4, RPG и M320 на TDM картах
Запретить дробовики, C-4, RPG и M320 на всех картах
 
Последнее редактирование:
  • Like
Реакции: jadefox

Slawter

Support team
5 Сен 2014
22.381
874
Ограничение игроков по Рангу

В графе limit_evaluation укажите OnJoin
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
( player.Rank > 45 )
45 можете заменить на любой ранг, в BF4 их 140, в BF3 по-моему 120(гуглите)
 

Slawter

Support team
5 Сен 2014
22.381
874
Ограничение игроков по Рангу №2

Если вы хотите, чтобы ваш сервер немного наполнился, а только потом начал исключать игроков высокого ранга, то используйте этот пример

В графе limit_evaluation укажите OnJoin
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
  (  player.Rank > 45   &&  server.PlayerCount > 30  )
Это разрешит игрокам указанного ранга подключиться к серверу и играть до тех пор, пока не наберется 30 игроков, значения можете редактировать.
 

Slawter

Support team
5 Сен 2014
22.381
874
Ограничение игроков по стране

Этот пример исключит с сервера автоматически тех игроков, которые подсоединяются из стран США, Польша, Германии

В графе limit_evaluation укажите OnJoin
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
 Regex.Match(player.CountryCode, "(US|PL|DE)", RegexOptions.IgnoreCase).Success

Если вы хотите исключить всех игроков, кто не из России с сервера, нужно использовать скрипт так
Код:
! Regex.Match(player.CountryCode, "(RU)", RegexOptions.IgnoreCase).Success
 

Slawter

Support team
5 Сен 2014
22.381
874
Исключение игроков по статистике КД и точности из Battlelog

Этот лимит позволит исключить подозрительных игроков с сервера, ссылаясь на статистику из battlelog автоматически
В графе limit_evaluation укажите OnSpawn
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
(  player.Kdr > 4.0   ||  player.Accuracy > 50  )
Значения можете редактировать на своё усмотрение.
 

Slawter

Support team
5 Сен 2014
22.381
874
Запретить играть интенсивным Снайперам

Этот лимит позволит исключить игроков, которые очень много играют за класс РАЗВЕДЧИКА (снайпером) и имеют хороший КД, ссылаясь на статистику из Battlelog автоматически, как правило таких называют кэмперами.

В графе limit_evaluation укажите OnJoin
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
( player.ReconPercent > 90 && player.Kdr > 2.0 )
Значения можете редактировать на своё усмотрение.
 

Slawter

Support team
5 Сен 2014
22.381
874
Отслеживать чрезмерно быстрые убийства (античит в реальном времени)

С этим лимитом, вы сможете оградить сервер от потенциальных читеров, которые убивают слишком много за заданное кол-во времени.

В графе limit_evaluation укажите OnKill
Установите Action на Kick, Ban или что хотите

В графе limit_first_check укажите Expression
Код:
(true)
В графе limit_second_check укажите Expression
Код:
( limit.Activations(player.Name, TimeSpan.FromSeconds(30)) >  10 )
На этом примере лимит сработает тога, когда игрок сделает больше 10-ти убийств за 30 секунд.
Вы конечно же можете отредактировать промежуток срабатывания на своё усмотрение.


К примеру, если вы захотите, чтобы он срабатывал только на кол-во сделаных выстрелов в голову (хэдшотов), то исправьте первый Expression на следующий
Код:
( kill.Headshot == true)
 

Slawter

Support team
5 Сен 2014
22.381
874
Сообщения за серию убийств из определенного оружия

В этом примере используются РПГ, но вы можете внести код на любое оружие (коды оружия можно посмотреть в папке Configs прокона, в файлах BF3.def, BF4,def). Лимит будет оповещать сообщением всякий раз, когда игроки сделают 5 или больше убийств серией подряд из РПГ в чат или центр.

В графе limit_evaluation укажите OnKill
Установите Action на Say (в чат) Yell (в центр экрана)
В графе limit_first_check укажите Expression
Код:
  Regex.Match(kill.Weapon, @"(U_RPG7)", RegexOptions.IgnoreCase).Success
В графе limit_second_check укажите Expression
Код:
( limit.Spree(player.Name) > 5 )
В графе say или yell_message
Код:
Ничего себе %p_n% убил из %w_n%, %r_x% игроков подряд
Таким образом, 5 убийств из РПГ (без смертей) будет сопровождаться таким сообщением. Вы можете отредактировать 5 на своё усмотрение и вписать любое оружие.
 

Slawter

Support team
5 Сен 2014
22.381
874
Позор самоубийцам-прыгунам

С этим лимитом, вы сможете опозорить тех, кто постоянно делает суицид или разбивается с высоты, под это попадают все те, кто погиб с кодом "SoldierCollision", который обычно происходит при падениях с большой высоты без парашюта.

В графе limit_evaluation укажите OnSuicide
Установите Action на Say (в чат) Yell (в центр экрана)
В графе limit_first_check укажите Expression
Код:
 kill.Weapon.Equals("SoldierCollision")
В графе say или yell_message
Код:
%p_n% позорно погиб, уже %p_x_th% раз за этот раунд!
 

Slawter

Support team
5 Сен 2014
22.381
874
Ачивка за убийство с коротким промежутком времени (мультикилл)

На этом примере показано убийство с С4, но вы можете внести код на любое оружие (коды оружия можно посмотреть в папке Configs прокона, в файлах BF3.def, BF4,def).
Данный лимит отслеживает убийства, сделанный за очень короткий промежуток времени, если игрок совершил его, то он читер или пусть держит свою ачивку от вас за выполненное задание.

В графе limit_evaluation укажите OnKill
Установите Action на Say (в чат) Yell (в центр экрана)
В графе limit_first_check укажите Expression
Код:
( kill.Weapon.Equals("C4") )
В графе limit_second_check укажите Expression
Код:
( limit.Activations(player.Name, TimeSpan.FromSeconds(10)) > 1 )
В графе say или yell_message
Код:
%p_n% совершил мульти-убийство из %w_n%!
Лимит сработает, если игрок убил более одного убийства с С4 за 10 секунд. Промежуток можете редактировать.
 

Slawter

Support team
5 Сен 2014
22.381
874
Сообщения за убийство с Ножа

Это популярный лимит, на автоматизацию сообщения "ЗАРЕЗАЛ", когда игроки убивают с помощью ножа.

В графе limit_evaluation укажите OnKill
Установите Action на Say (в чат) Yell (в центр экрана)
В графе limit_first_check укажите Expression
Код:
Regex.Match(kill.Weapon, "(Melee|Knife)").Success
В графе say или yell_message
Код:
%k_n% ЗАРЕЗАЛ %v_n%

Это автоматическое сообщение за убийство ножа, с небольшой кастомизацией сообщения для разных категорий игроков.
1. Например для админов или для девушек отдельное сообщение
2. Для VIP игроков (тех кто находится в списке ReservedSlotList.txt)
3. Для простых игроков просто ЗАРЕЗАЛ

В графе limit_evaluation укажите OnKill
В графе limit_first_check укажите Expression
Код:
(Regex.Match(kill.Weapon, "(Melee|Knife)").Success)
В графе limit_second_check укажите Code
Код:
Dictionary<String, String> pkmData = new Dictionary<String, String>();

// Добавьте специфические сообщения с помощью pkmData.Add("Имя", "Сообщение");

pkmData.Add("-XL-Timm", "%k_fn%: из России с любовью %v_n% Спасибо за Жетон =)");

pkmData.Add("little_t1ger", "Девушка **%k_fn%** СОРВАЛА ЖЕТОН с НУБА %v_n%");

pkmData.Add("iSMALLMONKEYi", "Админша **%k_fn%** СРЕЗАЛА ЖЕТОН НУБА %v_n%");


// ---------------------------------------------------------------------------------------------------------------------------- //

String[] pkmMsgs = { "", "", "" };

String pkmOut = "";

// ---------------------------------------------------------------------------------------------------------------------------- //



List<String> ReservervedSlots = plugin.GetReservedSlotsList();

String[] adm = {

"-XL-Timm",

"iSMALLMONKEYi",

"little_t1ger"};

int g = 0;

int f = 0;

bool isadm = false;





if (!server.Data.getBool(killer.Name))            //Если игрок до этого еще никого не резал, то его счетчик переводится в 0

    {

    server.Data.setInt(killer.Name, 0);

    server.Data.setBool(killer.Name, true);

    }



f = server.Data.getInt(killer.Name);

server.Data.setInt(killer.Name, (f + 1));





// Check if the killer has a personalized knife messages

if (pkmData.TryGetValue(killer.Name.Trim(), out pkmOut))

{

// Killer has a personalized kill message

pkmMsgs[1] = plugin.R(pkmOut);

    for (int i = 0; i < pkmMsgs.Length; i++)

    {

    plugin.SendGlobalMessage(pkmMsgs[i] + " (" + (server.Data.getInt(killer.Name)).ToString() + ")");

    }

}

else

{

    for (g = 0; g < adm.Length; g++)

    {

    if (killer.Name == adm[g].ToString()) { isadm = true; }

    }



    if (ReservervedSlots.Contains(killer.Name) && !isadm)

    {



    plugin.SendGlobalMessage(" ");

    plugin.SendGlobalMessage("oxxxxxxxxxxxxxxx{VIP]::::::::::::::::::::::::::::::::::> **" +killer.Name+ "** ПОСАДИЛ НА НОЖ " +victim.Name+ "." + " (" + (server.Data.getInt(killer.Name)).ToString() + ")");

    plugin.SendGlobalMessage(" ");

    plugin.SendPlayerYell(victim.Name, "\noxxxxxxxxxxxxxxx{VIP]::::::::::::::::::::::::::::::::::>" + "\n" + "\nВАС ПОДРЕЗАЛ VIP **" + killer.Name + "**", 10);



    }

    else

    {

    // Killer is a guest and get's a generic knife message

    pkmMsgs[0] = plugin.R("%k_fn%: ЗАРЕЗАЛ %v_n%! (" + (server.Data.getInt(killer.Name)).ToString() + ")");

    plugin.SendGlobalMessage(pkmMsgs[0]);

    }



}



return false;
 

Slawter

Support team
5 Сен 2014
22.381
874
Первая кровь в раунде

Этот лимит сработает на первое убийство за раунд, оповестив сообщением

В графе limit_evaluation укажите OnKill
Установите Action на Say (в чат) Yell (в центр экрана)
В графе limit_first_check укажите Expression
Код:
(true)
В графе limit_second_check укажите Expression
Код:
limit.Activations() == 1
В графе say или yell_message
Код:
ПЕРВАЯ КРОВЬ!!! %p_n% убил с %w_n%!
 

Slawter

Support team
5 Сен 2014
22.381
874
Ограничение Убийств в минуту за раунд

В графе limit_evaluation укажите OnIntervall
Установите Action на Kick, Ban или что хотите
В графе limit_first_check укажите Expression
Код:
( player.KpmRound > 30 && (player.TimeRound/60) > 5 )
Лимит начнет работать после того, как пройдет не менее 5-ти минут после того, как игрок присоединился на сервер, чтобы стабилизировать статистику раунда. Кикнет он за более 30-ти убийств в минуту. Вы можете отредактировать значения по желанию, это просто пример.
 

Slawter

Support team
5 Сен 2014
22.381
874
Сервер Knife Only (разрешить на сервере убийства только с ножа)

В графе limit_evaluation укажите OnKill
Установите Action на None
В графе limit_first_check укажите Expression
Код:
! Regex.Match(kill.Weapon, @"(Melee|Knife)", RegexOptions.IgnoreCase).Success
В графе limit_second_check укажите Code
Код:
double count = limit.Activations(player.Name);

     if (count == 1)
         plugin.SendGlobalMessage(plugin.R("%p_n%, разрешены убийства только с ножа. %w_n% Запрещён!"));
     else if (count > 1)
         plugin.KickPlayerWithMessage(player.Name, plugin.R("%p_n%, исключен за убийство с %w_n%, разрешены только ножи"));
   
     return false;
 

Slawter

Support team
5 Сен 2014
22.381
874
Приветственное сообщение по странам


В графе limit_evaluation укажите OnSpawn
Установите Action на None
В графе limit_first_check укажите Expression
Код:
(true)
В графе limit_second_check укажите Code
Код:
double count = limit.ActivationsTotal(player.Name);

        if (count > 1)
           return false;
        
        String CC = player.CountryCode;
      
        if (CC.Equals("ru"))
           plugin.SendGlobalMessage(plugin.R("Добро пожаловать %p_n% вступай в наш дискорд DISCORD.XL-GAMES.RU"));
        else if (CC.Equals("de"))
           plugin.SendGlobalMessage(plugin.R("Willkommen %p_n%"));
        else if(CC.Equals("fr"))
           plugin.SendGlobalMessage(plugin.R("Bienvenue %p_n%"));
        else if (CC.Equals("it"))
           plugin.SendGlobalMessage(plugin.R("Benvenuto %p_n%"));
           else if (CC.Equals("us"))
           plugin.SendGlobalMessage(plugin.R("Welcome %p_n%"));
        else
           plugin.SendGlobalMessage(plugin.R("Everyone lets welcome %p_n% from %p_cn%!"));

        return false;
 

Slawter

Support team
5 Сен 2014
22.381
874
Авто-спам сообщение, в зависимости от кол-в игроков на сервере

На примере показан лимит, с которым на сервере в чат и в центр экрана будет выводиться сообщение раз в N секунд о том, что играть просят только на точке Б (для серверов локер и метро)

В графе limit_evaluation укажите OnIntervalServer
ниже установите время в секундах, после которого оно будет повторяться
Код:
if (server.PlayerCount < 10 )
{
plugin.SendGlobalMessage( "Пожалуйста, играйте только на Б...");
plugin.SendGlobalMessage( "Please, play only B...");
plugin.SendGlobalYell(( "\nПожалуйста, играем только на Б, пока мало игроков на сервере..." + "\nPlease, play only B while low server population!."),7);
}
 

Slawter

Support team
5 Сен 2014
22.381
874
Pistol only сервер (Создание сервера только на пистолетах)

В графе limit_evaluation укажите OnKill
Установите Action на None
В графе limit_first_check укажите Expression

Для BF4
Код:
!Regex.Match(kill.Weapon, @"(U_Taurus44|U_HK45C|U_CZ75|U_FN57|U_Glock18|U_M1911|U_M9|U_M93R|U_MP412Rex|U_MP443|U_P226|U_QSZ92|Melee|Suicide|SoldierCollision|DamageArea|Death)", RegexOptions.IgnoreCase).Success

Для BF3
Код:
  ! Regex.Match(kill.Weapon, @"(M1911|M9|M93R|Taurus|MP412REX|MP443|Glock)", RegexOptions.IgnoreCase).Success

Для BF3 и BF4 одинаковый В графе limit_second_check укажите Code
Код:
double count = limit.Activations(player.Name);

     if (count == 1)
         plugin.SendGlobalMessage(plugin.R("%p_n%, не используй %w_n% снова! Разрешены только пистолеты"));
     else if (count > 1)
         plugin.KickPlayerWithMessage(player.Name, plugin.R("%p_n%, исключен за исопльзование %w_n%"));
    
     return false;
 

Slawter

Support team
5 Сен 2014
22.381
874
!pistols on/off запуск сервера Only Pistol по команде

С этим скриптом Вы сможете запустить кастомный сервер по команде

Шаг 1
Включите use_custom_list
IL_custom_list.png


Создайте Custom_list
IL_custom_list2.png


в самом низу через 10 секунд появится List #1
list_1 выставить Show

Назовите его admins
и введите ники тех, кому будет дозволено использовать команды !pistols on
IL_custom_list3.png



Шаг 2
Создайте новый лимит
В графе limit_evaluation укажите OnAnyChat
Установите Action на None
В графе limit_first_check укажите Code
Код:
/* VERSION R4 */

String kPistols = "Pistols only toggle"; // plugin.Data bool
bool isPistolsOnly = false;

String tag = player.Tag;
if (tag.Length == 0) {
    // Maybe they are using [_-=]XXX[=-_]PlayerName format
    Match tm = Regex.Match(player.Name, @"^[=_\-]?([^=_\-]{2,4})[=_\-]");
    if (tm.Success) {
        tag = tm.Groups[1].Value;
    } else {
        tag = "no tag";
    }
}

if (!plugin.isInList(player.Name, "admins") && !plugin.isInList(tag, "admins")) return false;

Match m = Regex.Match(player.LastChat, @"^\s*!pistols?\s+(on|off)", RegexOptions.IgnoreCase);

if (!m.Success) return false;

String mode = m.Groups[1].Value;

if (mode == "on") {
    isPistolsOnly = true;
} else if (mode == "off") {
    isPistolsOnly = false;
}

if (isPistolsOnly) {
    plugin.SendGlobalMessage("*** PISTOLS ONLY MODE IS ON! ***");
    plugin.ServerCommand("admin.yell", "PISTOLS ONLY STARTING NOW!");
} else {
    List<PlayerInfoInterface> all = new List<PlayerInfoInterface>();
    all.AddRange(team1.players);
    all.AddRange(team2.players);
    if (team3.players.Count > 0) all.AddRange(team3.players);
    if (team4.players.Count > 0) all.AddRange(team4.players);

    foreach (PlayerInfoInterface p in all) {
        String kCounter = p.Name + "_TreatAsOne_Count_Pistol";
        if (server.Data.issetInt(kCounter)) server.Data.unsetInt(kCounter);
    }
    plugin.SendGlobalMessage("*** PISTOLS ONLY MODE IS OFF! ***");
    plugin.ServerCommand("admin.yell", "You can use any weapon now, no more pistols only");
}

plugin.Data.setBool(kPistols, isPistolsOnly);

return false;

Графу limit_second_check оставьте Disabled


Шаг 3

Создайте новый лимит
В графе limit_evaluation укажите OnKill
Установите Action на None
В графе limit_first_check укажите Expression
Код:
(true)
В графе limit_second_check укажите Code
Код:
/* VERSION R4 */

if (killer.Name == victim.Name) return false; // don't punish Suicides

if (Regex.Match(kill.Weapon, @"(?:SoldierCollision|DamageArea|Suicide|RoadKill)", RegexOptions.IgnoreCase).Success) return false; // don't punish weird death cases

String kPistols = "Pistols only toggle"; // plugin.Data bool
bool isPistolsOnly = false;

if (plugin.Data.issetBool(kPistols)) isPistolsOnly = plugin.Data.getBool(kPistols);

if (!isPistolsOnly || Regex.Match(kill.Weapon, @"(?:M1911|M9|Taurus|MP412REX|MP443|Glock)", RegexOptions.IgnoreCase).Success) return false;

String kCounter = killer.Name + "_TreatAsOne_Count_Pistol";
TimeSpan time = TimeSpan.FromSeconds(1); // Activations within 1 seconds count as 1
    
int warnings = 0;
if (server.Data.issetInt(kCounter)) warnings = server.Data.getInt(kCounter);

/*
The first time through, warnings is zero. Whether this is an isolated
activation or the first of a sequence of activations in a short period
of time, do something on this first time through.
*/
String msg = "none";
if (warnings == 0) {
        msg = "We are playing pistols only!";
        plugin.ServerCommand("admin.say", "FINAL WARNING " + killer.Name + "! " + msg, "player", killer.Name);
        plugin.ServerCommand("admin.yell", msg, "15", "player", killer.Name);
        plugin.PRoConChat("ADMIN to " + killer.Name + "> " + msg);
    plugin.KillPlayer(killer.Name, 5);
        server.Data.setInt(kCounter, warnings+1);
        return false;
}

/*
The second and subsequent times through, check to make sure we are not
getting multiple activations in a short period of time. Ignore if
less than the time span required.
*/

if (limit.Activations(killer.Name, time) > 1) return false;

/*
We get here only if there was exactly one activation in the time span
*/

if (warnings == 1) {
        msg = "Pistols only, next time you are banned!";
        plugin.ServerCommand("admin.say", "FINAL WARNING " + killer.Name + "!" + msg, "player", killer.Name);
        plugin.ServerCommand("admin.yell", msg, "10", "player", killer.Name);
        plugin.PRoConChat("ADMIN to " + killer.Name + ">" + msg);
        plugin.KickPlayerWithMessage(killer.Name, msg);
} else {
        msg = "Temp banning " + killer.Name + " for not using a pistol";
        plugin.SendGlobalMessage(msg);
        plugin.ServerCommand("admin.yell", msg);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
    plugin.EABanPlayerWithMessage(EABanType.Name, EABanDuration.Temporary, killer.Name, 10, msg);
}
server.Data.setInt(kCounter, warnings+1);
return false;



Код:
/* VERSION R4 */

if (killer.Name == victim.Name) return false; // don't punish Suicides

if (Regex.Match(kill.Weapon, @"(?:SoldierCollision|DamageArea|Suicide|RoadKill)", RegexOptions.IgnoreCase).Success) return false; // don't punish weird death cases

String kPistols = "Pistols only toggle"; // plugin.Data bool
bool isPistolsOnly = false;

if (plugin.Data.issetBool(kPistols)) isPistolsOnly = plugin.Data.getBool(kPistols);

if (!isPistolsOnly || kill.Category == "Handgun") return false;

String kCounter = killer.Name + "_TreatAsOne_Count_Pistol";
TimeSpan time = TimeSpan.FromSeconds(1); // Activations within 1 seconds count as 1
    
int warnings = 0;
if (server.Data.issetInt(kCounter)) warnings = server.Data.getInt(kCounter);

/*
The first time through, warnings is zero. Whether this is an isolated
activation or the first of a sequence of activations in a short period
of time, do something on this first time through.
*/
String msg = "none";
if (warnings == 0) {
        msg = "We are playing pistols only!";
        plugin.ServerCommand("admin.say", "FINAL WARNING " + killer.Name + "! " + msg, "player", killer.Name);
        plugin.ServerCommand("admin.yell", msg, "15", "player", killer.Name);
        plugin.PRoConChat("ADMIN to " + killer.Name + "> " + msg);
    plugin.KillPlayer(killer.Name, 5);
        server.Data.setInt(kCounter, warnings+1);
        return false;
}

/*
The second and subsequent times through, check to make sure we are not
getting multiple activations in a short period of time. Ignore if
less than the time span required.
*/

if (limit.Activations(killer.Name, time) > 1) return false;

/*
We get here only if there was exactly one activation in the time span
*/

if (warnings == 1) {
        msg = "Pistols only, next time you are banned!";
        plugin.ServerCommand("admin.say", "FINAL WARNING " + killer.Name + "!" + msg, "player", killer.Name);
        plugin.ServerCommand("admin.yell", msg, "10", "player", killer.Name);
        plugin.PRoConChat("ADMIN to " + killer.Name + ">" + msg);
        plugin.KickPlayerWithMessage(killer.Name, msg);
} else {
        msg = "Temp banning " + killer.Name + " for not using a pistol";
        plugin.SendGlobalMessage(msg);
        plugin.ServerCommand("admin.yell", msg);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
    plugin.EABanPlayerWithMessage(EABanType.Name, EABanDuration.Temporary, killer.Name, 10, msg);
}
server.Data.setInt(kCounter, warnings+1);
 
  • Like
Реакции: Clin4

Slawter

Support team
5 Сен 2014
22.381
874
Запретить дробовики, C-4, RPG и M320 на TDM картах

1) Создайте новый лимит
2) Затем включите его, в графе limit_hide указав Show
3) Дайте любое название созданному лимиту в графе limit_name
4) В графе limit_evaluation укажите OnKill
5) В графе limit_first_check укажите Expression
7) В созданном поле limit_firstcheck_expression добавьте следующий код:
Код:
(Regex.Match(server.Gamemode, @"(?:TeamDeathMatch0)", RegexOptions.IgnoreCase).Success && Regex.Match(kill.Weapon, @"(M320|C4|M224|U_RPG7|Siaga20k|SPAS-12|USAS-12|M26Mass|M1014|jackhammer|DAO-12|870MCS|)", RegexOptions.IgnoreCase).Success)
Код:
(Regex.Match(server.Gamemode, @"(?:TeamDeathMatch0)", RegexOptions.IgnoreCase).Success && Regex.Match(kill.Weapon, @"(U_M320|U_C4|M224||U_M224|U_RPG-7|U_870|U_DAO12|U_DBV12|U_HAWK|U_M1014|U_M26Mass|U_QBS09|U_SAIGA_20K|U_SPAS12|U_USAS-12|U_USAS-12_Nightvision|U_USAS-12_SP|U_UTAS)", RegexOptions.IgnoreCase).Success)
(коды оружия если что берутся из файла BF3.def, который находится по \ProCon\Configs я не нашел там GP30, возможно его нельзя запретить)

8) В графе limit_second_check установите тригер на Code
и введите этот код в созданное поле limit_second_check_code:
Код:
String kCounter = killer.Name + "_TreatAsOne_Count";
TimeSpan time = TimeSpan.FromSeconds(5); // Activations within 5 seconds count as 1

int warnings = 0;
if (server.RoundData.issetInt(kCounter)) warnings = server.RoundData.getInt(kCounter);


String msg = "none";
if (warnings == 0) {
        msg = plugin.R("[ПРЕДУПРЕЖДЕНИЕ] %k_n% это оружие запрещено! Not use not allowed weapon"); // First warning message
        plugin.SendGlobalMessage(msg);
        plugin.SendPlayerYell(killer.Name, "ПРЕДУПРЕЖДЕНИЕ: Не используйте это оружие! Следующий раз Вы будете исключены с сервера! \nWARNING: Do not use explosive ! Next time you will kicked!", 15);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
        plugin.KillPlayer(killer.Name, 2);
        server.RoundData.setInt(kCounter, warnings+1);
        return false;
}

if (limit.Activations(killer.Name, time) > 1) return false;

if (warnings >= 1) {
        msg = plugin.R("[AUTO-ADMIN] %k_n% исключён с сервера. Причина: взрывчатку");
        plugin.SendGlobalMessage(msg);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
        plugin.KickPlayerWithMessage(killer.Name, msg);
}
server.RoundData.setInt(kCounter, warnings+1);
return false;
 

Slawter

Support team
5 Сен 2014
22.381
874
Запретить дробовики, C-4, RPG и M320

1) Создайте новый лимит
2) Затем включите его, в графе limit_hide указав Show
3) Дайте любое название созданному лимиту в графе limit_name
4) В графе limit_evaluation укажите OnKill
5) В графе limit_first_check укажите Expression
7) В созданном поле limit_firstcheck_expression добавьте следующий код:
Код:
Regex.Match(kill.Weapon, @"(M320|C4|M224|U_RPG7|Siaga20k|SPAS-12|USAS-12|M26Mass|M1014|jackhammer|DAO-12|870MCS|)", RegexOptions.IgnoreCase).Success
Код:
Regex.Match(kill.Weapon, @"(U_M320|U_C4|M224||U_M224|U_RPG-7|U_870|U_DAO12|U_DBV12|U_HAWK|U_M1014|U_M26Mass|U_QBS09|U_SAIGA_20K|U_SPAS12|U_USAS-12|U_USAS-12_Nightvision|U_USAS-12_SP|U_UTAS)", RegexOptions.IgnoreCase).Success
(коды оружия если что берутся из файла BF3.def, который находится по \ProCon\Configs я не нашел там GP30, возможно его нельзя запретить)

8) В графе limit_second_check установите тригер на Code
и введите этот код в созданное поле limit_second_check_code:
Код:
String kCounter = killer.Name + "_TreatAsOne_Count";
TimeSpan time = TimeSpan.FromSeconds(5); // Activations within 5 seconds count as 1

int warnings = 0;
if (server.RoundData.issetInt(kCounter)) warnings = server.RoundData.getInt(kCounter);


String msg = "none";
if (warnings == 0) {
        msg = plugin.R("[ПРЕДУПРЕЖДЕНИЕ] %k_n% это оружие запрещено! Not use not allowed weapon"); // First warning message
        plugin.SendGlobalMessage(msg);
        plugin.SendPlayerYell(killer.Name, "ПРЕДУПРЕЖДЕНИЕ: Не используйте это оружие! Следующий раз Вы будете исключены с сервера! \nWARNING: Do not use explosive ! Next time you will kicked!", 15);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
        plugin.KillPlayer(killer.Name, 2);
        server.RoundData.setInt(kCounter, warnings+1);
        return false;
}

if (limit.Activations(killer.Name, time) > 1) return false;

if (warnings >= 1) {
        msg = plugin.R("[AUTO-ADMIN] %k_n% исключён с сервера. Причина: взрывчатку");
        plugin.SendGlobalMessage(msg);
        plugin.PRoConChat("ADMIN > " + msg);
        plugin.PRoConEvent(msg, "Insane Limits");
        plugin.KickPlayerWithMessage(killer.Name, msg);
}
server.RoundData.setInt(kCounter, warnings+1);
return false;