NPCGotoMapOBJ = Up_BaseClass:new() NPCGotoMapOBJ._name = "NPCGotoMapOBJ" -- 配置文件 NPCGotoMapOBJ.cfg = Func.require("cfg_地图进入NPC") local function NPCGotoMapOBJ_for() local tbl = {} local id = {} local leavemap = {} for i, v in ipairs(NPCGotoMapOBJ.cfg) do table.insert(id, v.npcid) if not tbl[v.npcid] then tbl[v.npcid] = {} end table.insert(tbl[v.npcid], v) if v.LeaveMapCD then if v.pos then if type(v.pos) == "table" then leavemap[v.pos[1]] = { name = v.name, cd = v.LeaveMapCD } else leavemap[v.pos] = { name = v.name, cd = v.LeaveMapCD } end end if v.randompos then for _, pos in ipairs(v.randompos) do if type(pos) == "table" then leavemap[pos[1]] = { name = v.name, cd = v.LeaveMapCD } else leavemap[pos] = { name = v.name, cd = v.LeaveMapCD } end end end end end return tbl, id, leavemap end NPCGotoMapOBJ.npcid, NPCGotoMapOBJ.id, NPCGotoMapOBJ.LeaveMapCD = NPCGotoMapOBJ_for() -- ---* 加入上线同步数据 -- Player.sycCfg[NPCGotoMapOBJ._name] = NPCGotoMapOBJ.cfg for i, v in ipairs(NPCGotoMapOBJ.id or {}) do Npc.clicknpcCfg[v] = NPCGotoMapOBJ end function NPCGotoMapOBJ:main(actor, ...) local info = { ... } local data = {} data.npcid = info[1] data.cfg = self.npcid[info[1]] if data.cfg[1].parent then self:up(actor, nil, nil, nil, { { npcid = data.npcid, id = 1 } }) else Message:SubLink(actor, self._name .. "_main", data) end end function NPCGotoMapOBJ:up(actor, p1, p2, p3, data) if not data then self:violation(actor) return end local npcid = data[1].npcid local id = data[1].id if not Npc.CheckNPCRange(actor, npcid) then return end local cfg = self.npcid[npcid][id] if cfg.LeaveMapCD then local _time = Player.getint(actor, cfg.name) if os.time() - _time < cfg.LeaveMapCD then Func.sendmsg9(actor, string.format("[%s]#70|此地图进入CD%d秒,请稍等#251|%d秒后重试#215|.", cfg.name, cfg.LeaveMapCD, cfg.LeaveMapCD - (os.time() - _time))) return end end local check_bool = self:checkgotomap(actor, npcid, id) if check_bool then if cfg.dalu then local dalu = Player.getint(actor, VarCfg.Player.int["大陆开荒"]) or 0 if dalu < cfg.dalu then Player.setint(actor, VarCfg.Player.int["大陆开荒"], cfg.dalu) end end if cfg.varcale then for i, v in ipairs(cfg.varcale or {}) do if npcid == 26 and checkitemw(actor,"九秘珠",1) then break end local var = v[2] local calss = v[1] local _value = Player.getVar(actor, var, calss) Player.setVar(actor, var, _value + v[3], calss) end end if cfg.limitedTime then changemoney(actor, 21, "=", cfg.limitedTime * 60, "设置地图时效", true) end if type(cfg.pos) == "table" then MapCfg.gotomap(actor, cfg.pos[1], cfg.pos[2], cfg.pos[3]) else MapCfg.gotomap(actor, cfg.pos) end if cfg.randompos then local _random = math.random(1, #cfg.randompos) if type(cfg.randompos[_random]) == "table" then MapCfg.gotomap(actor, cfg.randompos[_random][1], cfg.randompos[_random][2], cfg.randompos[_random][3]) else MapCfg.gotomap(actor, cfg.randompos[_random]) end end if cfg.sendmsg then Func.sendmsg(actor, string.format("[地图传送]:#70|勇士#255|[%s]#215|闯入了#255|%s#215|%s!#255", Player.getname(actor), cfg.name, cfg.sendmsg), 1) end end end function NPCGotoMapOBJ:checkgotomap(actor, npcid, id) if not npcid or not id then self:violation(actor) return end local cfg = self.npcid[npcid][id] local check_bool = true if cfg.check and cfg.check_2 then local check_1 = Func.checkcontion(actor, cfg.check, false, true) local check_2 = Func.checkcontion(actor, cfg.check_2, false, true) if not check_1 and not check_2 then check_bool = false end end if cfg.check and not cfg.check_2 then if not Func.checkcontion(actor, cfg.check, false, true) then check_bool = false end end if not check_bool then -- Func.sendmsg9(actor, "[地图传送]:#70|进入条件不足,请检测!") return false end if cfg.xh then if Func.takeitmes(actor, cfg.xh, true, true) then return true else return false end end return true end ---* 打开仓库 function NPCGotoMapOBJ:opencanggku(actor) openstorage(actor) end ---* 开始挂机 function NPCGotoMapOBJ:startAuto(actor) local _map = getbaseinfo(actor, ConstCfg.gbase.mapid) if MapCfg.dalumap[_map] and MapCfg.dalumap[_map].Auto then Player.settempint(actor, VarCfg.playerTemp.int.guaji, 0) Func.sendmsg9(actor, "当前地图禁止挂机!") return end Player.settempint(actor, VarCfg.playerTemp.int.guaji, 1) startautoattack(actor) end ---* 停止挂机 function NPCGotoMapOBJ:endAuto(actor) Player.settempint(actor, VarCfg.playerTemp.int.guaji, 0) stopautoattack(actor) end ---* 立即传送 function NPCGotoMapOBJ:findmove(actor) local _map = getbaseinfo(actor, ConstCfg.gbase.mapid) local x = tonumber(getconst(actor, "<$ToPointX>")) or 0 local y = tonumber(getconst(actor, "<$ToPointY>")) or 0 if MapCfg.dalumap[_map] and MapCfg.dalumap[_map].findmove then Func.sendmsg9(actor, "当前地图禁止传送!") return end if x == 0 or y == 0 then Func.sendmsg9(actor, "请先设置传送坐标!") return end if gridattr(_map, x, y, 1) then local nowtime = os.time() if getgmlevel(actor) < 10 then local _cd = Player.getint(actor, VarCfg.Player.int["寻路传送"]) or 0 if nowtime < _cd then Func.sendmsg9(actor, string.format("传送冷却时间:#251|%d秒#215|!#251", _cd - nowtime)) return end end local DeCd = getbaseinfo(actor, ConstCfg.gbase.custom_attr, 253) or 0 Player.setint(actor, VarCfg.Player.int["寻路传送"], nowtime + (ConstCfg.FindMoveCd - DeCd)) MapCfg.gotomap(actor, _map, x, y) else Func.sendmsg9(actor, "当前坐标不可达!") end end function call_map_time_back(actor) senddelaymsg(actor, string.format("[地图计时]:倒计时:%ds,将强制离开地图.", querymoney(actor, 21)), 1, 250, 1, nil, 0) end ---* 离开地图事件 function NPCGotoMapOBJ.LeaveMapEvent(actor, mapId, x, y, mapId2) if NPCGotoMapOBJ.LeaveMapCD[mapId] then Player.setint(actor, NPCGotoMapOBJ.LeaveMapCD[mapId].name, os.time()) end end GameEvent.add(EventCfg.goLeaveMap, NPCGotoMapOBJ.LeaveMapEvent, NPCGotoMapOBJ) NPCGotoMapOBJ.allowFunc = {"up", "main"} return NPCGotoMapOBJ