• Этот раздел переехал на новый ДОМЕН, чтобы комментировать перейдите по ссылке, для входа можете использовать текущий логин и пароль.

Продвинутый Снайперлимит \ BF4 Sniper limit

Статус
В этой теме нельзя размещать новые ответы.

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва
Доброго времени суток, может кто-то настраивал снайперлимит, чтобы (одноразовые) тех кого убивает после каждого убийства сервер чтоб их кикало после например 5 убийства ?)
 

Timm

XLGAMES.PRO
5 Сен 2014
21.236
2.944
3.549
Battlelog
[BL]
ВКонтакте
[ВК]
Facebook
[FB]
С этим скриптом для Insane limits будет 2 предупреждения а потом кик

СОЗДАТЬ ЛИМИТ 1
limit_evaluation: OnKill
В графе limit_first_check: установите Expression
limit_first_check_code: вставьте
Код:
(true)

В графе limit_second_check установите тригер на Code
Код:
// Макс. кол-во слотов снайперов и ДМР на команду
int maxSnipers = 2;

// Установите кол-во убийств до временного бана
// Инфо: Если 3 игрок получит 2 предупреждения перед временным баном
int warnKick = 3;

// Разрешить резервным слотам юзать снайпрки и дмр
// 0 = нет  |  1 = да
int vipAllowed = 1;

// Разрешить админам юзать снайперки и дмр
// 0 = нет  |  1 = да
int adminAllowed = 1;

// Разрешить юзать снайпреки определенным игрокам
// уберить комментарий со строки ниже и вставьте нужные ники вместо Playername
//bool playerAllowed = (Regex.Match(kill.Name, @"(?:Playername1|Playername2|Playername3)", RegexOptions.IgnoreCase).Success);
//if (playerAllowed) return false;

// Запрещенные категории оружия
bool sniperLimit = (kill.Category == "SniperRifle" || kill.Category == "DMR");

// Разрешенные категории оружия
bool sniperAllowed = (kill.Category == "Handgun" || kill.Category == "Explosive" || kill.Weapon == "Melee" || Regex.Match(kill.Weapon, @"(?:Shorty)").Success);

// Разрешить всю технику
bool vehiclesAllowed = (Regex.Match(kill.Weapon, @"(?:Death|Roadkill|AMTRAC|Vehicle|Jeep|Growler|MRAP|Buggy|Venom|APC|Anti-Air|PGZ-95|HIMARS|MBT|Tank|Jet|Heli|AC-130|Lancer|Xian|Global|CB90|DV-15|RHIB|Bird)", RegexOptions.IgnoreCase).Success);


// Не менять
if (vipAllowed == 1) {
    List<String> ReservervedSlots = plugin.GetReservedSlotsList();
    if (ReservervedSlots.Contains(killer.Name))    return false;
}

if (adminAllowed == 1) {
    bool isAdmin = false;
    bool bKill   = false;
    bool bKick   = false;
    bool bBan    = false;
    bool bMove   = false;
    bool bLevel  = false;
    if (plugin.CheckAccount(player.Name, out bKill, out bKick, out bBan, out bMove, out bLevel)) {
        if (bKill && bKick && bBan) return false;
    }
}

String globalMessage = null;
String globalMessage2 = null;
String privateMessage = null;
String playerKey = "sl_" + killer.Name;
String factionName = null;
int warnings = 0;
int countSnipers = 0;

if (plugin.RoundData.issetInt(playerKey)) warnings = plugin.RoundData.getInt(playerKey);

if (!plugin.RoundData.issetInt("sniperSlots")) plugin.RoundData.setInt("sniperSlots", maxSnipers);

if (!plugin.RoundData.issetObject("slEntries1")) plugin.RoundData.setObject("slEntries1", new List<String>());
if (!plugin.RoundData.issetObject("slEntries2")) plugin.RoundData.setObject("slEntries2", new List<String>());
List<String> sniperTeam1 = (List<String>)plugin.RoundData.getObject("slEntries1");
List<String> sniperTeam2 = (List<String>)plugin.RoundData.getObject("slEntries2");

if (killer.TeamId == 1) countSnipers = sniperTeam1.Count;
else if (killer.TeamId == 2) countSnipers = sniperTeam2.Count;

if (server.GetFaction(player.TeamId) == 0) factionName = "US";
else if (server.GetFaction(player.TeamId) == 1) factionName = "RU";
else if (server.GetFaction(player.TeamId) == 2) factionName = "CN";

if (sniperTeam1.Contains(killer.Name) || sniperTeam2.Contains(killer.Name)) {
    if (!sniperLimit && !sniperAllowed && !vehiclesAllowed) {
        globalMessage = "(" + factionName + ") " + killer.Name + " has lost his SNIPER/DMR slot! (used "+ plugin.FriendlyWeaponName(kill.Weapon).Name + ")";
        globalMessage2 = "(" + factionName + ") " + killer.Name + " has lost his SNIPER/DMR slot! (change team)";
        privateMessage = "You have lost your SNIPER/DMR slot!";
       
        if (killer.TeamId == 1 && sniperTeam1.Contains(killer.Name)) {
            sniperTeam1.Remove(killer.Name);
            plugin.SendTeamMessage(killer.TeamId, globalMessage);
            plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage);
            plugin.SendPlayerYell(killer.Name, privateMessage, 10);
            plugin.PRoConChat("Sniperlimit > PlayerYell[10] > " + killer.Name + " > " + privateMessage);
        } else if (killer.TeamId == 1 && sniperTeam2.Contains(killer.Name)) {
            sniperTeam2.Remove(killer.Name);
            plugin.SendTeamMessage(2, globalMessage2);
            plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage2);
            plugin.SendPlayerYell(killer.Name, privateMessage, 10);
            plugin.PRoConChat("Sniperlimit > PlayerYell[10] > " + killer.Name + " > " + privateMessage);
        } else if (killer.TeamId == 2 && sniperTeam2.Contains(killer.Name)) {
            sniperTeam2.Remove(killer.Name);
            plugin.SendTeamMessage(killer.TeamId, globalMessage);
            plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage);
            plugin.SendPlayerYell(killer.Name, privateMessage, 10);
            plugin.PRoConChat("Sniperlimit > PlayerYell[10] > " + killer.Name + " > " + privateMessage);
        } else if (killer.TeamId == 2 && sniperTeam1.Contains(killer.Name)) {
            sniperTeam1.Remove(killer.Name);
            plugin.SendTeamMessage(1, globalMessage2);
            plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage2);
            plugin.SendPlayerYell(killer.Name, privateMessage, 10);
            plugin.PRoConChat("Sniperlimit > PlayerYell[10] > " + killer.Name + " > " + privateMessage);
        }
        return false;
    }
    return false;
} else if (sniperLimit) {
    if (countSnipers < maxSnipers) {
        if (killer.TeamId == 1) sniperTeam1.Add(killer.Name);
        else if (killer.TeamId == 2) sniperTeam2.Add(killer.Name);
        countSnipers += 1;
        warnings = 0;
        globalMessage = "(" + factionName + ") " + killer.Name + " has now a SNIPER/DMR Slot! (" + countSnipers + "/" + maxSnipers + ")";
        privateMessage = "You have now a SNIPER/DMR slot! (" + countSnipers + "/" + maxSnipers + ")";
        plugin.SendTeamMessage(killer.TeamId, globalMessage);
        plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage);
        plugin.SendPlayerYell(killer.Name, privateMessage, 10);
        plugin.PRoConChat("Sniperlimit > PlayerYell[10] > " + killer.Name + " > " + privateMessage);
        return false;
    } else {
        if (limit.Activations(killer.Name, TimeSpan.FromSeconds(2)) > 1) return false;
        warnings += 1;
        plugin.RoundData.setInt(playerKey, warnings);
        if (warnings <= (warnKick-1)) {
            privateMessage = "You are killed by SNIPER/DMR LIMIT! Warning (" + warnings + "/" + warnKick +") Type !sinfo for more information";
            plugin.SendPlayerMessage(killer.Name, privateMessage);
            plugin.SendPlayerYell(killer.Name, privateMessage, 10);
            plugin.KillPlayer(killer.Name, 1);
            plugin.PRoConChat("Sniperlimit > PlayerSay/Yell[10] > " + killer.Name + " > " + privateMessage);
            return false;
        } else if (warnings == warnKick) {
            globalMessage = "Timeban for ignoring warnings of SNIPER/DMR LIMIT!";
            plugin.EABanPlayerWithMessage(EABanType.Name, EABanDuration.Temporary, killer.Name, 20, globalMessage);
            return false;
        }
    }
}

return false;

СОЗДАТЬ ЛИМИТ 2
Установить limit_evaluation: OnAnyChat
В графе limit_first_check: установите: Code
Код:
List<String> sniperTeam = new List<string>();
int maxSnipers = 0;
String factionName = null;

Match sniperCommand = Regex.Match(player.LastChat, @"!sniper", RegexOptions.IgnoreCase);
Match sinfoCommand = Regex.Match(player.LastChat, @"!sinfo", RegexOptions.IgnoreCase);

if (plugin.RoundData.issetInt("sniperSlots")) maxSnipers = plugin.RoundData.getInt("sniperSlots");

if (!plugin.RoundData.issetObject("slEntries1")) plugin.RoundData.setObject("slEntries1", new List<String>());
if (!plugin.RoundData.issetObject("slEntries2")) plugin.RoundData.setObject("slEntries2", new List<String>());
List<String> sniperTeam1 = (List<String>)plugin.RoundData.getObject("slEntries1");
List<String> sniperTeam2 = (List<String>)plugin.RoundData.getObject("slEntries2");

if (player.TeamId == 1) sniperTeam = sniperTeam1;
else if (player.TeamId == 2) sniperTeam = sniperTeam2;

if (server.GetFaction(player.TeamId) == 0) factionName = "US";
else if (server.GetFaction(player.TeamId) == 1) factionName = "RU";
else if (server.GetFaction(player.TeamId) == 2) factionName = "CN";

List<String> showSniper = new List<String>();

if (sniperCommand.Success) {
    if (sniperTeam.Count == 0) {
        showSniper.Add("No SNIPERS/DMRS on your team (" + factionName + ")");
    } else {
        showSniper.Add("SNIPERS/DMRS on your team (" + factionName + "):");
        foreach (string sniper in sniperTeam) {
            showSniper.Add("Slot (" + (sniperTeam.IndexOf(sniper)+1) + "/" + maxSnipers + ") is " + sniper);
        }
    }
} else if (sinfoCommand.Success) {
    showSniper.Add("First SNIPER/DMR kills get a slot");
    showSniper.Add("You lose your slot with NON-SNIPER/DMR kill");
    showSniper.Add("Allowed: SR/DMR, Handguns, Knifes, Explosives and Vehicles");
    showSniper.Add("Type !sniper to show active slots");
}

foreach (string show in showSniper) {
    plugin.SendPlayerMessage(player.Name, show);
    plugin.PRoConChat("Sniperlimit > PlayerSay > " + show);
}

return false;


СОЗДАТЬ ЛИМИТ 3
Установить limit_evaluation: OnLeave
В графе limit_first_check: установите: Code
String globalMessage = null;
String factionName = null;

if (!plugin.RoundData.issetObject("slEntries1")) plugin.RoundData.setObject("slEntries1", new List<String>());
if (!plugin.RoundData.issetObject("slEntries2")) plugin.RoundData.setObject("slEntries2", new List<String>());
List<String> sniperTeam1 = (List<String>)plugin.RoundData.getObject("slEntries1");
List<String> sniperTeam2 = (List<String>)plugin.RoundData.getObject("slEntries2");

if (server.GetFaction(player.TeamId) == 0) factionName = "US";
else if (server.GetFaction(player.TeamId) == 1) factionName = "RU";
else if (server.GetFaction(player.TeamId) == 2) factionName = "CN";

globalMessage = "(" + factionName + ") " + player.Name + " gave up his SNIPER/DMR slot! (left server)";

if (sniperTeam1.Contains(player.Name)) {
sniperTeam1.Remove(player.Name);
plugin.SendTeamMessage(player.TeamId, globalMessage);
plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage);
} else if (sniperTeam2.Contains(player.Name)) {
sniperTeam2.Remove(player.Name);
plugin.SendTeamMessage(player.TeamId, globalMessage);
plugin.PRoConChat("Sniperlimit > TeamSay > " + globalMessage);
}

return false;
 
  • Like
Реакции: fps_shadow

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва

Вложения

  • limit.jpg
    limit.jpg
    417,5 KB · Просмотры: 839

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва
Это наверное ошибки из-за того что у нас не русифицирован прокон
 

Timm

XLGAMES.PRO
5 Сен 2014
21.236
2.944
3.549
Battlelog
[BL]
ВКонтакте
[ВК]
Facebook
[FB]
какие-то ошибки пишет, буду дома пробовать
ошибки выдает при вставке первого лимита CODE?

и кода 3 лимита не должно быть?
добавил

Это наверное ошибки из-за того что у нас не русифицирован прокон
может быть, попробуйте удалить русское описание, или русифицируйте прокон
 

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва
Или проще перейти на ваш хостинг, потому как не даёт поменять ядро.
 

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва
Как прописать чтобы на Мастер оружия не распространялся?
 

kill_26ru

Старший прапорщик
Арендатор
16 Июл 2018
276
19
389
37
РФ, Ставропольский край, г. Невинномысск
Battlelog
[BL]
ВКонтакте
[ВК]
Леха я тут порыл на досуге вот что пишут иностранцы по этому поводу BF4, BF3 ProconRulz - Sniper limiter v2.7 by Tarreltje - Page 29 могу ошибаться но сюдя по коду это из proconrulz нужно добавить пару строк которые исключают ганмастер из снайперлимита. В общем если в энгише шаришь поймешь. Надеюсь сработает)
Там тема обсуждается через ProConRULZ, а тут нужно в плагине Insane limits решить проблему исключения "мастер оружия"
 

fps_shadow

Старший лейтенант
Арендатор
30 Ноя 2016
213
12
639
47
Москва
Там косяк есть правда, на меня почему то 2 слота часто висят) наверное потому что Вип.
 

kill_26ru

Старший прапорщик
Арендатор
16 Июл 2018
276
19
389
37
РФ, Ставропольский край, г. Невинномысск
Battlelog
[BL]
ВКонтакте
[ВК]

kill_26ru

Старший прапорщик
Арендатор
16 Июл 2018
276
19
389
37
РФ, Ставропольский край, г. Невинномысск
Battlelog
[BL]
ВКонтакте
[ВК]
Через ProConRulz все грамотно работае с исключение мастера ор., но мне надо чтоб випов и админов тоже блочило по снайперке! А если отключают рез.слоты и админов, то пунишь на них будит действовать. Так что спасение только через этот плагин!
 
Статус
В этой теме нельзя размещать новые ответы.