CAFE

EU 모드 게시판

[팁/노하우]스코프 작동방식 심층이해

작성자메가스콤네노스|작성시간16.12.09|조회수540 목록 댓글 1

이하 내용은 제가 직접 테스팅하며 확인하고 유용하게 써먹는 정보입니다. 스코프에 대한 기초적인 개념을 알고 있다 전제하고 작성하겠습니다.


1. every_province

every_province는 일종의 for loop처럼 작동합니다. limit의 조건을 만족시키는 프로빈스를 프로빈스 id 순서대로 정렬한 다음에 가장 앞에 있는 프로빈스부터 차례대로 effect를 적용시키는거죠. 여기서 재밌는건 every_province 스코프가 작동하는 와중에 그 스코프의 지정대상을 변경할 수 있다는겁니다. 예를 들어 설명하겠습니다.


random_province = {

set_province_flag = testing

}

every_province = {

limit = {

has_province_flag = testing

}

random_province = {

limit = {

NOT = { has_province_flag = testing }

}

set_province_flag = testing

}

}


이 코드는 랜덤으로 고른 프로빈스 하나에 testing이란 플래그를 설정한 다음, testing이란 플래그를 가진 모든 프로빈스를 대상으로, 다시 랜덤으로 고른 프로빈스 testing이란 플래그를 가지지 않은 프로빈스 하나에 testing이란 플래그를 설정합니다.


그러면 testing이란 플래그를 가진 프로빈스가 새로 하나 추가 됬습니다. 만약 이 플래그를 새롭게 얻은 프로빈스의 프로빈스 아이디가 기존에 testing이란 플래그를 가지고 있던 프로빈스보다 크다면, 이 플래그를 새롭게 얻은 프로빈스 역시 조건을 만족시키게 되고 every_province 안에 포함되게 됩니다. 


이게 왜 이렇게 되냐면 every_province의 작동 알고리즘이 다음과 같기 때문입니다.


1. 프로빈스 아이디 1번의 스코프를 호출한다.

2. 프로빈스 아이디 1번이 limit의 조건을 만족시키는지 확인한다.(만약 limit가 비어 있다면 자동으로 패스)

3. 만약 조건을 만족한다면 프로빈스 아이디 1번의 스코프에서 effect를 발동시킨다.

4. 모두 발동시키고 나면 그 다음 프로빈스 아이디를 호출해서 동일한 과정을 거친다.

5. 마지막 프로빈스 아이디까지 호출한 후 중단.


즉, every_province는 limit의 조건이 어떻게 되던간에 1번부터 마지막까지 모든 프로빈스를 차례대로 호출한 후 limit의 조건을 적용해서 확인하는 것입니다. 그래서 처음에는 그 조건을 만족하지 않았지만 every_province 스코프가 진행되는 와중에 조건을 만족하도록 변경 된 프로빈스는, 조건을 변경시킨 프로빈스보다 프로빈스 id가 높다면 역시 every_province의 적용대상이 되는 것입니다.


2. all_province

초보자가 많이 빠지기 쉬운 함정인데, every_province는 effect 용이고 all_province는 트리거 용입니다. 즉, 트리거에서 모든 프로빈스를 '확인'하고 싶을 때는 all_province를 호출하고, effect에서 모든 프로빈스를 '호출'하고 싶을 때는 every_province를 사용합니다.


3. any_province

any_province 역시 트리거 용입니다. 단, any_province는 착각하면 안 되는 것이, any_province 역시 모든 프로빈스를 호출하는건 마찬가지입니다. 단지 all_province는 모든 프로빈스를 호출해 모든 프로빈스를 확인하고, any_province는 모든 프로빈스를 호출하되 그 과정에 조건이 한번이라도 만족되면 더 이상 그 다음 프로빈스를 호출하지 않고 중단하는 차이가 있을 뿐입니다.


4. effect에서 any_province와 비슷한건 없습니다. 대신 random_province를 비슷하게 사용해야합니다.


5. xxx_neighbor_province

모든 neighbor_province들은 이웃하는 프로빈스를 먼저 따로 묶어내 지정한 다음에 그 제약 안에서 위에 서술한 것과 동일한 작동방식으로 돌아갑니다.


6. xxx_empty_neighbor_province

모든 empty_neighbor_province는 개척되지 않은 이웃 프로빈스만을 대상으로 지정합니다. neighbor_province들은 모든 이웃프로빈스를 지정하는게 아니라 개척 된 이웃프로빈스 만을 대상으로 지정합니다. 모든 이웃프로빈스를 지정하는 스코프는 없습니다.


기타 궁금증 있으시면 마음껏 물어보세요.

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 공유하기
  • 신고하기

댓글

댓글 리스트
  • 작성자페라라 | 작성시간 20.07.30 좋은 정보 알아갑니다. 감사합니다.
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼