본문 바로가기

자유공간/모드자료

이벤트만들기(한글) 2 : 활용

[edit] 이벤트 플래그


빅토리아의 플래그시스템은 하나의 사건을 플래그로 설정함으로써 다른 이벤트를 연계발생시키는데 사용할 있는 시스템입니다. (지역과 세계 의 두가지 플래그타입이 있다.)

 

지역(local) 플래그는 ai파일이나 이벤트에 설정해둘수 있으며, 세계(Global) 플래그는 시나리오파일이나 이벤트를 통해 설정할수 있습니다.

 

flag의 value는  'value =' 영역에서 'clrflag', 'incflag' 와 'setflag' 명령어등을 통해서 제거하거나 변화시키거나 설정할수  있습니다. 비슷하게 트리거 'local_flag' 와 명령어 'local_clrflag', 'local_incflag' 와 'local_setflag'들은 지역(local) 플래그들로 사용됩니다.

 

플래그의 값은 언제나 정수로 사용됩니다.  'incflag' 또는 'local_incflag' 는 당신이 여러개의 이벤트들로부터 선택할수 있게 해줍니다. (그리고 global flags를 사용한다면 당신은 여러개의 국가들이 사용하게 만들수 있습니다. )  플래그 값이 증가하거나 감소함에 따라 여러이벤트들을 사용할수 있는 값을 가지게 됩니다.

 

다음에 나오는 것이 그 예입니다 : 두개의 나라들, Freedonia 와 Albanania 는 이웃입니다. 당신은 그 나라들 사이의 긴장관계가 증가하거나 감소하는 것을 이벤트를 통한 그들의 응답을 통해 구현하고자 합니다. 당신은 global flag를 사용할 수 있습니다 ;  그것은 flg_frealb_tension 으로 불릴 것이며 시나리오의 글로벌데이터부분에 기록될 겁니다.  

 

 

# 전쟁과 동맹들

globaldata = {

   flags = {

     flg_frealb_tension = 1

   }

}

플래그(flag)가 정의되었고 1로 설정되었다. 이제 20년이상의 기간동안 당신은 각각의 나라들에 3개의 이벤트들을 구현할수 있다.  

 

event = {

    id = 9991

    random = no

    country = U01 #Freedonia

    name = "Tension with Albanania"

    desc = "이벤트설명은 이곳에 "

    style = 0

       

    date = { day = 1 month = march year = 1837 } 

    offset = 30

    deathdate = { day = 1 month = april year = 1837 }

       

    action_a = {

        name = "We won't stand down!" # 

        command = { type = incflag  which = flg_frealb_tension  value = 1 }

        command = { type = relation  which = U02  value = -20 }

    }

    action_b = {

        name = "Can't we all just get along?" # 

        command = { type = relation  which = U02  value = 20 }

    }

}

만약 action_a 를 선택했다면 flag값이 1에서 2로 증가하게 된다. 값은 7까지 6번 이벤트들을 통해 올릴수 있다. 지금 마지막까지 올려보도록 하자. 

 

event = {

    id = 9997

    random = no

    country = U01 #Freedonia

    name = "Tension with Albanania"

    desc = "이벤트설명은 이곳에 "

    style = 0

       

    date = { day = 1 month = march year = 1857 } 

    offset = 30

    deathdate = { day = 1 month = april year = 1857 }

       

    trigger = {

       flag = { name = flg_frealb_tension  value = 6 }

    }


    action_a = {

        name = "This means war!" # 

        command = { type = war  which = U02 }

    }

}

이것은 플래그 값이 6 이상일때 전쟁을 선포하게 만드는 trigger이다. 만약  6개의 이벤트 중의 적어도 2개를 action_b 를 선택하지 않았다면  flg_frealb_tension값이 6이 되고 1857년 March 1근처에서 국가들사이의 전쟁은 시작될 것이다.  

 

 

[edit] 발명

빅토리아에서 다향한 기술레벨에 따라 발명의 기회가 열린다. 예를 들면 ID 500번 "Daimler's Automobile" 은 기술  ID 5005, "Combustion Engine"를 필요로 한다.


event = {


    id = 500

    random = no

    invention = yes


    picture = 500


    trigger = {

        technology = 5005

    }


    name = "EVT_500_NAME"

    desc = "EVT_500_DESC"

    style = 0


    date = { day = 1 month = january year = 1876 }

    offset = 60 # Check for trigger conditions every 60 days

    deathdate = { day = 30 month = december year = 1886 }


    action_a = {

        name = "OK" # Excellent!

        command = { type = activate_building_type which = automobile_factory }

    }

}

보다시피, 발명은 발명은 하나의 선택지를 가진 이벤트이다. 발명은 'invention = yes' 라는 줄을 가지며, 

만약 이 줄이 안에 있으면 그것은 발명으로 간주됩니다. 만약 아니라면 off를 하면 됩니다.

 

[edit] Examples


이벤트 스크립트의 몇가지 예들을 통해 보도록 합시다.

 

 

[edit] 트리거 사용하기 - AND NOT은 쉬운데, OR 은 무엇인가?

 

 이벤트에서 가장 중요한 것 요소중의 하나는 트리거(trigger)시스템이다. 트리거들은 만약 이벤트가 일어난다면 그 상황을 이용할수 있게 만들어 준다. 우리가 원하거나 원하지 않는 조건들이 만족되면 이벤트는 발생하게 된다. 이것은 트리거를 통해 만들어 질수 있다.

 빅토리아 시나리오 그랜드캠페인의 예를 들면 다음과 같다. 이것은 event 2503의 내용이다.

 

  trigger = {


    exists = GER                               # Condition 1

    exists = ROM                               # Condition 2


    NOT = {                                    # Condition 3

      war = { country = HUN country = ROM  }   # Condition 3, part1

      OR = {                                   # Condition 3, part 2

        control = { province = 728 data = -1 } # Condition 3, part 2, sub part 1

        control = { province = 729 data = -1 } # Condition 3, part 2, sub part 2

        control = { province = 730 data = -1 } # Condition 3, part 2, sub part 3

      }

    }

  }

 

 모든 조건들은 반드시 만족해야 한다. 이 예에선 세개의 메인 조건들이 만족되어야 한다.

독일이 존재해야한다 (Condition 1  조건1)

루마니아가 존재해야 한다 (Condition 2  조건2)  

 NOT = { } 조건은 반드시 맞아야 한다 (Condition 3  조건3).  조건이 맞지 않는다면?  트리거 조건들이 작동해서 트리거는 위배되고 조건은 실패할 것이다. 그래서 이런 NOT 조건은 두개의 조건모두 반드시 맞지 않아도 된다 :

헝가리와 루마니아는 전쟁중이다 (Condition 3.1  조건3.1)

 OR = { } 조건은 맞아야 한다   (Condition 3.2 조건3.2)  무엇이  OR조건인가? 다시말하지만 만약 조건들중의 하나가 트리거는 유효하다.  그래서 이러한  OR 조건이 다음의 세개를 반드시 지켜야 된다  :

헝가리는 프로빈스 728 을 통제하고 있어야 한다 (Condition 3.2.1   조건3.2.1)

헝가리는 프로빈스 729 을 통제하고 있어야 한다 (Condition 3.2.2   조건3.2.2)

헝가리는 프로빈스 730 을 통제하고 있어야 한다 (Condition 3.2.3   조건3.2.3)

글로 설명하자면 이벤트는 독일과 루마니아가 존재하고, 헝가리는 루마니아와 평화이면서 헝가리는 세곳의 지방중 하나만 통제하고 있어도 동작한다.

 

 

[edit] 이벤트들을 연계시키기. 이벤트체인 

 

이벤트를 연계시키는 것들은 연계반응입니다. 이벤트들을 연결하는 것은 두가지 길이 있습니다. 하나는 트리거 명령어를 사용하는 것이고 다른 하나는 그 이벤트내부에서 이벤트 트리거를 사용하는 것입니다. 이러한 두가지 방법들은 다르게 사용되며 서로간에 확장될수 있습니다.

 

 

[edit] 트리거 명령어로 연결하기 


트리거 명령어는 이벤트안의 선택지를 통해서 또다른 이벤트를 즉시 사용하게 해줍니다. 예를 들면 아래와 같이 보이는 헝가리 event 2503을 들수 있습니다.

 

event = { 


  id = 2503

  random = no

  country = HUN


  trigger = {

    #see above#

  }


  name = "EVT_2503_NAME"

  desc = "EVT_2503_DESC"

  style = 0


  date = { day = 4 month = september year = 1940 }


  action_a = {

    name = "ACTIONNAME2503A" # Press the issue

    command = { type = trigger which = 2019 } # GER

  }


  action_b = {

    name = "ACTIONNAME2503B" # Refrain

    command = { }

  }

}

이벤트안의 action_a 를 선택하면 즉시 이벤트 2019가 연결되어 독일의 이벤트가 발생하게 됩니다.

 

event = {


  id = 2019


  random = no


  country = GER

  # Triggered by HUN 2503


  name = "EVT_2019_NAME"

  desc = "EVT_2019_DESC"

  style = 0


  action_a = {

    name = "ACTIONNAME2019A" # Force Romanian acceptance

    command = { type = trigger which = 2701 } # ROM

  }


  action_b = {

    name = "ACTIONNAME2019B" # Deny the Hungarian request

    command = { type = trigger which = 2504 } # HUN

    command = { type = trigger which = 2702 } # ROM

  }

}

이벤트는 매우 간단하고 당신은 이곳에서 날짜/종료날짜가 정의되어 있지 않다는 것을 볼수 있습니다. (date/deathdate 가 없습니다.) 왜냐하면 이 이벤트는 오직 다른 이벤트의 트리거를 통해 발생하기 때문입니다. 이벤트에서 만약 당신이 action_a를 선택하면 루마니아 이벤트가 연결되고, action_b를 선택하면 헝가리와 루마니아의 이벤트가 연결됩니다. 연결이 이어지는 겁니다...

[edit] 이벤트 트리거들을 연결시키기


 위의 방법은 언제나 조건이 충족되면 이벤트를 즉시 발생하도록 할수 있습니다.  만약 당신이 발생시간을 설정하기를 원한다면 옵션을 준비할수 있습니다.   

 

이벤트출력의 예입니다 :

첫번째이벤트 (1) 는 조건들을 통해 일어나고 , 만약 조건들이 만난다면 1942년 1월 6일에 일어납니다.

이벤트1이 발생했다면 두번째이벤트 (2) 는  1942년 1월 29일에 일어납니다.

이벤트2에서 선택a (action_a )를 선택했다면 세번째이벤트 (3) 는 2월 17일에 일어납니다. 

이벤트2에서 선택b (action_b )를 선택했다면 네번째이벤트 (4) 는 2월 17일에 일어납니다

첫번째 이벤트가 일어나지 않았다면 다섯번째이벤트 (5) 는 2월 17일에 일어납니다.

다음 이벤트들을 보도록 합시다:

# 첫번째이벤트

event = {         


    id = 1        


    trigger = {

        [트리거조건들은 이곳에]

    }

    random = no


    country = [국가태그]


    name = "The first event"

    desc = "[이벤트설명]"

    style = 0

       

    date = { day = 6 month = january year = 1942 } 

       

    action_a = {

        name = "Ok" 

        command = {  }

    }

}

# 두번째이벤트

event = {         


    id = 2


    trigger = {

        event = 1      # 이벤트1 이 발생해야 일어날수 있다. 

    }

    random = no


    country = [country tag]


    name = "The second event"

    desc = "[event description]"

    style = 0

       

    date = { day = 29 month = january year = 1942 } 

       

    action_a = {     # 이벤트3,4 둘다 같은 트리거를 사용한다

        name = "Yes" # sleepevent를 사용하면 해당 이벤트는 일어나지 않는다:

        command = { sleepevent = 4 }

    }

    action_b = {     # Ditto

        name = "No" 

        command = { sleepevent = 3 }

    }

}

# 세번째이벤트

event = {         


    id = 3


    trigger = {

        event = 2 # 만약 이벤트2 가 일어난다면 발생할수 있다.

    }

    random = no


    country = [국가태그]


    name = "The third event"

    desc = "[이벤트설명]"

    style = 0

       

    date = { day = 17 month = february year = 1942 } 

       

    action_a = {

        name = "Yes" 

        command = {  }

    }

    action_b = {

        name = "No" 

        command = {  }

    }

}

# 네번째이벤트

event = {         


    id = 4


    trigger = {

        event = 2 # 위와 같은 트리거를 가지고 있다!

    }

    random = no


    country = [국가태그]


    name = "The fourth event"

    desc = "[이벤트설명]"

    style = 0

       

    date = { day = 17 month = february year = 1942 } 

       

    action_a = {

        name = "Yes" 

        command = {  }

    }

    action_b = {

        name = "No" 

        command = {  }

    }

}

# 다섯번째이벤트

event = {         


    id = 5


    trigger = {

        NOT { event = 1 }

        # 만약 이벤트 1이 일어나지 않는다면 발생할수 있따

    }

    random = no


    country = [국가태그]


    name = "The fifth event"

    desc = "[이벤트설명]"

    style = 0

       

    date = { day = 17 month = february year = 1942 } 

       

    action_a = {

        name = "Yes" 

        command = {  }

    }

    action_b = {

        name = "No" 

        command = {  }

    }

}

무엇이 이곳에서 중요하냐면 :

이벤트들은 즉시 발생하지 않고 다른 이벤트들의 조건들을 통해 일어날수 있다는 것

당신은 이벤트 트리거(event trigger) 와 날짜/종료시점(date/deathdate)을 사용할수 있다는 것.

즉시 다른 이벤트들을 발생시키는 것 대신에 , 이벤트들을 슬립이벤트(sleepevent) 명령어를 사용해서 일어나지 않게 만들수 있다는것.

하지만 다른 이벤트 후에 이벤트 트리거 기한을 설정하는 것은 가능하지 않다.

//

'자유공간 > 모드자료' 카테고리의 다른 글

에딧 기본 사용법 (입문/초보용)  (0) 2012.08.14
팝 제작 가이드  (1) 2012.08.14
이벤트만들기(한글) 1 : 기본  (0) 2012.08.14
리더 에딧하기- 빅토  (0) 2012.08.14
에딧- 정당만들기  (0) 2012.08.14