跳到主要内容

局外资源

星火编辑器提供了局外资源以及后台发邮件功能,新建项目时会默认应用,并且不建议删除

首先每一个需要在局外独立存在的资源,比如 金币/钻石/道具1/道具2/大礼包……什么的,包括经验值这种,都可以做成一个局外资源类型的蓝图,方便星火编辑器提供的其他模块和后台邮件系统进行统一管理,包括统一的增加数量接口 一个局外资源蓝图如下图所示

通用配置

资源的蓝图节点的唯一标识,右键节点复制后可获得,一般情况下为如下配置

"$$[地图名].lobby_resource.[节点名].root"

显示名

资源的显示名字,支持多语言

稀有度

一个值,对应蓝图"[大厅通用资源]资源稀有度",目前影响其他模块中,比如邮件,获得界面的物品边框颜色,两张表内数量对应,设定每个稀有度范围内对应的值

大图标/小图标

大图标指有边框有底板图标,小图标指无边框无底板图标

以升变2为例,红色圈出来的是小图标,绿色圈出来的是大图标。其实大小都是限定的,跟图片本身大小没关系,但是考虑到性能问题建议大致符合尺寸

自定义参数列表

目前好像只有自定义类型道具有意义

局外资源类型

目前可配置四种资源类型,下面禁行详细说明

自定义类型

自定义类型资源是比较特殊的局外资源,具体的获得资源的逻辑会交给作者处理,没有其他附加属性

获得逻辑需要接收事件自行处理,示例代码如下

    base.game:event('局外资源-自定义资源处理', function(_, msg)
local player = msg.player
local custom_resource_list = msg.custom_resource_list

log.info("自定义资源处理")
log.info(#custom_resource_list)

for k, custom_resource in ipairs(custom_resource_list) do

local resource_link = custom_resource.link
local count = custom_resource.count
local params = custom_resource.params

log.info('购买商品', k, resource_link,
'数量', count,
'自定义参数', params)

local r = nil

xpcall(function()
r = add_reward(base.auxiliary.get_player_id(player), resource_link, count, params)
end, log.error)

if not r then
return 1, '购买失败'
end
end
return nil
end)

其中msg固定两个属性,player是触发的玩家,可以用作旧云变量提交,这里需要用base.auxiliary.get_player_id()转一下变成字符串,custom_resource_list是需要执行增加逻辑的资源列表,是个数组,每一项结构有三个参数,link就是资源蓝图的根节点,count是数量,params是预留参数

add_reward是自己编写的增加逻辑,推荐返回返回值区分添加失败或成功

这个事件是一个dispatch的事件,并且关心返回值,如果一切正常就返回nil,统一的增加数量接口后续会进行云变量的提交

如果有报错,或者不正常情况发生,需要返回一个不为0的值作为错误码,第二个返回值为需要显示在客户端的弹窗内容,为空则是不需要弹窗

以免广告卡为例,其中add_reward代码示例如下:

    add_reward = function(user_id, reward_link, count, params)
local reward = base.eff.cache(reward_link)
local data = base.eff.cache(reward.CustomParams[1])

if data.custom then -- 特殊判断一下
log.info('获得了自定义的物品')
if data.custom == '免广告' then
local c = score.get_commit()
c.set {
user_id = user_id,
key = '免广告状态',
i_value = 1,
}
local error_code, data, err_msg = c.commit()

return '免广告'
end
end
end

免广告卡的蓝图配置为下:

先获取到局外资源根节点数据reward,然后获取自定义的属性列表,判断是否为免广告卡,用别的东西判断也可以,比方说直接判断reward.Link == $$single_simple_template_1_rv3b.lobby_resource.免广告卡.root,但是注意这里不能直接判断显示名是否等于“免广告卡”,因为这个字段进行了多语言处理。

然后对云变量'免广告状态'设置了数字值 1,可以在游戏其他需要的地方取云变量判断是否免广告

最后返回一个值,交给上层判断是否成功执行。

具体用法其实比较自由,因为获取到了资源蓝图的根节点,后续直接获取自定义参数列表就行了

货币类型

和云变量的money一样,只是多配置一个接口方便其他模块和邮件使用,附加一个"货币云变量名属性",需要和云变量的名字一致

获得逻辑会自动执行云变量的money_add

物品类型(不支持)

指局内物品,目前不支持

高级通行证类型

文档todo,测试了一下可以更方便实现通行证的高级通行证功能,但是做的比通行证晚(而且自定义类型可以解决大部分问题了),目前没人用,后续可能优化成凭证类型

局外资源获得方式

局内获得

部分大厅模块支持在游戏局内打开,因此获取到局外资源(获取局外资源的云变量提交成功)时会发送一个事件,如果有需要,游戏局内可以通过监听这个事件进行游戏数据的更新

其中额外参数列表为下文中的邮件的道具奖励中的参数

邮件获得

开发者可以通过邮件发送局外资源,玩家在邮件中点击领取后会获得局外资源。 点击此处查看邮件文档