مرجع API

مرجع كامل لواجهة C# API الخاصة بـ tModLoader مع أمثلة وأفضل الممارسات

مرجع API جميع المستويات v2025.07.3.0

الفئات الأساسية

ModItem

الفئة الأساسية لإنشاء عناصر مخصصة. ارث من ModItem لإنشاء أسلحة وأدوات وإكسسوارات ومواد استهلاكية.

الدوال الرئيسية:

SetDefaults()

تعيين خصائص العنصر مثل الضرر والحجم والندرة وأسلوب الاستخدام

AddRecipes()

تحديد وصفات صناعة العنصر

UseItem(Player player)

سلوك مخصص عند استخدام العنصر

مثال على التنفيذ:

public class MagicSword : ModItem
{
    public override void SetDefaults()
    {
        Item.damage = 80;
        Item.DamageType = DamageClass.Magic;
        Item.mana = 10;
        Item.width = 44;
        Item.height = 44;
        Item.useTime = 25;
        Item.useAnimation = 25;
        Item.useStyle = ItemUseStyleID.Shoot;
        Item.knockBack = 5;
        Item.value = Item.buyPrice(gold: 5);
        Item.rare = ItemRarityID.Pink;
        Item.UseSound = SoundID.Item20;
        Item.autoReuse = true;
        Item.shoot = ProjectileID.MagicMissile;
        Item.shootSpeed = 16f;
    }
}

ModNPC

إنشاء شخصيات NPC مخصصة بما في ذلك الأعداء وشخصيات المدينة والزعماء بذكاء اصطناعي وسلوك مخصص.

الدوال الأساسية:

SetDefaults()

تعيين إحصائيات وخصائص NPC

AI()

منطق سلوك الذكاء الاصطناعي المخصص

ModifyNPCLoot()

تحديد جداول الإسقاط والغنائم

OnKill()

إجراءات عند قتل NPC

public class ExampleEnemy : ModNPC
{
    public override void SetDefaults()
    {
        NPC.width = 40;
        NPC.height = 56;
        NPC.damage = 15;
        NPC.defense = 6;
        NPC.lifeMax = 100;
        NPC.HitSound = SoundID.NPCHit1;
        NPC.DeathSound = SoundID.NPCDeath2;
        NPC.value = 60f;
        NPC.knockBackResist = 0.5f;
        NPC.aiStyle = NPCAIStyleID.Fighter;
        AIType = NPCID.Zombie;
    }
}

أنماط التطوير الشائعة

إنشاء الوصفات

public override void AddRecipes()
{
    Recipe recipe = CreateRecipe();
    recipe.AddIngredient(ItemID.IronBar, 5);
    recipe.AddIngredient(ItemID.Wood, 10);
    recipe.AddIngredient(ModContent.ItemType<CustomItem>(), 1);
    recipe.AddTile(TileID.WorkBenches);
    recipe.AddCondition(Recipe.Condition.InGraveyard);
    recipe.Register();
}

تتم مزامنة الوصفات تلقائياً في اللعب الجماعي وتظهر في متصفحات الوصفات.

المقذوفات المخصصة

public class MagicBolt : ModProjectile
{
    public override void SetDefaults()
    {
        Projectile.width = 16;
        Projectile.height = 16;
        Projectile.friendly = true;
        Projectile.penetrate = 3;
        Projectile.timeLeft = 600;
        Projectile.light = 0.5f;
        Projectile.DamageType = DamageClass.Magic;
    }

    public override void AI()
    {
        // Custom movement and visual effects
        Projectile.rotation += 0.4f;

        if (Main.rand.NextBool(3))
        {
            Dust.NewDust(Projectile.position, Projectile.width,
                        Projectile.height, DustID.Electric);
        }
    }
}

التعديلات العامة

تعديل محتوى اللعبة الموجود باستخدام فئات Global:

public class GlobalItemChanges : GlobalItem
{
    public override void SetStaticDefaults()
    {
        // Modify all items of a specific type
    }

    public override void ModifyTooltips(Item item, List<TooltipLine> tooltips)
    {
        if (item.type == ItemID.TerraBlade)
        {
            tooltips.Add(new TooltipLine(Mod, "CustomTooltip",
                        "Enhanced by YourMod!"));
        }
    }
}

أفضل الممارسات

افعل

  • استخدم ModContent.ItemType<T>() للإشارة إلى العناصر المخصصة
  • نفّذ التحقق من القيم الفارغة بشكل صحيح
  • استخدم أسماء متغيرات وفئات ذات معنى
  • اختبر في بيئة لعب جماعي
  • اتبع اصطلاحات تسمية C#
  • وثّق الكود بتعليقات

لا تفعل

  • لا تكتب معرفات العناصر بشكل ثابت - استخدم الثوابت
  • لا تصل إلى Main.player مباشرة في اللعب الجماعي
  • لا تنسَ التعامل مع الحالات الحدية
  • لا تستخدم عمليات ثقيلة في دوال AI()
  • لا تعدّل محتوى اللعبة الأصلي بدون داعٍ
  • لا تتجاهل تحذيرات المترجم

أدوات ومساعدات مفيدة

دوال المساعدة الشائعة

// Get item type from mod item class
int itemType = ModContent.ItemType<MyCustomItem>();

// Check if mod is loaded
bool calamityLoaded = ModLoader.HasMod("CalamityMod");

// Create dust effects
Dust.NewDust(position, width, height, DustID.Electric);

// Spawn projectiles
Projectile.NewProjectile(source, position, velocity, type, damage, knockback);

// Play sounds
SoundEngine.PlaySound(SoundID.Item1, position);

مساعدات الشبكات

// Send data to server
ModPacket packet = Mod.GetPacket();
packet.Write((byte)MessageType.ExampleMessage);
packet.Write(someData);
packet.Send();

// Handle received packets
public override void HandlePacket(BinaryReader reader, int whoAmI)
{
    MessageType msgType = (MessageType)reader.ReadByte();
    switch (msgType)
    {
        case MessageType.ExampleMessage:
            // Handle message
            break;
    }
}

مصادر خارجية