function entermap(actor)
local config = include("QuestDiary/表/地图.lua")
if not config then
release_print("配置文件加载失败")
return
end
local playermap = getbaseinfo(actor, 3) -- 获取玩家当前地图
release_print("玩家进入地图:" .. pl
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-04-08 21:16:10 |
👁️ 阅读: 0
小仙你好!我是lua后端老师!
看到你的代码了,这个`entermap`触发写得不错,思路清晰。你想在地图不匹配或者离开匹配地图时删除临时属性,这个需求很常见。不过呢,你的代码目前只在进入地图时触发,没有处理离开地图的情况。
根据引擎的触发机制,你需要结合`leavemap`触发来实现完整的功能。我来帮你完善一下:
```lua
-- 进入地图触发
function entermap(actor, mapid, x, y)
local config = include("QuestDiary/表/地图.lua")
if not config then
release_print("配置文件加载失败")
return
end
local playermap = getbaseinfo(actor, 3) -- 获取玩家当前地图
release_print("玩家进入地图:" .. playermap)
-- 检查是否是二大陆的地图
local isSecondContinent = false
if config[2] and config[2].maps then
for _, mapName in ipairs(config[2].maps) do
if playermap == mapName then
release_print("匹配到二大陆地图:" .. mapName)
local specifyTargetRate2 = getbaseinfo(actor, 51, 241)
changehumnewvalue(actor, 65, specifyTargetRate2/100, 100)
release_print("========================")
isSecondContinent = true
break
end
end
end
-- 如果不是二大陆地图,删除临时属性
if not isSecondContinent then
changehumnewvalue(actor, 65, 0, 0) -- 删除临时属性
release_print("非二大陆地图,已删除临时属性")
end
end
-- 离开地图触发
function leavemap(actor, mapid, x, y)
local config = include("QuestDiary/表/地图.lua")
if not config then
return
end
local leavemapName = mapid -- 离开的地图名称
release_print("玩家离开地图:" .. leavemapName)
-- 检查离开的是否是二大陆的地图
if config[2] and config[2].maps then
for _, mapName in ipairs(config[2].maps) do
if leavemapName == mapName then
release_print("离开二大陆地图:" .. mapName)
changehumnewvalue(actor, 65, 0, 0) -- 删除临时属性
release_print("已删除临时属性")
return
end
end
end
end
```
**代码说明:**
1. **`entermap`触发优化**:
- 增加了参数`mapid, x, y`,这是引擎24.05.23版本新增的参数
- 添加了`isSecondContinent`标志来判断是否匹配到二大陆
- 如果进入的不是二大陆地图,立即删除临时属性
2. **新增`leavemap`触发**:
- 当玩家离开地图时触发
- 检查离开的是否是二大陆地图
- 如果是,则删除临时属性
3. **关键函数**:
- `changehumnewvalue(actor, 65, 0, 0)`:将65号新属性值设置为0,相当于删除临时属性
- `getbaseinfo(actor, 3)`:获取玩家当前地图名称
**使用建议:**
1. **配置文件结构**:确保你的`地图.lua`配置文件结构正确,例如:
```lua
return {
[1] = { -- 一大陆
maps = {"盟重省", "比奇省", "毒蛇山谷"}
},
[2] = { -- 二大陆
maps = {"天空之城", "魔龙城", "狐月山"}
}
}
```
2. **测试方法**:
- 进入二大陆地图,查看属性是否添加
- 离开二大陆地图,查看属性是否删除
- 直接进入非二大陆地图,查看属性是否被清理
3. **注意事项**:
- 确保QF脚本中有`[@entermap]`和`[@leavemap]`的触发配置
- 临时属性编号65不要和其他系统冲突
- 使用`release_print`输出调试信息,方便排查问题
这样修改后,无论玩家是进入非二大陆地图,还是从二大陆地图离开,临时属性都会被正确清理。如果还有不明白的地方,随时问我哦!
小仙你好!我是lua后端老师!
看到你的代码了,这个`entermap`触发写得不错,思路清晰。你想在地图不匹配或者离开匹配地图时删除临时属性,这个需求很常见。不过呢,你的代码目前只在进入地图时触发,没有处理离开地图的情况。
根据引擎的触发机制,你需要结合`leavemap`触发来实现完整的功能。我来帮你完善一下:
```lua
-- 进入地图触发
function entermap(actor, mapid, x, y)
local config = include("QuestDiary/表/地图.lua")
if not config then
release_print("配置文件加载失败")
return
end
local playermap = getbaseinfo(actor, 3) -- 获取玩家当前地图
release_print("玩家进入地图:" .. playermap)
-- 检查是否是二大陆的地图
local isSecondContinent = false
if config[2] and config[2].maps then
for _, mapName in ipairs(config[2].maps) do
if playermap == mapName then
release_print("匹配到二大陆地图:" .. mapName)
local specifyTargetRate2 = getbaseinfo(actor, 51, 241)
changehumnewvalue(actor, 65, specifyTargetRate2/100, 100)
release_print("========================")
isSecondContinent = true
break
end
end
end
-- 如果不是二大陆地图,删除临时属性
if not isSecondContinent then
changehumnewvalue(actor, 65, 0, 0) -- 删除临时属性
release_print("非二大陆地图,已删除临时属性")
end
end
-- 离开地图触发
function leavemap(actor, mapid, x, y)
local config = include("QuestDiary/表/地图.lua")
if not config then
return
end
local leavemapName = mapid -- 离开的地图名称
release_print("玩家离开地图:" .. leavemapName)
-- 检查离开的是否是二大陆的地图
if config[2] and config[2].maps then
for _, mapName in ipairs(config[2].maps) do
if leavemapName == mapName then
release_print("离开二大陆地图:" .. mapName)
changehumnewvalue(actor, 65, 0, 0) -- 删除临时属性
release_print("已删除临时属性")
return
end
end
end
end
```
**代码说明:**
1. **`entermap`触发优化**:
- 增加了参数`mapid, x, y`,这是引擎24.05.23版本新增的参数
- 添加了`isSecondContinent`标志来判断是否匹配到二大陆
- 如果进入的不是二大陆地图,立即删除临时属性
2. **新增`leavemap`触发**:
- 当玩家离开地图时触发
- 检查离开的是否是二大陆地图
- 如果是,则删除临时属性
3. **关键函数**:
- `changehumnewvalue(actor, 65, 0, 0)`:将65号新属性值设置为0,相当于删除临时属性
- `getbaseinfo(actor, 3)`:获取玩家当前地图名称
**使用建议:**
1. **配置文件结构**:确保你的`地图.lua`配置文件结构正确,例如:
```lua
return {
[1] = { -- 一大陆
maps = {"盟重省", "比奇省", "毒蛇山谷"}
},
[2] = { -- 二大陆
maps = {"天空之城", "魔龙城", "狐月山"}
}
}
```
2. **测试方法**:
- 进入二大陆地图,查看属性是否添加
- 离开二大陆地图,查看属性是否删除
- 直接进入非二大陆地图,查看属性是否被清理
3. **注意事项**:
- 确保QF脚本中有`[@entermap]`和`[@leavemap]`的触发配置
- 临时属性编号65不要和其他系统冲突
- 使用`release_print`输出调试信息,方便排查问题
这样修改后,无论玩家是进入非二大陆地图,还是从二大陆地图离开,临时属性都会被正确清理。如果还有不明白的地方,随时问我哦!
← 返回问答库