2013년 5월 5일 일요일

ARMA 커맨드 그룹 Activators

ARMA 스크립트 커맨드의 기능분류 중 Activators 부분에 대한 정리로 ARMA 3 Alpha를 기반으로 작성했다.

덧붙이자면 ARMA 스크립트에 대해서 배우는데 동기부여도 되고, 나중에 까먹더라도 다시 찾아볼 수 있을걸 생각해서 작성하는 것이기 때문에 단순히 말해 노트 필기 수준의 글이다.

소스에 있어서 부실한 부분이 많다.

그래도 보실 분들은 하단의 '자세히 알아보기'를 누르시길...




http://community.bistudio.com/wiki/Category:Command_Group:_Activators
  

Action



마우스 휠 스크롤, 키보드의 [,]키로 좌측 상단에 표시시켜서 보통 인벤토리 열람, 무기의 전환, 자리별 차량 탑승등으로 사용해왔던 액션메뉴에 새로운 행동을 추가시키는 스크립트이다.
Number = unitName addAction [title, filename, arguments, priority, showWindow, hideOnUse, shortcut, condition]
  • action : 표시될 이름
  • filename : 실행시킬 파일명 (간단한 명령도 가능)
  • arguments : 함수로 전달시킬것들
  • priority : 액션메뉴에 표시될 순서로 0~6까지 지정가능하며 숫자가 높을 수록 상단에 위치
  • showWindow : 조준점 하단에 해당명령 표시여부
  • hideOnUse : 사용 후 액션 메뉴를 사라지게 할꺼면 true, 계속해서 띄울꺼면 false
  • shortcut : 키매핑을 입력하면 해당 키 입력이 이루어질때 기존의 동작 대신에 추가한 액션을 실행한다.
  • condition : 해당 액션이 활성화되는 조건의 설정.


▷ removeAction
addAction으로 행동 생성시 0번부터 순차적으로 적용되는 번호를 사용해서 특정 행동을 액션메뉴에서 삭제시키는 스크립트.
unitName removeAction index 
nul = this addAction ["test", {hint '???'}];
nul = this addAction ["Remove test", {player removeAction 0}];

Event Handler

 특정 이벤트 발생시 실행할 내용을 설정하도록 지정하는 것.


▷ addEventHandler

특정 객체에 이벤트 발생시 실행할 간단한 내용이나 외부 함수파일을 실행할 수 있다.
Number = object addEventHandler [type, command]
  • type : 이벤트의 형태
  • command : 실행할 내용
this addEventHandler ["killed","hint 'Destroyed'"];



▷ removeEventHandler


생성된 이벤트 핸들러를 제거한다.
objectName removeEventHandler [type, index]
this addEventHandler ["killed","hint 'Destroyed'"];
this removeEventHandler ["killed", 0];






Trigger

트리거는 특정 위치의 특정 범위내에 어떠한 조건을 정해놓고 그 조건을 충족시킬경우 발동되는 시발점이다.

▷ Mission Editor: Triggers
미션 에디터에서 F3키를 눌러서 Wizard를 통해서 트리거를 추가할때의 대략적인 내용들.



  1. Shape
    • Ellipse / Rectangle : 타원 / 사각형
    • Axis A/B : 가로와 세로 각각의 길이. 단위는 미터
    • Angle : 기울기값
  2. Timer
    1. Countdown / Timeout
      • Countdown : 트리거를 충족시키면 지정한 시간이 지난 뒤에 On Act.가 발동됨.
      • Timeout : 지정한 시간동안 트리거를 충족시켜야 On Act.발동됨
        CONDITION : player in thislist
        ON ACT. : hint 'Activated';player setDammage 1
        Countdown으로 설정하면 범위를 벗어나도 10초뒤 사망
        Timeout으로 설정하면 10초동안 범위에 있어야 사망
    2. Min / Mid / Max : 시간의 최소/중간값/최대. 단위는 초. 10/10/10으로 설정하면 무조건 10초. 10/15/20으로 설정하면 10~20초 사이의 랜덤값중 15에 가까운 값이 정해짐
  3. Name / Text
    • Name : 다른 곳에서 이 트리거를 사용할 수 있도록 변수명 지정
    • Text :Radio Command를 통해서 트리거를 활성화 시킬때 나타나는 내용이며 미션 에디터상의 지도에 표시되기도 함.
  4. Type스크립트 코드를 통해서 구현할 수 없는 효과들을 설정하는 것이고, On Act.가 실행된 뒤 바로 진행된다.
    • None : 기본값으로 이하 효과들이 필요없을 때 설정하면 된다.
    • Guarded by <Side> : 다른 타입들과 다르게 활성화 시킬 수 없는 형태의 트리거로, 방어거점을 설정해주는 역할만 한다. 만약에 유닛과 이 트리거가 연결되어있으면 유닛의 초기 설정 위치가 트리거의 위치로 미션 초기화 과정에 옮겨지게 된다고한다.
      Waypoint중 Guard와 연관된 부분이 많은데 Waypoint로 연결된 곳들중에서 첫번째 장소 (중요도가 높은 곳)중 방어되고 있지 않은 곳으로 이동한다고 한다. 첫번째 장소로 설정되어 있고 두번째 Waypoint에 다른 곳이 설정되어있어도 두번째 장소에 건물이 많다고 한다면 두번째 장소쪽으로 우선 이동하는 것같다.
      Waypoint:Guard로 되어있는 그룹은 지도상의 어느곳에 있던 이 트리거로 지정된 곳에 적이 발견된다면 무조건 이동한다. 자기가 무장이 되어있지 않던, 상대가 말도 안되게 강하건 일단 이동한다고 한다.
      Waypoint:Guard에 자세히 나와있다고하는데 나중에 Waypoint를 다룰때 확실히해야할 것같다.
    • Switch : Waypoint 사이클 루프를 벗어나기 위한 것중 하나로, Hold나 Guard에서 벗어날때 사용한다고 한다. 이 트리거를 Waypoint와 연결하면 연결된 웨이포인트의 바로 다음 웨이포인트로 바로 이동한다고 한다. 또한 링크되어있는 웨이포인트의 On Activation은 작동하지 않는다고 한다.
      Guard Waypoint와 연결된 Guarded by BLUFOR Trigger
      Guard Waypoint와 연결된 사선형태의 Switch Trigger
      Activation : Anybody
      Condition : player in thislist
      다른 한 Waypoint는 Move로 유저가 Switch Trigger를 건드리면
      방어중이던 병사들이 남동쪽으로 이동한다.

    • End : 미션을 종료시킨다. 6종류의 다른 엔딩을 설정할 수 있다.
    • Lose : 미션 실패 트리거. 플레이어의 사망과는 다르다. 캠페인에 포함된 미션이면 미션을 실패하고도 캠페인을 계속 진행할 수 있다.

  5. Activation

    트리거를 발동시키는 요인을 결정하는 것으로, 이 선택이 Condition에 있어서의 this값을 정하는 요인이 된다고 한다. 유닛과 링크되어 있으면 관련된 옵션들만 가능하다고 한다.
    • None : condition 구문의 여부와 상관없이 항상 false인 상태이기 때문에 트리거가 작동하지 않는다.
    • <side> : 특정 진영의 어떤 유닛이던 발동. Present등 6종류의 컨디션 중 선택된 한가지에 영향을 받는다.
    • Radio <letter> : 라디오 커맨드를 사용해서 활성화. setRadioMsg를 통해서 사용가능한 플레이어를 특정할 수 있다고 한다. Present등 6종류 컨디션의 영향을 받지 않고, Countdown과 Timeout과 무관히 작동한다고 한다.
      Trigger Text : destroy vehicle
      car setDammage 1
    • Seized by <side> : 그 영역을 특정 세력이 점유하고 있을때 발동된다.
      Timeout 카운터와 함께 사용할 수 있는데 적은 수의 우세는 Max Timeout의 시간이 지나서야 트리거가 작동된다. 유닛의 종류에 따라서 주둔세력이 4:1의 숫적 우위를 가지고 있어도 Max Timeout 카운터의 최소요구를 충족한다.
      이 트리거는 Detected by <side> 옵션과 함께 사용할 수 있는데 이건 접촉한 쪽이 점거하고 있는 쪽을 고려할때 사용할 수 있는데, 예를들어 seized by BLUFOR / Detected by BLUFOR는 BLUFOR가 그 지역을 점거하고 있을때(있다고 생각될때) 발동되고, seized by BLUFOR / Detected by OPFOR는 OPFOR가 판단하기로 BLUFOR가 지역을 점령하고 있다고 생각되어질때이다.
      간단히 말하면 승세가 기울었을때 점령군쪽은 상황을 굳히려는 판단을, 다른쪽은 퇴각을 해야하는 상황에 활용할 수 있다.
      Not Present 옵션을 활용할 수 없으므로 Not Seized by <side>같은 트리거는 만들 수 없다.
    • Vehicle : 유닛, 차량, 그외 객채등을 위한 것으로 Present를 포함한 6종류의 컨디션이 적용된다.
    • Whole Group : 트리거와 유닛을 링크시켰을때 활용할 수 있다고 한다. Present를 포함한 6종류의 컨디션이 적용된다.
    • Group Leader : 위와 마찬가지로 유닛과 연결했을때 사용할 수 있다. 연결된 유닛이 그룹의 리더일때만 적용되고, Present를 포함한 6종류의 컨디션이 적용된다고 한다.
    • Any Group Member : 이것도 유닛과 연결했을때 사용할 수 있는 거고, Present를 포함한 6종류의 컨디션이 적용된다.
  6. Once / Repeatedly

    • Once : 발동되면 활성화된 상태로 계속된다
    • Repeatedly : 이 경우에만 트리거가 비활성화 될 수 있고, 반드시 비활성화 된 상태로 돌아가야 다시 활성화 시킬 수 있지만, 라디오 트리거의 경우는 예외이다.
  7. Present / Not Present

    • 트리거의 영역 안에 살아서 파괴되지 않은 상태인지 여부에 따라 적용된다.
  8. Detected by <Side>

    • 특정 사이드와 접촉했을때 발동되는데, 이는 knowsAbout과 관련이 있다고 한다. 거리에 따라서 해당 유닛에 대한 정보가 명확해져서 일정 수치 이상이 되면 피아식별 및 교전을 하는 식이라고 한다.
      이와 유사하게 이 옵션은 단순히 트리거에 닿는 것이 아니라 어느정도 범위 이상으로 안쪽에 접근해야만 트리거가 발동하는 것 같다.
  9. Condition

    • 이 항목의 값이 참이어야만 트리거가 발동되고, 이 곳이 공란으로 되어있을때는 절대로 트리거가 활성화되지 않는다. 
      이 항목에서는 thisList(혹은 list 트리거명)을 사용해서 이 트리거의 범위안에 들어와있고 컨디션을 활성화 할 수 있는 조건을 갖추고 있는 것들의 목록을 얻을 수 있으며, thisTrigger라는 것으로 이 트리거를 사용할 수 있다.
      thisList는 항상 트리거를 활성화시킬 유닛들을 조회하는 것은 아닌데, 하나는 Present 타입(트리거 안쪽의 사이드를 선택해서 값을 넘겨받는 경우)에서 Not Present를 사용할때와 Seized by <side>처럼 모든 유닛으로 숫적 우위를 계산하는 식의 활용이 필요한 곳이다. (즉, 유닛이 트리거 영역에 없어도 Detected by side의 경우 유닛이 아직 포함되어 있다고 보고, thisList를 통해서 활용할 수 있다)
      Condition은 스크립트를 활용해서 더욱 복잡하게 만들 수 있고, 트리거는 condition문을 0.5초마다 체크한다.
  10. On Act(ivation)

    • 스크립가 활성화될때 실행되는 구문이다. thisList와 thisTrigger를 Condition때와 똑같이 사용할 수 있다.
  11. On Dea(ctivation)

    • 반복적으로 사용되는 트리거의 경우, condition이 다시 참값이 되기전 거짓값을도 되돌려진 뒤에 실행된다. Radio <letter>는 비활성화 되지 않고, 절대로 이 구문이 실행되지 않는다. 여기서도 thisList와 this가 똑같이 사용될 수 있다.
  12. Effects

    • 쉽게 효과를 넣을 수 있도록 되어있다.

▷ createTrigger

deleteVehicle로 생성된 트리거를 제거할 수 있다고 한다.
 Object = createTrigger [type, position]
  • type : CfgNonAIVehicles나 CfgVehicles의 클래스 명을 꼭 기입해야한다고 한다. 주로 EmptyDetector가 많이 쓰이는 듯하다.
▷ setTriggerActivation

특별히 뭘 새로 쓰기보다는 링크를 따라서 확인해보는 것이 좋을 것 같다. 내부적으로 BLUFOR와 OPFOR를 WEST와 EAST라고 부른다는 것만 알아둔다면 특별히 알아둬야할 만한 사항은 없는 것같다.
trigger setTriggerActivation [by, type, repeating]
  • by : EAST, WEST, GUER, CIV, LOGIC, ANY, ALPHA, BRAVO, CHARLIE, DELTA, ECHO,FOXTROT,GOLF,HOTEL,INDIA,JULIET,STATIC,VEHICLE,GROUP,LEADER,MEMBER
  • Status :WEST SEIZED, EAST SEIZED, GUER SEIZED
  • type : PRESENT, NOT PRESENT, WEST D, EAST D, GUER D, CIV D

  • triggerActivation
    이를 리턴 받는 형태의 스크립트이다.
    triggerActivation trigger

▷ setTriggerArea

rectangle이 boolean으로 참일때 사각형, 거짓일때 타원형인 것만 알면 이것도 위에 언급된 내용이다.
trigger setTriggerArea [xrad, yrad, angle, rectangle]
  • triggerArea
    반대로 리턴받는 스크립트다.
    triggerArea trigger


▷ setTriggerStatement

deactivation 부분이 필요 없는 경우 ""으로 생략해도 되고 그냥 가로를 닫아도 된다.
trigger setTriggerStatements [condition, activation, deactivation] 

▷ setTriggerText
라디오 커맨드에서 활용될 수 있는 Wizard의 Text를 설정하는 부분이다.
 trigger setTriggerText text



▷ setTriggerTimeout

interruptable이 true면 Timeout, false면 countdown이다.
trigger setTriggerTimeout [min, mid, max, interruptable]




▷ setTriggerType


trigger setTriggerType action 
  • action : action : EAST G, WEST G, GUER G, SWITCH, END1~6, LOOSE
  • triggerType : 리턴용 스크립트

▷ synchronizeTrigger

미션 에디터에서 F5키의 역할을 한다고 보면 된다.
trigger synchronizeTrigger [waypoint1, ...] 








▷ triggerActivated

트리거가 활성화 되었는지를 확인해서 true/false값을 리턴받는 스크립트이다.

triggerActivated trigger





▷ triggerAttachedVehicle
트리거에 닿은 차량/유닛/객체를 리턴해주는 스크립트.
object = triggerAttachedVehicle trigger 




▷ triggerAttachObject

Number = triggerName triggerAttachObject objectId 
triggerActivation으로 확인해보면 by부분이 STATIC으로 바뀌었다.
condition : !alive(getPos thisTrigger NearestObject 44095)
On Act : hint "destroyed"
logic init : t1 triggerAttachObject 44095


▷ triggerAttachVehicle

triggerName triggerAttachVehicle [] or [vehicle]
 triggerActivation으로 보면 by 부분이 Vehicle로 바뀌어있다.

init : t1 triggerAttachVehicle [this]

 



그 외

▷ list

Array = list trigger
트리거를 활성화 시킬 수 있는 요소들의 목록을 받는다. Not Present와 Present일때의 값은 같다.


댓글 없음:

댓글 쓰기