ARMA 3 JPN MENTAIKO COOP SERVER @wiki

スクリプト

最終更新:

Bot(ページ名リンク)

- view
メンバー限定 登録/ログイン
最終更新日 : 2020年08月27日

スクリプト

本ページでは、MENTAIKO COOPのミッション作成に使用されるスクリプトファイルの紹介とその解説をします。


スクリプトコマンドについては以下を参考にしてください。


イベントスクリプト

イベントスクリプトとは、ミッションフォルダに設置するだけで、特定のタイミングで動作するスクリプトファイルです。

mission.sqm


ミッションの本体
EDENで編集した内容はこのファイルに保存される。
Binarizeを解除することで直接編集も可能である。

Addonの更新などでEDENからミッションが読み込めなくなることもあるので、Binarizeは提出時のみして普段はチェックを外しておくことをオススメします。

description.ext


ミッションの属性や定義を行うファイルです。
下手に手を加えるとMissionが動かなくなるので、テキスト以外を編集する際は上記のリンクを熟読した後に編集することをオススメします。

  1. //------------------------------LOADING INFO------------------------------
  2. //
  3. author = "作者名";
  4. onLoadName = "MC[coXX]Mission_Name";
  5. loadScreen = "pics\MENTAIKOLOGO.jpg";
  6. overviewPicture = "pics\MENTAIKOLOGO.jpg";
  7. onLoadMission = "<t color='#e80301'>MENTAIKO SERVER</t>";
  8. overviewText = "ミッションの概要(短文),最終更新日,作者名";
  9.  
  10. disabledAI = 1;
  11. enableDebugConsole = 1;
  12. forceRotorLibSimulation = 2;
  13. //
  14. //------------------------------GAMETYPE----------------------------------
  15. //
  16. class Header
  17. {
  18. gameType = Coop;
  19. minPlayers = 1;
  20. maxPlayers = 120;
  21. };
  22. //
  23. //------------------------------RESPAWN SETTINGS--------------------------
  24. //
  25. respawn = 3;
  26. respawndelay = 1;
  27. respawnTemplates[] = {"Counter","ace_spectator"};
  28. respawnButton = 1;
  29. respawnOnStart = 0;
  30. //
  31. //----------------------------DERETE BODY&WRECK---------------------------
  32. //
  33. corpseManagerMode = 1;
  34. corpseLimit = 24;
  35. corpseRemovalMinTime = 300;
  36. corpseRemovalMaxTime = 600;
  37.  
  38. wreckManagerMode = 1;
  39. wreckLimit = 6;
  40. wreckRemovalMinTime = 600;
  41. wreckRemovalMaxTime = 900;
  42. //
  43. //---------------------------------ENDING---------------------------------
  44. //
  45. class CfgDebriefing
  46. {
  47. class End1
  48. {
  49. title = "MISSION ACCOMPLISHED";
  50. subtitle = "作戦成功";
  51. description = "";
  52. picture = "";
  53. pictureColor[] = {0,0,0,1};
  54. };
  55. class End2
  56. {
  57. title = "MISSION FAILED";
  58. subtitle = "作戦失敗";
  59. description = "";
  60. picture = "";
  61. pictureColor[] = {0,0,0,1};
  62. };
  63. };
  64.  

init.sqf

イベントスクリプトの一つ。

init.sqfはミッション開始時(ブリーフィング画面の前)に実行されます。
一番最初に実行すべきスクリプトはここで実行しましょう。

  1. if (!isDedicated) then {waitUntil {!isNull player && isPlayer player};};
  2.  
  3. enableRadio false;
  4. tawvd_disablenone = true;
  5. CHVD_allowNoGrass = false;
  6. enableSaving [false,false];
  7.  
  8. /* =============== Player Only Commands ================ */
  9. if (hasInterface) then {
  10. call compile preprocessFileLineNumbers "briefing.sqf";
  11. };
  12.  
  13. /* =============== Server Only Commands ================ */
  14. if (isServer) then {
  15. west setFriend [independent, 1]; // 1:友好, 0:敵対, 境界:0.6
  16. independent setFriend [west, 1];
  17. east setFriend [independent, 0];
  18. independent setFriend [east, 0];
  19. };
  20.  
  21. /* ==================== MCC Bugfix ===================== */
  22. _EndSplashScreen = { for "_x" from 1 to 4 do { endLoadingScreen; sleep 3; }; };
  23. [] spawn _EndSplashScreen;
  24.  
  25. /* ==================== End Of File ==================== */
  26. player globalChat format ["Mission Initialisation Complete. Press CONTINUE"];
  27. finishMissionInit;
  28.  

(補足) briefing.sqf

ブリーフィングについて

マップメニューにブリーフィングを追加します。ブリーフィングは、ミッションの背景や任務・補足事項・注意事項などをプレイヤーに伝えるために必要です。

ブリーフィングに記載すべきこと

ブリーフィングに記載すべきことは
  1. (任意)ミッション背景
  2. (必須)METT-TC
    • Mission (ミッションの目的)
    • Enemy (敵勢力の情報)
    • Terrain and weather (地形・気象)
    • Troops & support available (味方部隊の情報と利用可能な支援)
    • Time (時間)
    • Civilians (民間人の情報)
  3. (任意)追加情報
  4. (必須)システム関係
  5. (任意)補足情報

ブリーフィング記述時の注意

ブリーフィングはプレイヤーにミッションの目的などの情報を伝えることが目的です。
そのためにも、いくつか注意しなければならないことがあります。

ミッションの目的は簡潔明瞭に
ブリーフィングは限られた時間で読まなければならないので、簡潔明瞭に記述つすることが望まれます。ミッションの概要説明はMETT-TCなどを活用して記載してください。
一方で、ミッション背景ついては自由に記述しても問題ありません。好きなように書いてしまいましょう。
敵の情報は正確に記述する必要はありません
不測の事態を楽しむのもCOOPの醍醐味です。
敵の人数や、兵器の詳細を事細かく記述する必要はありません。
ただし、戦車や攻撃ヘリなどの特別な装備がなければ対応できない驚異が存在する場合は、その可能性を伝えることでプレイヤーフレンドリーとなるでしょう。
順番に注意する
スクリプトコマンドの"createDiaryRecord"はbriefing.sqfの上から順に読み込まれ、新しく読み込まれたものはリスト上に追加されていきます。
つまり、briefing.sqfで記述した順番と表示される順番は逆になります。

  1. // init.sqfに "call compile preprocessFileLineNumbers "briefing.sqf";" と記述して下さい
  2. // 改行は文末に "<br />" と記述します
  3. // 画像を張り付けるには "<img image='フォルダパス\フォルダパス\pict.jpg' width='400' height='200'/>"
  4.  
  5. player createDiaryRecord
  6. [
  7. "Diary",
  8. [
  9. "Editorより", "
  10. 捕虜をエスコートするためにはケーブルタイが必要です。<br/>
  11. "
  12. ]
  13. ];
  14.  
  15. player createDiaryRecord
  16. [
  17. "Diary",
  18. [
  19. "システム","
  20. 【Mission End】<br/>
  21. 全タスク達成後、自動でミッションが終了します。<br/>
  22. <br/>
  23. 【Respawn】<br/>
  24. 死亡時はベースにリスポーンします。<br/>
  25. 乗り物はリスポーンしません。<br/>
  26. リスポーン後はテレポートでチームに合流してください。<br/>
  27. <br/>
  28. 【Teleport】<br/>
  29. NATOフラッグから所属チームのリーダーのもとへテレポートすることができます。<br/>
  30. <br/>
  31. 【Heal Self】<br/>
  32. ベースの医療テントにて自己治療できます。<br/>
  33. <br/>
  34. 【Full Arsenal】<br/>
  35. 制限Arsenalに不備があった場合は、Briefing RoomのボックスよりFull Arsenalを使用してください。
  36. "
  37. ]
  38. ];
  39.  
  40. player createDiaryRecord
  41. [
  42. "Diary",
  43. [
  44. "捕虜詳細","
  45. 【Name】 ヘンリー・A・ジョンソン<br/>
  46. <img image='pics\hostage.jpg' width='256' height='256'/><br/>
  47. 【Description】<br/>
  48. ・32歳、男性<br/>
  49. ・ギリシャ在中イギリス人
  50. "
  51. ]
  52. ];
  53.  
  54. player createDiaryRecord
  55. [
  56. "Diary",
  57. [
  58. "METT-TC","
  59. 【任務(Mission)】<br/>
  60. 1. 敵前哨基地の制圧<br/>
  61. 2. 情報の回収<br/>
  62. 3. 民間人の保護<br/>
  63. <br/>
  64. 【敵情(Enemy)】<br/>
  65. CSAT 欧州派遣部隊<br/>
  66. 勢力規模:30人程度<br/>
  67. 武装された軽車両が確認されている<br/>
  68. 制空権は我軍がAAFと共に確保済み<br/>
  69. <br/>
  70. 【地形・気象(Terrain and weather)】<br/>
  71. ・丘陵地帯<br/>
  72. <br/>
  73. 【部隊(Troops)】<br/>
  74. NATO軍 先遣部隊<br/>
  75. 攻撃ヘリコプター AH-99 Blackfoot<br/>
  76. <br/>
  77. 【時刻(Time)】<br/>
  78. 作戦開始時刻 AM 16:30<br/>
  79. <br/>
  80. 【民事(Civil Consideration)】<br/>
  81. 作戦地域周辺の民間人は避難済み。<br/>
  82. ただし、敵前哨基地内には捕虜が存在する。
  83. "
  84. ]
  85. ];
  86.  
  87. player createDiaryRecord
  88. [
  89. "Diary",
  90. [
  91. "作戦概要","
  92. 【日付】<br/>
  93. 2035/05/27<br/>
  94. <br/>
  95. 【背景】<br/>
  96. 我軍はAltis等の覇権をめぐり、AAFと共にCSATと交戦中である。
  97. <br/>
  98. 【任務】<br/>
  99. マップ上のポイント「<marker name='object_1'>X-Ray</marker>」に敵部隊の前哨基地が確認された。<br/>
  100. 敵の前哨基地を制圧し、敵部隊の動向を把握するための情報を確保せよ。<br/>
  101. <br/>
  102. CSATは逃げ遅れた民間人を捕虜にしている。<br/>
  103. 民間人に危害を加えぬように注意せよ。<br/>
  104. <br/>
  105. 【作戦終了条件】<br/>
  106. 全タスク達成にて本作戦は完了とする。
  107. "
  108. ]
  109. ];
  110.  

onPlayerRespawn.sqf

リスポーン時に実効するイベントスクリプト。

  1. params ["_newUnit","_oldUnit"];
  2.  
  3. _newUnit addRating 20000;
  4. _newUnit setDamage 0;
  5. [_newUnit] call ace_medical_treatment_fnc_fullHealLocal;
  6.  
  7. if (_oldUnit != objNull) then {
  8. hideBody _oldUnit;
  9. sleep 4;
  10. deleteVehicle _oldUnit;
  11. };

プレイヤーに付け加えたaddActionはリスポーン時に外れてしまうため、onPlayerRespawn.sqfにて再度付与すること。
例.
_newUnit addAction ["Action Title",{Script Cord}];

その他スクリプト

aiSetting.sqf

AIの設定を行うスクリプト
  1. /*
  2. init.sqfに次を記述
  3. if (isServer) then { call compile preprocessFileLineNumbers "aiSetting.sqf" };
  4. */
  5. if (!isServer) exitWith {};
  6.  
  7. comment "敵陣営を設定";
  8. private _enemies = allUnits select {side _x == EAST};
  9. private _enemyGroups = allGroups select {side _x == EAST};
  10.  
  11. comment "AIのスキル設定";
  12. {
  13. _x setSkill ["general",0.50]; // 基本数値(0: 最小, 1: 最大)
  14. _x setSkill ["aimingAccuracy",0.10]; // 射撃精度
  15. _x setSkill ["aimingSpeed",0.40]; // AIMの速さ
  16. _x setSkill ["courage",0.80]; // 勇気
  17. _x setskill ["commanding",0.55]; // 情報共有の速さ正確性
  18. _x setskill ["aimingShake",0.35]; // 手ブレの大きさ
  19. _x setskill ["spotDistance",0.80]; // 敵を発見できる距離
  20. _x setskill ["spotTime",0.60]; // 敵を見つけるまでの時間
  21. } forEach _enemies;
  22.  
  23. comment "AIグループの初期設定";
  24. {
  25. _x setBehaviour "SAFE";
  26. _x setCombatMode "YELLOW";
  27. } forEach _enemyGroups;










記事メニュー
ウィキ募集バナー