饥荒联机版mod制作[物品显示名称的添加、简单的网络数据传递]

如果只是想要制作一个简单的模组,只需要将所有的操作都放在主机即可,主机会自动向客机发从数据。

这篇文章主要用于添加物品文字显示,也就是鼠标悬浮于物品上现实的文字,而不涉及复杂的网络编程。

一、为何会涉及到网络数据传输

通过将需要显示的文字衔接在物品原有名称之后的方法,为物品添加文字介绍,这一操作,只能在客机的代码部分进行,若在主机代码部分进行,则无法添加成功。

而在客机执行时,由于主机部分代码还未初始化,客机部分不会获得任何有效的有关于该预制体的数据,所以也无法添加我们想要的信息显示。(因为每次对预制体初始化时,都是按从上到下,从客机到主机部分的有序执行)

此时就需要获取主机中原本就保存的数据,来作为我们显示的信息。

当然,如果这个物品时第一次来到这个世界,他的所有数据都还没有被保存到网络中,主机中当然也不会有这个物品的信息,为了保证我们获取的信息不为nil(若没有设置好,为nil可能会导致服务器崩溃),就需要进行相关的初始化处理,具体操作见下文。

二、在网络中传递数据

2.1  创建网络同步变量

代码示例如下:

inst.net_num = net_ushortint(inst.GUID, "net_num")

这里括号中的值,

第一个位置为该预制体在世界中唯一的ID,用以区分该预制体;

第二个位置为传递该参数时使用的名称。

2.2  设置网络同步变量的值

代码示例如下:

inst.net_num : set(inst.num)

由于网络数据需要与本地数据同步,所以每次更新inst.num的值时都需要运行上面的代码,保证数据的同步。 

2.3  获取网络同步变量的值

代码示例如下:

inst.num = inst.net_num:value()

2.4  本地更新变量

代码示例如下:

inst.net_num:set_local(inst.num)

可以在主机或客机上执行,这条语句和set不同,不会触发数据同步和dirtyevent ;

下一次主机执行set(x)时,无论变量值是否改变,都会触发数据同步和dirtyevent。

此时,数据在网络中的传递已经完成。

三、显示文字

代码示例如下:

local old_GetDisplayName = inst.GetDisplayName
inst.GetDisplayName = function(self,...)
    local str = ""
        str = "\r\n数量:"..inst.net_num:value()
    return old_GetDisplayName(self,...)
    ..str 
end

此时我们就已经将文字插入到了原本显示的文字之后,若想改变顺序,可调整return。

四、扩展

上面的例子只用到了一种换地网络变量的类型:短整型ushortint,此外还有其他的类型可供我们在传递不同类型、不同长短的参数时使用,具体如下:

部分资料来源于longfei: 网络编程指南 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值