1

主题

2

回帖

23

积分

普通创作者

积分
23
发表于  2023-8-11 00:18:16 | 显示全部楼层 |阅读模式 780 1

从eca转成 lua函数,目前还无法直接使用,但这个依旧最佳的熟悉API 方法之一。

示例用的 是 官方地图给的 触发器 `Init Update`中的最后一小段,更新顶部时间的。
第一件时间就是把这块代码单独复制到一个触发内

在新建触发器上面转化为 lua代码

复制到vscode  ,无论是 导出前的 eca还是导出后的 lua,可读性都非常差。



下面,正文

首先,对于局部变量 进行替换 ctrl + H
把 `data['hour']` 全部换成 `_hour`
`data['hour'] = y3.init_lua_var('STRING', '', false)` 也就变成了 `local _hour = ''`


然后把 `y3.all_conditions_succeed` 换成简单的 and or 连接的bool式

```lua
if #_min == 1 then
...


local __hour = tonumber(_hour)
if __hour >= 6 and __hour <= 18 then


```


3. 对于报错函数 `y3.get_current_game_time()` 前往 script/y3/更新日志.md 查看
在 143行看到 '  * `y3.game.get_current_game_time` -> `y3.game.get_day_night_time`'
需要换成 `y3.game.get_day_night_time()` 来获取游戏时间

`y3.timer.run_looped_timer` 也在 `y3.timer` 中找到了 `loop` 函数


`y3.ui.get_lua_ui_from_py(value,"42f88624-c329-4146-9b66-1605cef4bfae")`
也在 `y3.ui` 目录中找到了 `get_ui` 函数

整理上来说,除了查看更新日志,还可以去对应的关键字目录查找,也可以全局检索代码,再就是询问其他开发者

4. 相同的变量合并
每帧都去获取全部玩家这件事情,以及这两块面板,
我选择改成 从一开始遍历每个玩家,然后为每个玩家挂帧计时器
```lua

local prs = y3.player_group.get_neutral_player_group():pick()
for i, player in pairs(prs)
do
    local time = y3.ui.get_ui(player,"GameHUD.game_time"):set_visible(true)
    local value = time:get_child("value"):set_visible(true)
    local icon = time:get_child("icon"):set_visible(true)
   
    y3.timer.loop(0.03,function()
        local _time = y3.game.get_day_night_time()
        local strMin = _time .. ":"
        local bDay = (true) and 133801 or 133796
        value:set_text(strMin)
        icon:set_image(bDay)
    end)
end

```
5. 意义
从 2035个字符 压缩到 600个字符,缩短日后读代码的时间,也就是维护更新的时间

1

主题

2

回帖

23

积分

普通创作者

积分
23
发表于  2023-8-11 00:18:49 | 显示全部楼层
不知道为什么不让发图片,只能发10000字符的帖子