611 lines
22 KiB
Lua
611 lines
22 KiB
Lua
HuodongzhongxinOBJ = Up_BaseClass:new()
|
||
|
||
|
||
HuodongzhongxinOBJ._name = "HuodongzhongxinOBJ"
|
||
|
||
|
||
---* 注册变量排行
|
||
RegRankVar("INT_大乱斗积分", 0, 1, 100, 0)
|
||
|
||
|
||
HuodongzhongxinOBJ.DaLuanDouRewardCfg = {
|
||
[1] = { rankName = "第一名", rewardText = "金币200w 千年玄石500 混沌碎片宝箱*3", items = { { "金币", 2000000, 0 }, { "千年玄石", 500, 0 }, { "混沌碎片宝箱", 3, 0 } } },
|
||
[2] = { rankName = "第二名", rewardText = "金币150w 千年玄石300 混沌碎片宝箱*2", items = { { "金币", 1500000, 0 }, { "千年玄石", 300, 0 }, { "混沌碎片宝箱", 2, 0 } } },
|
||
[3] = { rankName = "第三名", rewardText = "金币100w 千年玄石200 混沌碎片宝箱*1", items = { { "金币", 1000000, 0 }, { "千年玄石", 200, 0 }, { "混沌碎片宝箱", 1, 0 } } },
|
||
[4] = { rankName = "第四名", rewardText = "金币80w 千年玄石100 100万经验卷*20", items = { { "金币", 800000, 0 }, { "千年玄石", 100, 0 }, { "100万经验卷", 20, 0 } } },
|
||
[5] = { rankName = "第五名", rewardText = "金币60w 千年玄石60 100万经验卷*15", items = { { "金币", 600000, 0 }, { "千年玄石", 60, 0 }, { "100万经验卷", 15, 0 } } },
|
||
[6] = { rankName = "第六名", rewardText = "金币50w 千年玄石50 100万经验卷*10", items = { { "金币", 500000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
[7] = { rankName = "第七名", rewardText = "金币40w 千年玄石50 100万经验卷*10", items = { { "金币", 400000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
[8] = { rankName = "第八名", rewardText = "金币30w 千年玄石50 100万经验卷*10", items = { { "金币", 300000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
[9] = { rankName = "第九名", rewardText = "金币20w 千年玄石50 100万经验卷*10", items = { { "金币", 200000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
[10] = { rankName = "第十名", rewardText = "金币10w 千年玄石50 100万经验卷*10", items = { { "金币", 100000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
[0] = { rankName = "参与奖", rewardText = "金币5w 千年玄石50 100万经验卷*10", items = { { "金币", 50000, 0 }, { "千年玄石", 50, 0 }, { "100万经验卷", 10, 0 } } },
|
||
}
|
||
|
||
function HuodongzhongxinOBJ:getDaluandouReward(rank)
|
||
rank = tonumber(rank) or 0
|
||
if rank >= 1 and rank <= 10 then
|
||
return self.DaLuanDouRewardCfg[rank]
|
||
end
|
||
return self.DaLuanDouRewardCfg[0]
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:buildDaluandouRewardMsg()
|
||
local str = { "", "大乱斗奖励:" }
|
||
for i = 1, 10 do
|
||
local cfg = self:getDaluandouReward(i)
|
||
table.insert(str, string.format("%s:%s", cfg.rankName, cfg.rewardText))
|
||
end
|
||
local joinCfg = self:getDaluandouReward(0)
|
||
table.insert(str, string.format("%s:%s", joinCfg.rankName, joinCfg.rewardText))
|
||
return table.concat(str, "\n")
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:getDaluandouRewardItems(rewardCfg)
|
||
local items = {}
|
||
for _, item in ipairs(rewardCfg.items or {}) do
|
||
table.insert(items, table.concat(item, "#"))
|
||
end
|
||
return table.concat(items, "&")
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:getDaluandouRewardItemList(rewardCfg)
|
||
local items = {}
|
||
for _, item in ipairs(rewardCfg.items or {}) do
|
||
table.insert(items, {
|
||
name = item[1],
|
||
count = item[2],
|
||
bind = item[3] or 0,
|
||
})
|
||
end
|
||
return items
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:getDaluandouRewardList()
|
||
local list = {}
|
||
for i = 1, 10 do
|
||
local cfg = self:getDaluandouReward(i)
|
||
table.insert(list, { rank = i, rankName = cfg.rankName, rewardText = cfg.rewardText, rewardItems = self:getDaluandouRewardItemList(cfg) })
|
||
end
|
||
local joinCfg = self:getDaluandouReward(0)
|
||
table.insert(list, { rank = 0, rankName = joinCfg.rankName, rewardText = joinCfg.rewardText, rewardItems = self:getDaluandouRewardItemList(joinCfg) })
|
||
return list
|
||
end
|
||
function HuodongzhongxinOBJ:filterDaluandouRank(rankList)
|
||
local data = {}
|
||
for _, v in ipairs(rankList or {}) do
|
||
local name = v[2]
|
||
local jifen = tonumber(v[3]) or 0
|
||
if name and name ~= "" and jifen > 0 then
|
||
local rank = #data + 1
|
||
local rewardCfg = self:getDaluandouReward(rank)
|
||
table.insert(data, { rank, name, jifen, rewardCfg.rewardText })
|
||
if rank >= 10 then
|
||
break
|
||
end
|
||
end
|
||
end
|
||
return data
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:sendDaluandouReward(name, rank, jifen)
|
||
if not name or name == "" or (tonumber(jifen) or 0) <= 0 then
|
||
return
|
||
end
|
||
local rewardCfg = self:getDaluandouReward(rank)
|
||
local rewards = self:getDaluandouRewardItems(rewardCfg)
|
||
if rewards == "" then
|
||
return
|
||
end
|
||
local title = "勇者大乱斗奖励"
|
||
local memo = string.format("您在勇者大乱斗中获得%s,积分:%d,请查收奖励!", rewardCfg.rankName, tonumber(jifen) or 0)
|
||
sendmail("#" .. name, 77, title, memo, rewards)
|
||
end
|
||
-- 配置文件
|
||
HuodongzhongxinOBJ.cfg = {
|
||
[1] = {
|
||
name = "圣域夺宝",
|
||
msg = [[每日 10点-11点、 16点-17点开启圣域夺宝。
|
||
地图内刷新超多不同级别的boss,爆率超高等你来战。
|
||
活动结束后将会强制传送出地图。
|
||
进入条件:4转及以上玩家可进入。]],
|
||
map = "圣域",
|
||
give = { { "灭·怒斩", 1 }, { "主宰战盔", 1 }, { "5000万经验卷", 1 }, { "天妖戒", 1 }, { "炙の爪", 1 }, { "火之结晶", 1 } },
|
||
check = {
|
||
{ "检测转生", "不小于", 4 },
|
||
},
|
||
},
|
||
[2] = {
|
||
name = "冰魔之地",
|
||
msg = [[共三层,清除完当前地图怪物可进入下一层,
|
||
最后1层刷新超级boss。
|
||
开启时间:每日12点-14点,13.30将不可再进入,
|
||
14点将强制传送出去。
|
||
]],
|
||
map = "起始之地",
|
||
give = { { "血·至尊宝刀", 1 }, { "主宰战盔", 1 }, { "神龙の赐福", 1 }, { "5000万经验卷", 1 }, { "雮尘珠", 1 }, { "上古源石", 1 } },
|
||
},
|
||
[3] = {
|
||
name = "大乱斗",
|
||
msg = [[报名人数大于10人活动开启,等级不低于4转。
|
||
开启时间每周246 19.30点(19.25开启报名)
|
||
1.达到开启条件后19.30自动传送进入活动场地
|
||
2.人物死亡后出局 回到盟重安全区
|
||
3.每击杀1人获得10点积分,地图中每3秒自动获得1点
|
||
4.活动时间结束后 邮件自动发放奖励。
|
||
]] .. HuodongzhongxinOBJ:buildDaluandouRewardMsg(),
|
||
map = "勇者大乱斗",
|
||
give = { { "金币", 1 }, { "千年玄石", 1 }, { "混沌碎片宝箱", 1 }, { "100万经验卷", 1 } },
|
||
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_冰魔之地刷怪")
|
||
|
||
HuodongzhongxinOBJ.activityMapCfg = {
|
||
["圣域"] = function()
|
||
return (Sys.getint(VarCfg.sys.int["圣域夺宝"]) or 0) == 1
|
||
end,
|
||
["起始之地"] = function()
|
||
local status = Sys.getint(VarCfg.sys.int["冰魔之地"]) or 0
|
||
return status == 1 or status == 2
|
||
end,
|
||
["魔兽前哨"] = function()
|
||
local status = Sys.getint(VarCfg.sys.int["冰魔之地"]) or 0
|
||
return status == 1 or status == 2
|
||
end,
|
||
["巨魔巢穴"] = function()
|
||
local status = Sys.getint(VarCfg.sys.int["冰魔之地"]) or 0
|
||
return status == 1 or status == 2
|
||
end,
|
||
["勇者大乱斗"] = function()
|
||
return (Sys.getint(VarCfg.sys.int["大乱斗"]) or 0) == 1
|
||
end,
|
||
}
|
||
|
||
function HuodongzhongxinOBJ:forceDaluandouAttackMode(player)
|
||
local modeVar = VarCfg.Player.TL.int["大乱斗进入前攻击模式"]
|
||
local oldMode = Player.getTLint(player, modeVar) or 0
|
||
if oldMode <= 0 then
|
||
Player.setTLint(player, modeVar, (getattackmode(player) or 1) + 1)
|
||
end
|
||
setattackmode(player, 0, 1800)
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:restoreDaluandouAttackMode(player)
|
||
local modeVar = VarCfg.Player.TL.int["大乱斗进入前攻击模式"]
|
||
local oldMode = Player.getTLint(player, modeVar) or 0
|
||
if oldMode > 0 then
|
||
setattackmode(player, -1, 0)
|
||
changeattackmode(player, oldMode - 1)
|
||
Player.setTLint(player, modeVar, 0)
|
||
end
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:syncDaluandouAttackMode(player)
|
||
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
|
||
if mapid == "勇者大乱斗" then
|
||
if (Sys.getint(VarCfg.sys.int["大乱斗"]) or 0) == 1 then
|
||
self:forceDaluandouAttackMode(player)
|
||
end
|
||
else
|
||
self:restoreDaluandouAttackMode(player)
|
||
end
|
||
end
|
||
|
||
function huodongzhongxinobj_delay_kick(player)
|
||
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
|
||
local checkFunc = HuodongzhongxinOBJ.activityMapCfg[mapid]
|
||
if checkFunc and not checkFunc() then
|
||
mapmove(player, "3", 330, 330, 8)
|
||
end
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:kickPlayer(player, msg)
|
||
if msg then
|
||
Func.sendmsg9(player, msg)
|
||
end
|
||
delaygoto(player, 100, "huodongzhongxinobj_delay_kick", 0)
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:kickPlayersInMaps(mapSet, msg)
|
||
local player_list = getplayerlst(0)
|
||
for _, player in ipairs(player_list or {}) do
|
||
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
|
||
if mapSet[mapid] then
|
||
self:kickPlayer(player, msg)
|
||
end
|
||
end
|
||
end
|
||
|
||
function HuodongzhongxinOBJ:checkActivityMap(player)
|
||
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
|
||
local checkFunc = self.activityMapCfg[mapid]
|
||
if checkFunc and not checkFunc() then
|
||
Player.setTLint(player, VarCfg.Player.TL.int["大乱斗已报名"], 0)
|
||
Player.setTLint(player, VarCfg.Player.TL.int["大乱斗积分"], 0)
|
||
self:kickPlayer(player, "[活动大厅]:#70|活动已结束,已自动传送回安全区!")
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
|
||
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)
|
||
self:forceDaluandouAttackMode(actor)
|
||
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)
|
||
Sys.setint(VarCfg.sys.int["圣域夺宝"], 2)
|
||
HuodongzhongxinOBJ:kickPlayersInMaps({ ["圣域"] = true }, "[活动大厅]:#70|圣域夺宝已经结束,已自动传送回安全区!")
|
||
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_on(sys)
|
||
Sys.setint(VarCfg.sys.int["冰魔之地"], 3)
|
||
HuodongzhongxinOBJ:kickPlayersInMaps({ ["起始之地"] = true, ["魔兽前哨"] = true, ["巨魔巢穴"] = true },
|
||
"[活动大厅]:#70|冰魔之地已经结束,已自动传送回安全区!")
|
||
sendmsg(-1, 2,
|
||
string.format('{"Msg":"%s","FColor":251,"BColor":0,"Type":5,"Y":30}', string.format("[活动大厅]冰魔之地已经结束!")))
|
||
end
|
||
|
||
function HuodongzhongxinOBJ_BinMo_End(sys)
|
||
huodongzhongxinobj_binmo_on(sys)
|
||
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)
|
||
HuodongzhongxinOBJ:forceDaluandouAttackMode(player)
|
||
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 rankList = HuodongzhongxinOBJ:filterDaluandouRank(GetRankVar(VarCfg.Player.TL.int["大乱斗积分"], 10, 0) or {})
|
||
local rankNameSet = {}
|
||
for _, rankData in ipairs(rankList or {}) do
|
||
local rank = tonumber(rankData[1]) or 0
|
||
local name = rankData[2]
|
||
local jifen = tonumber(rankData[3]) or 0
|
||
if rank >= 1 and rank <= 10 and jifen > 0 then
|
||
rankNameSet[name] = true
|
||
HuodongzhongxinOBJ:sendDaluandouReward(name, rank, jifen)
|
||
end
|
||
end
|
||
|
||
local player_list = getplayerlst(0)
|
||
for _, player in ipairs(player_list or {}) do
|
||
local mapid = getbaseinfo(player, ConstCfg.gbase.mapid)
|
||
local name = Player.getname(player)
|
||
local jifen = Player.getTLint(player, VarCfg.Player.TL.int["大乱斗积分"]) or 0
|
||
if jifen > 0 and name and name ~= "" and not rankNameSet[name] then
|
||
HuodongzhongxinOBJ:sendDaluandouReward(name, 0, jifen)
|
||
end
|
||
|
||
local isApply = (Player.getTLint(player, VarCfg.Player.TL.int["大乱斗已报名"]) or 0) > 0
|
||
if isApply or mapid == "勇者大乱斗" then
|
||
Player.setTLint(player, VarCfg.Player.TL.int["大乱斗已报名"], 0)
|
||
Player.setTLint(player, VarCfg.Player.TL.int["大乱斗积分"], 0)
|
||
end
|
||
if mapid == "勇者大乱斗" then
|
||
HuodongzhongxinOBJ:restoreDaluandouAttackMode(player)
|
||
HuodongzhongxinOBJ:kickPlayer(player, "[活动大厅]:#70|勇者大乱斗已经结束,已自动传送回安全区!")
|
||
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)
|
||
|
||
GameEvent.add(EventCfg.onLogin, function(actor)
|
||
HuodongzhongxinOBJ:checkActivityMap(actor)
|
||
HuodongzhongxinOBJ:syncDaluandouAttackMode(actor)
|
||
end, HuodongzhongxinOBJ)
|
||
|
||
GameEvent.add(EventCfg.goEnterMap, function(actor)
|
||
HuodongzhongxinOBJ:checkActivityMap(actor)
|
||
HuodongzhongxinOBJ:syncDaluandouAttackMode(actor)
|
||
end, HuodongzhongxinOBJ)
|
||
|
||
|
||
------* 大乱斗获取排名
|
||
function HuodongzhongxinOBJ:luandouGetData(actor, p1, p2, p3, sendata)
|
||
local sendID = sendata and json2tbl(sendata)[1] or 10001
|
||
local rankVar = VarCfg.Player.TL.int["大乱斗积分"]
|
||
local selfRank = GetPlayRankVar(actor, rankVar) or 0
|
||
local selfJifen = Player.getTLint(actor, rankVar) or 0
|
||
local selfRewardText = ""
|
||
if selfJifen > 0 then
|
||
if selfRank > 0 and selfRank <= 10 then
|
||
selfRewardText = self:getDaluandouReward(selfRank).rewardText
|
||
else
|
||
selfRank = 0
|
||
selfRewardText = self:getDaluandouReward(0).rewardText
|
||
end
|
||
else
|
||
selfRank = 0
|
||
end
|
||
|
||
local data = {}
|
||
data.Rank = self:filterDaluandouRank(GetRankVar(rankVar, 10, 0) or {})
|
||
data.RewardList = self:getDaluandouRewardList()
|
||
data.self = {
|
||
Rank = selfRank,
|
||
name = Player.getname(actor),
|
||
jifen = selfJifen,
|
||
rewardText = selfRewardText,
|
||
}
|
||
|
||
sendluamsg(actor, sendID, 0, 0, 0, tbl2jsonex(data))
|
||
end
|
||
HuodongzhongxinOBJ.allowFunc = { "luandouGetData", "up", "BaoMing" }
|
||
|
||
return HuodongzhongxinOBJ
|