bayuMIR/Mirserver/Mir200/Envir/Extension/UtilServer/Map.lua
2026-06-24 21:00:14 +08:00

214 lines
5 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

MapCfg = {}
MapCfg.MapInfo = require("Envir/QuestDiary/game_config/cfg_mapinfo.lua")
local function MapCfg_for()
local tbl = {}
for k, v in pairs(MapCfg.MapInfo or {}) do
tbl[tostring(v.zdymapid)] = v
end
return tbl
end
MapCfg.Info = MapCfg_for()
MapCfg.dalumap = Func.require("cfg_大陆地图信息")
MapCfg.daluCheck = {
[2] = { mapid = "神龙帝国", npcid = 29 },
}
function MapCfg.checkdalu(player, level, silent)
level = tonumber(level) or 1
if level <= 1 then
return true
end
local checkInfo = MapCfg.daluCheck[level]
if not checkInfo then
if not silent then
Func.sendmsg(player, "大陆进入条件未配置!")
end
return false
end
if not NPCGotoMapOBJ or not NPCGotoMapOBJ.checkCfg then
if not silent then
Func.sendmsg(player, "大陆进入条件未加载!")
end
return false
end
local data = nil
if checkInfo.mapid and NPCGotoMapOBJ.getMapCfg then
data = NPCGotoMapOBJ:getMapCfg(checkInfo.mapid)
end
local cfg = data and data.cfg
if not cfg and checkInfo.npcid and NPCGotoMapOBJ.npcid and NPCGotoMapOBJ.npcid[checkInfo.npcid] then
cfg = NPCGotoMapOBJ.npcid[checkInfo.npcid][1]
end
if not cfg then
if not silent then
Func.sendmsg(player, "大陆进入条件未配置!")
end
return false
end
return NPCGotoMapOBJ:checkCfg(player, cfg, false, silent)
end
----* 通用地图传送
function MapCfg.checkgotomap(player, mapid, silent)
if not isnotnull(player) then
return false
end
if not isplayer(player) then
return true
end
if getgmlevel(player) >= 10 then
return true
end
local cfg = MapCfg.dalumap[mapid]
if not cfg then
return false
end
if not MapCfg.checkdalu(player, cfg.level, silent) then
return false
end
if cfg.timer_close then
local SeverMin = Sys.getint(VarCfg.Global.int.SeverMin) or 0
if SeverMin >= cfg.timer_close then
if not silent then
Func.sendmsg9(player, string.format("开区%d分钟后已关闭!", SeverMin))
end
return false
end
end
if cfg.gongchen then
if castleinfo(5) then
if not silent then
Func.sendmsg9(player, "攻沙期间禁止下图!")
end
return false
end
end
if cfg.zhandou then
if Func.getzhandou(player) then
if not silent then
Func.sendmsg9(player, "战斗状态禁止传送")
end
return false
end
end
return true
end
----* 通用地图传送
function MapCfg.gotomap(player, ...)
if not isnotnull(player) then
return
end
local data = { ... }
if table.nums(data) == 0 then
return
end
local function gotomap()
if table.nums(data) > 1 then
mapmove(player, data[1], data[2], data[3], data[4] and data[4] or nil)
else
map(player, data[1])
end
end
if not MapCfg.checkgotomap(player, data[1]) then
return
end
gotomap()
end
---* 玩家进入地图触发
function entermap(actor,mapId,x,y,mapId2)
GameEvent.push(EventCfg.goEnterMap,actor,mapId,x,y,mapId2)
end
---* 玩家离开地图触发
function leavemap(actor,mapId,x,y,mapId2)
GameEvent.push(EventCfg.goLeaveMap,actor,mapId,x,y,mapId2)
end
---* 进入连接点出发
function beforeroute(actor, mapId, x, y)
local info = {}
info.bool = true
GameEvent.push(EventCfg.onbeforeroute, actor, mapId, x, y,info)
return info.bool
end
---* 离开镜像地图后触发删除镜像地图
local function MapCfg_LeaveMap(actor, mapId, x, y, mapId2)
-- local self_name = getbaseinfo(actor, ConstCfg.gbase.name)
-- if string.find(mapId, self_name, 0, true) ~= nil then
-- if checkmirrormap(mapId) then
-- local mapInfo_x = getmapinfo(mapId, 0)
-- local mapInfo_y = getmapinfo(mapId, 1)
-- local npcObj = getobjectinmap(mapId, mapInfo_x / 2, mapInfo_y / 2, math.max(mapInfo_x, mapInfo_y), 4)
-- for i, v in ipairs(npcObj or {}) do
-- local npcName = Player.getname(v)
-- delnpc(npcName, mapId)
-- end
-- delmirrormap(mapId)
-- end
-- end
end
GameEvent.add(EventCfg.goLeaveMap, MapCfg_LeaveMap, MapCfg)
local function _onkillmon(actor, mon, itype, kill, monName, mapID)
if monName == "暗之赤月恶魔" and mapID == "赤月魔穴" then
local npcInfo = {
["idx"] = 39, -- 自定义NPC的IdxNPC点击触发时触发参数会传回Idx值
["npcname"] = "赤月祭坛", -- NPC名称
["appr"] = 98, -- NPC外形效果
["script"] = '赤月祭坛', -- NPC相关脚本名称表示Envir/Market_def/NewNPC.txt
["limit"] = 65535, -- 生命周期 (秒)
["dir"] = 0, --npc朝向0-7
}
createnpc("赤月魔穴", 23, 18, tbl2json(npcInfo))
end
end
GameEvent.add(EventCfg.onKillMon, _onkillmon, MapCfg)
return MapCfg