初衷是让自己写mod方便点(
写的东西可能有错误,请大佬轻喷
好用的链接:
Tmod官方文档
泰拉瑞亚Wiki——所有ID
裙中世界
之前写了个mod,打算开源发出来
因为
本文采用CC BY-NC-SA 4.0开源 上图Mod使用WTFPL v2(Do What the F♥♥k You Want to Public License)
都可以转载,标下作者就行(
最后编辑:
public class awa : ModItem
{
public override void SetDefaults()
{
//就是这个
}
}
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
//合成完整示例
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();
}
}
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
{
//在这写不是跨模组的合成
}
}
//这一部分为替换太阳与月亮的材质
private Asset<Texture2D> sunTexture;
private Asset<Texture2D> moonTexture;
public override void Load() { //注意!下方路径要加上你的模组名
sunTexture = ModContent.Request<Texture2D>("ExampleMod/Assets/Textures/Menu/ExampleSun");
moonTexture = ModContent.Request<Texture2D>("ExampleMod/Assets/Textures/Menu/ExampliumMoon");
}
public override Asset<Texture2D> SunTexture => sunTexture;
public override Asset<Texture2D> MoonTexture => moonTexture;
//设定背景、音乐、名字以及选择时播放音效
public override int Music => MusicLoader.GetMusicSlot(Mod, "Assets/Music/MysteriousMystery"); //音乐路径,不需要加上模组名
public override ModSurfaceBackgroundStyle MenuBackgroundStyle => ModContent.GetInstance</*一个地表背景*/>();
public override string DisplayName => "Example ModMenu"; //名字
public override void OnSelected() {
SoundEngine.PlaySound(SoundID.Thunder);
}
//显示背景图片会用到这个
public override bool PreDrawLogo(SpriteBatch spriteBatch, ref Vector2 logoDrawCenter, ref float logoRotation, ref float logoScale, ref Color drawColor) {
drawColor = Main.DiscoColor; //上边logo忽悠忽悠的
return true;
}
public override bool PreDrawLogo(SpriteBatch spriteBatch, ref Vector2 logoDrawCenter, ref float logoRotation, ref float logoScale, ref Color drawColor)
{
// 控制时间,锁定白天,要不你的图片会变暗
Main.dayTime = true;
Main.time = 30000;
// 加载背景图片,只需要改这一处的路径就能运行
Texture2D texture = ModContent.Request<Texture2D>("/*这边路径改成自己的*/").Value;
// 这里不要改
float xScale = Main.screenWidth / (float)texture.Width;
float yScale = Main.screenHeight / (float)texture.Height;
float scale = Math.Max(xScale, yScale);
Vector2 drawOffset = new Vector2(
(xScale < yScale) ? -(texture.Width * scale - Main.screenWidth) * 0.5f : 0,
(xScale > yScale) ? -(texture.Height * scale - Main.screenHeight) * 0.5f : 0
);
spriteBatch.Draw(texture, drawOffset, null, drawColor, 0f, Vector2.Zero, scale, SpriteEffects.None, 0f);
// 返回 true,试试返回false会怎么样(
return true;
}