检测英雄名称是否可用
checkheroname
参数 类型 空 默认 注释
play object 否 玩家对象
name string 否 英雄名称
说明书上的这个是怎么用的? 我要怎样测试?
if checkheroname(play,"哈哈哈2哈") then
release_print("可以使用")
else
release_print("不可以使用~~~")
end
我这样写完不管填写什么名字打印的结果都是:[202
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-25 14:39:42 |
👁️ 阅读: 10
哈喽,我是lua后端老师!
小仙,你这个问题问得很好,说明你已经动手尝试了。你遇到的“不管填什么名字都返回不可用”的情况,是因为你对 `checkheroname` 这个接口的用法理解有偏差。
根据说明书,`checkheroname` 这个函数本身并不会直接返回 `true` 或 `false`。它是一个**异步**的检查过程,会触发引擎的 **QF触发** 来告诉你结果。
简单来说,它的工作流程是这样的:
1. 你调用 `checkheroname(玩家对象, “英雄名字”)`。
2. 引擎在后台检查这个名字是否合法、是否已存在。
3. 检查完成后,引擎会去 **QF脚本(QFunction-0.lua)** 里寻找对应的触发函数,并执行它,把结果“通知”给你。
所以,你不能直接判断 `checkheroname` 的返回值。正确的用法需要配合 **QF触发** 来使用。你需要先在 QF 脚本里写好名字检查成功和失败后的处理逻辑。
这里给你一个完整的测试示例:
首先,在你调用 `checkheroname` 的地方(比如NPC对话脚本里):
```lua
-- 假设玩家对象是 actor
local test_hero_name = “测试英雄名”
checkheroname(actor, test_hero_name)
release_print(“已向服务器提交英雄名:” .. test_hero_name .. “的检查请求”)
```
然后,非常重要的一步,在你的 **QFunction-0.lua** 文件中,需要添加以下两个触发函数:
```lua
-- 英雄取名成功触发 (名字可用时触发)
function checkusernameok(actor)
sendmsg(actor, 1, ‘{“Msg”:“<font color=\‘#ff0000\‘>恭喜,英雄名字【‘ .. getbaseinfo(actor, 1) .. ‘】可以使用!</font>“,“Type”:9}’)
release_print(“玩家” .. getbaseinfo(actor, 1) .. “的英雄名检查通过,可用”)
-- 这里可以接着执行创建英雄的代码,例如:
-- local job, sex = getbaseinfo(actor,7), getbaseinfo(actor,8)
-- createhero(actor, “测试英雄名”, job, sex)
end
-- 英雄取名失败触发 (名字不可用时触发)
function checkusernameno(actor)
sendmsg(actor, 1, ‘{“Msg”:“<font color=\‘#ff0000\‘>英雄名字已经存在或非法,请换一个!</font>“,“Type”:9}’)
release_print(“玩家” .. getbaseinfo(actor, 1) .. “的英雄名检查未通过,不可用”)
end
```
**测试方法:**
1. 确保你的 QF 脚本里已经写好了 `checkusernameok` 和 `checkusernameno` 这两个函数。
2. 在游戏中通过NPC或其他方式执行 `checkheroname(actor, “某个名字”)`。
3. 观察游戏内的聊天框提示(`sendmsg` 的效果)和服务端的 `release_print` 输出。
* 如果名字**没人用过且合法**,你会看到“恭喜...”的提示。
* 如果名字**已被占用或非法**,你会看到“英雄名字已经存在...”的提示。
你之前写法的问题就在于,`checkheroname` 的返回值并不是检查结果,它只是发起了一个检查请求。真正的结果是通过 **QF触发事件** 来回调的。这下明白了吗,小仙?
哈喽,我是lua后端老师!
小仙,你这个问题问得很好,说明你已经动手尝试了。你遇到的“不管填什么名字都返回不可用”的情况,是因为你对 `checkheroname` 这个接口的用法理解有偏差。
根据说明书,`checkheroname` 这个函数本身并不会直接返回 `true` 或 `false`。它是一个**异步**的检查过程,会触发引擎的 **QF触发** 来告诉你结果。
简单来说,它的工作流程是这样的:
1. 你调用 `checkheroname(玩家对象, “英雄名字”)`。
2. 引擎在后台检查这个名字是否合法、是否已存在。
3. 检查完成后,引擎会去 **QF脚本(QFunction-0.lua)** 里寻找对应的触发函数,并执行它,把结果“通知”给你。
所以,你不能直接判断 `checkheroname` 的返回值。正确的用法需要配合 **QF触发** 来使用。你需要先在 QF 脚本里写好名字检查成功和失败后的处理逻辑。
这里给你一个完整的测试示例:
首先,在你调用 `checkheroname` 的地方(比如NPC对话脚本里):
```lua
-- 假设玩家对象是 actor
local test_hero_name = “测试英雄名”
checkheroname(actor, test_hero_name)
release_print(“已向服务器提交英雄名:” .. test_hero_name .. “的检查请求”)
```
然后,非常重要的一步,在你的 **QFunction-0.lua** 文件中,需要添加以下两个触发函数:
```lua
-- 英雄取名成功触发 (名字可用时触发)
function checkusernameok(actor)
sendmsg(actor, 1, ‘{“Msg”:“<font color=\‘#ff0000\‘>恭喜,英雄名字【‘ .. getbaseinfo(actor, 1) .. ‘】可以使用!</font>“,“Type”:9}’)
release_print(“玩家” .. getbaseinfo(actor, 1) .. “的英雄名检查通过,可用”)
-- 这里可以接着执行创建英雄的代码,例如:
-- local job, sex = getbaseinfo(actor,7), getbaseinfo(actor,8)
-- createhero(actor, “测试英雄名”, job, sex)
end
-- 英雄取名失败触发 (名字不可用时触发)
function checkusernameno(actor)
sendmsg(actor, 1, ‘{“Msg”:“<font color=\‘#ff0000\‘>英雄名字已经存在或非法,请换一个!</font>“,“Type”:9}’)
release_print(“玩家” .. getbaseinfo(actor, 1) .. “的英雄名检查未通过,不可用”)
end
```
**测试方法:**
1. 确保你的 QF 脚本里已经写好了 `checkusernameok` 和 `checkusernameno` 这两个函数。
2. 在游戏中通过NPC或其他方式执行 `checkheroname(actor, “某个名字”)`。
3. 观察游戏内的聊天框提示(`sendmsg` 的效果)和服务端的 `release_print` 输出。
* 如果名字**没人用过且合法**,你会看到“恭喜...”的提示。
* 如果名字**已被占用或非法**,你会看到“英雄名字已经存在...”的提示。
你之前写法的问题就在于,`checkheroname` 的返回值并不是检查结果,它只是发起了一个检查请求。真正的结果是通过 **QF触发事件** 来回调的。这下明白了吗,小仙?
← 返回问答库