CHUAN2 DEV ENGINE
996 正版授权研发中心 · 360 授权合作教学中心 · 抖音传奇直播合作授权 · 快手推广运营商授权
OFFICIAL LICENSED ACADEMY 查验官方授权证书 →
// 威海旷世互娱教学基地 · 技术文章
Lua速成班后端面向对象class构造996引擎

Lua速成班 第十课 后端面向对象 class构造

2026-10-30 23:26 作者:浮生梦 Lua速成班后端面向对象class构造996引擎
本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十课 后端面向对象 class构造」,主讲:浮生梦。 课程体系:996 引擎传奇开发教学 · 威海旷世互娱教学基地

这是一节关于 996引擎 Lua后端开发 的课程,主要讲解 QF触发机制、面向对象封装和基础API调用。


第一节:创建自己的说明书

核心操作:在996引擎中创建自定义Lua说明书,用于整理和查阅API接口。

为什么要重做说明书?

  • 新版三端说明书结构混乱,查找困难
  • 老版后端使用更顺手,但TXT已逐渐淘汰
  • 通过重建说明书的过程,学习接口调用方式

创建说明书步骤:
https://www.chuan2.cn/xueyuan/

  1. 使用任意邮箱注册
  1. 设置修改权限密码
  1. 点击确定生成专属网址
  1. 保存网址,进入终端编辑

练习代码:

lua
-- 创建说明书后,在编辑模式中使用Markdown语法美化界面
-- 使用 # 表示标题,- 表示列表
-- 将API分类整理:引擎触发、脚本触发、系统函数

QF事件机制与Hook原理

核心概念:QF(引擎回调)是996引擎的钩子(Hook)机制,用于实时监控游戏内事件。

Hook的工作方式:

  • M2后端实时监控游戏状态(登录、点击NPC、使用技能、跑步等)
  • 当事件发生时,通过钩子回调到Lua脚本中的对应函数
  • QF是触发逻辑:写不写脚本,M2都会运行;写了脚本就多了一个回调接口

建议:将QM和QF合并为一个入口文件,避免维护两个文件造成混乱。

练习代码:

lua
-- 在初始化文件中统一加载所有模块
include("Market_Def/飞封装/初始化.lua")
require("envir/Market_Def/飞封装/跑步触发.lua")

第三节:聊天接口与基础触发

核心接口:function chat(actor, message, type)

参数说明:

  • actor:触发者对象(身份证号概念,代表玩家自己)
  • message:说话内容(字符串)
  • type:说话类型(数字,如6表示附近说话)

Object类型概念:

  • 人物、怪物、物品、人形怪都称为Object类型
  • 80%的接口第一个返回值都是人物对象(谁触发返给谁)

练习代码:

lua
function chattrigger(actor, message, type)
    p(actor, message, type)  -- 打印三个参数查看
    
    if message == "你好" then
        actor:modifyLevel(1)  -- 说"你好"就升1级
    end
end

第四节:穿戴触发与装备对象

参数说明:

  • actor:玩家对象
  • itemobj:装备对象(看起来是数字,实际是字符串类型)
  • where:穿戴位置(1=武器,查看传2说明书中的装备位置常量)
  • uid:装备唯一ID

重要提示:

  • 装备位置常量几乎用不到,Lua有更简便的获取方式
  • 只有接口冷门且Lua确实没有时,才调用TXT常量

第五节:TXT接口与类型转换陷阱

两种获取等级的方式对比:

方式一(Lua原生):local lv = getBaseInfo(actor, 6) —— 返回数字类型

方式二(TXT接口):local lv2 = getCount(actor, "<$level>") —— 返回字符串类型

常见错误:将数字和字符串直接比较会导致栈溢出错误。

解决方案:使用 tonumber() 进行类型转换。

性能提示:TXT接口耗时远高于Lua原生接口,仅在实在没有其他选择时才临时使用。

lua

---

## 第六节:后端面向对象封装

**核心语法**:`local player = class(actor)`

**执行逻辑**:
1. `actor` 是玩家的"身份证号"(假对象)
2. `class` 是构造函数,调用 `player:new()`
3. 通过身份证实例化,创建包含完整属性和方法的"真对象"

**性能代价**:面向对象会牺牲10%-20%性能(额外内存开销),千人服以上不建议使用。

**封装原理**:在模块中将全局函数转为局部变量,提升30%速度。

**练习代码**:

lua
-- 在人物模块中声明类并封装常用函数
local player = {
new = function(self, actor)
if not isPlayer(actor) then return nil end
local obj = {actor = actor, type = "player"}
setmetatable(obj, {__index = self})
return obj
end,

getName = function(self)
return getBaseInfo(self.actor, 3) -- 3是名字字段
end,

move = function(self, map, x, y, dir)
mapMove(self.actor, map, x, y, dir)
end
}

return player

lua

---

## 第七节:攻击触发与双对象操作

**核心接口**:`function attackdamage(actor, target, hiter)`

**面向对象实战**:
- 将`actor`封装为`player`对象(自己)
- 将`target`封装为`tar`对象(受击目标/怪物)
- 两个对象可以使用相同的方法,但操作的是不同实体

**练习代码**:

lua
--------- 注意接口大小写
function attackdamage(actor, target, hiter)
local player = class(actor) -- 实例化自己
local tar = class(target) -- 实例化怪物

p(player:getName(), tar:getName()) -- 打印双方名字

-- 让自己移动
player:move("0", -1, -1, 3)

-- 让怪物移动(相同方法,不同对象)
tar:move("0", -1, -1, 3)
end

lua

---

## 第八节:Dump调试工具与全局变量

**Dump函数作用**:递归打印表中的所有内容,无需手动写for循环。

**查看全局变量**:`dump(_G)` 可打印所有全局接口,包括996定制的代理接口(约2%)。

**警告**:代理接口不一定稳定,随着更新可能被删除,谨慎使用。

**练习代码**:

lua
-- 打印局部表内容
local t = {name = "测试", data = {a = 1, b = 2}}
dump(t)

-- 查看所有全局变量(内容很多,慎用)
dump(_G)

lua

---

## 课后作业

**作业1**:编写一个聊天触发功能,当玩家说"升级"时,如果当前等级小于10级,直接升到10级;如果大于等于10级,提示"已达到10级"。

**作业2**:编写穿戴触发功能,当玩家装备武器时(位置1),发送私信提示"武器已装备";装备衣服时(位置2),提示"衣服已装备"。其他位置不提示。

**作业3**:使用面向对象方式,在人物模块中添加`getLevel()`方法,返回玩家当前等级(数字类型)。然后在跑步触发中调用该方法,如果等级大于5级,发送消息"你是高级玩家"。

**作业4**:编写攻击触发功能,玩家攻击对方玩家,对方玩家等级提升1级,双开客户端!

---

本文为《Lua速成班》系列课程实录整理。想系统学习 996 引擎 Lua 开发,请查看[课程中心](https://www.chuan2.cn/courses/)与[更多技术文章](https://www.chuan2.cn/articles/)。
作者履历与出处

本文由 996 技术组基于 996 引擎官方知识库与浮生梦老师课程体系整理。团队长期从事传奇类引擎 Lua 后端逻辑、客户端界面与商业版本交付,内容以官方知识库与真实项目为出处,按版本持续修订。

← 返回文章地图返回研学路径

幂尔框架 · 实战干货 · 接口调用

LATEST ARTICLES

全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →

Lua速成班后端面向对象

Lua速成班 第九课 后端面向对象和事件推送

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第九课 后端面向对象和事件推送」,主讲:浮生梦。 课程体系:9…

2026-10-30 23:26 浮生梦
Lua速成班后端面向对象

Lua速成班 第十课 后端面向对象 class构造

本文整理自 CHUAN2《Lua速成班》直播课「Lua速成班 第十课 后端面向对象 class构造」,主讲:浮生梦。 课程体…

2026-10-30 23:26 浮生梦
幂尔框架接口调用

print 大法:让代码自己交代问题

代码不说话, 让它自己说 。 print 是 Lua 战士的第一件武器——用好它,八成的 bug 不用看第二眼。 <styl…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

事件推送:别问,等框架喊你

新手爱问「我怎么知道玩家上线了」—— 你不用知道,框架会喊你 。轮询是你去问,事件是它来叫:理解事件推送,才算入了框架的门。…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

接口调用的本质:参数进去,结果出来

框架给你几百个接口, 本质都是同一件事:参数进去,结果出来 。把「调用约定」刻进肌肉,说明书再厚也不慌。 <style .i…

2026-10-26 19:04 996 技术组
幂尔框架接口调用

点号与冒号:self 到底是谁

obj:method() 和 obj.method() 就差一个冒号, self 却是天壤之别 。Lua 的面向对象全靠这颗…

2026-10-26 19:04 996 技术组