bayuMIR/Mirserver/Mir200/Envir/QuestDiary/游戏功能/A0_通用类/活动大厅.lua
2026-06-18 02:06:14 +08:00

378 lines
12 KiB
Lua
Raw 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.

HuodongzhongxinOBJ = Up_BaseClass:new()
HuodongzhongxinOBJ._name = "HuodongzhongxinOBJ"
---* 注册变量排行
RegRankVar("INT_大乱斗积分", 0, 1, 100, 0)
-- 配置文件
HuodongzhongxinOBJ.cfg = {
[1] = {
name = "圣域夺宝",
msg = [[每日 10点-11点、 16点-17点开启圣域夺宝。
地图内刷新超多不同级别的boss爆率超高等你来战。
活动结束后将会强制传送出地图。
进入条件4转及以上玩家可进入。]],
map = "圣域",
check = {
{ "检测转生", "不小于", 4 },
},
},
[2] = {
name = "冰魔之地",
msg = [[共三层,清除完当前地图怪物可进入下一层,
最后1层刷新超级boss。
开启时间每日12点-14点13.30将不可再进入,
14点将强制传送出去。
]],
map = "起始之地",
},
[3] = {
name = "大乱斗",
msg = [[报名人数大于10人活动开启等级不低于4转。
开启时间每周246 19.30点(19.25开启报名)
1.达到开启条件后19.30自动传送进入活动场地
2.人物死亡后出局 回到盟重安全区
3.每击杀1人获得10点积分地图中每3秒自动获得1点
4.活动时间结束后 邮件自动发放奖励。
]],
map = "勇者大乱斗",
check = {
{ "比较数字变量", VarCfg.Player.TL.int["大乱斗已报名"], "周期", "大于", 0 },
},
},
}
----*计划任务表
HuodongzhongxinOBJ.Scheduled = {
[1] = {
name = "开启圣域夺宝",
time = "10:00:00#16:00:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_shengyu_start",
param = nil,
},
[2] = {
name = "关闭圣域夺宝",
time = "11:00:00#17:00:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_shengyu_end",
param = nil,
},
[4] = {
name = "零点清理活动状态",
time = "00:01:00#14:00:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_setstatus",
param = nil,
},
[6] = {
name = "冰魔之地开启",
time = "12:00:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_binmo_start",
param = nil,
},
[7] = {
name = "冰魔之地结束",
time = "14:00:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_binmo_on",
param = nil,
},
[8] = {
name = "冰魔之地停止进入",
time = "13:30:00",
itype = 1, --* 每天执行
func = "huodongzhongxinobj_binmo_closemap",
param = nil,
},
[9] = {
name = "大乱斗开启报名",
time = "2 19:25:00#4 19:25:00#6 19:25:00",
itype = 2, --* 每周执行
func = "huodongzhongxinobj_daluandou_baoming",
param = nil,
},
[10] = {
name = "大乱斗开启",
time = "2 19:30:00#4 19:30:00#6 19:30:00",
itype = 2, --* 每周执行
func = "huodongzhongxinobj_daluandou_start",
param = nil,
},
[11] = {
name = "大乱斗结束",
time = "2 20:00:00#4 20:00:00#6 20:00:00",
itype = 2, --* 每周执行
func = "huodongzhongxinobj_daluandou_end",
param = nil,
},
}
for i, v in pairs(HuodongzhongxinOBJ.Scheduled or {}) do
table.insert(RebotOBJ.Scheduled, v)
end
-- ---* 加入上线同步数据
Player.sycCfg[HuodongzhongxinOBJ._name] = HuodongzhongxinOBJ.cfg
for i, v in ipairs(HuodongzhongxinOBJ.id or {}) do
Npc.clicknpcCfg[v] = HuodongzhongxinOBJ
end
HuodongzhongxinOBJ.openVar = {
VarCfg.sys.int["圣域夺宝"],
VarCfg.sys.int["冰魔之地"],
VarCfg.sys.int["大乱斗"],
}
HuodongzhongxinOBJ.BingMoMon = Func.require("cfg_冰魔之地刷怪")
function HuodongzhongxinOBJ:up(actor, p1, p2, p3, data)
local id = data[1]
if not data or not id then
return
end
---* 检测活动状态
local _status = Sys.getint(self.openVar[id]) or 0
if _status ~= 1 then
return Func.sendmsg9(actor, "[活动大厅]:#70|活动未开启,不可进入!")
end
local func = self.cfg[id]
local _mapid = getbaseinfo(actor, ConstCfg.gbase.mapid)
if _mapid == func.map then
return Func.sendmsg9(actor, "你已经在活动地图了!#249")
end
if func.check then
if Func.checkcontion(actor, func.check, true, true) then
Message:SubLink(actor, self._name .. "_close", data)
MapCfg.gotomap(actor, func.map)
if id == 3 then
addbuff(actor, 10025)
end
end
else
Message:SubLink(actor, self._name .. "_close", data)
MapCfg.gotomap(actor, func.map)
end
end
--------------------------------------*圣域夺宝
function huodongzhongxinobj_shengyu_start(sys)
Sys.setint(VarCfg.sys.int["圣域夺宝"], 1)
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]圣域夺宝已经开启,可通过活动大厅进入!")))
end
function huodongzhongxinobj_shengyu_end(sys)
local player_list = getplayerlst(0)
for i, player in ipairs(player_list or {}) do
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
if mapid == "圣域" then
MapCfg.gotomap(actor, "3", 330, 330, 8)
end
end
Sys.setint(VarCfg.sys.int["圣域夺宝"], 2)
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]圣域夺宝已经结束!")))
end
function huodongzhongxinobj_setstatus(sys)
Sys.setint(VarCfg.sys.int["圣域夺宝"], 0)
end
--------------------------------------*冰魔之地
function huodongzhongxinobj_binmo_start(sys)
Sys.setint(VarCfg.sys.int["冰魔之地"], 1)
for i, v in ipairs(HuodongzhongxinOBJ.BingMoMon or {}) do
local MonNum = getmoncount(v.MapID, getdbmonfieldvalue(v.MonName, ConstCfg.monbase[1][1]), true)
if MonNum > 0 then
killmonsters(v.MapID, v.MonName, 0, true, true)
end
local MapInfo_width = getmapinfo(v.MapID, 0)
local MapInfo_height = getmapinfo(v.MapID, 1)
local _x = v.x and v.x or math.floor(MapInfo_width / 2)
local _y = v.y and v.y or math.floor(MapInfo_height / 2)
local _range = v.range and v.range or math.floor(math.max(MapInfo_width, MapInfo_height) / 2)
genmon(v.MapID, _x, _y, v.MonName, _range, v.Num, v.color and v.color or 215)
end
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]冰魔之地已经开启,可通过活动大厅进入!")))
end
function HuodongzhongxinOBJ_BinMo_End(sys)
local player_list = getplayerlst(0)
for i, player in ipairs(player_list or {}) do
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
if mapid == "起始之地" or mapid == "魔兽前哨" or mapid == "巨魔巢穴" then
MapCfg.gotomap(player, "3", 330, 330, 8)
end
end
Sys.setint(VarCfg.sys.int["冰魔之地"], 3)
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]冰魔之地已经结束!")))
end
function huodongzhongxinobj_binmo_closemap(sys)
Sys.setint(VarCfg.sys.int["冰魔之地"], 2)
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]冰魔之地已经关闭入口!")))
end
--------------------------------------*大乱斗
---* 报名
function huodongzhongxinobj_daluandou_baoming(sys)
local _bool = Sys.getint(VarCfg.sys.int["大乱斗报名"]) > 0 and true or false
if not _bool then
Sys.setint(VarCfg.sys.int["大乱斗报名"], 1)
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]大乱斗已经开启报名,可通过活动大厅进行报名,5分钟后活动开启!")))
end
end
-- huodongzhongxinobj_daluandou_baoming()
---* 开启活动
function huodongzhongxinobj_daluandou_start(sys)
local _RegisterNum = Sys.getTLint(VarCfg.sys.TL.int["大乱斗报名人数"]) or 0
Sys.setint(VarCfg.sys.int["大乱斗报名"], 0)
if _RegisterNum < 0 then
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]由于勇者大乱斗报名人数低于10人,本次大乱斗无法开启!")))
return
end
Sys.setint(VarCfg.sys.int["大乱斗"], 1)
local player_list = getplayerlst(0)
for i, player in ipairs(player_list or {}) do
local _bool = Player.getTLint(player, VarCfg.Player.TL.int["大乱斗已报名"]) or 0
if _bool > 0 then
local _mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
if _mapid ~= "勇者大乱斗" then
MapCfg.gotomap(player, "勇者大乱斗")
addbuff(player, 10025)
end
end
end
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]勇者大乱斗已经开启,已报名的玩家将自动传送至地图!")))
end
-- huodongzhongxinobj_daluandou_start()
---* 结束活动
function huodongzhongxinobj_daluandou_end(sys)
if Sys.getint(VarCfg.sys.int["大乱斗"]) > 0 then
Sys.setint(VarCfg.sys.int["大乱斗"], 0)
local player_list = getplayerlst(0)
for i, player in ipairs(player_list or {}) do
local _bool = Player.getTLint(player, VarCfg.Player.TL.int["大乱斗已报名"])
if _bool then
local _mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
if _mapid == "勇者大乱斗" then
Player.setTLint(player, VarCfg.Player.TL.int["大乱斗已报名"], 0)
MapCfg.gotomap(player, "3", 330, 330, 8)
end
end
end
sendmsg(-1, 2, string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]勇者大乱斗已经结束,奖励直接发送到胜利者邮件,请保持在线!")))
end
end
----* 注册事件
local function HuodongzhongxinOBJ_struckdamage(actor, target, hitter, magicId, damage, model, Info)
if Info.target_Name == "冰眼巨魔" then
if Info.target_curhp_per < 50 then
local _num = 0
for i = 1, 2, 1 do
_num = _num + getmoncount(Info.self_map, getdbmonfieldvalue("冰眼巨魔(分身)" .. i, ConstCfg.monbase[1][1]), true)
end
if _num == 0 then
local fensheng_1 = genmonex(Info.self_map, Info.self_x, Info.self_y, "冰眼巨魔(分身)1", 5, 1, 0, 249, "冰眼巨魔", 0)
local fensheng_2 = genmonex(Info.self_map, Info.self_x, Info.self_y, "冰眼巨魔(分身)2", 5, 1, 0, 249, "冰眼巨魔", 0)
for i, v in ipairs(fensheng_1 or {}) do
addhpper(v, "=", 50)
end
for i, v in ipairs(fensheng_2 or {}) do
addhpper(v, "=", 50)
end
end
-- Info._damage = 0
-- else
-- Info._damage = 6000
end
end
end
GameEvent.add(EventCfg.onAttackMondamage, HuodongzhongxinOBJ_struckdamage, HuodongzhongxinOBJ)
-----* 大乱斗报名
function HuodongzhongxinOBJ:BaoMing(actor)
local _relevel = getbaseinfo(actor, ConstCfg.gbase.renew_level) or 0
if _relevel < 4 then
return Func.sendmsg9(actor, "[大乱斗]:#70|您的转生不足4转,不可报名!")
end
local _bool = Player.getTLint(actor, VarCfg.Player.TL.int["大乱斗已报名"]) > 0 and true or false
if _bool then
Func.sendmsg9(actor, "[大乱斗]:#70|您已经报过名了,请保持在线并等待活动开启!")
else
local _RegisterNum = Sys.getTLint(VarCfg.sys.TL.int["大乱斗报名人数"]) or 0
Sys.setTLint(VarCfg.sys.TL.int["大乱斗报名人数"], _RegisterNum + 1)
Player.setTLint(actor, VarCfg.Player.TL.int["大乱斗已报名"], 1)
Func.sendmsg9(actor, "[大乱斗]:#70|恭喜您报名成功,请保持在线并等待活动开启!")
end
end
-----------* 大乱斗杀人事件
local function HuodongzhongxinOBJ_killplay(actor, killed, Info)
if Sys.getint(VarCfg.sys.int["大乱斗"]) > 0 then
local self_points = Player.getTLint(actor, VarCfg.Player.TL.int["大乱斗积分"]) or 0
Player.setTLint(actor, VarCfg.Player.TL.int["大乱斗积分"], self_points + 10)
end
end
GameEvent.add(EventCfg.onkillplay, HuodongzhongxinOBJ_killplay, HuodongzhongxinOBJ)
------* 大乱斗获取排名
function HuodongzhongxinOBJ:luandouGetData(actor, p1, p2, p3, sendata)
LOGPrint(tbl2json(sendata))
local sendID = sendata and json2tbl(sendata)[1] or 10001
local data = {}
data.Rank = GetRankVar(VarCfg.Player.TL.int["大乱斗积分"], 10, 0)
data.self = {
Rank = GetPlayRankVar(actor, VarCfg.Player.TL.int["大乱斗积分"]),
jifen = Player.getTLint(actor, VarCfg.Player.TL.int["大乱斗积分"]) or 0,
}
sendluamsg(actor, sendID, 0, 0, 0, tbl2json(data))
end
HuodongzhongxinOBJ.allowFunc = {"luandouGetData", "up", "BaoMing"}
return HuodongzhongxinOBJ