跳转至

客户端 API 参考

可用性

客户端 Lua 仅在 S21.1-2 中可用。其他版本不支持客户端 Lua。

客户端 Lua API 运行在 Main.dll 模块内,允许你自定义游戏客户端的 UI、处理输入、访问游戏内存,以及通过自定义数据包与服务器通信。


全局变量

变量 类型 说明
Hero table 当前玩家角色数据(位置、属性、状态)
CharacterAttribute table 玩家属性(STR、AGI、VIT、ENE、CMD)
Mouse table 鼠标位置(Mouse.XMouse.Y)和按键状态

渲染函数

LoadInterface(filePath, imageId, startX, startY, width, height)

加载贴图/图片用于屏幕渲染。

LoadInterface("Data\\Custom\\MyUI.tga", 100, 0, 0, 256, 256)

RenderImage(imageId, x, y, width, height)

在指定位置绘制之前加载的图片。

RenderImage(100, 400, 300, 128, 128)

文字渲染

函数 说明
UIRenderText_Left(x, y, text, r, g, b) 渲染左对齐文字
UIRenderText_Center(x, y, text, r, g, b) 渲染居中文字
UIRenderText_Right(x, y, text, r, g, b) 渲染右对齐文字
UIRenderText_Center(320, 50, "Hello World!", 255, 255, 0)

Alpha 混合

函数 说明
EnableAlphaBlend() 开启 Alpha 混合以实现透明渲染
DisableAlphaBlend() 关闭 Alpha 混合

输入函数

函数 说明
SEASON3B_IsPress(key) 检查按键是否正在被按下
SEASON3B_IsRelease(key) 检查按键是否刚刚释放
SEASON3B_IsRepeat(key) 检查按键是否被持续按住(重复)
GetMouseX() 返回当前鼠标 X 坐标
GetMouseY() 返回当前鼠标 Y 坐标
IsWriteInterfaceOpen() 文本输入框激活时返回 true
if SEASON3B_IsPress(0x54) then -- 'T' 键
    UIRenderText_Center(320, 240, "T is pressed!", 0, 255, 0)
end

网络(数据包)函数

在客户端和服务端之间发送和接收自定义数据包。

读取数据包

函数 说明
PacketGetByte(packet, offset) 从数据包中读取一个 BYTE(1 字节)
PacketGetWord(packet, offset) 从数据包中读取一个 WORD(2 字节)
PacketGetDword(packet, offset) 从数据包中读取一个 DWORD(4 字节)
PacketGetFloat(packet, offset) 从数据包中读取一个 float(4 字节)
PacketGetDouble(packet, offset) 从数据包中读取一个 double(8 字节)

发送数据包

函数 说明
PacketSend(packetFormat) 向服务器发送格式化数据包
-- 向服务器发送自定义数据包
PacketSend("\xC1\x04\xF3\x01")

内存函数

高级功能

内存函数提供对游戏客户端内存的直接访问。使用不当可能导致客户端崩溃。

写入函数

函数 说明
SetByte(offset, value) 向内存写入一个 BYTE
SetWord(offset, value) 向内存写入一个 WORD(2 字节)
SetDword(offset, value) 向内存写入一个 DWORD(4 字节)
SetFloat(offset, value) 向内存写入一个 float
SetDouble(offset, value) 向内存写入一个 double

读取函数

函数 说明
GetByte(offset) 从内存读取一个 BYTE
GetWord(offset) 从内存读取一个 WORD
GetDword(offset) 从内存读取一个 DWORD
GetFloat(offset) 从内存读取一个 float
GetDouble(offset) 从内存读取一个 double

批量操作

函数 说明
MemoryCpy(offset, hexString) 将十六进制数据复制到内存
MemorySet(offset, byteValue, size) 用指定值填充内存区域
-- 从内存读取一个值
local value = GetDword(0x12345678)

-- 填充一段内存区域
MemorySet(0x12345678, 0x90, 5)

事件注册

注册 Lua 函数以在特定客户端事件时被调用:

LuaEventAttach("OnRender", function()
    UIRenderText_Left(10, 10, "Custom UI Text", 255, 255, 255)
end)

LuaEventAttach("OnKeyPress", function(key)
    if key == 0x74 then -- F5
        PacketSend("\xC1\x04\xF3\x01")
    end
end)