Closed Sdator closed 1 year ago
@sumneko 我把 MoeHero 项目的一部分代码加入了一张slk优化过的老图中
local function main() require 'war3.id' require 'war3.api' require 'util.log' -- 当导入这个模块里面导入的 'ac.timer' 模块 85行调用cj的计时器函数发生了崩溃 require 'ac.init' require 'util.error' -- 我自定义的触发 require 'test.main' end
local CJ = require 'jass.common' local message = require 'jass.message'
local trig = CJ.CreateTrigger() local g = require 'jass.globals'
CJ.TriggerRegisterPlayerEvent(trig,CJ.Player(0),g.EVENT_PLAYER_END_CINEMATIC) -- ESC 调用时崩溃 CJ.TriggerAddCondition( trig, CJ.Condition( function() print("test") return true end ) ) CJ.TriggerAddAction(trig,function() local x, y = message.mouse() print(x, y) end )
一开始我以为是那行代码引起的问题,当我把`require 'ac.init'`注释后,此时可以进游戏了,但当我调用自己编写的触发函数时发现一样会崩溃,确定了问题出在当我调用 'jass.common' 模块中 计时器和触发事件动作就会发生崩溃。 ![1](https://user-images.githubusercontent.com/17621623/84989595-8131c000-b176-11ea-8eaa-d131da677932.png) >这个崩溃问题只在一张老图中出现,图本身是加密过的,我是通过注入部分文件实现lua功能,但是我在ydwe中新创建的地图注入同样的代码并不会发生程序崩溃。 + jass.globals 全局函数全部能读取说明接口是没问题的 + Player(n) 之类的函数也能用 以下三个函数都会崩溃 TimerStart TriggerRegisterPlayerEvent TriggerAddAction 好像出现问题的地方都是因为使用了`匿名函数`,能力有限不知道具体原因是什么。 ## 2020.6.19 经过多次排查最后发现问题是发生在 war3map.j 文件中的主入口 mian 函数里面的 + war3map.j ```c mian xxx call Cheat("exec-lua:lua.base") call InitGlobals() // 问题出在这里 初始化游戏触发 call InitCustomTriggers() xxx
最后定位到崩溃的地方,是在初始化触发中的一个很普通的触发函数体内,里面的一句call TriggerRegisterPlayerEvent引发的报错,但这句代码本身没有问题。我测试过即便是我重新定义的触发器也会报错。 会不会是触发数量过多导致下标溢出?初始化触发的数量大概140+ 左右。
call TriggerRegisterPlayerEvent
你解决了吗~
https://github.com/actboy168/YDWE/issues/197
还没
actboy168/YDWE#197
看来你和我碰到差不多的问题,你使用什么方法解决的? 我尝试过使用全局变量 code 调用也一样会报错,不单单是闭包问题。
@Sdator 我这边也碰上这个问题,你那边现在解决了吗?
@sumneko 我把 MoeHero 项目的一部分代码加入了一张slk优化过的老图中
local trig = CJ.CreateTrigger() local g = require 'jass.globals'
CJ.TriggerRegisterPlayerEvent(trig,CJ.Player(0),g.EVENT_PLAYER_END_CINEMATIC) -- ESC 调用时崩溃 CJ.TriggerAddCondition( trig, CJ.Condition( function() print("test") return true end ) ) CJ.TriggerAddAction(trig,function() local x, y = message.mouse() print(x, y) end )
最后定位到崩溃的地方,是在初始化触发中的一个很普通的触发函数体内,里面的一句
call TriggerRegisterPlayerEvent
引发的报错,但这句代码本身没有问题。我测试过即便是我重新定义的触发器也会报错。 会不会是触发数量过多导致下标溢出?初始化触发的数量大概140+ 左右。