现在请分别讲述服务器端和客户端的详细实现。
🤖 回答引擎: 热血江湖Lua |
🕒 时间: 2026-05-03 15:46:10 |
👁️ 阅读: 3
## 服务器端详细实现
服务器端主要通过 `QFunction-0.lua`(功能脚本)来定义游戏中的核心逻辑、NPC行为、物品使用效果和各种触发事件。它是服务器端脚本的核心模块。
**NPC脚本的加载与执行**:
1. **传统配置方式**:NPC脚本文件(`.lua`格式)统一存放在 `Mir200\Envir\Market_Def\` 目录下,支持创建子文件夹。脚本文件的路径和名称需要与 `Npclist.xls` 表中的 `Script` 字段对应。例如,脚本文件 `主城\银娇龙-101.lua` 对应 `Npclist.xls` 中 `Script` 字段为 `主城\银娇龙`,`MapName` 字段为 `101` 的NPC。
2. **功能触发器方式**:可以在 `QFunction-0.lua` 中,通过玩家点击NPC的事件触发,根据不同的NPC ID来执行相应的脚本逻辑。
3. **客户端事件通知方式**:由客户端点击NPC时进行事件响应,然后通知服务端,服务端在收到消息后调用脚本,并在调用时注意判断NPC与玩家的距离。
**服务器与客户端通信**:
服务器端通过 `sendmymsg` 函数向客户端发送消息,支持传递3个整数参数和1个字符串参数。例如,在处理客户端发来的气功加点方案消息(如消息号90020101)后,服务器会调用 `QiGongPlan.lua` 中的逻辑进行查询、加载或保存,然后通过 `sendmymsg` 发送结果消息(如消息号90020102)给客户端。
**变量与数据存储**:
服务器端支持对玩家、物品、门派等对象设置自定义变量。
* **保存型变量**:使用 `setint`、`setstr` 设置,使用 `getint`、`getstr` 获取,并可通过 `setvarlimittime` 设置限时时间。
* **临时型变量**:使用 `settempint`、`settempstr` 设置,使用 `gettempint`、`gettempstr` 获取。
**其他关键功能**:
* **地图切换**:使用 `map` 命令,后跟地图名(需与 `MapInfo` 表保持一致)。
* **定时器管理**:使用 `addtimerex` 给对象(玩家、怪物、NPC、物品)添加定时器,使用 `disabletimer` 取消,使用 `cleartimer` 清除所有定时器。
* **物品操作**:支持通过物品唯一ID(`itemobjbymakeindex`)或物品对象进行操作,更新物品信息到客户端使用 `updateitemtoclient`。
---
## 客户端详细实现
客户端逻辑主要在 `FGUILayout` 代码目录下的Lua脚本中实现,游戏启动进入世界后会依次加载 `OnGameStateInit.lua`、`OnGameStateLoading.lua`、`OnGameStateWorld.lua`、`FGUIUtil.lua` 等文件。
**UI与交互**:
* 使用UI编辑器(如编辑 `SkillPracticePanel` 界面)设计界面并绑定按钮点击等事件。
* 点击事件会触发客户端向服务器发送网络消息。例如,点击气功加点方案按钮会执行 `SL:SendNetMsg(90020101, 1, 1)` 向服务器发送查询请求。
**网络通信**:
* 客户端使用 `SL:SendNetMsg(msgID, paramInt1, paramInt2, paramInt3, paramStr)` 向服务器发送消息。
* 客户端使用 `SL:RegisterNetMsg(msgID, callbackFunction)` 注册接收服务器消息的监听。当收到服务器消息(如消息号90020102)后,在回调函数中处理,例如弹出对话框显示方案详情或保存/加载结果。
**资源与配置读取**:
* 客户端可以读取由源表(XLS)转换生成的Lua配置表,例如通过 `SL:GetValue("SKILL_QIGONG_BY_TYPE", 1)` 获取气功配置。
* 客户端负责加载并显示特效、称号(分为特效、文字、序列帧三种类型)、飘字等视觉资源。
**系统功能**:
* **称号模块**:相关UI文件为 `item_title.xml` 和 `LookPlayerPanel.xml`(手机端)或对应的PC端文件。客户端代码处理称号的显示、激活、取消等操作,服务器通过接口(如 `confertitle`, `deprivetitle`, `activetitle`)进行同步。
* **元变量获取**:客户端可以通过 `SL:GetValue` 获取一系列系统信息,如屏幕尺寸 (`SCREEN_WIDTH`, `SCREEN_HEIGHT`)、服务器时间 (`SERVER_TIME`)、安全区域 (`SCREEN_SAFE_AREA_ORIGIN`) 等。
← 返回问答库