跨服
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-05-25 01:37:06 |
👁️ 阅读: 0
我是lua后端老师!
小仙,你想了解跨服相关的知识对吧?跨服功能在996引擎中是一个比较重要的系统,它允许玩家在不同服务器之间进行互动,比如跨服战场、跨服活动等。
下面我为你梳理一下跨服的核心要点:
---
### 1. **跨服的基本设置**
- 需要复制一份 `Mir200` 目录并重命名为 `Mir200-KF`,修改其中的 `!Setup.txt` 配置。
- 在引擎控制器中勾选“开启跨服”并保存。
- 跨服服务器需要单独运行一个 `m2server.exe`(即两个M2程序同时运行)。
---
### 2. **跨服相关的地图与NPC**
- 地图需要在 `MapInfo.txt` 中标记参数 `Kuafu`,这样跨服服务器才会加载该地图。
- NPC 需要在 `cfg_npclist.xls` 中配置显示,并放置于跨服地图中。
- 跨服地图中的 NPC 脚本执行时会返回本服,因此如果需要在跨服中执行功能,建议写在跨服 QF 的 `kflogin` 触发中。
---
### 3. **跨服触发与通信**
- **进入跨服触发**:跨服服务器的 `QFunction-0.lua` 中的 `kflogin` 函数。
- **离开跨服触发**:本服 `QFunction-0.lua` 中的 `kuafuend` 函数。
- **本服通知跨服**:使用 `bfbackcall` 函数。
- **跨服通知本服**:使用 `kfbackcall` 函数。
示例:
```lua
-- 本服发送通知到跨服
local userID = getbaseinfo(actor, 2)
bfbackcall(22, userID, "消息1", "消息2")
-- 跨服接收通知并触发本服QF
function kfsyscall22(actor, arg1, arg2)
local role_name = getbaseinfo(actor, 1)
release_print("跨服通知触发本服QF", role_name, arg1, arg2)
end
```
---
### 4. **跨服变量同步**
- 跨服不支持全局变量(G/A)直接同步,需要使用 `synzvar` 函数进行传递。
- 支持同步的变量类型包括:全局G变量、全局A变量、全局自定义变量、行会变量。
示例:
```lua
-- 同步全局变量
local varName_1 = "G15"
local varName_2 = "G16"
if checkkuafuserver() then
setsysvar(varName_1, getsysvar(varName_1) + 1)
release_print("跨服", varName_1, "值:" .. getsysvar(varName_1))
else
if not kfsynvar1 then
function kfsynvar1()
release_print("同步成功", getsysvar(varName_2))
end
end
synzvar(1, varName_1, varName_2, 1)
end
```
---
### 5. **跨服检测函数**
- `checkkuafuserver()`:检测当前服务器是否为跨服服务器。
- `checkkuafu(actor)`:检测玩家是否在跨服地图。
- `checkkuafuconnect()`:检测跨服连接是否正常。
- `kuafuusergohome()`:将所有跨服玩家传送回本服。
示例:
```lua
local isKuafuSever = checkkuafuserver()
release_print("是否为跨服服务器:", tostring(isKuafuSever))
local isKuafuMap = checkkuafu(actor)
release_print("是否在跨服地图:", tostring(isKuafuMap))
```
---
### 6. **注意事项**
- 跨服服务器**不支持**修改人物属性、背包掉落、拍卖行、交易、邮件等功能。
- 跨服QF中不支持对称号、地图变量进行操作。
- 定时器和机器人脚本需要设置跨服执行参数(如 `#AutoRun NPC SEC 5 @shili2 2`)。
---
如果你有具体的跨服功能想实现,比如跨服活动、跨服战场,可以告诉我你的需求,我来帮你写代码!😊
← 返回问答库