soma0sd

코딩 & 과학 & 교육

테라리아 모드번역기 개발 일지: 모드의 필드

반응형

만든 모드가 모드에 간섭해서 무언가를 편집하는 여러 방법이 있습니다. 개발중인 모드는 필드를 활용해 모드에서 번역해야 할 대상들을 찾아내는데 이용했습니다.

모드 참조를 위한 필드

사용법

using Terraria.ModLoader;
using System.Collections.Generic;

(Dictionary<string, 모드요소>)
typeof(Mod)
  .GetField("필드키", BindingFlags.Instance | BindingFlags.NonPublic)
  .GetValue(모드);

필드키에 대응하는 요소를 모드로부터 찾아와 키와 값이 들어있는 사전형(Dictionary)으로 가져옵니다. 각 요소는 필드키에 따라 다른 값을 가집니다.

필드키 목록

전체 필드 키의 목록은 다음과 같습니다.

translations, netID, fileHandle, loading, AsyncLoadQueue, textures, sounds, musics, fonts, effects, recipes, items, globalItems, equipTextures, prefixes, dusts, tiles, globalTiles, tileEntities, walls, globalWalls, projectiles, globalProjectiles, npcs, globalNPCs, players, mountDatas, buffs, globalBuffs, worlds, ugBgStyles, surfaceBgStyles, globalBgStyles, waterStyles, waterfallStyles, globalRecipes

알아낸 몇 가지 필드키와 대응하는 타입은 다음과 같습니다.

  • (ModTranslation) "translations": 국제화를 지원하는 텍스트
  • (ModItem) "items": 모드가 정의한 아이템
  • (ModProjectile) "projectiles": 모드가 정의한 발사체
  • (ModBuff) "buffs": 모드가 정의한 버프와 디버프
  • (ModNPC) "npcs": 모드가 정의한 마을 NPC, 몬스터, 보스 등
  • (ModPrefix) "prefixes": 모드가 정의한 아이템 접두어

방어구 세트효과를 찾아야 할 텐데 어디에 있는지 잘 모르겠군요.

색인 요소 나열하기

찾은 요소를 루프로 하나하나 나열하면서 값을 변경하거나 값을 가져올 수 있습니다.

using System.Reflection;
using System.Collections.Generic;

using Terraria;
using Terraria.ModLoader;
using Terraria.Localization;

foreach (
  KeyValuePair<string, ModItem> Item in
  (Dictionary<string, ModItem>)
  typeof(Mod)
    .GetField("items", BindingFlags.Instance | BindingFlags.NonPublic)
    .GetValue(targetMod)
)
{
    Item.Value; // 아이템(요소)
    Item.Key;   // 아이템 이름(내부)
}

모드에서 새로 정의한 아이템 목록을 가져오는 예시를 만들었습니다. 이 방법으로 칼라미티나 토륨 등과 같이 소스와 리소스가 잠긴 모드에 접근하여 값을 얻거나 수정할 수 있습니다.

반응형
태그:

댓글

End of content

No more pages to load