ProconRulzでモードによりチケット%を変える
BF4では、ゲームモードにより適正人数が異なります。
コンクエストラージ 64 + 2
ラッシュ 32 + 2
DOM、TDM 20
このため、もしミックスサーバーを運営するならモードに合わせ、チケット%を変更する必要があります。
今回は、64スロットでコンクエストラージとRUSHをローテーションする場合を解説したいと思います。
64スロットなのでコンクエストラージは100%(800チケット)、RUSHは250%(250チケット)にしました。
1 2 3 4 5 6 7 8 9 10 |
#サンプル On Round;MapMode Rush;Set %ini_server_notrush% 0; Exec vars.gameModeCounter 250; If %ini_server_rush% == 0;Exec mapList.restartRound;Set %ini_server_rush% 1; On RoundOver;MapMode Rush;If %ini_server_rush% == 1;Set %ini_server_rush% 2; On Round;Not MapMode Rush;Set %ini_server_rush% 0; Exec vars.gameModeCounter 100; If %ini_server_notrush% == 0;Exec mapList.restartRound;Set %ini_server_notrush% 1; On RoundOver;Not MapMode Rush;If %ini_server_notrush% == 1;Set %ini_server_notrush% 2; |
今回使用するトリガーは「On Round」と「On RoundOver」の二つです。
「On Round」はマップロード時をトリガーにし、「On RoundOver」はラウンド終了時がトリガーとなります。
今回使う変数は「%ini_server_notrush%」と「%ini_server_rush%」の二つです。
「%ini_server_notrush%」はRUSH以外のモードかどうかを確認するため、「%ini_server_rush%」はRUSHのラウンドを確認するために使用します。何故これが必要になるかというと、チケット変更コマンドを出力しても実際に反映されるのは次のラウンドからのためリスタートをかける必要があります。この確認が無いと無限にリスタートを繰り返してしまうためです。
「ini」を付ける理由は、付けないと前のラウンドの情報を引き継げないためです。「ini」の次にくる「server」は、どの単位(サーバー、チーム、プレイヤー)での変数なのかを決めます。
では、上から順に解説したいと思います。
1 |
On Round;MapMode Rush;Set %ini_server_notrush% 0; |
「On Round」つまりマップロード時に「MapMode」が「Rush」の場合(状態)、今現在RUSH以外ではないことを変数「%ini_server_notrush%」に0を代入します。(RUSHのため、RUSH以外のモードという%ini_server_notrush%を消去する)
1 |
Exec vars.gameModeCounter 250; |
ゲームモードがRUSHなので、「Exec」(ProconRulzから直接サーバーにコマンドを打つアクション)で「vars.gameModeCounter 250」を出力します。これはサーバーのStartup.txtのチケット%の設定です。
1 |
If %ini_server_rush% == 0;Exec mapList.restartRound;Set %ini_server_rush% 1; |
次に、前のラウンドがRUSHだったかを「If」を使い確認し、RUSHではなかった場合「Exec」で「mapList.restartRound」(ラウンドリスタート)をかけます。これは、チケット変更コマンド使用した時、実際反映されるのは次のラウンドになるためです。リスタートをかけたところで変数「%ini_server_rush%」に1を代入しRUSHのラウンドが始まることを記録させます。
1 |
On RoundOver;MapMode Rush;If %ini_server_rush% == 1;Set %ini_server_rush% 2; |
そして、ラウンド終了時の処理として「On RoundOver」で、RUSHモードでしたという記録を変数「%ini_server_rush%」に2を代入します。
1 |
On Round;Not MapMode Rush;Set %ini_server_rush% 0; |
今度は、マップロード時にRUSHではない場合、現在のモードはRUSH以外ということを変数「%ini_server_rush%」に0を代入します。
1 |
Exec vars.gameModeCounter 100; |
RUSHではなかったのでチケットを100%にするコマンドを出力します。
1 |
If %ini_server_notrush% == 0;Exec mapList.restartRound;Set %ini_server_notrush% 1; |
これは前のラウンドがRUSHだった場合、上記同様にチケット%を反映させるためにリスタートをかけ、RUSH以外のモードということを変数に代入します。
1 |
On RoundOver;Not MapMode Rush;If %ini_server_notrush% == 1;Set %ini_server_notrush% 2; |
ラウンド終了時、RUSH以外のモードだった場合、RUSH以外のモードということを変数に代入します。
!=とか使えばもうちょっとスマートに書けたのになぁと思う今日この頃
酔っ払いながら書いたので後で書き直します・・・(多分)