PatchOperation의 종류 - solaris0115/RimWorldModGuide GitHub Wiki

XML 데이터

XML에는 기본적으로 노드, 애트리뷰트가 있으며 림월드의 정의데이터 또한 XML을 바탕으로 두기에 각각의 두가지에 대한 패치작업이 있습니다. 그리고 추가적으로 복잡한 패치 작업을 위한 명령들이 존재합니다.

<ThingDef Name="BaseBullet" Abstract="True">
	<category>Projectile</category>
	<tickerType>Normal</tickerType>
	<altitudeLayer>Projectile</altitudeLayer>
	<thingClass>Bullet</thingClass>
	<label>bullet</label>
	<useHitPoints>False</useHitPoints>
	<neverMultiSelect>True</neverMultiSelect>
	<graphicData>
		<shaderType>Transparent</shaderType>
	</graphicData>
</ThingDef>

ThingDef, category, tickerType, altitudeLayer, thingClass과 같이 <노드명>을 포함하는 것이 노드라고 말합니다.
Name, Abstract과 같이 각 노드의 태그내에 적힌 요소를 애트리뷰트라고 합니다.
True, Projectile, Normal, Bullet, 0.4, (1,5)처럼 노드사이, 애트리뷰트에 존재하는 이것을 이라고 합니다.

각각의 값들은 실제 코드상에서 존재하는 노드의 데이터형에 맞춰야 하며 이것이 맞지
않을 경우 게임을 로드했을때 에러를 출력하게 됩니다.
만약 BaseBullet과 같이 모든 투사체의 기본이 되는 데이터가 오류를 일으키면 이후 모든 투사체 데이터들이 생성되지 않습니다.

이는 다소 복잡한 부분이니 패치 명령부분에서는 다루지 않도록 하겠습니다.

패치 명령 구조

패치 명령은 기본적으로 아래와 같은 구조를 갖습니다.

<?xml version="1.0" encoding="utf-8" ?>
<Patch>
<Operation Class="패치명령 클래스이름">
	<xpath>*/ExampleDef[defName="Example"]/exampleList</xpath> 패치할 데이터의 경로
	<value>      패치할 내용
		<li>Foo</li> 내용1
		<li>Bar</li> 내용2
	</value>
</Operation>
</Patch>

*는 모든 대상을 확인하고자 할때 사용합니다.
만약 */*[defName="abc"] 라고 경로를 지정하면 어떤경로의/어떤정의던 defName이 abc인 대상을 찾습니다.

[~~~]사이의 내용은 대상을 검색하고자 할때 아래 노드의 정보로 검색해 사용합니다.
만약 */ThingDef[thingClass="Building"]이라고 한다면 thingClass를 빌딩으로 갖는 모든 건설형 정의파일이 패치의 대상이 됩니다.

만약 복수의 정의내용을 선택하고 싶으시면 다음과 같이 작성하면 됩니다.
[defName="ShortBow" or defName="GreatBow" or defName="Revolver"]
그러면 패치내용은 단궁,대궁,리볼버 각각에 적용될 것 입니다.

만약 애트리뷰트를 검색하고 싶다면 앞에 @를 붙여주면 됩니다.
*/ThingDef[@Name="BaseBullet"]

패치 명령 클래스이름은 다음과 같습니다.

  • 노드
    • PatchOperationAdd 데이터 추가
    • PatchOperationInsert 특정 데이터 사이 삽입
    • PatchOperationRemove 특정 데이터 삭제
    • PatchOperationReplace 특정 데이터 교체
  • 애트리뷰트
    • PatchOperationAttributeAdd
    • PatchOperationAttributeSet
    • PatchOperationAttributeRemove
  • 특수 명령
    • PatchOperationAddModExtension
    • PatchOperationSetName
    • PatchOperationSequence
    • PatchOperationTest
    • PatchOperationFindMod
⚠️ **GitHub.com Fallback** ⚠️