返信先: ARMA3 ミッションエディットスレ

ホーム フォーラム TRI Gaming フォーラム ARMA3 ミッションエディットスレ 返信先: ARMA3 ミッションエディットスレ

#29144
Line
参加者
    AIスキル設定

今回はAIのスキル設定の仕方について紹介します。
数値がデフォルトのままだと敵AIは強すぎてバランス崩壊を招く場合があります。
特に命中率関係の設定変更は必須と考えます。

AIskills.sqf

if (!isServer) exitWith {};

{
	if (side _x == EAST) then {
		_x setskill ["aimingAccuracy",0.2];//命中率(全て0~1の値)
		_x setskill ["aimingShake",0.8];//手ぶれ具合
		_x setskill ["aimingSpeed",0.5];//照準速度
		_x setskill ["commanding",0.95];//指揮力
		_x setskill ["courage",0];//度胸
		_x setskill ["general",0.8];//戦略
		_x setskill ["reloadSpeed",0.4];//再装填速度
		_x setskill ["spotDistance",0.5];//補足範囲
		_x setskill ["spotTime",0.8];//補足まで至る時間
		_x unassignItem "NVGoggles";//NV除去
		_x unassignItem "NVGoggles_INDEP";
		_x unassignItem "NVGoggles_OPFOR";
		_x removeItem "NVGoggles";
		_x removeItem "NVGoggles_INDEP";
		_x removeItem "NVGoggles_OPFOR";
		_x removeItem "NVGoggles";
		_x addPrimaryWeaponItem "RH_SFM952V";//シュアファイヤ追加
		_x enablegunlights "forceOn";//点灯
_x addEventHandler ["killed", {handle = [_this select 0] execVM "scripts\bury.sqf"}];//死体削除スクリプト
	};
} forEach allUnits;//EASTサイドの全てのユニットに対し適用
{
	if (side _x == INDEPENDENT) then {
		_x setskill ["aimingAccuracy",0.2];//命中率(全て0~1の値)
		_x setskill ["aimingShake",0.8];//手ぶれ具合
		_x setskill ["aimingSpeed",0.5];//照準速度
		_x setskill ["commanding",0.95];//指揮力
		_x setskill ["courage",0];//度胸
		_x setskill ["general",0.8];//戦略
		_x setskill ["reloadSpeed",0.4];//再装填速度
		_x setskill ["spotDistance",0.5];//補足範囲
		_x setskill ["spotTime",0.8];//補足まで至る時間
		_x unassignItem "NVGoggles";//NV除去
		_x unassignItem "NVGoggles_INDEP";
		_x unassignItem "NVGoggles_OPFOR";
		_x removeItem "NVGoggles";
		_x removeItem "NVGoggles_INDEP";
		_x removeItem "NVGoggles_OPFOR";
		_x removeItem "NVGoggles";
		_x addPrimaryWeaponItem "RH_SFM952V";//シュアファイヤ追加
		_x enablegunlights "forceOn";//点灯
_x addEventHandler ["killed", {handle = [_this select 0] execVM "scripts\bury.sqf"}];//死体削除スクリプト
	};
} forEach allUnits;//INDEPENDENTサイドの全てのユニットに対し適用

森林での戦闘はプレイヤー側の不利となりますので、
[“aimingAccuracy”,0.2]を[“aimingAccuracy”,0.15]若しくは[“aimingAccuracy”,0.1]に設定しましょう。

死体削除スクリプト
bury.sqf

// Deletes dead Enemy
_unit = _this select 0;

if (not (_unit isKindOf "Man")) then
{
	{_x setpos position _unit} forEach crew _unit;
	sleep 30;
	deletevehicle _unit;
};
if (_unit isKindOf "Man") then
{
	if(not ((vehicle _unit) isKindOf "Man")) then {_unit setpos (position vehicle _unit)} ;
	sleep 30;
	hideBody _unit;
	sleep 4;
	deleteVehicle _unit;
};

死後30秒後に削除します。
これの目的はクライアント側の負荷軽減です。

_x addEventHandler ["killed", {handle = [_this select 0] execVM "scripts\bury.sqf"}];
この命令文は_xが殺された場合handle=のスクリプトが_xに対して作動するという事です。
この構文は少し特殊な為追々理解していただければよいです。

そしてinit.sqfに構文を足します。

// SKILLS

if (isServer) then {
	execVM "scripts\aiSkill.sqf";
};

戦闘時間を長引かせると同時に、雰囲気をより長く楽しむ為にも是非取り入れてみてください。

敵を勇猛果敢にしたい場合は[“courage”,1]に設定。