디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[일반] A17에 추가된 PatchOperation 가이드

dd(211.243) 2017.05.26 15:37:41
조회 878 추천 2 댓글 1
														

림세널 빼면 모드 만드는 사람이 있는지도 모르겠지만...ㅎ



원문

정의(Def) 하나 수정하려고 모든걸 복제하는 대신 수행할 수 있는 11개의 PatchOperation(패치)이 추가됐습니다. 같은 정의의 서로 다른 부분을 바꾸는 두 개의 모드가 충돌 없이 맡은 바를 수행할 수 있게 되어 모드 호환성이 극적으로 향상됐습니다. 본 가이드는 우리가 사용할 수 있는 패치의 기본만을 설명합니다.

패치는 모드의 하위폴더 Patches 아래 xml파일로 포함됩니다. (따라서 결과물은 MyMod\Defs나 MyMod\Textures 처럼 MyMod\Patches 아래에 들어가야 합니다.) 예시

각 PatchOperation은 xpath 노드를 가지며 해당 패치가 수정해야 하는 xml 노드의 xpath를 가리켜야 합니다. 본 가이드는 xpath 튜토리얼이 아닙니다. xpath를 모르셔도 여기서 알려드리진 않겠습니다.

패치를 설명하기 위해 간단한 예시 정의를 하나 만들겠습니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
    <specialDesignatorClasses>
        <li>Designator_Cancel</li>
    </specialDesignatorClasses>
</DesignatorCategoryDef>

아래 예시에서는 모두 specialDesignatorClass 노드를 가리킬겁니다.

기본 패치


Add, Insert, Remove, Replace의 네 가지 기본 패치가 가능합니다.
PatchOperationAdd 는 선택한 노드에 자식을 추가합니다.

<Operation Class="PatchOperationAdd">
    <xpath>//DesignationCategoryDef[defName = "ExampleCategory"]/specialDesignatorClasses</xpath>
    <value>
        <li>ZhentarExample.ExampleDesignator</li>
    </value>
</Operation>

위 패치는 예시 정의를 아래로 바꿉니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
    <specialDesignatorClasses>
        <li>Designator_Cancel</li>
        <li>ZhentarExample.ExampleDesignator</li>
    </specialDesignatorClasses>
</DesignatorCategoryDef>

PatchOperationInsert 는 선택한 노드의 형제 노드를 추가합니다.

<Operation Class="PatchOperationInsert">
    <xpath>//DesignationCategoryDef[defName = "ExampleCategory"]/specialDesignatorClasses</xpath>
    <value>
        <description>Pointless example designators.</description>
    </value>
</Operation>

위 패치는 예시 정의를 아래로 바꿉니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
    <specialDesignatorClasses>
        <li>Designator_Cancel</li>
    </specialDesignatorClasses>
    <description>Pointless example designators.</description>
</DesignatorCategoryDef>

PatchOperationRemove 는 선택한 노드를 제거합니다.

<Operation Class="PatchOperationRemove">
    <xpath>//DesignationCategoryDef[defName = "ExampleCategory"]/specialDesignatorClasses</xpath>
</Operation>

위 패치는 예시 정의를 아래로 바꿉니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
</DesignatorCategoryDef>

PatchOperationReplace 는 선택한 노드를 교체합니다.

<Operation Class="PatchOperationRemove">
    <xpath>//DesignationCategoryDef[defName = "ExampleCategory"]/specialDesignatorClasses</xpath>
     <value>
        <specialDesignatorClasses/>
     </value>
</Operation>

위 패치는 예시 정의를 아래로 바꿉니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
    <specialDesignatorClasses/>
</DesignatorCategoryDef>

속성 패치


Add, Set, Remove의 세 가지 속성(Attribute) 패치가 가능합니다.

PatchOperationAttributeAddPatchOperationAttributeSet 은 둘 다 속성을 추가 및 설정할 수 있습니다. 차이점은, 추가 패치는 해당 속성이 존재하지 않을 때만 추가하지만, 설정 패치는 기존 값을 덮어쓴다는 것입니다.

<Operation Class="PatchOperationAttributeSet">
    <xpath>//DesignationCategoryDef[defName = "ExampleCategory"]/specialDesignatorClasses</xpath>
    <attribute>ExampleAttribute</attribute>
    <value>ExampleValue</value>
</Operation>

위 패치는 예시 정의를 아래로 바꿉니다.

<DesignationCategoryDef>
    <defName>ExampleCategory</defName>
    <label>Example</label>
    <specialDesignatorClasses ExampleAttribute="ExampleValue">
        <li>Designator_Cancel</li>
    </specialDesignatorClasses>
</DesignatorCategoryDef>

PatchOperationAttributeRemove 는 속성을 제거합니다. 우리의 예시 정의는 제거할 속성이 붙어있질 않으니 스스로 상상해보시길 바랍니다. ;-)

고급 패치


마지막으로 PatchOperationAddModExtension, PatchOperationSetName, PatchOperationSequence, PatchOperationTest 의 네 가지 고급 패치가 존재합니다.

PatchOperationAddModExtension 은 말 그대로 ModExtension 을 추가합니다. ModExtension 이 뭔지 모르신다면… 다른 가이드가 필요하시겠네요.

PatchOperationSetName 은 노드의 이름을 바꿉니다. 이 패치는 완벽성을 위해 포함되긴 했지만, 알려진 사용 가능한 경우는 없습니다.

PatchOperationSequencePatchOperationTest 는 조건적으로 패치를 수행할 때 사용할 수 있습니다. 같은 요소를 두 번씩 패치하는 상황을 방지할 수 있기 때문에 호환성 유지에 유용합니다. PatchOperationSequence 는 리스트의 각 패치를 순서대로 수행하며 중간에 실패할 경우 중단합니다. PatchOperationTest 는 xpath 선택자와 일치하는 요소가 존재하는지 검사합니다.

아래 예시는 DiningChaircostList 요소가 존재하지 않을 때만 추가합니다.

<Operation Class="PatchOperationSequence">
    <success>Always</success>
    <operations>
        <li Class="PatchOperationTest">
            <xpath>//ThingDef[defName = "DiningChair"]/costList</xpath>
            <success>Invert</success>
        </li>
        <li Class="PatchOperationAdd">
            <xpath>//ThingDef[defName = "DiningChair"]</xpath>
            <value>
                <costList />
            </value>
        </li>
    </operations>
</Operation>


자동등록방지

추천 비추천

2

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
2864 설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
2865 AD 호요버스 신작 <젠레스 존 제로> 7월 4일 오픈! 운영자 24/06/05 - -
2866 AD 세상의 패권을 거머쥘 자, 로드나인 사전등록 중 운영자 24/06/05 - -
18431 일반 토네이도로부터 도망칠 곳은 없다 [1] ㅇㅇ(222.106) 17.12.01 360 0
18429 일반 림 팩토리에서 데이터 디스크랑 레시피 데이터 디스크 어케 만듬? [2] Chiral갤로그로 이동합니다. 17.12.01 342 0
18428 일반 Save Our Ship 모드 언제나오냐 [1] 무덤갤로그로 이동합니다. 17.12.01 146 0
18426 일반 ce가 없어서 a17하려는데 [2] 디디(58.239) 17.12.01 157 0
18425 일반 집사냥이 모드 커엽 [7] Chiral갤로그로 이동합니다. 17.12.01 521 0
18424 일반 노인과 바다 1 [6] 유동(121.125) 17.12.01 1174 12
18423 일반 b18 탈출 겁나 힘들어졌네... [7] lomik(39.7) 17.12.01 561 0
18422 일반 버섯 재배 모드 지형재구성 모드랑 쓰니까 ㅆㅅㅌㅊ네 [6] ㅇㅇ(14.32) 17.12.01 374 0
18421 일반 근데 3인 스타트는 왜 기술 수준이 산업시대임? [5] P.쏠렌티스갤로그로 이동합니다. 17.11.30 313 0
18420 일반 센터피드 100마리와의 여유,jpg [4] ㅇㅇㅇㅇ(124.58) 17.11.30 455 2
18419 일반 토네이도가 산 뚫고 들어오나봐 [5] AlcatrazK갤로그로 이동합니다. 17.11.30 382 0
18418 일반 죄수의 명복을빕니당... [5] Crow갤로그로 이동합니다. 17.11.30 278 0
18417 일반 백제가 초창기 이름이 "십제"였다지 [2] P.쏠렌티스갤로그로 이동합니다. 17.11.30 272 0
18416 일반 관계 없애는 모드가 렉 잡는데 1등공신 같음. [3] 방탄림월드(121.162) 17.11.30 577 0
18415 일반 림월드는 행성 정착이 아니라 탈출이 목적임 [8] ㅇㅇ(14.32) 17.11.30 678 0
18414 일반 시나리오 궁금증! [2] 누찅갤로그로 이동합니다. 17.11.30 97 0
18413 일반 냉장고 모드 넘 맘에듬 [2] Plancard갤로그로 이동합니다. 17.11.30 563 0
18412 일반 게임 샀는데 어떻게 시작해야 함? [3] 시월이갤로그로 이동합니다. 17.11.30 132 0
18411 일반 모드작업대 우클릭하면 렉발생하는현상 [1] aa(112.170) 17.11.30 122 0
18410 일반 타이난이 말한 지금까지 개발하고있었다던 컨텐츠가 뭘지 궁금함 [3] 쓰리투원갤로그로 이동합니다. 17.11.30 261 0
18408 일반 림월드가 정복승리가 가능해질려면 [3] P.쏠렌티스갤로그로 이동합니다. 17.11.30 489 0
18407 일반 풍력발전기 앞뒤로 건물이나 산 있어도 상관없는거냐? [1] ㅇㅇ(211.226) 17.11.30 176 0
18406 일반 하코 이번 업뎃하면서 무기 코드 꽤 많이 바꼈나봄? [2] P.쏠렌티스갤로그로 이동합니다. 17.11.30 170 0
18405 일반 모어 트레이더쉽이 걍 개사기모드였네 [1] Plancard갤로그로 이동합니다. 17.11.30 354 0
18404 일반 수경재배로 만들어서 팔기 젤 좋은게 뭐임? [5] (182.211) 17.11.30 245 0
18402 일반 supply & demand는 대체 언제 나올까 ㅇㅇ(183.101) 17.11.30 124 0
18400 일반 식민지기능도 있었으면 좋겠다 [4] Chiral갤로그로 이동합니다. 17.11.30 186 1
18399 일반 지금 상황인데 뭔가 부족한거같기도.. [4] 모하비여행자갤로그로 이동합니다. 17.11.30 223 0
18398 일반 하코 버그 내가 수습해볼려다가 망해서 업데이터 돌리는 중인데 P.쏠렌티스갤로그로 이동합니다. 17.11.30 75 0
18397 일반 곤충군락때문에 내산지플레이는 사실상 불가능아니냐 [3] ㅇㅇ(110.70) 17.11.30 447 0
18396 일반 림잡모드 이거 뭐야? [4] 잭오나인테일갤로그로 이동합니다. 17.11.30 1355 0
18395 일반 근데 연재하기가 좆같은게 [8] 늒네그자체갤로그로 이동합니다. 17.11.30 377 0
18394 일반 이게 총안구 모드임??? [3] ㅇㅇ(111.118) 17.11.30 558 0
18393 일반 워터키 센세...... 그립습니다...... [2] ㅇㅇ(175.223) 17.11.30 386 1
18392 일반 창고 같은거 따로 안만들고 지붕만 쳐서 써도 됨? [1] ㅇㅇ(211.36) 17.11.30 149 0
18391 일반 총안구는 어떤모드에 있는거야? [1] ㅇㅇ(111.118) 17.11.30 201 0
18390 일반 도덕 수치같은게 있으면 어떨까? [6] 부이키카에수갤로그로 이동합니다. 17.11.30 162 0
18389 일반 요즘에 군대에서 조뺑이치니까 림월드 VR하는 기분임ㅋㅋㅋ [6] ㅇㅇ(58.127) 17.11.30 281 0
18388 일반 prison labor처럼 노예로 만들고 노예로 부리는 모드없냐 [1] ㅇㅇ(110.70) 17.11.30 279 0
18387 일반 연재글 보고싶은 사람 vs 연재는 하고싶지만 귀찮은 핫산 의 해결책은 [5] 마더뻐꾹갤로그로 이동합니다. 17.11.30 314 0
18386 일반 전투 결격인새기들 사실 다 구라아니냐 [5] ㅇㅇ(110.70) 17.11.30 364 0
18385 일반 RJW모드 육아도 가능한가? [1] ㅇㅇ(113.192) 17.11.30 541 0
18384 일반 림 뽑기 할때 맨첨엔 이것저것 다 좋은거 뽑을라고 주사위 오지게 돌렸는데 [6] 마더뻐꾹갤로그로 이동합니다. 17.11.30 397 0
18383 일반 림잡 개웃기던데 [3] ㅇㅇ(121.145) 17.11.30 386 0
18382 일반 킬존이 양쪽에 두개있는데 한쪽에만 오는건 무슨이유임? [3] Plancard갤로그로 이동합니다. 17.11.30 463 0
18381 일반 총안구 모드 쓰면 적반격은 하냐? [4] ㅇㅇ(110.70) 17.11.30 247 0
18380 일반 야나 림잡월드가 뭔가 궁금해서 다운드로드 링크 들어가니깐 이거 뜨는데;; [3] ㅇㅇ(113.192) 17.11.30 525 0
18378 일반 요즘은 연재하는 애들이 없단 말이야 [5] 나무아미(110.8) 17.11.30 199 0
18377 일반 rjw쓰는이유 [3] ㄱㄴㄷ(211.176) 17.11.30 339 1
18376 일반 림잡모드 b18에도 돌아가는거임? [1] ㅇㅇ(113.192) 17.11.30 344 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2