DAsサーバーで使用しているImoiper Limitについて
以前、公開したImoiper Limitを少し弄って使用しています。
Insane Limtsで新しいSniper Limitの"Imoiper Limit"を作ってみた。
Englishゲームのバランスを崩しかねない存在。それは通称「芋」その芋虫たちがスナイパーライフルを捨て、前線に加わることにより多少は改善されることを期待したい。しかし、状況によりスナイパーライフルを使用した方が良い場面もあることは間違いな...
正直、これ↑厳しい設定だったと思う・・・w
仕様
- ラウンド開始約3分後から制限開始
- ラウンドSPMが平均ラウンドSPM以下のプレイヤーが制限対象
- バトルピックアップの対物ライフルは除外
- ImoiperLimitによる罰則をProconRulzとAdKatsで連携
- 1キル=管理者キル
- 2キル=管理者キル+リスポーン制限
- 3キル以上=管理者キル+リスポーン制限+AdKats Punish ※AdKatsのPunishによりキックまたは一時BAN
- リスポーン制限について
- 再び違反を繰り返すことを抑制するため、リスポーンと同時に管理者キルを実行
- チャットに「!sniper」コマンドを打ち込み、使用出来るか確認するまで続く
コード
Procon Plugin – Insane Limits – 0.9.17.0
Limit 1.
Set limit to evaluate OnKill
Set action to None
Set first_check to this Expression:
1 |
Regex.Match(kill.Weapon, @"(U_CS-LR4|U_M40A5|U_Scout|U_SV98|U_JNG90|U_SRS|U_M98B|U_M200|U_L96A1|U_GOL|U_FY-JS|U_SR338|U_CS5)", RegexOptions.IgnoreCase).Success |
Set second_check to this Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
// Set second_check to this Code: double timeToStartLimit = 180; // Seconds. double avgSpm = Math.Ceiling((team1.ScoreRound + team2.ScoreRound + team3.ScoreRound + team4.ScoreRound) / server.PlayerCount / (server.TimeRound / 60)); Dictionary<string, int> iPunish = new Dictionary<string, int>(); if (!plugin.RoundData.issetObject("imoiperPunish")) plugin.RoundData.setObject("imoiperPunish", new Dictionary<string, int>()); iPunish = (Dictionary<string,int>)plugin.RoundData.getObject("imoiperPunish"); if (!iPunish.ContainsKey(player.Name)) { iPunish.Add(player.Name, 0); } if (server.TimeRound >= timeToStartLimit) { if (avgSpm >= player.SpmRound) { iPunish[player.Name] += 1; plugin.RoundData.setObject("imoiperPunish", iPunish); if (iPunish[player.Name] == 1) { plugin.KillPlayer(player.Name, 1); plugin.SendPlayerMessage(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively.")); plugin.SendPlayerMessage(player.Name, player.Name + " your SPM / Server SPM " + player.SpmRound + " / " + avgSpm); plugin.SendPlayerYell(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively."), 10); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " playerSpm/ServerAvgSpm " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " " + iPunish[player.Name]); } else if (iPunish[player.Name] == 2) { plugin.KillPlayer(player.Name, 1); plugin.SendPlayerMessage(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively.")); plugin.SendPlayerMessage(player.Name, player.Name + " your SPM / Server SPM " + player.SpmRound + " / " + avgSpm); plugin.SendPlayerYell(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively."), 10); plugin.SendGlobalMessage(plugin.R("/respawnlimit %p_n%")); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " playerSpm/ServerAvgSpm " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " " + iPunish[player.Name]); } else if (iPunish[player.Name] >= 3) { plugin.KillPlayer(player.Name, 1); plugin.SendPlayerMessage(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively.")); plugin.SendPlayerMessage(player.Name, player.Name + " your SPM / Server SPM " + player.SpmRound + " / " + avgSpm); plugin.SendPlayerYell(player.Name, plugin.R("%p_n% killed by imoiper limit. If you want to use a SniperRifle, please play more aggressively."), 10); plugin.SendGlobalMessage(plugin.R("/respawnlimit %p_n%")); plugin.SendGlobalMessage(plugin.R("/punish %p_n% %p_n%, punished by Imoiper Limit")); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " playerSpm/ServerAvgSpm " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); plugin.ConsoleWrite("[ImoiperLimit] " + player.Name + " " + iPunish[player.Name]); } } else { iPunish[player.Name] = 0;} } else { if (avgSpm >= player.SpmRound) { plugin.SendPlayerMessage(player.Name, plugin.R("[imoiper limit] %p_n% You do not meet the conditions. Please play aggressively.")); plugin.SendPlayerMessage(player.Name, player.Name + " your SPM / Server SPM " + player.SpmRound + " / " + avgSpm); } } return false; |
Limit 2 (in-game command “!sniper”)
Set limit to evaluate OnAnyChat
Set action to None
Set first_check to this Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
double avgSpm = Math.Ceiling(((team1.ScoreRound + team2.ScoreRound + team3.ScoreRound + team4.ScoreRound) / server.PlayerCount) / (server.TimeRound / 60)); if(player.LastChat.StartsWith("!sniper")) { if (avgSpm >= player.SpmRound) { //plugin.KillPlayer(player.Name, 1); plugin.SendPlayerMessage(player.Name, plugin.R("%p_n% Currently you are NOT allowed to use SniperRifles. Please play more aggressively.")); plugin.SendPlayerMessage(player.Name, player.Name + " YourSPM/ServerAvgSPM " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); plugin.ConsoleWrite("[imoiper limit] " + player.Name + " playerSpm/ServerAvgSpm " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); } else { plugin.SendPlayerMessage(player.Name, plugin.R("%p_n% Currently you are allowed to use sniper rifles. Please keep aggressive play.")); plugin.SendPlayerMessage(player.Name, player.Name + " YourSPM/ServerAvgSPM " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); plugin.ConsoleWrite("[imoiper limit] " + player.Name + " playerSpm/ServerAvgSpm " + Math.Ceiling(player.SpmRound) + " / " + avgSpm); } } return false; |
Procon Plugin – ProconRulz – 44j.1
※Serverのメッセージを受信可能に改造
1 2 3 4 |
On Say;If %p% == Server;Text /respawnlimit;TargetPlayer;Set %ini_player_rs_punish[%t%]% 1; On Spawn;If %ini_player_rs_punish[%p%]% == 1;Kill 100;PlayerBoth %p%, killed by respawn limit. please check the rules. type !rules or !sniper On Say;If %p% != Server;Text !sniper,!rules;If %ini_player_rs_punish[%p%]% == 1;Set %ini_player_rs_punish[%p%]% 0; On Leave;If %ini_player_rs_punish[%p%]% == 1;Set %ini_player_rs_punish[%p%]% 0; |
Specification
- Limit starts about 3 minutes after the start of the round.
- Limited to below average round SPM of in-server players.
- Battle pickup (Anti-material rifle) is excluded.
- Penalize with ProconRulz and AdKats.
- 1 kill = admin kill.
- 2 kill = admin kill + respawn limit.
- 3 kill or more = admin kill + respawn limit + AdKats punish.
- About respawn limit.
- In order to prevent repeated violations, admin kill triggered by respawn.
- Continue until type the “!sniper” command.