我需要在 GUIUtil.lua 里面写 攻击怪物可以获取怪物的名字
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-05 17:47:13 |
👁️ 阅读: 12
要在攻击怪物时获取怪物名字,你可以通过服务端传递怪物ID,然后在前端获取怪物配置信息。以下是实现方法:
```lua
-- 在GUIUtil.lua中添加
local function attackMonsterCallback(msgID, monsterID, _, _, actorID)
-- 获取怪物配置(假设服务端传递了怪物ID)
local monsterCfg = SL:GetMetaValue("MONSTER_CFG", monsterID)
if monsterCfg then
-- 从配置中获取怪物名字
local monsterName = monsterCfg.name or "未知怪物"
SL:Print("攻击了怪物:" .. monsterName)
-- 这里可以显示到UI上
local parent = GUI:Win_FindParent(102) -- 找到主界面
if parent and not GUI:Win_IsNull(parent) then
local textNode = GUI:getChildByName(parent, "Text_monsterInfo")
if GUI:Win_IsNull(textNode) then
-- 创建显示文本
textNode = GUI:Text_Create(parent, "Text_monsterInfo", 100, 100, 16, "#ff0000", "")
GUI:Text_enableOutline(textNode, "#000000", 1)
end
GUI:Text_setString(textNode, "正在攻击:" .. monsterName)
-- 3秒后清除显示
SL:ScheduleOnce(function()
if not GUI:Win_IsNull(textNode) then
GUI:Text_setString(textNode, "")
end
end, 3)
end
end
end
-- 注册攻击事件(需要服务端配合发送消息)
SL:RegisterLUAEvent(LUA_EVENT_ATTACK_MONSTER, "GUIUtil", attackMonsterCallback)
```
**服务端配合示例(QFunction-0.lua):**
```lua
-- 玩家攻击怪物时
function attack(actor, Target, Hiter, MagicId)
if ismon(Target) then
local monsterID = getbaseinfo(Target, 2) -- 获取怪物ID
sendrefluamsg(actor, 9998, monsterID, 0, 0, actor) -- 发送给前端
end
end
```
**关键点说明:**
1. `SL:GetMetaValue("MONSTER_CFG", monsterID)` - 获取怪物配置信息
2. `monsterCfg.name` - 从配置中读取怪物名字字段
3. `SL:RegisterLUAEvent` - 注册前端事件监听
4. `sendrefluamsg` - 服务端发送消息给前端(9998是自定义消息ID)
**注意事项:**
- 需要服务端在攻击时发送怪物ID到前端
- 怪物名字字段名可能是`name`、`monsterName`等,根据实际配置表调整
- 显示UI时要做好空值判断,使用`GUI:Win_IsNull()`检查控件
这样当玩家攻击怪物时,前端就能获取并显示怪物名字了!
← 返回问答库