纱夜
本帖最后由 阴阳师元素祭祀 于 2020-5-21 09:28 编辑

概要
本教程不教基础编程问题
如有需要
请找丛林森林蝙蝠

本文全是



如果有基础
你也可以跳过本教程
直接前往https://github.com/tModLoader/tModLoader/wiki

本教程所用代码完整开源目录
https://github.com/euOnmyoji/MCBBSCraft


教程环境配置
游戏本体:steam的泰拉瑞亚
IDE:Rider
操作系统:Windows 10
tModLoader的steam商店: https://store.steampowered.com/app/1281930/tModLoader/
以及C#和.net framework相关资源


创建Mod
启动tModLoader
加载完毕相关信息之后
在主菜单右下角
Copyright @ 2017 Re-Logic

的下方
进入开发者模式
之后进入Mod Sources界面

点击Create Mod
教程使用的版本需要四个参数
在创建完成之后
点Open Sources
并打开Rider (或自己的IDE)

导入project
使用Autoload
mod所创建的物品等在默认情况会自动加载到游戏中
如果是需要资源的东西
则会自动加载与命名空间和类名有关的资源文件
如果需要关闭某个东西的自动加载
  1.         public override bool Autoload(ref string name, ref string texture) {
  2.             texture = texture.Replace("WarnedBuff", "WarningCard");
  3.             return true;
  4.         }
复制代码
复写该方法并返回false
同时可以修改texture或者name来修改名字/资源文件路径

编译并测试Mod

编译加载可能的常见问题


创建自己的物品并使用Projectile

创建mod时自带一个物品示例当然那并不能满足狂热的混乱厨
我们需要创建一个混乱的混乱物品
使用时像枪一样发射好人卡
先写一个好人卡的Projectile
  1.     public class WarningCard : ModProjectile {
  2.         public override void SetStaticDefaults() {
  3.             DisplayName.SetDefault("Give warnings to them!");
  4.         }

  5.         public override void SetDefaults() {
  6.             projectile.arrow = true;
  7.             projectile.width = 21;
  8.             projectile.height = 17;
  9.             projectile.aiStyle = 1;
  10.             projectile.friendly = true;
  11.             projectile.ranged = true;
  12.             aiType = ProjectileID.WoodenArrowFriendly;
  13.         }

  14.     }
复制代码
其中aiStyle和aiType 是使用游戏中已有的逻辑来执行相关的飞行/攻击逻辑
关于游戏内物品对应的aiType和aiStyle
可以在附录中查看某表 或科学上网前往{..}查询

之后修改默认的物品示例
  1.             item.shoot = ModContent.ProjectileType<WarningCard>();
  2.             item.shootSpeed = 10;
复制代码
//ModContent.ProjectileType<..>()为以前过时的mod.ProjectileType<...>()
同时改变一下好人卡的射击速度
这里玄学调参就默认为10了


同时去掉一些近战武器的代码
最后看起来的效果大概就是
  1.     public class Mess : ModItem {
  2.         public override void SetStaticDefaults() {
  3.             Tooltip.SetDefault("Hunluan!.");
  4.         }

  5.         public override void SetDefaults() {
  6.             item.damage = 1;
  7.             item.width = 10;
  8.             item.height = 10;
  9.             item.useTime = 20;
  10.             item.useAnimation = 20;
  11.             item.useStyle = ItemUseStyleID.HoldingOut;
  12.             item.knockBack = 6;
  13.             item.value = 10000;
  14.             item.rare = ItemRarityID.Yellow;
  15.             item.UseSound = SoundID.Item1;
  16.             item.autoReuse = true;
  17.             item.shoot = ModContent.ProjectileType<WarningCard>();
  18.             item.shootSpeed = 10;
  19.         }
  20.     }
复制代码

修改物品合成配方
物品是需要合成的
那么混乱也应该可以被合成
修改默认的示例代码即可
实例化一个ModRecipe来表示一个合成配方
其中AddIngredient(物品, 数量)
来增加合成所需的物品
SetResult表示成品的物品类
调用AddRecipe添加配方到游戏中


如果你想让物品(混乱)在指定的tile处合成(比如工作台)
请使用
  1.             recipe.AddTile(TileID.WorkBenches);
复制代码


  1.         public override void AddRecipes() {
  2.             var recipe = new ModRecipe(mod);
  3.             recipe.AddIngredient(ItemID.SoulofNight, 1);
  4.             recipe.AddIngredient(ItemID.SoulofLight, 1);
  5.             recipe.SetResult(this);
  6.             recipe.AddRecipe();
  7.         }
复制代码


创建自己的buff并应用到Projectile
被发好人卡的时候
一般来讲都有一个buff
或者一个明显的提示
当然 想要有buff得先有自己的类用于控制逻辑
因为混乱发的卡太好看了所以我们使用相同的WarningCard材质
同时从其他地方示例抄一段代码
看起来就像这样
  1.     public class WarnedBuff : ModBuff {
  2.         public override bool Autoload(ref string name, ref string texture) {
  3.             texture = texture.Replace("WarnedBuff", "WarningCard");
  4.             return true;
  5.         }

  6.         public override void SetDefaults() {
  7.             DisplayName.SetDefault("You're good.");
  8.         }
  9.     }
复制代码

我们想要这个buff在NPC被发卡的时候获得
则在WarningCard重写OnHitNPC
并调用AddBuff来为目标添加buff
其中1秒正常情况为60帧
AddBuff(buff类型, 时间(帧), quiet);
对于buff类型
使用ModContent相关方法获取
最后看起来就像这样
  1.         public override void OnHitNPC(NPC target, int damage, float knockback, bool crit) {
  2.             int buffType = ModContent.BuffType<WarnedBuff>();
  3.             target.AddBuff(buffType, 5 * 60, target.HasBuff(buffType));
  4.         }
复制代码



附录
Projectile和AiStyle对应表














星层
全体待填···
第二个mod名字瞩目

等等我才发现这是1.3.5.3的tml···
之前1.3.5.3上装会倒会1352来着

Stars_leap
这tmod刚独立就出教程了?

星层
Stars_leap 发表于 2020-5-20 23:25
这tmod刚独立就出教程了?

之前又不是没有= =

米安博奥
看得出来 写的很匆忙

喵鱿
我彻底爱上yys啦(指教程

乐之叶
可以参考一下: https://fs49.org/sample-page/

第一页 上一页 下一页 最后一页