Proconのプラグイン「ProconRulz」は様々なイベントをトリガーにアクションを行うプラグインです。
武器制限のあるサーバー(爆発物禁止やピストルオンリー等)でよく用いられています。武器の制限だけではなく、プログラミング次第でいろいろ出来ます。
今回は、そのProconRulzで武器制限を行うプログラミングについて説明したいと思います。
まず、ProconRulzはどのように制御されているか
「~が起きて、~のため、~する」
トリガー + 状態 + アクションで構成されます。
ショットガン禁止の場合
1 2 |
#例 On Kill;Damage ShotGun;Kill 100;PlayerBoth %p%, %d% is NOT Allowed! |
「On Kill」が、キルイベント発生時をトリガーにする。
「Damage ShotGun」がショットガンでキルした場合(状態)に、アクションを実行させる。
「Kill 100」で違反者に対し管理者キルを実行(アクション)する。
管理者キルだけだと違反者は何故KIAされたかわからない可能性があるため、「PlayerBoth」により、なぜKIAしたのかをゲーム内チャットのSayとYellを送信。
違反数により、キック等をする場合
1 2 3 4 5 |
#例1 On Kill;Damage ShotGun; PlayerCount 3;Kick %p%, kicked by using %d%.; PlayerCount 1;Kill 100; PlayerBoth %p%, %d% is NOT Allowed!; |
この場合、ラウンド中のショットガンによるキルをカウントし、その回数によるアクションを変えています。
「PlayerCount n」はn回以上という条件になり、最初の違反と2回目は管理者キルとメッセージを、3キルした時にキックを行います。
1 2 3 4 5 6 |
#例2 On Kill;Damage ShotGun; Incr %player_shotgunkill%; If %player_shotgunkill% == 1;Kill 100;PlayerBoth %p%, %d% is NOT Allowed!; If %player_shotgunkill% == 2;Kill 100;PlayerBoth %p%, %d% is NOT Allowed! Next time you will be kicked!; If %player_shotgunkill% >= 3;Kick %p%, kicked by using %d%.; |
変数を使い、ラウンドでの違反をカウントします。変数は%で変数名を囲います。「%変数名%」
今回は変数「%player_shotgunkill%」としましたが、特に決まりはありません。わかりやすいように決めましょう。
この変数に違反数を加算させているのが「Incr」です。
違反数による罰則は「If」により設定します。
この場合だと、「ショットガンでキルしました→違反数が1なので管理者キルします→また、ショットガンでキルしました→違反数が2なので管理者キルし、次はキックすると警告する→またまた、ショットガンでキルしました→違反数が3なのでキックします」と、なります。
他の違反と合わせたり複雑にする場合は、PlayerCountより変数を使った方がいいでしょう。
累積による罰則を与える場合
1 2 3 4 5 6 7 |
#例 On Kill;Damage ShotGun; Incr %ini_player_shotgunkill[%ea_guid%]%; If %ini_player_shotgunkill[%ea_guid%]% == 1;Kill 100;PlayerBoth %p%, %d% is NOT Allowed!; If %ini_player_shotgunkill[%ea_guid%]% == 2;Kick %p%, kicked by used %d%.; If %ini_player_shotgunkill[%ea_guid%]% == 3;TempBan 3600 %p%, You used %d%, banned for 1 hour. If %ini_player_shotgunkill[%ea_guid%]% >= 4;Ban %p%, You used %d%, permanently banned. |
変数を使い、累積の違反数をカウントし、それに対して罰則を与えます。
今回は変数名を「%ini_player_shotgunkill[%ea_guid%]%」としました。これは特に決まりはありませんが、わかりやすいように決めましょう。
この変数について
通常の場合だと「%player_shotgun%」だけで良いのですが、これだとそのラウンドだけしかカウントされないため累積で罰則を与えることが出来ません。
そこで、「ini」をつけることにより、INIファイルとして記録することが出来ます。これだけだと、「誰が」という記録がされないため、「[%ea_guid%]」を付けます。
「INIファイルに、プレイヤー単位で、ショットガンによるキルを、EA GUIDで回数を記録させる。」となります。
今回は「%ea_guid%」にしていますが、これはプレイヤー名の場合だと変更されたら逃げられてしまうためです。
この変数に違反数を加算させているのが「Incr」です。この場合、ショットガンでキルしました→ショットガンキル数をINIファイルに1加算します。
違反数による罰則は「If」により設定します。
この場合だと、「ショットガンでキルしました→ショットガンキル数をINIファイルに1加算します。→加算されたら4になりました→ショットガンによるキル数が4だったので永久BANします。」と、なります。
AdKatsを使っている場合
AdKatsとは、Proconのプラグインで管理機能を拡張させる非常に便利なプラグインです。この機能を利用し、同じように累積による罰則を与えることが可能です。
その場合、今までは「Kill」や「Kick」と書いていましたが、このように書きます。
1 |
On Kill;Damage ShotGun;Say /!punish %p% %p%, %d% is NOT Allowed!; |
「!punish」はAdKatsのコマンドのため、ここでは「Say」を使います。「Say」によりProconRulzからチャットにメッセージを出しそれをAdKatsが拾い罰則をProconRulzではなくAdKatsが与えます。
違反点数による罰則はAdKatsのPunishment Settingで設定します。
累積点数はProconRulzだとProconのConfigのINIファイルに記録しますが、AdKatsはデータベースを利用するためそれに記録されます。
マップやゲームモードにより武器制限をする場合
1 2 |
#例 Operation Lockerでショットガンを制限する場合 On Kill;Damage ShotGun;Map MP_Prison;Kill 100;PlayerBoth %p%, in this map "%m%", %d% is NOT Allowed! |
マップで制限する場合、「Map」のあとにマップ名ではなく、エンジンネームでを書きます。Operation Lockerの場合は「MP_Prison」になります。
1 2 |
#例 RUSHでスナイパーライフルを制限する場合 On Kill;Damage SniperRifle;MapMode RushLarge0;Kill 100;PlayerBoth %p%, in this mode %mm%, %d% is NOT Allowed! |
ゲームモードで制限をする場合、「MapMode」のあとにそのまま書くのではなく、これもエンジンネームで書きます。RUSHの場合は「RushLarge0」
この2つを組み合わせると、Golmudのコンクエストではナイフオンリーにする事も可能です。
1 |
On Kill;Not Weapon Melee;Map MP_Journey;MapMode ConquestLarge0;Kill 100;PlayerBoth %p% KNIFE ONLY! :p; |
ここで「Not」と「Weapon」を「On Kill」のあとに使いました。「Not」はそれ以外でとなり、「Weapon」は武器を単体で制限する場合に使います。
「On Kill;Not Weapon Melee」は、キルイベントが発生→武器がナイフ以外だった場合、となります。
武器制限が多く、使用できる武器が少ない場合に便利です。
マップ、モードのエンジンネームはここからドキュメントをダウンロードし、BF4 PC Maps and Game Modes.pdfで確認出来ます。
※後日書き直します・・・(多分)