Basic tModLoader Modding Guide kokr - mikrono/tModLoaderWiki_kr_ko GitHub Wiki


์ด ๊ฐ€์ด๋“œ๊ฐ€ 1.4๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์œ„ํ‚ค ํŽ˜์ด์ง€์˜ ์ด์ „ 1.3 ๋ฒ„์ „์„ ๋ณด๋ ค๋ฉด ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์„ธ์š”.


๊ฐ€์žฅ ๋จผ์ € ํ•ด์•ผ ํ•  ์ผ์€ ์ฝ”๋”ฉ์— ์‚ฌ์šฉํ•  ํ”„๋กœ๊ทธ๋žจ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ ๋˜๋Š” IDE ๋‘ ๊ฐ€์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. binary logic๊ณผ design ๊ฐœ๋…์„ ์™„์ „ํžˆ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฒฝ์šฐ, ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ตํžˆ๊ณ  IDE์˜ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋„๊ตฌ์— ๋ถ€๋‹ด์„ ๋А๋ผ์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์ž‘์—…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—๋Š” **ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(Integrated Development Environment, IDE)**์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. IDE๋Š” ํŠน์ • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(์ €ํฌ์˜ ๊ฒฝ์šฐ C#)๋ฅผ ์œ„ํ•œ ํŽธ๋ฆฌํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋Š” IDE์˜ ๊ตฌ์„ฑ ์š”์†Œ์ผ ๋ฟ์ด๋ฏ€๋กœ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ž‘์—…์„ IDE์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฒซ ๋ฒˆ์งธ ๋ชจ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ€์ด๋“œ ํ•„์š” ์š”์†Œ ๋ฌธ์„œ๋ฅผ ์ฝ๊ณ  ๋”ฐ๋ผ์ฃผ์„ธ์š”.

์ฒซ ๋ฒˆ์งธ ๋ชจ๋“œ ๋งŒ๋“ค๊ธฐ

๋จผ์ € ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ชจ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ tModLoader์šฉ ๋ชจ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ์ต์ˆ™ํ•ด์ง€๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“œ ๊ณจ์กฐ ์ƒ์„ฑํ•˜๊ธฐ

๋จผ์ € tModLoader๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ๋ชจ๋“œ ๊ณจ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. tModLoader๋ฅผ ์—ด๊ณ  "Workshop" ๋ฉ”๋‰ด๋ฅผ ์—ฐ ๋‹ค์Œ "Develop mods" ๋ฉ”๋‰ด๋ฅผ ์—ด๊ณ  "Create Mod" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž…๋ ฅ ์ƒ์ž๋ฅผ ์ฑ„์›๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐ๊ฐ 'TutorialMod', 'Tutorial Mod', 'NewbieModder', 'TutorialSword'๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ "Create" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“œ ์†Œ์Šค ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

๋ชจ๋“œ ๊ณจ์กฐ์˜ ๋‚ด์šฉ

"Develop Mods" ๋ฉ”๋‰ด์—์„œ "Open Sources" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ModSources ํด๋”๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ 'Documents\My Games\Terraria\tModLoader\ModSources'๋กœ ์ด๋™ํ•˜์—ฌ ModSources ํด๋”๋ฅผ ์—ด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“œ์˜ ํด๋”๋ฅผ ์—ด์–ด ๋ด…์‹œ๋‹ค. ๊ฐ€์ด๋“œ๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒฝ์šฐ 'TutorialMod'๋ผ๋Š” ์ด๋ฆ„์˜ ํด๋”๋ฅผ ์—ด์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํด๋”์—๋Š” ๋งŒ๋“ค์–ด์ง„ ๋ชจ๋“œ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋“œ ๊ณจ์กฐ ์ƒ์„ฑ๊ธฐ์— ์˜ํ•ด 8 ๊ฐœ์˜ ๊ธฐ๋ณธ ํŒŒ์ผ์ด ์ถ”๊ฐ€๋˜์–ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค:

  1. [ModName].cs - Mod ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ชจ๋“œ์˜ ์ค‘์‹ฌ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ชจ๋“œ์—๋Š” ํ•˜๋‚˜์˜ Mod ํด๋ž˜์Šค๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ชจ๋“œ์˜ ๊ฒฝ์šฐ ์ด ํŒŒ์ผ์€ ๋Œ€๋ถ€๋ถ„ ๋น„์–ด ์žˆ๊ฒ ์ง€๋งŒ ์ด ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ „์—ญ์ ์ธ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. description.txt - ๋ชจ๋“œ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์œ„ํ•œ ํ…์ŠคํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„์—์„œ ๋ณด๋ ค๋ฉด ๋ชจ๋“œ ๋ฉ”๋‰ด์—์„œ 'More Info' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์„ธ์š”.
  3. build.txt - ๋ชจ๋“œ์˜ ๋ฒ„์ „, ์ž‘์„ฑ์ž ๋ฐ ์™ธ๋ถ€๋ชจ๋“œ๋ช…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ values์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  4. icon.png - ๊ฒŒ์ž„ ๋‚ด์—์„œ ํ‘œ์‹œ๋  80x80 ํฌ๊ธฐ์˜ ์•„์ด์ฝ˜์ž…๋‹ˆ๋‹ค. Steam ์ฐฝ์ž‘๋งˆ๋‹น ์›น์‚ฌ์ดํŠธ์— ๋” ์ƒ์„ธํ•˜๊ฑฐ๋‚˜ ๋” ๋†’์€ ํ•ด์ƒ๋„์˜ icon_workshop.png ๋ฒ„์ „์˜ ์•„์ด์ฝ˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์€ ์ตœ๋Œ€ 512x512๊นŒ์ง€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  5. [ModName].csproj - ๋ชจ๋“œ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์„ค์ •๋œ Visual Studio์šฉ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์€ ๋งค์šฐ ์œ ์šฉํ•˜์ง€๋งŒ ์•ฝ๊ฐ„์˜ ํ•™์Šต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œํ•˜์ง€ ๋งˆ์„ธ์š”.
  6. Properties/launchSettings.json - '[ModName].csproj'์™€ ๊ด€๋ จ๋œ ํŒŒ์ผ๋กœ, ๋””๋ฒ„๊น…์„ ์œ„ํ•œ tModLoader ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๊ฒฝํ—˜์ด ์Œ“์ด๋ฉด ํ•„์š”ํ•ด์งˆ ๊ฒƒ์ด๋ฏ€๋กœ ์ œ๊ฑฐํ•˜์ง€ ๋งˆ์„ธ์š”.
  7. Items/[ItemName].cs - ๊ฐ„๋‹จํ•œ ์†Œ๋“œ ์•„์ดํ…œ์ž…๋‹ˆ๋‹ค. ํ•™์Šตํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ชจ๋“œ์•„์ดํ…œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์˜ˆ์ œ๋กœ ํ™œ์šฉํ•˜์„ธ์š”.
  8. Items/[ItemName].png - ๋Œ€์‘๋˜๋Š” ์Šคํ”„๋ผ์ดํŠธ.

๋ชจ๋“œ ๋นŒ๋“œ ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ

์ด์ œ ๋ชจ๋“œ๋ฅผ ๋นŒ๋“œํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. tModLoader๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  "Workshop" ๋ฉ”๋‰ด๋ฅผ ์—ฐ ๋‹ค์Œ "Develop Mods" ๋ฉ”๋‰ด๋ฅผ ์—ฝ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋งŒ๋“  ๋ชจ๋“œ์˜ ํ•ญ๋ชฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ "Build + Reload" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชจ๋“œ๊ฐ€ ๋ชจ๋“œ ๋ฉ”๋‰ด์— ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์ด์ œ ๊ฒŒ์ž„์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ž‘์—…๋Œ€๋ฅผ ๋งŒ๋“ค๊ณ  10 ๊ฐœ์˜ ํ™ ๋ธ”๋ก์„ ์ฑ„๊ตดํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฒ€์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์™€์šฐ! ๋†€๋ž๋„ค์š”. ํ•˜์ง€๋งŒ 50 ๋Œ€๋ฏธ์ง€๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ฒซ ๋ฒˆ์งธ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Notepad++์—์„œ ModSources\[ModName]\Items\TutorialSword.cs ํŒŒ์ผ์„ ์—ฝ๋‹ˆ๋‹ค. Item.damage = 50; ์ค„์„ ์ฐพ์•„ 50์„ 100์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋•Œ ์žฌ๋ฏธ ์‚ผ์•„ Tooltip.SetDefault("This is a modded sword.");์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐ€์ด๋“œ ํ•„์š” ์กฐ๊ฑด์—์„œ ๋ฐฐ์šด ๋ฌธ๋ฒ•์„ ์—‰๋ง์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”. ์ด์ œ ํŒŒ์ผ์„ ์ €์žฅํ•˜์„ธ์š”! ๋‹ค์Œ์œผ๋กœ ๊ฒŒ์ž„์— ๋“ค์–ด๊ฐ€์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ชจ๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฆฌ๋กœ๋”ฉํ•˜์—ฌ ๊ฒ€์„ ๋‹ค์‹œ ํš๋“ํ•˜์„ธ์š”. ์ƒˆ๋กœ์šด ๋Œ€๋ฏธ์ง€์™€ ์ƒˆ๋กœ์šด ํˆดํŒ์ด ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋นŒ๋“œํ•œ ๋ชจ๋“œ๋Š” [ModName]์ด๋ผ๋Š” .tmod ํŒŒ์ผ์— ํŒจํ‚ค์ง€๋˜์–ด ์ €์žฅ๋˜๋ฉฐ, tModLoader\Mods์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นœ๊ตฌ์—๊ฒŒ ๋ชจ๋“œ๋ฅผ ํ”Œ๋ ˆ์ดํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ๊ฒŒ์‹œํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์ด ํŒŒ์ผ์„ ์นœ๊ตฌ์—๊ฒŒ ๋ณด๋‚ด ๊ฐ™์€ ํด๋”์— ์ €์žฅํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋˜๋Š” ์ฐฝ์ž‘๋งˆ๋‹น์— ๊ฒŒ์‹œํ•˜๊ณ  "์นœ๊ตฌ ์ „์šฉ"์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋‹ค์†Œ ๋น„๊ณต๊ฐœ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์กฐ๊ธˆ ๋” ์‹คํ—˜ํ•˜๊ธฐ

์ด์ œ ๋‹ค๋ฅธ ํ•ญ๋ชฉ ๊ฐ’ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์กฐ๊ธˆ ๋” ์‹คํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•˜๊ณ  ๋นŒ๋“œํ•œ ํ›„ ๋‹ค์‹œ ๋กœ๋“œํ•ด์•ผ ๊ฒŒ์ž„์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„

์ด์ œ ๊ฐ„๋‹จํ•œ ๊ฒ€์œผ๋กœ ๊ฐ„๋‹จํ•œ ๋ชจ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ, ์ด์ œ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์„ ๋ฐฐ์›Œ๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. ์ฒœ์ฒœํžˆ ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ฒƒ์„ ์‹คํ—˜ํ•ด ๋ณด์„ธ์š”. ํฌ๋Ÿผ์ด๋‚˜ ๋””์Šค์ฝ”๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋”์˜ ๋„์›€์„ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ, ์งˆ๋ฌธ์€ ๋ฐ”๋‹๋ผ์— ๊ด€ํ•œ ๊ฒƒ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Molten Fury๊ฐ€ ์–ด๋–ป๊ฒŒ Wooden Arrow๋ฅผ Flaming Arrow๋กœ ๋ฐ”๊พธ๋Š”์ง€ ๊ถ๊ธˆํ•˜๋‹ค๋ฉด, "How does the Molten Fury change the projectile it shoots only when Wooden Arrows are used as ammo?"๋ผ๊ณ  ์งˆ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์งˆ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

๊ณ„์† ์ฝ์œผ๋ฉด์„œ tModLoader์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ๊ณผ ๊ฐœ์„  ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์„ธ์š”.

์–ด๋–ค ํŒŒ์ผ์—์„œ ๋‚ด ๋ชจ๋“œ์˜ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

๋ชจ๋“œ ์ œ์ž‘์ž๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ํ•˜๋Š” ์ผ ์ค‘ ํ•˜๋‚˜๋Š” ์ปค์Šคํ…€ ๋ฌด๊ธฐ๋กœ ์ปค์Šคํ…€ ํˆฌ์‚ฌ์ฒด๋ฅผ ์˜๊ฑฐ๋‚˜ ๋ชจ๋“œ์˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•˜๋Š” ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ModContent.SomethingType ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ "Something"์€ "Item", "Projectile", "NPC" ๋“ฑ์œผ๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ModItem์ด ํŠน์ • ModProjectile์„ ์˜๋„๋ก ํ•˜๋ ค๋ฉด ModItem.SetDefaults ๋ฉ”์„œ๋“œ์— Item.shoot = ModContent.ProjectileType<MyProjectileClassName>();์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋ฐ”๋‹๋ผ ํˆฌ์‚ฌ์ฒด๋ฅผ ๋ฐœ์‚ฌํ•˜๋ ค๋ฉด Item.shoot = ProjectileID.WoodenArrowFriendly; ๋˜๋Š” ์ด์™€ ๋น„์Šทํ•œ ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

tModLoader 'hooks'๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

์ฒซ์งธ, ์—„๋ฐ€ํžˆ ๋งํ•ด ํ›…์€ ํ›…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ํ›…์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 'ํ›…(hook)'์€ ๋ชจ๋”๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ํ›…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋Š” ์ž‘์—… ์ค‘์ธ ํด๋ž˜์Šค์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ๋“œ(Mod) ํด๋ž˜์Šค์—๋Š” ๋ชจ๋“œ ํด๋ž˜์Šค ์ „์šฉ ํ•จ์ˆ˜์ธ **Load Hook**์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋Š” ๋ชจ๋‘ 'virtual'์ด๋ฉฐ, ์ด๋Š” ํ•จ์ˆ˜๊ฐ€ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ˜„์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋”๊ฐ€ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ›…์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํ›…์„ _๋ฎ์–ด์”Œ์šด๋‹ค_๋Š” ์˜๋ฏธ์ด๋ฉฐ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ virtual์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ override๋กœ ๋Œ€์ฒด๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. virtual (๋ถ€๋ถ„์ ์ธ)๊ตฌํ˜„์ด ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋˜๋ฏ€๋กœ ํ•ด๋‹น ๊ตฌํ˜„์€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ํ›…์˜ ํ‘œ์ค€ ๊ตฌํ˜„์„ ๋ณด๋ ค๋ฉด **์†Œ์Šค ๋ฌธ์„œ**๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ›…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“œ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ›…์€ ๊ฒŒ์ž„์˜ ์—…๋ฐ์ดํŠธ ๋ฃจํ”„์—์„œ ์ ์ ˆํ•œ ์‹œ์ ์— "ํ˜ธ์ถœ(Called)"๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ModItem.Shoot๋ผ๋Š” ํ›…์ด ์žˆ๋Š”๋ฐ, ์ด ํ›…์€ ๊ฒŒ์ž„์—์„œ ๋ฌด๊ธฐ ์•„์ดํ…œ์ด ๋ฐœ์‚ฌ์ฒด๋ฅผ ๋ฐœ์‚ฌํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฒฐ์ •ํ•  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋”๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ "ํ›…"์„ "์˜ค๋ฒ„๋ผ์ด๋“œ"ํ•˜๋ฉด ๋ฌด๊ธฐ ์•„์ดํ…œ์ด ๋ฐœ์‚ฌ์ฒด๋ฅผ ๋ฐœ์‚ฌํ•  ๋•Œ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ›… ์‚ฌ์šฉ ์˜ˆ์ œ

ํœด๋Œ€ํฐ ์•„์ดํ…œ์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ์•„์ดํ…œ์ด ์ธ๋ฒคํ† ๋ฆฌ์— ์žˆ๋Š” ๋™์•ˆ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ๋จผ์ € ์†Œ์Šค ๋ฌธ์„œ๋ฅผ ์—ด๊ณ  ModItem ๋ฌธ์„œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•˜์œผ๋ฉด ctrl-f๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จ๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ 'inventory'๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฝ์œผ๋ฉด 'UpdateInventory' ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์ด "ํ›…"์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์•„์ดํ…œ์ด ์ธ๋ฒคํ† ๋ฆฌ์— ์žˆ์„ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ›…์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด method signature๋ฅผ ModItem ํด๋ž˜์Šค์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

virtual void Terraria.ModLoader.ModItem.UpdateInventory (Player player)	

์ƒ๊ธฐ๋œ ๋‚ด์šฉ์„ ๊ธฐ์–ตํ•˜์‹ ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” "virtual"์„ "override"๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ค„์ด๋Š” ๊ฒƒ๋„ ์žŠ์ง€ ๋ง์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ModItem ํด๋ž˜์Šค์— ์žˆ์œผ๋ฏ€๋กœ "Terraria.ModLoader.ModItem."์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด Player ํด๋ž˜์Šค๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ปดํ“จํ„ฐ์— ์•Œ๋ ค์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. .cs ํŒŒ์ผ ์ƒ๋‹จ์— using Terraria;๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ด๊ณ  ๋‹ซ๋Š” ์ค‘๊ด„ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งˆ์นจ๋‚ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ›…์ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค:

override void UpdateInventory (Player player)
{
    // ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
}

Visual Studio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ›…์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋Š” ๊ณผ์ •์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ ModItem ํด๋ž˜์Šค์— ํ›…์ด ์ƒ๊ฒผ์œผ๋‹ˆ ๊ทธ ์•ˆ์— ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋‹ฌ์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ํšจ๊ณผ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ExampleMod์™€ ๊ณ ๊ธ‰ ๋ฐ”๋‹๋ผ ์ฝ”๋“œ ์ ์šฉ ๊ฐ€์ด๋“œ๋Š” ์‹คํ—˜ํ•  ์œ ์‚ฌํ•œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธ๋ฑ์Šค์™€ ํƒ€์ž…

์ •์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํฐ ๊ฐœ๋…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ˆ˜์˜ ์ด ๋‘ ๊ฐ€์ง€ ์šฉ๋„๋Š” ์‹ ๊ทœ ๋ชจ๋”๋“ค์ด ์‹ค์ˆ˜๋กœ ํ˜ผ๋™ํ•˜์—ฌ ์ปดํŒŒ์ผ์€ ๋˜์ง€๋งŒ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…Œ๋ผ๋ฆฌ์•„์—์„œ ๋ชจ๋“  ์ฝ˜ํ…์ธ ์—๋Š” 'Type'์ด๋ผ๋Š” ๊ณ ์œ  ์‹๋ณ„์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒŒ์ž„์—์„œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋“ค์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Shuriken ํˆฌ์‚ฌ์ฒด์˜ ํƒ€์ž…์€ ์ˆซ์ž 3์ž…๋‹ˆ๋‹ค. ํˆฌ์‚ฌ์ฒด 'Type'์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์œ ํ˜•์˜ ํˆฌ์‚ฌ์ฒด์—๋งŒ ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, GlobalProjectile.OnHitNPC ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด if(projectile.type == ProjectileID.Shuriken)๋ฅผ ํ™•์ธํ•œ ๋‹ค์Œ NPC์— ๋””๋ฒ„ํ”„๋ฅผ ์ ์šฉํ•˜๋Š” ๋“ฑ ์ˆ˜๋ฆฌ๊ฒ€ ๊ด€๋ จ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ๋ผ๋ฆฌ์•„์˜ Item, NPC, Projectile, Dust ๋“ฑ ๋‹ค์–‘ํ•œ ์ฝ˜ํ…์ธ ๋Š” ๋ชจ๋‘ Type ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๊ฐœ๋…์€ Index์ž…๋‹ˆ๋‹ค. ํ…Œ๋ผ๋ฆฌ์•„์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์›”๋“œ์˜ ๋ชจ๋“  ํ™œ์„ฑ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Main.projectile[] ๋ฐฐ์—ด์€ ํ˜„์žฌ ๊ฒŒ์ž„ ์›”๋“œ์— ์žˆ๋Š” ๋ชจ๋“  ํˆฌ์‚ฌ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ฐ Projectile์€ ํ•ด๋‹น ๋ฐฐ์—ด ๋‚ด์—์„œ whoAmI ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ์ธ๋ฑ์Šค๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€์ž…๊ณผ ์ธ๋ฑ์Šค๋Š” ๋ชจ๋‘ ์ •์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๊ทœ ๋ชจ๋”๊ฐ€ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ํฐ ์‹ค์ˆ˜๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Projectile projectile = Main.projectile[ProjectileID.Shuriken]์ด ํ™œ์„ฑํ™”๋œ ์ˆ˜๋ฆฌ๊ฒ€ ๋ฐœ์‚ฌ์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์žˆ๋Š” ํˆฌ์‚ฌ์ฒด๋ผ๋ฉด ๋ญ๋“  ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋”๋Š” ๋‹ค์–‘ํ•œ ๊ฐ€์ด๋“œ์™€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด 'Type'๊ณผ 'Index'์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋‹ค์ด์–ด๊ทธ๋žจ์€ ์ด ์ ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด Type๊ณผ Index๊ฐ€ ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ž„์„ ๋ณด์—ฌ์ฃผ๋ฉด์„œ ๋ฐฐ์—ด์— ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค:
ProjectileArrayExplaination

๋ชจ๋“œ ํด๋ž˜์Šค๋Š” ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋‚˜์š”?

tModLoader๋Š” ์ž์‹ ๋งŒ์˜ ๋ชจ๋“œ ์ฝ˜ํ…์ธ ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 'class derivation' ๋˜๋Š” 'class inheritance'์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์‹ ๋งŒ์˜ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜์ž๋ฉด, ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋ž˜์Šค๊ฐ€ ์ €ํฌ์˜ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ฌ๋Ÿฌ๋ถ„์˜ ์•„์ดํ…œ์€ ModItem์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค: MyItemClass : ModItem, ์—ฌ๊ธฐ์„œ : ModItem์€ Terraria.ModLoader ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์žˆ๋Š” ModItem ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•˜์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. (Java์—์„œ ์˜จ ๊ฒฝ์šฐ extends ModItem๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.) ์ฆ‰, SetDefaults ํ›…๊ณผ ๊ฐ™์ด ModItem์„ ์œ„ํ•ด ๋งŒ๋“  ๋ชจ๋“  ๊ฒƒ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ํŒŒ์ƒ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ModItem์€ ModProjectile ๋“ฑ์ด ๋  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”.

์˜ˆ์ œ ๋ชจ๋“œ(Example Mod)์—์„œ ๋ฐฐ์šฐ๊ธฐ

์˜ˆ์ œ ๋ชจ๋“œ๋Š” ๋‹ค์–‘ํ•œ ๋ชจ๋”ฉ ๊ธฐ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด tModLoader ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ž ์‹œ ๋™์•ˆ ์‚ฌ์šฉํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. Cheat Sheet์™€ ๊ฐ™์€ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์•„์ดํ…œ์„ ์ƒ์„ฑํ•˜๊ณ  ๋ฐฐ์šฐ๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ์„ ์ฐพ์•„๋ณด์„ธ์š”. ๋‹ค์Œ์œผ๋กœ ์˜ˆ์ œ ๋ชจ๋“œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. 1.4-stable.zip์„ ๋‹ค์šด๋กœ๋“œํ•œ ๋‹ค์Œ ๊ทธ ์•ˆ์— ์žˆ๋Š” ์˜ˆ์ œ ๋ชจ๋“œ ํด๋”๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํด๋”๋ฅผ ์—ด๊ณ  ModSources ํด๋” ๋‚ด์˜ TutorialMod ์˜†์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ด€์‹ฌ์žˆ๋Š” ๊ฒƒ์„ ์ฐพ์•„์„œ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์‹ญ์‹œ์˜ค. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์› ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์˜ˆ์ œ ๋ชจ๋“œ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฒŒ์ž„์—์„œ ์˜ˆ์ œ ๋ชจ๋“œ๋ฅผ ๋นŒ๋“œ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ ๋ชจ๋“œ ๋˜๋Š” ํŠœํ† ๋ฆฌ์–ผ ๋ชจ๋“œ์—์„œ ๊ฐ„๋‹จํ•œ ๊ฒƒ๋“ค์„ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ชจ๋“œ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์— ์ต์ˆ™ํ•ด์กŒ์„ ๊ฒ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ๊ฐ€์ด๋“œ๋‚˜ ๋„์›€๋ง์„ ์ž์œ ๋กญ๊ฒŒ ์‚ดํŽด๋ณด์„ธ์š”.

๋‹จ๊ณ„๋ณ„ ํ•™์Šต

๋ชจ๋”ฉ์ด ์ฒ˜์Œ์ด๋ผ๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด์™€ C# ์–ธ์–ด๋„ ์ฒ˜์Œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‚œ์ด๋„๋ฅผ ๋†’์—ฌ๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์œ„์™€ ๊ฐ™์ด ๊ฒ€์„ ํœ˜๋‘˜๋Ÿฌ ํ”ผํ•ด๋ฅผ ์ž…ํž ์ˆ˜ ์žˆ๋Š” ๊ฒ€์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ณ , ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ฒƒ์€ ์™„์ „ํ•œ ๋ณด์Šค์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ œ์•ˆ์ž…๋‹ˆ๋‹ค:

  • ๋จผ์ €, tModLoader์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์ˆ™์ง€ํ•˜์„ธ์š”. 'tModLoader 'hooks'๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?' ์„น์…˜์„ ์ฝ์–ด๋ณด์„ธ์š”.
  • ๋‹ค์Œ์œผ๋กœ, ํŠœํ† ๋ฆฌ์–ผ ๊ฒ€์„ ์ˆ˜์ •ํ•˜์—ฌ ๋” ๋งŽ์€ ๋ฐ๋ฏธ์ง€, ๋” ๋งŽ์€ ๋„‰๋ฐฑ, ๋” ๋น ๋ฅธ ์†๋„ ๋“ฑ์„ ์ ์šฉํ•ด๋ณด์„ธ์š”. 'Item.shoot'๋ฅผ ์„ค์ •ํ•˜์—ฌ ํˆฌ์‚ฌ์ฒด๋ฅผ ์˜๊ฒŒ ํ•˜๊ณ , 'Item.shootSpeed'๋กœ ์†๋„๋ฅผ ์ œ์–ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋”ฉ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ฉฐ C#์ด๋ฉฐ ๋ฐ”๋‹๋ผ ์ฝ”๋“œ์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌด๋ฃŒ ์˜จ๋ผ์ธ ๊ฐ•์ขŒ๋ฅผ ํ†ตํ•ด C# ์–ธ์–ด ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์ฒด๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋กœ๋Š” ๋น ๋ฅธ ํ…Œ๋ผ๋ฆฌ์•„ ์ „์šฉ C# ํฌ๋ž˜์‹œ ์ฝ”์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋‹๋ผ ์ฝ”๋“œ์— ๋” ์ต์ˆ™ํ•ด์ง€๋ ค๋ฉด ๊ณ ๊ธ‰ ๋ฐ”๋‹๋ผ ์ฝ”๋“œ ์ ์šฉ ๊ฐ€์ด๋“œ๋ฅผ ์ด์šฉํ•˜์„ธ์š”.
  • ์ž์‹ ๊ฐ์ด ์ƒ๊ธฐ๋ฉด ์ง์ ‘ ๋ฐœ์‚ฌ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๊ฒ€๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•ด ๋ณด์„ธ์š”.
  • ๋” ์ž์‹ ๊ฐ์ด ์ƒ๊ธฐ๋ฉด ์  NPC๋ฅผ ๋งŒ๋“œ๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์‹œ๋„๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

**๋Œ€๋ถ€๋ถ„์˜ ๋ชจ๋”๋“ค์ด ์–ด๋ ต๊ฒŒ ์—ฌ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€๊ฐ€ ์žˆ์œผ๋‹ˆ, ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์‹œ๋„ํ•˜๊ธฐ ์ „์— ์‰ฌ์šด ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • ์™„์ „ํ•œ ๋ณด์Šค
  • ํฌ๊ด„์ ์ธ UI
  • ์ฝ”๋“œ ์ถ”์ƒํ™”
  • ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ชจ๋”ฉ ์ •๋ณด ๋ฐ ์ƒํ˜ธ ์ž‘์šฉ
  • ํˆฌ์‚ฌ์ฒด, NPC, ์• ์™„๋™๋ฌผ ๋“ฑ์„ ์œ„ํ•œ ์™„์ „ํžˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•๋œ AI... ๋“ฑ

์ฒœ์ฒœํžˆ ๋ฐฐ์šฐ๊ธฐ

๋” ๋‚˜์€ ๋ชจ๋”๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„ , ์ด ์œ„ํ‚ค์ž…๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€์˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์œ„ํ‚ค ๋ฉ”๋‰ด์—๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํŠœํ† ๋ฆฌ์–ผ๊ณผ ๊ฐ€์ด๋“œ์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ํŠœํ† ๋ฆฌ์–ผ์€ ๊ฐ€์žฅ ์‰ฌ์šด ๊ธฐ๋ณธ๋ถ€ํ„ฐ ๊ฐ€์žฅ ์–ด๋ ค์šด ์ „๋ฌธ๊ฐ€๊นŒ์ง€ ๋‚œ์ด๋„์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์ •๋ณด ์ถœ์ฒ˜๋Š” TCF์˜ ๋ชจ๋”ฉ ์„น์…˜์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๋ชจ๋”๋“ค์ด ํ‹ฐ๋ชจ๋“œ๋กœ๋” ๋””์Šค์ฝ”๋“œ์—์„œ ์„œ๋กœ ํ˜‘๋ ฅํ•˜๊ณ  ์งˆ๋ฌธํ•˜๊ณ  ์žˆ์œผ๋‹ˆ, ์–ด๋ ค์šด ์ ์ด ์žˆ๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹  ๋ถ„๋“ค์€ ๊ผญ ๋ฐฉ๋ฌธํ•ด ์ฃผ์„ธ์š”! ๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด ์œ„ํ‚ค์˜ ํ™ˆํŽ˜์ด์ง€์—์„œ ๋‹ค์–‘ํ•œ ์œ ์šฉํ•œ ๋„๊ตฌ์™€ ๊ฐ€์ด๋“œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋”ฉ ํŒ ๋ฐ ๊ฐ€์ด๋“œ๋ผ์ธ

์ด๋ฆ„ ์ง€์ • ๊ทœ์น™(Naming convention)

๋‚ด๋ถ€ ์ด๋ฆ„์€ ๊ณต๋ฐฑ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, 'My Super Sword'๋Š” ๊ณต๋ฐฑ ์—†์ด ์ด๋ฆ„์„ ์ง€์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ๊ณต๋ฐฑ์„ ์ƒ๋žตํ•œ MySuperSword๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ, My_Super_Sword๋„ ๊ฐ€๋” ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์ž๋ฅผ 'ํŒŒ์Šค์นผ ์ผ€์ด์Šค(pascal case)'๋ผ๊ณ  ํ•˜๊ณ  ํ›„์ž๋ฅผ '์Šค๋„ค์ดํฌ ์ผ€์ด์Šค(snake case)'๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์งง๊ณ  ์„ค๋ช…์ ์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ๊ฒ€์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์ด๋ฆ„์— 'Sword'์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ž‘๋ช… ๊ทœ์น™์€ ์ฃผ๋กœ ๋ˆ„๊ตฌ์™€ ํ•จ๊ป˜/๋ˆ„๊ตฌ๋ฅผ ์œ„ํ•ด ์ผํ•˜๋Š”์ง€(๊ณ ์šฉ๋œ ๊ฒฝ์šฐ ๋“ฑ)์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ํ˜ผ์ž์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐœ์ธ ์ทจํ–ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ '์นด๋ฉœ ์ผ€์ด์Šค(camel case)'๋Š” 'ํŒŒ์Šค์นผ ์ผ€์ด์Šค'์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ์นด๋ฉœ ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ ์ฒซ ๊ธ€์ž๋Š” ์†Œ๋ฌธ์ž ๋˜๋Š” ๋Œ€๋ฌธ์ž์ด๊ณ  ๋’ค์ด์–ด ์—ฐ๊ฒฐ๋˜๋Š” ๋‹จ์–ด(์˜ˆ: backColor, timeUtc)๋Š” ๋Œ€๋ฌธ์ž๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ณ  ์ฒด๊ณ„์ ์œผ๋กœ ์œ ์ง€ํ•˜๊ธฐ

์ด๊ฒƒ์€ ๊ณ ๊ธ‰ ์ฃผ์ œ(๋””์ž์ธ ํŒจํ„ด์˜ ์ผ๋ถ€๋กœ ๋‚˜์ค‘์— ์ „๋ฌธ๊ฐ€ ํŠœํ† ๋ฆฌ์–ผ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Œ)์ด์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฝ”๋“œ ์ถ”์ƒํ™” ๊ฐ€์ด๋“œ์—์„œ ํ™•์ธํ•˜์„ธ์š”. ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•ด ์ด ํŒ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์™„๋ฃŒํ•œ ํ›„์—๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๋ชจ๋“  ๊ณณ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”. ์ด์ œ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•œ์ง€ ๋ฌผ์–ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ์ „์šฉ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์ •ํ•˜์„ธ์š”. ๋‹ค์Œ์œผ๋กœ, ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ ๋กœ์ง์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ณ ์œ ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ํ•ด๋‹น ์ฝ”๋“œ ๋ถ€๋ถ„์ด ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์šฉํ•œ ์„ค๋ช… ์ด๋ฆ„(์ด์ „ ํŒ ์ฐธ์กฐ)์„ ์ œ๊ณตํ•˜์„ธ์š”. ๋‹ค์Œ์€ ์ฝ”๋“œ ์ถ”์ƒํ™”์˜ ์ผ๋ถ€์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์š”์•ฝ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ์— ์ฃผ์„ ๋‹ฌ๊ธฐ

์ฝ”๋“œ๊ฐ€ ์–ด๋–ค ์ž‘์—…์„ ํ•˜๋Š”์ง€ ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž์‹ ์ด๋‚˜ ๋‹ค๋ฅธ ๋ชจ๋”๋ฅผ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฅผ ๋‚จ๊ธฐ๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด // ์ด๊ฒƒ์€ ์ฃผ์„์ž…๋‹ˆ๋‹ค์™€ ๊ฐ™์ด ํ•œ ์ค„๋กœ ์ฃผ์„์„ ๋‹ฌ๊ฑฐ๋‚˜, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ „์ฒด ์ฃผ์„ ๋ธ”๋ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

/*
 * ์ด๊ฒƒ์€ ์ฃผ์„ ๋ธ”๋ก์ž…๋‹ˆ๋‹ค
 * ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์žˆ์Šต๋‹ˆ๋‹ค!
*/

์ดˆ๋ณด์ž์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋‚ด์šฉ์ด๋ผ๋„ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์žฅ๊ธฐ์ ์œผ๋กœ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๋‹ฌ ํ›„์— ์ฝ”๋”ฉ์„ ๋‹ค์‹œ ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ™๋ จ๋œ ๋ชจ๋”๋ผ๋ฉด ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ตœ๋Œ€ํ•œ ์ ๊ฒŒ ์‚ฌ์šฉํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ณผ์ œ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์–ธ์–ด๊ฐ€ ์ฃผ์„์— :: ๋ฐ #๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, C#์˜ ๊ฒฝ์šฐ ์œ„์— ํ‘œ์‹œ๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

๋ชจ๋“œ ๊ฒŒ์‹œํ•˜๊ธฐ

๋ชจ๋“œ๊ฐ€ ์ž‘๋™ ์ƒํƒœ๊ฐ€ ๋˜๋ฉด Steam ์ฐฝ์ž‘๋งˆ๋‹น์— ๋ชจ๋“œ๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  tModLoader ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“œ๋ฅผ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฐฝ์ž‘๋งˆ๋‹น ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.