【GAME】ARMA3 EXILEサーバ初見斜め読みッ!!
ARMA3 EXILEスクリプトと如何なるものかと、EXILE MODの中身を覗いてます。
EXILE公式からサーバMODをダウンロードして解凍すると、普通にテキストエディタで中身を見ることができます。
exile_server_config.pbo
というファイルに、その名のごとくサーバ設定がされてるようで、色々とEXILEの仕様が分かりました(今頃?!)
今まで、プレーしながらの間接的に覚えたり、英語質問ページを翻訳したりして情報収集してたので・・
なんだか複雑な気分です・・(;´Д`)
これ以下、EXILEのネタバレが含まれるので、純粋に楽しみたい方はここでストップです!
まだスクリプトを斜め読みの段階なので間違い多数です。また、サーバによっては、これらをカスタムしてるので、あくまでデフォルト状態の場合です。
LOOT系
建物毎に以下のLOOTクラスが割り当てられてて、そのクラス毎にアイテム種類や沸き具合を設定してます。
- CivillianLowerClass 民家(食料他)
- CivillianUpperClass ヨサゲな民家(食料他)
- Shop ショップ系(食料他)
- Industrial 工場(工具系)
- Factories 工場(工具系)
- VehicleService 車庫?(工具系)
- Military 軍事施設(武器系)
- Medical 病院?(治療系)
- Tourist 観光地?(武器系)
- Radiation 放射線エリア(武器系)
建物内の沸きポイントは、EXILE公式で配布されている、「Loot Table Compiler」「3DEN Plugin」で自由に設定できるようです。
例えば、CivillianLowerClass(民家)の場合、
{398.936170212766, “Exile_Item_Can_Empty"}, // 3.99%
{797.872340425532, “Exile_Item_ToiletPaper"}, // 3.99%
{1196.8085106383, “Exile_Item_PlasticBottleEmpty"}, // 3.99%
{1409.57446808511, “Exile_Weapon_M1014"}, // 2.13%
{1569.14893617021, “Exile_Magazine_8Rnd_74Slug"}, // 1.60%
{1702.12765957447, “FlareRed_F"}, // 1.33%
{1835.10638297872, “FlareGreen_F"}, // 1.33%
{1968.08510638298, “Chemlight_yellow"}, // 1.33%
{2101.06382978723, “Chemlight_red"}, // 1.33%
{2234.04255319149, “Chemlight_green"}, // 1.33%
{2367.02127659574, “Chemlight_blue"}, // 1.33%
{2500, “V_Rangemaster_belt"}, // 1.33%
こんな感じで設定されてます。空缶やトイレットペーパー、ペットボトルをよく見ますが、これらは4%の確立で出現するようになってます。
”~”で囲まれてるのは、ARMA3に登場するアイテムや武器・車両・建物・オブジェクト全てに付いてる「内部名」です。これはEDENエディタで確認できます。MODオブジェクトにも例外無く付いてます。
0-9999の乱数かカウンターなんかで、範囲を特定してる(湧き率)ようです(わざわざ小数点で書かれてるのはツール類で自動生成?)。このリストを改変すれば、特別なアイテム沸きをさせる事ができると(約5000行、とても膨大ですが・・)
気になった所だけピックアップ。
リセット系
- 拠点は家賃未納だと1週間で消失
- 拠点外の建築したコンテナ(テント等)は10日で消失
- ワークベンチは2日で消失
- 乗り捨てた車両は3日で消失
- 所有車両は乗って無い状態から1週間で消失
- 旗を盗まれた場合3日以内にお金を払わないと拠点消失
- 旗を盗まれた場合ドアやロックがリセットされるまで2日
リスペクト系
キルする方法で意外にも様々設定できるようです。
- トレーダーと取引 額1/10分
- 通常キル 80
- マシンガン 150
- 斧 300
- ロードキル 200
- 空中(飛行中) 1000
また、これらの他にボーナスポイントとして、100m超えショット、ファーストキル、拠点内キル、相手の拠点内キル、キルストリーク(時間内連続キル:デフォ2分)などが加算されます。
リスペクトのマイナスについては。
- 死因不明(unknown reason) 1%
- クラッシュ 1%
- 自殺 2%
- フレンドリーファイヤ 3%
- NPCからキル 4%
- バンビキル 5%
- キルされる 5%
その他
バンビ状態で所持してるアイテムの種類なども設定できます。
“ItemCompass",
“ItemMap", // Because why not
“Exile_Item_XM8",
“ItemRadio",
“Exile_Item_PlasticBottleFreshWater"
これがデフォですね。食料が無いんですね。サーバによっては、地図すら持ってない場合もありますけども。
parachuteSpawning = 1;
haloJump = 1;
parachuteDropHeight = 1000;
spawnZoneRadius = 500;
サーバによって様々な、スポーン時のパラシュート降下の有無です。パラシュートを開いてない状態で1Km上空で、500m範囲のどこかがデフォだったようです。
protectionDuration = 5;
バンビ状態を維持する時間です。5分がデフォです。
spawnZoneVehicles[] =
{
{5, “Exile_Bike_OldBike"},
{5, “Exile_Bike_MountainBike"}
};
ここで、スポーンエリアの自転車を設定していたようです。頭の5は、台数のようです。
/**
* Grid Size for vehicle spawning,
* smaller the number more vehicles,
* you get the point
*/
vehiclesGridSize = 2200;
続いて、車両の沸きもここで設定していたようです。2200は、2.2Km毎にという意味だと多分。
damageChance = 20; // 20% chance for a vehicle HITPOINT to be damaged
maximumDamage = 0.9;
randomizeFuel = 1;
fuel = 1;
沸き時のダメージの様子と、燃料の具合です。
// Stuff to spawn on roads
ground[] =
{
“Exile_Bike_QuadBike_Black",
“Exile_Bike_QuadBike_Blue",
“Exile_Bike_QuadBike_Red",
“Exile_Bike_QuadBike_White",
“Exile_Bike_QuadBike_Nato",
“Exile_Bike_QuadBike_Csat",
“Exile_Bike_QuadBike_Fia",
“Exile_Bike_QuadBike_Guerilla01",
“Exile_Bike_QuadBike_Guerilla02",
“Exile_Car_Volha_Blue",
“Exile_Car_Volha_White",
“Exile_Car_Lada_Green",
“Exile_Car_Lada_Taxi",
“Exile_Car_TowTractor_White",
“Exile_Car_UAZ_Open_Green",
“Exile_Car_UAZ_Green",
“Exile_Car_LandRover_Ambulance_Desert",
“Exile_Car_Tractor_Red",
“Exile_Car_OldTractor_Red",
“Exile_Car_Octavius_White"
};
これが、沸き車両のリストなんですか・・。沢山あるようですが、バギーだけで9つもあります。
この他に、ボードなどの船沸きリストもありました。
restartTimer[] = {3, 0};
リスタートの設定です。デフォだと3時間となってます。
enabledEvents[] = {“SupplyBox", “AbandonedSafe", “AmbientFlyOver", “EarthQuake"};
意外だったのが、イベント関連。
この4種類って、デフォで用意されてるものだったらしい。
SupplyBoxは、インしてるプレーヤー数が、10人居ないと発生しないようになってました。マーカーも10分だけの表示になってます。
ちなみに、クレイトの中身も細かく設定できるようです、ビールだけとかデフォで、6種類。
サーバ本体
EXILEサーバ実態は、exile_server.pboというファイルで、スクリプトが分かれば、これを改変する事で、オリジナルなEXILEサーバを提供できる訳でしょう(1万行を越えてます)
XEONで高スペック自宅サーバ運用してる方や、VPSなどの仮想環境(Linux可)、ノートPCでもサーバ運用が可能なようですが、実際のところはテストが必須でしょうね。
ネットワークの太さも重要でしょうし。ARMA3ではUDPソケットも多用してます(あの不安定さはここから来るのか?)
ちなみに、プレーヤーデータは、MySQLを利用する事が想定されてるようです。
定期的にバッチ処理をカマしてやりたい場合は、SQLでデータをイジれる訳ですね。
「定期的に貯金がゼロになる!」とか・・(;´Д`)
予定
そういえば、トレーダー関連の売買や、拠点系、イベント系は今回まったく出てこなかったので、どこに書かれてるのか今の所分からない。EDENから操作すると、なんか出てくるんかな?
資料・ダウンロード
EXILE公式ダウンロード(他ツール類)
http://www.exilemod.com/downloads/
ボヘミア公式スクリプトリファレンス
https://community.bistudio.com/wiki/Category:Scripting_Commands_Arma_3
追記:
(;^ω^)
サーバ側・クライアント側を行ったり来たり・・とw
このEXILEスクリプト、説明やコメントがほぼ皆無なので、ひたすらに眺めて理解するしかありませんw(設定の所は例が書いてある)
前回疑問だったレシピやLOOTの設定箇所は、MAP毎のミッションファイルに記載されていました(MIJの鯖管にコメント頂いたとおり)
NPC(トレーダー等)等も、全てここのようです。
デフォで、AltisとNamalsk、Tanoaの3種類が入ってるのですが、Eseekerやチェルノ、Tanuasなんかのサーバは、全部自前で全設定してるって事なのでしょう・・。
お疲れ様です鯖管殿(;^ω^)
tools[] =
{
“Exile_Item_CookingPot"
};
components[] =
{
{1, “Exile_Item_PlasticBottleFreshWater"},
{1, “Exile_Item_InstantCoffee"}
};
レシピはこんな感じに書かれてます。これなら、好きなように改変できますね(この例は、ブリューコーヒーのクラフトレシピ)
class Exile_Item_Rope { quality = 1; price = 20; };
class Exile_Item_DuctTape { quality = 1; price = 300; };
class Exile_Item_ExtensionCord { quality = 1; price = 40; };
class Exile_Item_FuelCanisterEmpty { quality = 1; price = 40; };
class Exile_Item_JunkMetal { quality = 1; price = 400; };
class Exile_Item_LightBulb { quality = 1; price = 20; };
class Exile_Item_MetalBoard { quality = 1; price = 600; };
価格も全アイテムがずらっと書かれてます。qualityは、アイテムレベルになるのかな?(必要レスペクトのレベル帯とか)
しかし、全アイテム、もの凄い数です・・。
ホタルの有無、Anomalies/異常?、Breathing/呼吸?、雪の有無、放射線、天候による気温設定などがあります。
* 50m = Minimum
* 200m = Maximum
*/
spawnRadius = 60;
後は、LOOTの沸き設定。
デフォでは、60mの範囲で、1建物3個までで湧くようです。
class CfgExileMusic
{
Ambient[] = {“ExileTrack03″,"ExileTrack04"};
Combat[] = {“ExileTrack06″,"ExileTrack07"};
Intro[] = {“ExileTrack02″,"ExileTrack03"};
};
うむむ?EXILEの曲って、あのテーマしか聞いた事ないですが、他にもあるんでしょうか・・。
後は、プレーヤーアクション系のコード定義、水・給油系のオブジェクト定義などがありました。
numbersOnly = “0123456789";
maxDeposit = 10000;
これが、ロッカーの最大格納額ですねwデフォでは1万だった訳だ。
hungerDecay = 90;
thirstDecay = 60;
healthDecay = 5.0;
これは、空腹度や飲料関係・回復の設定。
// Purchase Price Radius Number of Objects
{5000, 15, 30 }, // Level 1
{10000, 30, 60 }, // Level 2
{15000, 45, 90 }, // Level 3
{20000, 60, 120 }, // Level 4
{25000, 75, 150 }, // Level 5
{30000, 90, 180 }, // Level 6
{35000, 105, 210 }, // Level 7
{40000, 120, 240 }, // Level 8
{45000, 135, 270 }, // Level 9
{50000, 150, 300
これは、拠点の価値と家賃と範囲の設定ですね。自分はLevel2位までしか拡張した事ないんですけども。
sellPriceFactor = 0.5;
rekeyPriceFactor = 0.1;
class requiredRespect
{
Level1 = 0;
Level2 = 5000;
Level3 = 10000;
Level4 = 15000;
Level5 = 20000;
Level6 = 25000;
};
後は、トレーダー系の設定が並びます。
これが、買値の設定かな。そして、先ほどのアイテムレベルの意味がこれです。レスペクトがこれだけ無いと買えない。
author = “Exile Mod Team";
onLoadName = “Exile Mod";
onLoadMission= “www.exilemod.com";
loadScreen = “exile_assets\texture\mod\logo.paa";
disableChannels[] = {0, 2};
OnLoadIntro = “";
OnLoadIntroTime = false;
OnLoadMissionTime = false;
class Header
{
gameType = Survive; // Do NOT change this
minPlayers = 1;
maxPlayers = 100;
};
ここで、ローディング時に表示される、サーバ情報の内容のようです。
こんなのがずーーーーーと続きます。
これらは、NPC(トレーダー等)や独自配置のMAPオブジェクトの定義です。
実際はツールが書いてくれる訳です。カスタムしまくってると、トンデモないサイズになるわけですね。
1行が1個のオブジェクトです。デフォでも相当のサイズ。
EXILEサーバに接続する時に、せこせこと、サーバから受信しながら、これらのオブジェクトを置いていってる訳です。
いや・・サーバ建てるの大変ですよ。これ。
EXILEではなく兄弟分のDAYZをテーマにした自主制作ショートムービー。
EXILEの世界も同様、”もし、リアルだったら・・” こんな感じなんですよ。ゲームで良かった。