开发教程 [Mod编写教程]玩家创建人物、中核复活后自带物品以及进入游戏提示

-Cyril-

Lv4
创意家
LV
0
 
IP属地
广东省
2018/08/28
60
56
勋章
1
  • · 发布于未知
不能看不知道怎么形容的Mod教程
大家好我是Cyril,我有个特别的外号叫亏了
今天我来写教程,因为想不出要什么开场白所以就直接开始了吧
PS:关于Mod教程同样可以参考裙中世界,那里的教程很强很强很强...
PSS:如果文中有错误或是漏洞,请大佬指出
PSSS:看教程之前最好先学会这个教程中的内容
PSSSS:我会在评论中放出教程全代码
===========================================
创建文件

C#:
using System.Collections.Generic;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace BunnyMod//这里是命名空间,记得改成你自己的(问怎么改的,去看裙中世界)
{
    public class BunnyModPlayer : ModPlayer
    {
        //即将要写骚操作的地方
    }
}
大概就这样
===========================================
创建人物自带物品

首先要用到的一个重写函数是:
public override void SetupStartInventory(IList<Item> items, bool mediumcoreDeath)
关于这个重写函数还有另一个版本是:
public override void SetupStartInventory(IList<Item> items)
上面那个版本是用于TML版本为0.10.1.5的,下面那个是0.10.1.5之前的
推荐使用上面的,然后TML尽量保持为最新版本(目前最新版本是0.10.1.5)

这个重写函数的作用是:修改玩家创建时物品栏内的物品
如果第二个参数mediumcoreDeath为True,则:为在中核(死亡掉落所有物品)死亡的角色添加物品(就是死了之后重生物品栏自带的物品)
那么解释完之后就开始实际运用,我会用注释的方法说明每一条的作用
C#:
public override void SetupStartInventory(IList<Item> items, bool mediumcoreDeath)//重写函数
{
    Item item = new Item();//添加一个新物品
    item.SetDefaults(ItemID.BunnyStatue);//添加的物品为原版的兔子雕像,ItemID.BunnyStatue表示ID为445的物品(就是兔子雕像嘛)
    item.stack = 233;//物品的堆叠数,如果没有这一条它会默认为1
    items.Add(item);//添加到玩家物品栏库存里
    if (mediumcoreDeath)//如果玩家在中核中复活了,就运行大括号的内容
    {
        item = new Item();//添加一个新物品
        item.SetDefaults(mod.ItemType("名叫Sawynture的兔子"));//添加的物品选定为Mod中类名为"名叫Sawynture的兔子"的物品
        item.stack = 31415;//堆叠数
        items.Add(item);//给玩家物品栏库存添加
    }
}
===========================================
进入游戏提示语

用到的重写函数是
public override void OnEnterWorld(Player player)
巧了,这个没有另一个版本:razz:
这个重写函数在玩家进入世界时运行
参数"player"选定的是进入世界的玩家,不过提示语并不需要用到player这个参数
但是你可以用player做一些有:razz:趣的,比如进入游戏就代码杀
(代码杀的代码是player.KillMe(PlayerDeathReason.ByCustomReason(player.name + " 被神秘的东方力量杀死了"), 1000.0, 0, false);
接下来我还是用注释讲解吧
C#:
public override void OnEnterWorld(Player player)//当玩家进入世界,运行以下代码
{
    Main.NewText("欢迎来到作者的Terraria游戏世界", Color.Gold);//提示语,显示为金色
}
关于Main.NewText,这里有4种使用方法
当你只填了提示语这个参数,其他都没填,默认是这种:
220
否则就是:
221
222
223
我推荐使用void Main.NewText(string newText, Microsoft.Xna.Framework.Color color, [bool force = false]这种
原因:这个简单,而且我只会用这种和默认的:razz:
如果你想自定义颜色,就选择默认的那种,分别填进去RGB值就OK
如果你不想用默认的,那你是闲着没事干么,滚我就教你怎么用第二种:在第二个参数填上new Color(R值, G值, B值)就行
示例:[/COLOR]Main.NewText("欢迎来到作者的Terraria游戏世界", new Color(233, 233, 233));//会显示[COLOR=rgb(233, 233, 233)]欢迎来到作者的Terraria游戏世界[/COLOR]

那么"bool force"又是什么参数?
答:其实我也不知道,我通过神秘的反编译魔法也没发现这个有什么特点
唯一的特点就是当这个值为true时,不会有提示语显示出来,我猜测这个也许是拿来充当if的
比如我想让玩家拿着兔子物品时才发送提示语,我可以这么写:
C#:
Main.NewText("你手里拿着Sawynture的亲戚干啥?", Color.Gold, player.inventory[player.selectedItem].type != NPCID.Bunny);
关于以上代码每个地方分别表达什么意思,就让你们自己去想了(其实是懒得写了2333)
===========================================
应该就清晰明了了吧~
如果还有什么不会的可以在评论里问我
最好问的是本文章提及的内容
 
最后编辑:

-Cyril-

Lv4
创意家
LV
0
 
IP属地
广东省
2018/08/28
60
56
勋章
1
  • · 发布于未知
以下是全代码:
C#:
using System.Collections.Generic;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace BunnyMod//这里是命名空间,记得改成你自己的(问怎么改的,去看裙中世界)
{
    public class BunnyModPlayer : ModPlayer
    {
        //写骚操作的地方
        public override void OnEnterWorld(Player player)
        {
            Main.NewText("欢迎来到作者的Terraria游戏世界", Color.Gold);
            Main.NewText("你手里拿着Sawynture的亲戚干啥?", Color.Gold, player.inventory[player.selectedItem].type != NPCID.Bunny);
        }
        public override void SetupStartInventory(IList<Item> items, bool mediumcoreDeath)//重写函数
        {
            Item item = new Item();//添加一个新物品
            item.SetDefaults(ItemID.BunnyStatue);//添加的物品为原版的兔子雕像,ItemID.BunnyStatue表示ID为445的物品(就是兔子雕像嘛)
            item.stack = 233;//物品的堆叠数,如果没有这一条它会默认为1
            items.Add(item);//添加到玩家物品栏库存里
            if (mediumcoreDeath)//如果玩家在中核中复活了,就运行大括号的内容
            {
                item = new Item();//添加一个新物品
                item.SetDefaults(mod.ItemType("名叫Sawynture的兔子"));//添加的物品选定为Mod中类名为"名叫Sawynture的兔子"的物品
                item.stack = 31415;//堆叠数
                items.Add(item);//给玩家物品栏库存添加
            }
        }
    }
}
 
最后编辑:

幽の白银

Lv3
LV
0
 
IP属地
未知
2019/01/30
6
2
  • · 发布于未知
我啥都不懂怎么办?​
 

小太

Lv6
管理成员
管理员
LV
0
 
IP属地
湖北省
2015/08/26
254
159
勋章
9
  • · 发布于未知
感谢大佬的贡献~
 

Harry_W

Lv3
LV
0
 
IP属地
未知
2019/01/30
10
8
  • · 发布于未知
啊事大佬!!wwwwwwwwwwwwwww
 

幽の白银

Lv3
LV
0
 
IP属地
未知
2019/01/30
6
2
  • · 发布于未知
以下是全代码:
C#:
using System.Collections.Generic;
using Terraria;
using Terraria.ID;
using Terraria.ModLoader;
namespace BunnyMod//这里是命名空间,记得改成你自己的(问怎么改的,去看裙中世界)
{
    public class BunnyModPlayer : ModPlayer
    {
        //写骚操作的地方
        public override void OnEnterWorld(Player player)
        {
            Main.NewText("欢迎来到作者的Terraria游戏世界", Color.Gold);
            Main.NewText("你手里拿着Sawynture的亲戚干啥?", Color.Gold, player.inventory[player.selectedItem].type != NPCID.Bunny);
        }
        public override void SetupStartInventory(IList<Item> items, bool mediumcoreDeath)//重写函数
        {
            Item item = new Item();//添加一个新物品
            item.SetDefaults(ItemID.BunnyStatue);//添加的物品为原版的兔子雕像,ItemID.BunnyStatue表示ID为445的物品(就是兔子雕像嘛)
            item.stack = 233;//物品的堆叠数,如果没有这一条它会默认为1
            items.Add(item);//添加到玩家物品栏库存里
            if (mediumcoreDeath)//如果玩家在中核中复活了,就运行大括号的内容
            {
                item = new Item();//添加一个新物品
                item.SetDefaults(mod.ItemType("名叫Sawynture的兔子"));//添加的物品选定为Mod中类名为"名叫Sawynture的兔子"的物品
                item.stack = 31415;//堆叠数
                items.Add(item);//给玩家物品栏库存添加
            }
        }
    }
}
那两个newtext太恶趣味了8
 

Twilight Sparkle

Lv2
LV
0
 
IP属地
未知
2019/03/02
2
0
  • · 发布于未知
大佬真是太厉害了,但是我看不懂怎么办
 

d3ara1n

Lv4
LV
0
 
IP属地
浙江省
2019/02/08
35
5
勋章
1
  • · 发布于未知

鱼鱼

Lv3
创意家
LV
0
 
IP属地
未知
2019/07/05
23
61
  • · 发布于未知
%~K8G72E1R7N(CO1OK_Y{HN.jpg
不过有个小错误,那个force参数表示的是要不要换行,默认为false也就是换行,如果为true就是不换行。

换行的规则是超出80个字符就换一次,而且只会在空格处换行(因为英文单词用空格隔开,所以如果是一大串中文是不会有换行效果的)。

false的情况本质是将字符串拆成多段之后,给拆分后的每段字符都调用一次为true的Main.NewText。

(虽然我并不知道为什么你那边为true会不显示就是了

_8PJZ@OU[TR7X{RL_8AC`U2.jpg
 

早坂嗷ღ

Lv3
LV
0
 
IP属地
未知
2019/07/19
8
5
  • · 发布于未知
是鱼鱼! PRPRPR
 

滑稽喵

Lv3
LV
0
 
IP属地
江西省
2019/07/02
14
2
勋章
2
  • · 发布于未知
awsl!!!(是个带佬!!! :evil:)
 

·殇·

Lv2
LV
0
 
IP属地
未知
2019/08/19
18
7
  • · 发布于未知
大佬tql
 

Nethzork

Lv2
LV
0
 
IP属地
未知
2019/08/19
5
2
勋章
1
  • · 发布于未知
在?你是苦力怕吗为什么要pssss,是不是要炸辣鸭 :evil:
 

龙马壬

Lv2
LV
0
 
IP属地
未知
2019/08/19
6
0
  • · 发布于未知
看傻了,,,搞这种东西需要学JAVA还是C语言啊?
 

呵呵飘过

Lv2
LV
0
 
IP属地
未知
2019/08/20
3
0
  • · 发布于未知
看完
眼睛:嗯,我会了
大脑:不,你不会
 

* 这是一则由 Google AdSense 自动推荐的广告,与本站无关,不对其真实性与可靠性负责

顶部