y3-editor / y3-lualib

MIT License
141 stars 42 forks source link

通过 Lua 创建的技能模板无法预设技能名 #491

Closed ChouUn closed 2 months ago

ChouUn commented 2 months ago
local abltTpl = y3.object.ability[134250000]
local newAbltTpl = abltTpl:new()
newAbltTpl.data.name = 'Lua 新建技能'

local u = y3.player(1):create_unit(unitTpl.key)
u:add_ability('英雄', newAbltTpl.key, 1, 1)
print(u:get_name())

期望:打印出 "Lua 新建技能" 实际:打印出 "物编新建技能" 问题:无法修改技能模板 (EditorObject.Ability) 的技能名,但是可以修改技能实例 (Ability) 的技能名

sumneko commented 2 months ago

运行时改物编问题有点多,改用插件创建物编吧

ChouUn commented 2 months ago

运行时改物编问题有点多

有点困惑,本句是想表达「目前编辑器技术层面不好实现」,还是「运行时修改物编会导致很多问题」? 我之前的做法,是在脚本初始化的地方创建物编,这大概算一个比较常见的场景。不至于在玩家游戏过程中修改物编。

还有一个点,设置以后无效会比较困惑。 如果现阶段运行时修改无法生效,可以考虑先把 ---@field name string|integer 改成 ---@field name integer;或者加点注释。

目前我的解决方案如下,供有需要的人参考。 顺便让小汐锐评下有没有潜在问题(

-- 给技能模板存储 kv
local newAbltTpl = abltTpl:new()
newAbltTpl:kv_save('name', '新建技能' .. tostring(i))
newAbltTpl:kv_save('desc', '新建技能描述' .. tostring(i))

-- 创建技能实例的时候,读取模板的 kv
y3.game:event('技能-获得', function(trg, data)
    local ablt = data.ability
    local tpl = y3.object.ability[ablt:get_key()]
    ablt:set_name(tpl:kv_load('name', 'string'))
    ablt:set_description(tpl:kv_load('desc', 'string'))
end)

改用插件创建物编吧

是自写一个插件吗,还是在商店 / 演示中已有案例?烦请告知

找到了,是 y3-helper