본문 바로가기

게임

아르마3(Arma3) 에디터 스크립트 모음


Arma 3 에덴(EDEN) 3D 에디터를 사용하면서 알게된 스크립트들을 모아서 정리해둠.

대부분 기초적인 스크립트들임.



+ 유닛에 무기 및 아이템 넣기

* classname은 구글 등에서 'arma 3 classname'으로 검색.

- https://community.bistudio.com/wiki/Arma_3_CfgWeapons_Weapons


this addPrimaryWeaponItem "optic_hamr"; 

this addHandgunItem "muzzle_snds_L";

this addBackpack "B_AssaultPack_rgr"; 

(unitBackpack this) addmagazineCargo ["30Rnd_65x39_caseless_mag", 4]; 

(unitBackpack this) addmagazineCargo ["handgrenade", 3]; 

(unitBackpack this) additemCargo ["FirstAidKit", 3]; 

this addItemToBackpack "ToolKit"; 


* 트리거 사용 시 init에 this 대신 유닛 Variable Name 입력.

(각 유닛이나 object같은 고유 name은 띄우거나 '-' 인식하지 못함. condition이나 on activation란에는 스페이스바 입력은 인식하지 못하므로 알아보기 쉽게 스페이스바로 줄바꿈) 

Player_1 addItemToUniform "itemMap"; Player_1 addItemToUniform "itemCompass"; Player_1 addItem "itemWatch"; 

Player_1 addItemToUniform "itemRadio"; 

Player_1 addvest "v_platecarrier1_rgr"; Player_1 addMagazines ["30Rnd_65x39_caseless_mag",3]; Player_1 addWeapon "arifle_mx_black_f"; Player_1 addItem "FirstAidKit"; 


this removemagazines "chemlight_green"; 


removeallweapons this;

removeallassigneditems this;

removeuniform this;

removevest this;

removebackpack this;


this addheadgear "H_Cap_headphones"; 

this addGoggles "G_Shades_Black"; 


+ 유닛 스킬 설정

Available sub-skills :

aimingShake - 무기 반동

aimingSpeed - 타겟팅 속도

endurance - Arma3에서는 무효

spotDistance - 적 유닛을 인지하고 정체를 파악하는 거리

spotTime - 적 유닛을 인지하고 정체를 파악하는 속도

courage - 용기, 대담성. 아군 대비 적군의 화력 및 규모 또는 동료의 사망 숫자 등에 영향을 받고 판단해서 움직임.

reloadSpeed - 재장전 속도.

commanding - 조장의 지휘 능력 및 조원의 명령 수행 능력.

general - 위 모든 스킬을 무효화하고 모두 포함하는 일반 스킬.

* 유효값 범위 : 

Novice < 0.25

Rookie >= 0.25 and <= 0.45

Recruit > 0.45 and <= 0.65

Veteran > 0.65 and <= 0.85

Expert > 0.85

* 게임 메인 메뉴의 Difficulty에서 설정하는 AI 스킬과 조준정확도는 제작사에서 만든 캠페인 같은 싱글, 멀티 플레이에만 적용. 유저들이 에디터로 만든 미션은 모두 위 스킬값 적용됨.

* 스킬 관련 값들은 위 외에도 상황과 구성 등을 파악하고 계산해서 랜덤하고 유동적으로 바꿔주는 randomize 같은 값들도 있음.

* 특별히 AI의 동선이나 전술 수행 능력과 관련된 기본 스킬은 command 와 courage 정도.

특히 courage를 활용할 때 'allowFleeing' 명령어와 함께 사용하기도 함.

allowFleeing 값이 0이면 maximum courage 상태가 되서 좌우측 우회공격을 하지 않음. 1이면 항상 측면우회 이동 공격.


예) Init 에 다음과 같이 입력

this setskill ["aimingaccuracy", 0.25]; 

group this setskill ["aimingaccuracy", 0.25]; 

unit_name setskill 0.75; 

unit_name setskill ["courage", 0.1]; 

group this allowFleeing 0;

this allowFleeing 0.5;


+ 유닛 애니메이션

유닛의 init에 입력

this playMove "Acts_B_hub01_briefing"; (또는 playmovenow)

트리거 발동시키고 애니메이션 취소할 때는 유닛네임 지정 후

트리거 init : unit_name switchmove "";

this playmove "Acts_Civilidle_1"; 

this playmove "Acts_CivilTalking_1"; // 등등 애니메이션 class name은 에디터의 상단 메뉴 애니메이션 프리뷰로 들어가 확인할 수 있음. 이 후 classname을 마우스좌클릭으로 선택해놓고 ctrl+c로 복사.

*애니메이션 무브 실행이 잘 안되면 switchmove로.


+ 유닛 액션

unit_name playAction "salute";  



+ 웨이포인트, doMove, moveTo, setPos

- doMove

[unit_01,unit_02,unit_03,unit_04] domove (getMarkerPos "marker_01", 10); // 맵에 표시되는 Marker 배치 후 맵에 표시되지 않도록 알파값을 0으로. 숫자 10은 Radius(범위)

[unit_01,unit_02,unit_03,unit_04] domove Position object_01; // object는 유닛도 포함.

* unit1,2,3,4 가 한 그룹일 경우 유닛 개별 move함. 조장만 domove했을때는 그룹원은 조장의 domove 이동을 무시하기 때문에 ai 조장의 regroup 명령이 없으면 그 자리에서 대기. ai 조장의 regroup 판단은 지형, 지물, 시야 등의 상황을 종합적으로 고려해서 자동으로 이뤄짐.


 ** domove 활용

After reaching his destination, the unit will immediately return to formation (if in a group); or order his group to form around his new position (if a group leader). Use doStop to stop units returning to formation.


위 제작사 domove 설명대로 그룹원이 domove로 이동했을 경우 이동 완료 후 조장 지점으로 다시 복귀하게된다.
조장이 domove로 이동하게 되면 domove position에서 멈춰있게되므로 주의.
만일 조장만 domove 이동시키면 나머지 그룹원은 지형과 시야를 참고해서 커버가 가능하다싶으면 조장을 따라가지 않는다. 조장의 domove 지점이 멀어 조원의 시야에서 벗어나면 그룹원은 자동으로 조장 포메이션으로 따라가는 것 같다.

조장 domove 이동 후 다시 원래 이동경로로 복귀하게하려면 같은 position의 domove 명령을 해주면 되는데, 그룹 웨이포인트가 완료되지 않은게 있거나 'cycle' 웨이포인트가 있어야 가능함. (웨이포인트를 모두 완료해버린 상태라면 당연히 domove 지점에서 대기)
domove position에 트리거를 배치하고 한번 더 domove를 반복하게 하거나, 라디오 트리거로 domove를 토글 스위치하게할 수 있음. 반드시 domove position에 도착 완료해야 복귀 토글 스위치 기능?이 작동함.
dostop과 함께 사용하면 효과적.


- moveTo

unit_01 moveTo getPos object_01; 


- setPos

object_01 setPos (object_02 modelToWorld [100,0,100]); // [ ] 안의 숫자는 순서대로 전후(+-), 좌우(-+), 상하(+-)

player setPos (getPos _obj);

* setpos는 단순 스폰(spawn). setpos는 3d에디터 모듈을 사용해도 됨. 순간이동되서 현실감은 떨어지지만 배치하기 어려운 지형, 지물이나 건물 또는 낙하투입 수송헬기에 유닛을 배치할 때 활용할 수 있다.

예를 들어 차량이나 인펀트리 유닛에 웨이포인트를 찍어뒀지만 세밀한 지점에 잘 찾아들어가지 못하거나 버벅댈 때 아주 가까운 지점에 setpos모듈을 트리거와 연동해 설정해두면 된다. 배치 방향까지 설정할 수 있음. 


- WayPoint

예) HVT 유닛이 공격받아 부상당했을 경우 차량 탈출

* 그룹원 네임= hvt_1, unit_1, unit_2 / 차량(4인승) 네임= veh_01


트리거1 배치 후

condition:

(damage hvt_1)>0.1 // 0.1=10%

on Activation:

hvt_1 setcaptive true; unit_1 setcaptive true; unit_2 setcaptive true;

wpEXIT00 = hvt_1 addWaypoint [veh_01,0];

wpEXIT00 setWaypointType "GETIN NEAREST";

wpEXIT00 setWaypointSpeed "FULL";

wpEXIT00 setWaypointBehaviour "AWARE";


wpEXIT01 = hvt_1 addWaypoint [airbase,0];

wpEXIT01 setWaypointType "GETOUT";

wpEXIT01 setWaypointSpeed "LIMITED";

wpEXIT01 setWaypointBehaviour "CARELESS"; 


wpEXIT02 = hvt_1 addWaypoint [marker_safe_zone, 10];

wpEXIT02 setWaypointType "MOVE";

wpEXIT02 setWaypointSpeed "LIMITED";

wpEXIT02 setWaypointBehaviour "SAFE";


트리거2를 차량 주위 적당한 범위로 배치한 후

Owner Only (또는 AnyMember) / Present

condition:

this 

on Activation:

unit_2 assignAsDriver veh_01; unit_1 assignAsCargo veh_01; hvt assignAsCargo veh_01; 


* setCaptive는 유닛이 인질로 된 상태이므로 공격당하지 않음. 유닛도 포복하거나 엄폐하지않고 즉시 웨이포인트로 이동하는게 정상이지만 사격당해 데미지 입은 상태에서는 완벽하게 적용되진 않음. 하지만 설정하지 않은 것보다 덜 주의함. setCaptive를 설정하지 않고 너무 개방되어있는 위험 지역에다가 스나이퍼 위치가 인지되지 않은 상태라면 엎드려 엄폐해서 꼼짝하지도 않은 상태가 될 수도 있음.

나머지 조원들은 엄폐 및 지원 사격하며 다소 느리게 웨이포인트로 이동.

* 차량 탑승 후 재빨리 벗어나게 하기 위해 두번째 웨이포인트(wpEXIT01)의 Behaviour는 Careless로. speed는 limited로 지정해서 combat 모드 상태의 드라이버가 도로를 벗어나지 않도록 함. (그래도 탈출하는 차량 속도는 충분함)

* 웨이포인트 네임(WP000, WP001 등)은 임의로 정할 수 있음.

* 웨이포인트보다 domove, moveto의 우선순위가 높음. 일단 domove 지점으로 이동 후 완료하지 못한 웨이포인트로 이동 계속.

* 사이드 전체 유닛 이동

{side _x==east; _x doMove (getMarkerPos "anyMarkerName"); _x groupChat "All in

!"} forEach allUnits;  // CSAT(OPFOR)='EAST', BLUFOR='WEST', resistance='GUER', civilian='CIV'


+ 멀티 웨이포인트와 웨이포인트 삭제

멀티 웨이포인트를 지정할 때는 3D 에디터에서 직접 하지않고 트리거에 웨이포인트 스크립트 입력.

하나의 트리거에 한 묶음으로 링크되어 있는 웨이포인트를 특정 상황 발생 후 취소하고 다른 트리거에 짜둔 웨이포인트를 적용할려면 이전 웨이포인트를 삭제해야 함. (시나리오 미션이 시작되고 ai 유닛이 인지한 웨이포인트는 deleteWaypoint 로 삭제 불가능. (deleteWaypoint는 같이 연결되어 있는 웨이포인트를 임시로 삭제할 때 사용).

* 웨이포인트 삭제 스크립트 : deleteWaypoint [그룹네임(콜사인아님), 웨이포인트넘버(0~100)]; // 예) deleteWaypoint [alpha_1, 1]; //첫번째 웨이포인트 숫자는 항상 0.

이전 웨이포인트 묶음을 완전히 삭제하고 새 웨이포인트를 설정하려면 그룹을 다시 만들고 그룹원들 모두 새 그룹으로 편입한 후 다시 새로운 그룹네임 지정하고 이전 웨이포인트 삭제 및 새 웨이포인트 적용되도록 설정하면 됨.

아래 예 참조.


예) HVT 유닛 그룹 데미지 발생 후 차량 탈출

<이전 웨이포인트>

# 트리거1 - On Activation:

wp00 = hvt_unit_name addWaypoint [getMarkerPos "marker_hvt_patrol_01", 10];

wp00 setWaypointType "MOVE";

wp00 setWaypointSpeed "LIMITED";

wp00 setWaypointBehaviour "SAFE";

wp01 = hvt_unit_name addWaypoint [getMarkerPos "marker_hvt_patrol_02",0];

wp01 setWaypointType "MOVE";

wp01 setWaypointSpeed "LIMITED";

wp01 setWaypointBehaviour "SAFE";

wp01 setWaypointTimeout [30, 90, 120];

wp02 = hvt_unit_name addWaypoint [getMarkerPos "marker_hvt_vehicle", 0];

wp02 setWaypointType "GETIN NEAREST";

wp02 setWaypointSpeed "LIMITED";

wp02 setWaypointBehaviour "SAFE";  

(* vehicle 지점의 마커 주위에 적당한 범위의 트리거 만든 후, hvt_unit_name assignAsCargo vehicle_name; unit_1 assignAsCargo vehicle_name; unit_2 assignAsDriver vehicle_name; )


<새 웨이포인트>

# 트리거2

Condition:

(damage hvt01)>0.2; 

On Activation:

hvt_group_new_name = createGroup EAST; {[_x] joinSilent hvt_group_new_name} forEach units (group hvt_group_old_name); 

타이머 - 카운트다운 0-0-0

# 트리거3

Condition:

(damage hvt01)>0.2; 

On Activation:

hvt_name setcaptive true; unit_1 setcaptive true; unit_2 setcaptive true;

wpEXIT0 = hvt_group_new_name addWaypoint [vehicle_name, 0];

wpEXIT0 setWaypointType "GETIN NEAREST";

wpEXIT0 setWaypointSpeed "FULL";

wpEXIT0 setWaypointBehaviour "AWARE";

wpEXIT1 = hvt_group_new_name addWaypoint [small_tool_object_name, 0];

wpEXIT1 setWaypointType "GETOUT";

wpEXIT1 setWaypointSpeed "LIMITED";

wpEXIT1 setWaypointBehaviour "CARELESS";

wpEXIT2 = hvt_group_new_name addWaypoint [getMarkerPos "marker_hvt_exit_1", 0];

wpEXIT2 setWaypointType "MOVE";

wpEXIT2 setWaypointSpeed "LIMITED";

wpEXIT2 setWaypointBehaviour "SAFE";

unit_2 assignAsDriver vehicle_name; unit_2 assignAsCargo vehicle_name; hvt_name assignAsCargo vehicle_name;

타이머 - 카운트다운 3-3-3


+ 랜덤 스폰

시나리오 미션 시작과 동시에 한 그룹을 랜덤 위치로 배치하려면 Marker를 배치하고 (맵 상에 안보이게 알파값 0) 그룹 조장이나 마커를 우클릭 > 'set random start'로 연결시키면 된다.

조원들은 적용되지 않기때문에 조장 유닛의 init에 다음과 같이 입력:

{vehicle _x setpos formationposition _x} foreach units this;

* 랜덤 스폰 지점에 그룹 유닛들이 서로 겹치는 경우가 많으면(cpu 성능에 따라 ai 연산이 지연되거나 해서 간혹 발생) 트리거를 만들고 그룹 조장이 랜덤 스폰된 후 (카운트 타이머 2초 정도) setPos로 그룹원들 이동.

unit_name setPos (leader_name modelToWorld [2,3,0]); // [ ] 안의 숫자는 순서대로 전후(+-), 좌우(-+), 상하(+-)


+ 랜덤 패트롤, 디펜드 스크립트

[group this, getpos this, 100] call bis_fnc_taskpatrol; 

[group this, getpos this] call bis_fnc_taskdefend; 

그룹 조장 init에 입력.

또는 웨이포인트나 트리거에 입력 : [group 조장네임, getpos 조장네임, 100] call bis_fnc_taskpatrol;

* 랜덤패트롤 모듈인 bis_fnc_taskpatrol 의 숫자(100)는 각 랜덤웨이포인트들 간의 미터 단위 거리. 벙커 하나가 있는 작은 초계 구역 패트롤은 10미터를 지정하고 수색팀(recon)은 500에서 1000 이상까지도 설정하는게 일반적임. 하지만 랜덤 모듈의 특성으로 정확하게 일률적으로 계산되는건 아님. ai 판단에 따라 엄폐물이 적고 많이 노출되어 있는 위험한 지역이다 싶으면 10으로 설정해도 200미터 이상의 시야 확보되는 지점까지 가기도 함.

* 디펜드 모듈은 HOLD웨이포인트와 GUARD웨이포인트를 합쳐놓은 것 같은 유닛 행동을 보임. 일반 웨이포인트보다 ai의 자율적인 판단에 따르는 부분이 많지만 몇몇 유닛들은 HOLD의 특성을 따라 가능한 구역을 지켜려고 하고 몇몇 유닛들은 GUARD의 특성을 따라 멀리 교전이 발생한 지역까지 지원하러 감.


+ 유닛 데미지 모듈과 데미지 스크립트

에디터에 있는 유닛데미지모듈은 신체 부위별로 따로 지정 가능.

트리거의 condition에 넣는 (damage unit_name)>0.5 스크립트는 데미지모듈의 'whole body'를 말함.

데미지모듈의 whole body는 일정 퍼센트까지 올리면 출혈이 있고 이동이 힘들어지고 시야도 흐려지고 타겟에이밍이 많이 흔들림.

whole body를 제외한 팔,다리,머리 등 특정 부분만 데미지를 올리면 출혈, 시야, 이동에는 거의 변화없음. 특정 부위별 데미지가 클수록 타겟에이밍만 미묘하게 변하고, 가장 큰 변화는 데미지에 매우 약해져서 낮은 곳에서 점프하거나 핸드건같은 작은 타격에도 사망하는 수가 있음.

부위별 데미지 모듈로 간단한 서바이벌(food와 water가 필요한) 미션도 만들어볼 수 있음.


+ 그룹 네임과 콜사인 그리고 join group

웨이포인트를 스크립트로 입력할 때 필요한 그룹네임은 그룹을 마우스로 선택해서 Attibute에 들어가서 맨 위 그룹네임 입력하는 곳에서 지정해주면 됨.

아니면 조장 유닛에 init에 아래와 같이 입력해도 된다.

groupName = group this; 

중간에 트리거로 그룹네임을 변경할때는 트리거 init에 '그룹네임 = group 조장네임' 을 입력.


콜사인은

group this setGroupIdGlobal ["콜사인"]; 

unit_name setgroupid ["callSign"]; 


그룹네임, 콜사인과 밀접한 관계가 있는 '조인그룹' 명령어는

[_unitOne, _unitTwo] joinSilent (group player); 

[_unitOne, _unitTwo] join (group unit_name); 

[_unitOne] join unit_name; 

과 같이 입력. (* player는 어떤 유닛이건 직접 플레이 중인 유닛이면 모두 적용되는 name) 

* joinsilent는 조인하라는 라디오메시지 생략.

** 간혹 조인그룹 후, 유닛 사망 등 복잡한 상황 등으로 그룹네임과 콜사인, 웨이포인트가 엉켜서 콜사인이 제대로 적용안되거나 웨이포인트 오류로 조인된 그룹이 이동하지 않는 상황이 생길 수 있음. 오류없는 스크립트를 찾아보고 있는 중. join이 잘 안된다면 domove 명령어로 대체해볼 수 있음. 예를 들어 라디오 트리거가 발동되면 B팀 전원 domove를 A팀 전원 포지션으로 지정. A팀 유닛에는 조장 사망시, 조원2 사망시 등으로 조건을 쪼갠 후 작은 사물을 보이지않게 attachTo 로 붙여놓음. 트리거도 적당한 범위를 지정해서 attachTo 로 A팀 전원에게 붙임. B팀 멤버 중 하나만 present / not present 두 개의 트리거를 만들어 놓고 트리거 init에 domove 위치를 A유닛들에 따라다니는 사물로 지정하면 A팀의 이동경로를 지원 엄호하면서 같이 따라감.

물론 join의 장점인 그룹 정보(적군 위치 등)는 공유가 안되지만 때에 따라 효과적이라 domove를 애용하는 유저들이 있음.



+ 그룹 조원 유닛 고정 - dostop 과 disableAI

유닛 init에

dostop this;

입력하거나 트리거에 유닛 네임과 함께 입력

dostop unit_name; 


disableAI ( https://community.bistudio.com/wiki/disableAI )

this disableai "MOVE";

unit_name disableai "PATH"; 

(* 그 외 disableAI 와 함께 사용하면 효과적인 value : target, autotarget )

* 다시 활성화 : enableAI "move"; 


** dostop 과 disableAI "MOVE" 차이점:

disableai "move"는 동선뿐만 아니라 move와 연계된 유닛 애니메이션까지 어느정도 제한함. 그래서 조장과 떨어져 배치해놓고 특정 경계 방향으로 고정해놓으면 조장의 명령을 수행하지 않음. 공격받는 상황에서도 경계방향(watch direction)을 바꾸지 못하고 움직이지도 않음. 자리를 지키면서 조장의 move명령이나 타겟 공격 명령을 무시하게 하고 좀 더 유연하게 대처하려면 path를 대신 사용.

dostop은 에디터에서 배치한 시작 지점이나 스폰 지점에 유닛 고정하는 점에서 disableai "move"와 같지만 동선만 제한하고 경계방향도 그룹 조장을 따름. 고정되있지만 뒤에서 공격받을 시 방향도 바꿈. 자세는 둘 다 위험모드 시 자동 포복자세 가능.

dostop은 조장의 경계방향 명령이나 이동 명령에 즉시 비활성화 됨. 타겟 지정 공격 명령 시 dostop은 비활성화되고 그룹 포메이션으로 이동. disableAI "move"는 경계방향 지정도 불가능하고 다시 활성화 시키려면 트리거에 enableai "move"로 활성화.


+ 트리거로 다른 트리거 발동 (Trigger in Trigger)

특정 상황에만 어떤 트리거를 활성화하려면 3개의 트리거를 만들면 된다.

첫 트리거는 특정상황이 되기 전까지 비활성시키는 트리거.

두번째 트리거로 특정상황을 만들어 목표 트리거를 활성화시킴.

세번째는 최종 활성화되는 목표 트리거.

* 세번째 최종목표 트리거는 트리거 네임을 반드시 지정.

1.

codition:

alive unit_1; //  unit_1이 살아있으면

on activation:

trg2 setTriggerActivation ["NONE", "PRESENT", false];  // 최종목표 트리거 trg2를 비활성화


2.

condition:

anyplayer / present / 10-10  // 플레이어가 두번째 트리거 10미터 범위 내로 들어오면

on activation:

trg2 setTriggerActivation ["AnyPlayer", "PRESENT", true];  // 목표 트리거를 anyplayer/present 속성을 가진 트리거로 활성화


3. 최종 목표 트리거를 스킵웨이포인트

Variable Name: trg2

skip waypoint / anyplayer / present


+ attachTo

attachTo 는 오브젝트나 모듈, 트리거를 특정 오브젝트에 붙여 따라다니게 만든다.

예를 들어 경고판에는 유저 이미지를 지정할 수 있는 오브젝트도 있지만 따로 이미지를  지정하지못하도록 되어있는 오브젝트에도 이미지를 만들어 붙여둘 수 있다. 이미지는 반드시 jpg여야 함.

경고표지판을 배치하고 name을 입력한다.

Helpers 오브젝트 중 'User Texture (1m)' 를 배치하고 init에 

this setObjectTexture [0, "user_image.jpg"];  // 를 입력하거나 이미지 지정란에서 경로를 입력해준다.

그리고 위 user texture를 경고표지판에 attachTo로 붙이면 된다.

this attachTo [표지판네임, [0,-0.05,0.6]];  // [ ]안의 숫자로 딱맞게 조정.


오브젝트나 트리거를 붙여 움직이는 유닛이나 다른 오브젝트를 따라다니게 하려면

triggers_name attachto [player,[0,0,0]]; 

ex)

trigger-2 name = trigger_2

type = none / activation: none

condition: alive unit_1;

on activation: trigger_1 attachto [unit_2, [0,0,0]]; 

유닛1이 살아있으면 트리거1을 유닛2에 붙임.


trigger-1 name = trigger_1

radius = 50 /50 

type = none / activation: owner only (sync owner > unit_1) / act type = present

condition:

this

on activation:

titleText ["<t color='#FF9900' size='1'>You encountered UNIT 2.</t>", "PLAIN", 3, true, true];  

counterdown: 3/3/3

effects = music

위와 같이 설정하면 50미터 범위의 트리거1은 유닛2를 항상 따라다니게된다. 그러다 두 유닛이 50미터 내에서 만나게 되면 경고 텍스트와 음악이 뜨게 할 수 있음.


+ 트리거로 텍스트 넣을 때

게임 중 나오는 텍스트는 크게 3가지다.

채팅(라디오) 메시지 텍스트, 가이드 텍스트(화면 우측 상단), 일반 텍스트


ChatText는 globalchat 와 sidechat 가 있다. 글로벌 라디오메시지는 같은 진영이나 프렌들리 사이드에게 다 보여지고 sidechat은 같은 진영에만 보인다.

라디오 메시지를 트리거나 웨이포인트 on activation에 입력해주면 됨.

unit_name sidechat "hello"; 

unit_name globalchat "hello";


가이드 텍스트는 hint 명령어가 사용됨.

unit_name hint "Warning!"; 


화면 중앙에 보이는 텍스트는

titleText ["<t color='#ff0000' size='1'>유닛1</t>헬로<br/><t color='#ff0000' size='1'>유닛2</t>헬로", "PLAIN", 3, true, true]; 

* <t color= > </t> 사이의 텍스트로 색상과 크기 지정.

아르마3 기본 컬러: #0000ff (블루) /  #00ff00 (그린) / #FF9900 (오렌지)

* <br/>은 줄띄움.

* plain 은 텍스트의 화면 위치 (plain down)

* 숫자 3은 표시되는 시간.


+ 트리거, 모듈, 건물, 차량 같은 오브젝트 삭제

deleteVehicle Name; 


+ 트리거 발동 조건

AND = && / OR = ||  (둘 다 사용 가능)

예)Condition란에 입력: this && !alive unit_1; // 이 트리거(this, 예를 들어 라디오 트리거)의 조건과 유닛1이 모두 사망했을 때 트리거 발동.

none,none 으로 설정 후 alive unit_1 && alive_unit_2 만 입력하면 두 유닛 모두 사망했을 때 트리거 발동.

alive unit_1 || alive unit_2; 는 두 유닛 중 하나만 살아있으면 트리거 발동.

and와 or을 동시 사용하려면 (  ) 사용.

(!alive unit_1) && (alive unit_2 || alive unit_3 || alive vehicle_1 || alive item_1); // 유닛1 사망은 반드시 포함하고 나머지들 중 하나만 살아있으면 트리거 발동.


** in thisList : 트리거 발동시킬 때 범위 내 들어가야하는 유닛을 일일이 지정할 때 사용.

Type: None / Activation: 사이드(BLUFOR 등) 필수 설정.

- 유닛1과 유닛2가 모두 들어가야 트리거 발동

condition 란에 입력:

this && unit_1 in thisList && unit_2 in thisList; 

- 유닛1, 유닛2 둘 중에 하나만 들어가도 발동

this && unit_1 in thisList or (unit_2 in thisList); 

- 유닛1은 들어가고, 유닛2는 트리거 밖에 있어야 발동

this && unit_1 in thisList && !(unit_2 in thisList); 

- object와 유닛을 함께 사용할 때

this && objectName in thisList && unitName in thisList; 

위 코드가 안되면

this && unitName in thisList && (unitName distance objectName) < 5 ;

(유닛은 트리거 범위 안에 들어오고 오브젝트는 유닛과의 거리가 5미터 내일 때 트리거 발동)


+ 트리거 삭제 후 새 트리거 만들기

예를 들어 사용할 수 있는 갯수(채널)가 제한되어 있는 라디오 트리거 중 ALPHA채널 트리거를 삭제하고, 다른 명령을 하는 ALPHA채널 트리거를 만들 경우.

- 두번째 ALPHA채널 트리거 radio_alpha_trigger_2 를 미리 만들어놓고 설정해둠.

- 미션 시작되면 두번째 트리거는 비활성 상태로

radio_alpha_trigger_2 setTriggerActivation ["NONE", "PRESENT", false];

- deleteVehicle radio_alpha_trigger_1

으로 트리거 삭제 후

- 다른 트리거에

con: !alive radio_alpha_trigger_1;

on act: radio_alpha_trigger_2 setTriggerActivation ["ALPHA", "PRESENT", true];


+ 라디오 트리거
Radio 트리거는 타이머가 적용되지 않고 즉시 발동되므로 radio 트리거에 직접 명령 코드를 입력하는 것 보다 작은 object를 delete하게 한 후 그 오브젝트가 삭제되면 라디오가 발동되게 하는게 효과적.
라디오 트리거 on act 에는 deleteVehicle object_1; 입력하고
라디오로 수행할 명령은 다른 트리거에 입력 > con: !alive object_1 / on act: 명령 스크립트 코드


# 그 외 기초적인 에디터 코드 모음 사이트

https://thearma2editor.wordpress.com