C# 프로그래밍 - solaris0115/RimWorldModGuide GitHub Wiki
C# 프로그래밍
이 챕터에서는 본격적인 C#프로그래밍에 대해 다룹니다. 기능을 만들고 새로운 아이템에 대한 클래스를 만들 것입니다.
새 프로젝트를 만들면서 Class1.cs가 이미 존재 하겠지만 상단에서 프로젝트>새 항목추가
에서 클래스
를 찾아 추가하실 수 있습니다.
1. 새로운 탄환에 대한 정의 클래스 만들기
새로운 탄환을 정의내리려면 C#으로 작성된 개체의 원형이 필요합니다.
따라서 새로운 탄환에 대한 정의 클래스를 만들어 추가적인 정보들을 집어 넣어줍니다.
이제 새 클래스를 아래와 같이 만들어 줍니다.
using RimWorld;
using Verse;
namespace Plague
{
public class ThingDef_PlagueBullet : ThingDef
{
public float AddHediffChance = 0.05f;
public HediffDef HediffToAdd = HediffDefOf.Plague;
}
}
2. 새로운 탄환 기능을 위한 클래스 만들기
이 클래스는 총알 클래스를 상속받아 총알이 적중시 발동할 기능에 대해서 작성할 것입니다.
새 클래스를 하나 추가한 뒤 아래와 같이 작성해 줍니다.
using RimWorld;
using Verse;
namespace Plague
{
public class Projectile_PlagueBullet : Bullet
{
#region Properties
public ThingDef_PlagueBullet Def
{
get
{
return def as ThingDef_PlagueBullet;
}
}
#endregion Properties
#region Overrides
protected override void Impact(Thing hitThing)
{
base.Impact(hitThing);
if (Def != null && hitThing != null && hitThing is Pawn hitPawn)
{
var rand = Rand.Value;
if (rand <= Def.AddHediffChance)
{
Messages.Message("TST_PlagueBullet_SuccessMessage".Translate(new object[] {
this.launcher.Label, hitPawn.Label
}), MessageTypeDefOf.NeutralEvent);
var plagueOnPawn = hitPawn?.health?.hediffSet?.GetFirstHediffOfDef(Def.HediffToAdd);
var randomSeverity = Rand.Range(0.15f, 0.30f);
if (plagueOnPawn != null)
{
plagueOnPawn.Severity += randomSeverity;
}
else
{
Hediff hediff = HediffMaker.MakeHediff(Def.HediffToAdd, hitPawn, null);
hediff.Severity = randomSeverity;
hitPawn.health.AddHediff(hediff, null, null);
}
}
else
{
MoteMaker.ThrowText(hitThing.PositionHeld.ToVector3(), hitThing.MapHeld, "TST_PlagueBullet_FailureMote".Translate(Def.AddHediffChance), 12f);
}
}
}
#endregion Overrides
}
}
Rimwolrd 혹은 Verse는 만들어야할 새 개체들에 대한 원형과 다양한 기능을 제공해줍니다.
이는 ILSpy
와 같은 디컴파일러를 통해 어떤 정보들이 있는지 찾아봐야 합니다.
네, 매우 귀찮은 작업입니다. 저도 귀찮습니다.
이제 만들어 둔 코드를 Ctrl+Shift+B
를 눌러 빌드 해줍니다.
만약 오류가 있다면 철자나 쉼표, 오탈자등을 찾아봅니다.
다행히도 비주얼 스튜디오는 똑똑해서 오류 메세지와 그 위치를 보여줍니다.
만약 버전이 변경되었거나 가이드 작성자의 멍청함으로 에러가 났다면 이메일 문의나 포럼에 문의를 주세요.
다음: 모드 테스트