|
|
타겟 지정을 보면, vassal_decisions = { } 보다 targetted_decisions = { } 가 설정할 수 있는 범위가 좀 더 다양하고 넓다는 것을 확인할 수 있습니다. (심지어 all 도 가능하니까요. 다만 권장하지 않을 뿐.)
앞에서도 말씀드렸지만, 디시전의 종류는 이 세 가지 이외에도 몇 가지 더 있습니다. 그러나 그 디시전들은 플레이어가 직접 실행할 수 있는 디시전이라기보다는 게임 내에서 특수한 목적으로 사용되는 디시전들입니다. 그 내용들은 해당 항목을 다룰 기회가 생기면 그 부분에서 설명드릴 것이니, 일단 decisions = { }, vassal_decisions = { }, targetted_decisions = { } 세 가지에 대해서만 확실하게 알아 두십시오.
지금까지 세 가지 종류의 디시전 그룹을 확인했는데요. 언제 어떤 종류의 디시전을 사용해야 하는가의 문제가 남는군요. 원론적이지만, 상황에 따라서 달라집니다. 여러 봉신이나 가신들 중에서 조건에 맞는 봉신 하나하나를 찍어서 개별적으로 디시전을 실행시키고 싶다면 targetted_decisions = { } 이나 vassal_decisions = { } 안에 디시전을 작성하시면 되고, 그게 아니라면 decisions = { } 안에 몰아넣으시면 일단 크게 틀리지는 않습니다.
뭔가 엄청나게 많이 한 것 같은데, 우리 이제까지 디시전 구조에서 꼴랑 한 줄 읽었습니다. (ㅋㅋㅋ)
디시전의 종류를 정하면 그 다음에는 디시전의 이름을 적습니다. 처음에 보여드린 디시전 구조에서 decision_name 이라고 적혀있는 부분이죠. 바로 위에 보여드린 예에서는 test_decision 이 디시전 이름이 되죠. 이렇게 디시전 이름을 쓰고 괄호를 묶어 주면 그 안쪽의 내용은 개별 디시전의 내용이 되는 겁니다.
참고로, 디시전의 종류를 정의한 안쪽에는 몇 개의 디시전이든 들어갈 수 있습니다. 디시전 이름만 서로 겹치지 않으면요. 이미 보셨죠?
decisions = {
decision_1 = {
...
}
decision_2 = {
...
}
decision_3 = {
...
}
}
위의 decision_1, 2, 3 은 모두 독립된 디시전입니다. 디시전 이름 역시, 지난 회에 지나가면서 말씀드린 이벤트 ID 와 같이 유니크해야 합니다. 이름이 겹치는 두 개 이상의 유효한 디시전들은 모두 정상적으로 실행되지 않으므로 이 점 주의하십시오.
이제 디시전 그룹도 설정했고, 개별적인 디시전 이름을 설정할 수도 있게 됐으니, 이제 개별적인 디시전 하나하나의 내부에 좀 더 집중해 봅시다. 앞에서 보여드린 디시전의 구조를 다시 한 번 보고 계속 읽어주세요.
다음의 섹션을 보도록 하죠. 디시전의 이름 다음에 나오는 from_potential = { } 과 potential = { } 은, 이 디시전을 사용할 수 있는 조건을 정하는 것입니다. from_potential = { } 은 디시전을 실행하는 자(보통 플레이어)가 충족해야 하는 조건, potential = { } 은 해당 디시전의 영향을 받는 자(보통 봉신이나 가신 등 AI 캐릭터)가 충족해야 하는 조건을 정의합니다. 이 조건을 충족하지 않으면 디시전 목록에 이 디시전은 아예 나타나지도 않습니다.
예를 들면 이렇습니다. 제가 정말 많이 사용하는 구문입니다. 이제 슬슬 코드를 적어볼까 싶어요. 독자분들도 코드를 이렇게 쓰는거구나 하는 감을 익힐 겸 설명을 보아 가면서 조금씩 익혀 보십시오.
vassal_decisions = {
test_decision = {
from_potential = {
ai = no
in_command = no
prisoner = no
NOT = { trait = incapable }
}
potential = {
is_alive = yes
prisoner = no
NOT = { trait = incapable }
}
...
}
}
특정 AI 캐릭터를 향한 디시전(vassal_decisions)인데, from_potential = { } 과 potential = { } 섹션이 정의되어 있군요. vassal_decisions 은 플레이어가 다른 캐릭터에게 던지는 디시전이기 때문에, 디시전을 보내는 사람은 플레이어, 받는 사람은 플레이어가 지정하는 캐릭터(보통 봉신 내지 가신)가 되겠죠? 위의 제한 사항에 의하면, 플레이어는
또한, 이 디시전을 받을 수 있는 AI 캐릭터는
초심자의 경우 위에서 사용된 조건문들을 알 턱이 없으므로, 각각의 조건문들이 무슨 의미인지까지 한 줄씩 설명을 드렸습니다. 이렇게 하나씩 배워가는 거죠.
하나 더 덧붙이자면, 위에서 potential = { } 의 조건에는 숨은 조건이 하나 있습니다. "플레이어의 직접 봉신 또는 가신일 것" 이라는 조건입니다. 즉, "현재 살아 있고 감옥에 갇히지 않은 의식불명 상태가 아닌 자" 앞에는, "플레이어의 직접 봉신 또는 가신이면서" 라는 숨은 조건이 하나 더 붙어있는 것입니다. 결론적으로 플레이어의 영향권 안에 있는 캐릭터들인 셈이죠? (상식적으로 생각하면 돼요. 디시전으로 다른 캐릭터에 어떤 영향을 주려면, 최소한 자신의 통치권(?) 안에 있는 캐릭터여야 하지 않겠어요?) 사실 앞에서 이미 확인했던 내용이죠? vassal_decisions = { } 에서 호출 가능한 최대 범위는 플레이어의 직접봉신과 가신들이라고 이미 말씀드린 바가 있습니다.
CKII 모드에서 NOT = { } 으로 묶어주면, 해당 구의 반대를 의미합니다. 예를 들어 위처럼 trait = incapable (incapable 트레잇을 가지고 있는) 을 NOT = { } 안에 적어주면, 원래의 의미가 뒤집어져서 incapable (의식불명) 트레잇을 가지고 있지 않은 의 의미가 되는 겁니다. 조건의 부정은 정말 많이 쓰이는 것이므로, 이것도 이번 기회에 익혀 두시면 앞으로 도움이 될 겁니다. 물론 조건문 파트에서 다시 언급합니다.
만약 플레이어가 from_potential 조건을 충족하지 못한다면, 이 디시전은 목록에 나타나지 않습니다. 또한 여러 봉신들 중에서 potential 조건을 충족하지 못하는 봉신이 있다면 해당 봉신에 대한 디시전은 목록에 나타나지 않고, potential 조건을 충족하는 봉신들에 대한 디시전만 목록에 나오게 됩니다.
주의할 점은, from_potential 은 정의되지 않는 경우가 있습니다. 앞에서 세 가지 종류의 디시전 그룹 정의를 보았었는데요. 기본 디시전 정의인 decisions = { } 안쪽에 정의되는 디시전들의 경우에는 from_potential 섹션을 정의하지 않습니다. (정의하더라도 무시됩니다.) 어차피 플레이어에게 실행되는 디시전이기 때문에, 필수 항목인 potential = { } 섹션에 플레이어 조건을 적더라도 상관 없기 때문이지요. 같은 이유로, 디시전을 주는 자와 받는 자가 같은 경우에도 from_potential 은 의미가 없어서 정의하지 않습니다.
from_potential 과 potential 이 디시전을 사용할 수 있는 조건을 정의한다고 말씀드렸는데, 이 allow 는 조금 다릅니다. 이 섹션은 이 디시전을 실행할 수 있는 조건을 정의합니다. 그 말이 그 말 아니냐고 말씀하실 수도 있는데, 아래의 예를 보십시오. 위의 예시를 조금 더 쓴 것입니다.
vassal_decisions = {
test_decision = {
from_potential = {
ai = no
in_command = no
prisoner = no
NOT = { trait = incapable }
}
potential = {
is_alive = yes
prisoner = no
NOT = { trait = incapable }
}
allow = {
age = 16
trait = ambitious
}
...
}
}
allow 섹션에 두 줄이 추가됐죠. age = 16 과 trait = ambitious 의 두 줄입니다.
마침 나왔으므로 간단히 말씀을 드리자면, CKII의 조건문 중 숫자를 비교하는 조건문에서의 = 는 그 의미가 "같다" 가 아닙니다. "크거나 같다", 즉 "이상"의 의미입니다. 따라서 age = 16 이라고 쓰면, 나이가 16세 이상인 모든 캐릭터(즉 is_adult = yes 와 같은 뜻)라는 뜻이 됩니다. 여기에는 딱 하나의 예외가 있는데, 그건 나중에 설명드리도록 하겠습니다.
즉, 이 디시전을 사용할 수 있으려면, 해당 봉신이 16세 이상의 성인이어야 하고(age = 16), ambitious (야심적인) 트레잇을 가지고 있어야 한다(trait = ambitious)는 겁니다. 이제 의미를 알았으니, 실제 어떻게 나타날지 추측해 볼까요?
자, 일단 플레이어 측 조건(from_potential)은 다 충족했다고 치고, 어떤 봉신이 potential 조건은 모두 충족하지만 ambitious 트레잇이 없거나 16세 미만이라고 생각해 봅시다. 그럼 어떻게 될까요? 일단 potential 조건은 모두 충족하기 때문에 디시전 목록에 그 봉신에 대한 디시전 목록 항목은 출력이 됩니다. 그러나 실행 단추가 회색으로 비활성화되어 있어서 실행을 할 수가 없습니다. 그리고 단추 바로 옆에 ? 위에 마우스를 얹어 보면, 위 allow = { } 에 명시된 두 조건이 풍선 도움말 형태로 뜨면서 충족되지 않은 조건 앞에 빨간색 x 자가 표시되겠죠. 아래 그림에서 위쪽 3개의 디시전은 실행 단추가 회색으로 비활성화되어 있죠? 그 중 [마상 경기를 개최한다] 디시전의 ? 아이콘에 마우스를 대 보니, 명성이 부족하여 이 디시전을 실행할 수 없다는 툴팁이 출력되는군요.
자, allow 와 potential 의 차이는 아시겠죠. 그럼 이걸 어떻게 사용하면 좋을까요?
potential 의 경우는 충족하지 않으면 아예 목록에 나오지 않으므로, 기본적인 조건을 정의할 때에 좋습니다. 이를테면 봉신이 수십명인데 potential 옵션으로 적당히 조절되지 않으면, 수십 개의 디시전이 사용 가능 여부에 관계 없이 다 자리를 차지하고 있게 됩니다. 심하게 불편하겠죠. 그러므로 기본적인 조건들은 potential 내에 정의해서 택도 없는 (그리고 사용할 수도 없는) 디시전들이 출력되어서 자리를 차지하는 것을 방지하는 게 좋습니다.
그럼 allow 는? 이 조건은 사용자가 알 수 있습니다. 왜? 각 디시전 목록의 우측 끝에 ? 아이콘이 있죠? 여기에 마우스를 올려 보면 해당 디시전의 실행 가능 조건이 뜨는 걸 보실 수 있을 겁니다. 여기에 출력되는 것이 바로 allow 섹션 내의 조건들이예요. 따라서, 특별히 사용자에게 알리고 싶은 조건이 있다면 여기에 적어 두시면 좋습니다. (potential 과 겹치는 내용이라도 상관 없어요)
from_potential, potential, allow 를 모두 만족했습니다. 자, 조건이 완성되었으면 이제 그럼 어떤 효과를 줄 것인지를 정해야죠. 그 효과를 정의하는 섹션이 바로 effect = { } 섹션입니다.
여기에 적을 수 있는 내용은 그야말로 무궁무진합니다. 따라서 적을 내용을 가지고는 정말 CKII 의 모든 내용이 다 들어갈 수 있습니다. 따라서, 이 부분에 대해서는 더 이상 설명을 하지 않겠습니다. 앞으로 이어질 내용에서 계속 채워나가시면 됩니다.
원본에서는 이 부분이 yes 로 쓰인 예가 없습니다. 그냥 항상 이렇게 쓴다고 생각하십시오.
플레이어가 아닌 AI 도 실행할 수 있는 디시전을 디자인하는 경우, 여기에 그 확률을 기록할 수 있습니다. 0~1 사이의 factor 값으로 기록하는데, 0은 확률 없음, 1은 100% 입니다. (그렇다면 0.5는 50%겠죠?) 기간은 월 기준입니다. 즉, 1로 지정하면 AI는 이 디시전을 매달 실행합니다.
일정 조건에 따라서 확률을 증감시킬 수도 있는데, 그것은 여기서 설명할 내용이 아니라서, 일단 예제만 던지고 건너 뛰겠습니다. 초심자분들은 이해 안 되시는 것이 당연하니, 여기에서는 factor 값이 0~1 사이에서 정해지고, 0=0%, 1=100% 라는 사실만 체크하고 넘어 가십시오. modifier = { } 가 어떻게 동작하는지에 대한 내용은 랜덤 구문을 보면서 다시 확인하게 될 겁니다.
ai_will_do = {
factor = 1
modifier = {
factor = 0
trait = cynical
}
modifier = {
factor = 0
NOT = { wealth = 200 }
}
}
이것으로, 일반적인 디시전 파일의 구조를 모두 살펴봤습니다. 사실, 디시전에 고유한 내용으로 설명드릴 것은 이번 회에서 설명드린 내용이 거의 전부입니다. 다음 회부터 몇 회 동안은, 디시전에 대해서 보충적으로 설명드릴 내용과 함께, 지난 회에 예고드린 바 있는 "모드 전체를 관통하는 중요한 개념"들을 설명드리는 시간이 될 것입니다.
첫댓글 제가 렐름에 존저하는 일정한 조건에 부합하는 캐릭터들에 어떠한 예를 들면 건강을 10을 줄이는 트레잇을 부여하고 싶다면 이 디시젼으로 대상을 구체화하고 이벤트 모딩으로 그 트레잇을 부여하면 되는걸까요?
네. 디시전 자체에서 처리를 해버려도 되고, 좀 더 있어보이게 하려면 디시전으로 대상을 확정하고 거기에 이벤트를 발생시켜서 처리하면 되겠지요.
제가 만들어서 올리면 검사 좀 부탁드려도 될까요 요새 느녀져서 애들좀죽이려구용
타겟 디시젼 써보니까, 일반 디시젼은 F7 누르면 나오는 화면에서 나오고,
타겟 디시젼은 유혹 커맨드 처럼 특정 캐릭터를 오른쪽 클릭 하면 나오는 메뉴에서 실행해요.
아하.. 그런 차이가 있군요. 아직 쓸 일이 없었는데, 한번 일부러라도 써 봐야겠습니다.
본문의 targetted_decisions = { } 에서 filter 와 ai_target_filter 에 관한 설명에 오류가 있습니다. 이 점 감안하시고 읽어주세요. 차후 수정이 완료되면 이 덧글은 삭제하겠습니다.
감사합니다. 이글을 보는 순간 봉신들 세금은 없게 만들어서 우호도를 올리고 매달 재산의 1/10 을 liege 에게 바치도록 하고 싶어졌습니다.