# jass.code 跟 jass 进行交互
jass 里面 有 2 种函数
- 1 是 native 在 common.j 里的接口 简称 cj
- 2 是 blizzard.j 以及 war3map.j 里的 自定义函数 简称 bj
# lua 调用 cj
- 原 ydlua 功能
local jass = require 'jass.common'
jass.DisplayTextToPlayer(jass.Player(0), 0, 0, "hello world!")
1
2
3
2
3
# 重载 cj jass 调用 lua
原 ydlua 功能
由于 cj 参数类型 参数数量 返回值 都是固定的 不便做扩展
local jass = require 'jass.common'
local hook = require 'jass.hook'
local DisplayTextToPlayer = DisplayTextToPlayer
function hook.DisplayTextToPlayer(player, x, y, msg)
print(player, x, y, msg)
DisplayTextToPlayer(player, x, y, msg)
end
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 遍历 cj 函数
- 原 ydlua 功能
local jass = require 'jass.common'
for name, func in pairs(jass) do
print(name, func)
end
1
2
3
4
5
2
3
4
5
# lua 调用 bj
- 内置 lua 功能
- 要注意优化混淆 j 文件后的名字
local code = require 'jass.code'
code.BJDebugMsg("hello world!")
1
2
3
4
2
3
4
# 重载 bj jass 调用 lua
- 内置 lua 功能
- bj 可以自定义扩展参数类型 参数数量
- 要注意优化混淆 j 文件后的名字
function add takes integer a, integer b returns integer
call GetTriggeringTrigger() //随便调用一句jass 防止 空函数被jass虚拟机内联优化掉
return 0
endfunction
function test takes nothing returns nothing
call BJDebugMsg(I2S(add(10, 20)))
endfunction
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
local code = require 'jass.code'
function code.add(a, b)
return a + b
end
function code.BJDebugMsg(msg)
print(msg)
end
code.test() --控制台将会输出 30 而游戏内屏幕不会打印。
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 遍历 bj 函数
- 内置 lua 功能
local code = require 'jass.code'
for name, func in pairs(code) do
print(name, func)
end
1
2
3
4
5
2
3
4
5