• 欢迎!在发帖前请阅读每个板块置顶的版块须知。论坛 QQ 群:931748551
    鼓励大家多多发帖,这里有问必答。论坛左下角可切换明亮 / 黑暗模式哦。

 技术教程 [Tmod1.4+] 模组开发便携手册—新手向(随缘长期更新)

Zennnith

经典
2024/07/07
44
54
18

初衷是让自己写mod方便点(​

写的东西可能有错误,请大佬轻喷​

好用的链接:​

Tmod官方文档

泰拉瑞亚Wiki——所有ID

裙中世界


之前写了个mod,打算开源发出来
QQ20240924210402

因为命名过于中二看着羞耻而暂停开发

本文采用CC BY-NC-SA 4.0开源 上图Mod使用GPL v3.0(GNU General Public License v3)
都可以转载,标下作者就行(
 

ModItem.SetDefaults常用项进行翻译​

C#:
public class awa : ModItem
{
    public override void SetDefaults()
    {
        //就是这个
    }
}
未翻译完全,参照官方文档:
的"公共属性"(Public Attributes)这列

C#:
Item.damage = 10;
// 物品伤害,也许你可以在马桶物品上写这个?

Item.crit = 100;
// 物品暴击率。

Item.width = 40;
// 物品宽度。

Item.height = 40;
// 物品高度。

Item.useTime = 20;
// 物品使用速度,具体可参考Wiki:
// https://terraria.wiki.gg/zh/wiki/使用时间

Item.useAnimation = 20;
// 物品动画时长,参考链接如上。

Item.knockBack = 6.5f;
// 物品击退。

Item.rare = 2;
// 稀有度,参考链接如下:
// https://terraria.wiki.gg/zh/wiki/稀有度
// https://docs.tmodloader.net/docs/stable/class_item_rarity_i_d.html

Item.value = 114514;
// 物品价值(铜币),也影响哥布林重铸价格。比较推荐这种写法,同时写了价值和商店售价:
// Item.value = Item.buyPrice(11,45,14,19); 11铂金45金14银19铜
// 这是具体说明链接 https://docs.tmodloader.net/docs/stable/class_item.html#a0495e4ae68c9b8eef643464e738ca1c0

Item.autoReuse = true;
// 是否可以自动挥舞。

Item.useTurn = true;
// 使用时玩家是否可以转身。

Item.useStyle = ItemUseStyleID.Swing;
// 物品使用方式,参考链接如下:
// https://terraria.wiki.gg/zh/wiki/使用类型_ID

Item.shoot = ProjectileID.JestersArrow;
// 物品发射的弹幕,参考链接如下:  上边儿可以填弹幕id和"内部名称"。
// https://terraria.wiki.gg/zh/wiki/射弹_ID

Item.shootSpeed = 16f;
// 弹幕速度。

Item.mana = 5;
// 使用物品时消耗的法力。

Item.accessory = true;
// 是否为饰品。

Item.consumable = true;
// 是否为消耗品。

Item.noMelee = true;
// 物品"使用"是否造成伤害。  你在弓上设为了ture...不会近战的弓手不是好弓手!

Item.maxStack = 99;
// 最大堆叠数量。

Item.buffType = BuffID.Regeneration;
// 使用该物品时赋予玩家什么增益,参考链接如下:
// https://terraria.wiki.gg/zh/wiki/增益_ID

Item.buffTime = 3600;
// 增益持续时间,单位为游戏帧(60帧=1秒)。

Item.defense = 5;
// 物品防御值,应该让它出现在你的护甲和饰品上。

Item.ammo = AmmoID.Arrow;
// 弹药类型,用于标记远程武器使用的弹药。注意:消耗非"弹药"物品是另一种写法。
//参考链接如下,不要与射弹ID混淆:https://terraria.wiki.gg/zh/wiki/弹药_ID

Item.pick = 50;
// 镐力。https://terraria.wiki.gg/zh/wiki/镐
// 可以同时写多个"力"来达成锤斧 斧钻,但请注意:不要同时写三个。
// 花絮:很早以前有个"Hamdrax"(锤斧钻),因为挖掘判定问题被废弃。

Item.axe = 15;
// 斧力。https://terraria.wiki.gg/zh/wiki/斧头

Item.hammer = 60;
// 锤力。https://terraria.wiki.gg/zh/wiki/锤子

Item.healLife = 100;
// 恢复的生命值,适用于治疗物品。注意:并不会引起"耐药性"。

Item.potion = true;
// 物品使用时会造成"耐药性",并可以"快速治疗"。

Item.healMana = 50;
// 恢复的法力值,适用于魔法药。

Item.master = true;
// 为物品添加"大师模式"和对应"稀有度"——此稀有度显示优先级在Item.rare之上。

Item.masterOnly = true;
// 只在大师模式(或更高)中可用的物品。

Item.expert = true;
// 为物品添加"专家模式"和对应"稀有度"——此稀有度显示优先级在Item.rare之上。

Item.expertOnly = true;
// 只在专家模式(或更高)中可用的物品。

Item.notAmmo = true;
// 部分弹药行为失效:工具提示无"弹药"字样,不会自动进入弹药栏。常用于"钱币""麦芽酒""沙块"。

Item.uniqueStack = true;
// 玩家物品栏中持有此物品,则阻止拾取同类型物品。常见于任务鱼。

Item.noUseGraphic = true;
// 使用物品时隐藏贴图。  如果你在剑上使用这个...

Item.lifeRegen = 5;
// 生命恢复速度,与Player.lifeRegen相加。

Item.noWet = true;
// 当玩家潮湿时不会绘制此物品。常见于八音盒。

Item.manaIncrease = 20;
// 存疑,可能为增加最大法力值。

Item.channel = true;
// 用于物品在按住攻击时(蓄力)具有特殊效果的物品。

Item.createTile = TileID.WorkBenches;
// 物品可放置为指定的图格。
// 可以使用ID、"内部名称"等。放置本模组物品使用 ModContent.TileType<你的图格的类名>
// 参考链接如下: https://terraria.wiki.gg/zh/wiki/图格_ID
// 跨模组的以后再说(

Item.createWall = WallID.Glass;
// 与Item.createTile差不多,只不过放置本模组物品使用 ModContent.ItemType<你的墙的类名>
// 参考链接如下:https://terraria.wiki.gg/zh/wiki/墙_ID
 

一个跨模组合成写法​

(mod得整理下注释再发出来)
这个写法不算好,将就用用(
强依赖的话有更好的写法,不需要套个if
物品尽量不要使用数字ID!
QQ20240924215459

C#:
 //合成完整示例
public override void AddRecipes()
 {
     if (ModLoader.TryGetMod("eventhorizon", out Mod eventhorizon) &&
       eventhorizon.TryFind<ModItem>("MalachiteBullet", out ModItem MalachiteBullet) &&
       eventhorizon.TryFind<ModItem>("Malakill", out ModItem Malakill) &&
       eventhorizon.TryFind<ModItem>("Malachite", out ModItem Malachite))
      {
         Recipe recipe = CreateRecipe();
         recipe.AddIngredient(Malakill.Type, 1);
         recipe.AddIngredient(324);//非法枪械部件
         recipe.AddIngredient(ModContent.ItemType<NirvanaCore>(), 1);
         recipe.AddIngredient(Malachite.Type, 10);
         recipe.AddIngredient(MalachiteBullet.Type, 999);
         recipe.AddTile(133);//新矿熔炉
         //最好改为ItemID.xxx
         //https://terraria.wiki.gg/zh/wiki/物品_ID
         recipe.Register();
     }
 }
移植代码需要改动几个地方:
C#:
 public override void AddRecipes()
 {
     if (ModLoader.TryGetMod("这个是mod名", out Mod 这个是mod名) &&
       这个是mod名.TryFind<ModItem>("物品名", out ModItem 物品名) &&
       这个是mod名.TryFind<ModItem>("第二个物品名", out ModItem 第二个物品名))
      {
         Recipe recipe = CreateRecipe();
         recipe.AddIngredient(物品名.Type, 1);
         recipe.AddIngredient(324);//非法枪械部件
         //最好改为ItemID.xxx
         //https://terraria.wiki.gg/zh/wiki/物品_ID
         recipe.AddIngredient(ModContent.ItemType<这是你自己mod的物品名>(), 1);
         recipe.AddIngredient(第二个物品名.Type, 10);
         recipe.AddIngredient(第三个物品名.Type, 999);
         recipe.AddTile(133);//新矿熔炉
         //同上,TileID.xxx
         //https://terraria.wiki.gg/zh/wiki/图格_ID
         recipe.Register();
     }
     else
     {
         //在这写不是跨模组的合成
     }
 }

mod名和物品名怎么找?​

QQ20240924220006
QQ20240924220012

https://tr.monika.love/threads/215/



同理,你可以跨模组整射弹,物块什么的​

只不过 TryFind<ModItem> 要改成TryFind<ModProjectile> (射弹)​

TryFind<ModDust> (灰尘(bushi )​

TryFind<ModBuff> (buff)​

 

创意工坊页面图床图片失效解决办法​

如图,经常出现图片莫名其妙出不来
QQ20241015223032


解决办法:在创意工坊创建空物品来存放图片
(把steam当图床用)
1.上传个空Mod并将创意工坊页面设置为隐藏
QQ20241015223603

点这个把你的图片上传进去
QQ20241015223507

得到这个
QQ20241015223139

进浏览器右键图片 "在新标签页中打开图像",对链接进行修改
QQ20241015223155

蓝色这些全部删掉
最终效果
 
  • 点赞
反馈: 忽望