Global = {}
--第二天重置变量
local function resetVar(actor)
local currentDate = GetCurrentDateAsNumber()
setplaydef(actor, VarCfg["U_上次本日首次登录时间"], currentDate) --重置今日的信息
setplaydef(actor, VarCfg["U_攻沙积分"], 0)
setplaydef(actor, VarCfg["U_攻沙积分跨服"], 0)
setflagstatus(actor, VarCfg["F_跨服攻沙是否领取"], 0)
setflagstatus(actor, VarCfg["F_斩将夺旗是否领取"], 0)
setflagstatus(actor, VarCfg["F_天下第一是否领取"], 0)
setflagstatus(actor, VarCfg["F_天选之人是否掉落"], 0)
setflagstatus(actor, VarCfg["F_超神飞升是否掉落"], 0)
setplaydef(actor, VarCfg["U_跨服当时积分"], 0)
delattlist(actor, "聚宝术")
end
-------------------------------机器人执行-------------------------------------
--每日执行
--[[
每日凌晨执行的服务器任务
功能:
1. 更新开区天数
2. 重置全服玩家的每日数据
3. 处理跨服玩家返回
4. 清理特定的自定义变量
触发时机:
- 每日凌晨自动执行
]]
function beforedawn()
--更新开区天数
local openday = getsysvar(VarCfg["G_开区天数"])
setsysvar(VarCfg["G_开区天数"], openday + 1)
GameEvent.push(EventCfg.roBeforedawn, openday + 1) -- 触发凌晨事件,通知其他模块
setsysvar(VarCfg["G_是否开启攻沙"], 0) -- 重置攻沙状态
--遍历所有在线玩家,重置每日数据
local player_list = getplayerlst()
for _, actor in ipairs(player_list) do
GameEvent.push(EventCfg.onNewDay, actor) -- 触发新的一天事件
resetVar(actor) -- 重置玩家的每日变量
end
--处理跨服玩家返回本服
if checkkuafuserver() then
kuafuusergohome() -- 将所有跨服玩家传送回原服务器
FsendHuoDongGongGao("跨服服务器已关闭,所有人传回本服!") -- 发送全服公告
end
--清理特定的自定义变量(当前已注释)
-- clearhumcustvar("*","KFZF5|KFZF6") -- KFZF5:天选之人防掉落标记, KFZF6:超神飞升防掉落标记
end
--每间隔一小时修改一次天气
function settianqi()
setweathereffect("n3", math.random(3), 600)
end
--沙巴克加入攻沙
function sbk_join()
--加入攻沙先清除行会的积分记录,和沙巴克城主领取记录
setsysvar(VarCfg["A_行会积分记录"], "")
setsysvar(VarCfg["A_沙城主领取"], "")
setsysvar(VarCfg["A_胜利方行会成员领取记录"], "")
setsysvar(VarCfg["A_排行榜领取记录"], "")
local isKF = checkkuafuconnect()
FSendGongShaTips1(isKF)
--标记为开始攻沙
if checkkuafuserver() then
setsysvar(VarCfg["G_是否开启攻沙"], 1)
end
--如果没开启跨服服务器,则开启本服攻沙
if not checkkuafuconnect() then
setsysvar(VarCfg["G_是否开启攻沙"], 1)
end
--修复城门
repaircastle()
end
function set_richong_state_on()
setsysvar(VarCfg["A_幻境地图开关"], "开")
FsendHuoDongGongGao("幻境地图已经开启,欢迎各位勇士前往探险。")
end
function set_richong_state_off()
setsysvar(VarCfg["A_幻境地图开关"], "")
FsendHuoDongGongGao("幻境地图已经关闭,敬请期待下次开启。")
local RiChongDiTu = { "神龙幻境1", "神龙幻境2", "酆都幻境1", "酆都幻境2", "极恶幻境1", "极恶幻境2", "破晓幻境1", "破晓幻境2", "破晓秘宝阁1", "破晓秘宝阁2",
"圣城幻境1", "圣城幻境2", "圣城秘宝阁1", "圣城秘宝阁2", "新月幻境1", "新月幻境2", "新月秘宝阁1", "新月秘宝阁2" }
local player_list = getplayerlst()
for _, actor in ipairs(player_list) do
local InTheMap = getbaseinfo(actor, ConstCfg.gbase.mapid)
for _, v in ipairs(RiChongDiTu) do
if v == InTheMap then
mapmove(actor, ConstCfg.main_city, 330, 330, 5)
break
end
end
end
end
--[[
沙巴克攻城战提示和触发函数
功能:
1. 处理跨服和本服攻沙的触发条件
2. 管理首次合区后的攻沙开启
3. 控制每周固定时间的攻沙活动
触发条件:
- 跨服状态:每周二和周六自动触发
- 本服状态:首次合区或后续固定时间触发
]]
function sbk_tip()
-- 检查是否是跨服状态
local isKF = checkkuafuconnect()
-- 跨服状态下的攻沙处理
if isKF then
local weekDayNumber = tonumber(os.date("%w")) -- 获取当前星期几(0-6)
-- 在周二(2)或周六(6)触发攻沙
if weekDayNumber == 2 or weekDayNumber == 6 then
sbk_join() -- 执行攻沙加入逻辑
end
return
end
-- 获取服务器合区次数
local heQuDay = tonumber(getconst("0", "<$HFCOUNT>"))
-- 获取当前服务器攻沙次数
local gongShaConunt = getsysvar(VarCfg["G_攻沙次数"])
-- 处理非首次攻沙的情况
if gongShaConunt > 0 then
local weekDayNumber = tonumber(os.date("%w"))
-- 在周二或周六触发攻沙
if weekDayNumber == 2 or weekDayNumber == 6 then
-- 增加攻沙次数计数并开启攻沙
setsysvar(VarCfg["G_攻沙次数"], gongShaConunt + 1)
sbk_join()
end
end
-- 处理首次合区的攻沙开启
if heQuDay == 1 and getsysvar(VarCfg["G_攻沙次数"]) == 0 then
sbk_join() -- 执行首次攻沙
setsysvar(VarCfg["G_攻沙次数"], 1) -- 记录首次攻沙
end
end
--沙巴克开始
function start_sbk()
if getsysvar(VarCfg["G_是否开启攻沙"]) > 0 then
-- 所以行会加入攻城战
addtocastlewarlistex("*")
gmexecute("0", "ForcedWallConQuestwar")
end
end
--沙巴克结束
function end_sbk()
if getsysvar(VarCfg["G_是否开启攻沙"]) > 0 then
gmexecute("0", "ForcedWallConQuestwar")
end
end
--夜晚开始
function starting_dark()
sendmsg("0", 2,
'{"Msg":"月黑风高夜,杀人正当时,视距降低,死亡爆装概率+10%","FColor":0,"BColor":255,"Type":5,"Time":3,"SendId":"123","Y":"100"}')
sendmsg("0", 2,
'{"Msg":"月黑风高夜,杀人正当时,视距降低,死亡爆装概率+10%","FColor":0,"BColor":255,"Type":5,"Time":3,"SendId":"123","Y":"140"}')
sendmsg("0", 2,
'{"Msg":"月黑风高夜,杀人正当时,视距降低,死亡爆装概率+10%","FColor":0,"BColor":255,"Type":5,"Time":3,"SendId":"123","Y":"180"}')
local t = getplayerlst(1)
for _, actor in ipairs(t) do
if not getbaseinfo(actor, ConstCfg.gbase.offline) then
GameEvent.push(EventCfg.onStartingDark, actor)
end
end
end
--白天开始
function starting_day()
sendmsg("0", 2,
'{"Msg":"早安,每个早晨都是全新一天的开始,愿你今天有个好心情。","FColor":255,"BColor":0,"Type":5,"Time":3,"SendId":"123","Y":"100"}')
sendmsg("0", 2,
'{"Msg":"早安,每个早晨都是全新一天的开始,愿你今天有个好心情。","FColor":255,"BColor":0,"Type":5,"Time":3,"SendId":"123","Y":"140"}')
sendmsg("0", 2,
'{"Msg":"早安,每个早晨都是全新一天的开始,愿你今天有个好心情。","FColor":255,"BColor":0,"Type":5,"Time":3,"SendId":"123","Y":"180"}')
local t = getplayerlst(1)
for _, actor in ipairs(t) do
if not getbaseinfo(actor, ConstCfg.gbase.offline) then
GameEvent.push(EventCfg.onStartingDay, actor)
end
end
end
--引擎启动触发
function Global.onStartUp()
--开启全局分钟定时器
if getsysvar(VarCfg["G_开区分钟计时器"]) <= 300 then
setontimerex(1, 60)
end
mapeffect(63067, "n3", 348, 327, 63067, -1, 0, "0", 0)
--双节天气效果
setweathereffect("狂欢小镇", 3, 6553500)
end
--黑月之泪属性 开启
--[[
开启黑月之泪特殊属性效果
功能:
1. 遍历所有在线玩家
2. 检查玩家是否真实在线(非离线挂机)
3. 检查玩家是否装备了"黑月·之泪"
4. 为符合条件的玩家添加倍攻属性
参数:无
返回值:无
使用场景:
- 在特定时间段开启黑月之泪的特殊属性加成
- 服务器活动期间触发特殊装备效果
]]
function attributeson()
-- 获取所有玩家列表
local t = getplayerlst(1)
-- 遍历所有玩家
for _, actor in ipairs(t) do
-- 检查玩家是否真实在线(非离线挂机状态)
if Player.Checkonline(getbaseinfo(actor, ConstCfg.gbase.name)) then
-- 检查玩家是否装备了"黑月·之泪"
if getconst(actor, ConstCfg.equipconst["毒符"]) == "黑月·之泪" then
-- 为玩家添加倍攻属性加成
Player.setAttList(actor, "倍攻附加")
end
end
end
end
--黑月之泪属性 关闭
function attributesoff()
local t = getplayerlst(1)
for _, actor in ipairs(t) do
if Player.Checkonline(getbaseinfo(actor, ConstCfg.gbase.name)) then --检测是否在线玩家(非离线挂机玩家)
Player.setAttList(actor, "倍攻附加")
end
end
end
--血刀老祖延迟扣血
function xuedaolaozusubhp(actor, state)
state = tonumber(state)
if getflagstatus(actor, VarCfg["F_天命_血刀老祖标识"]) == 1 then
changehumnewvalue(actor, 208, -20, 655350)
Player.buffTipsMsg(actor, "[血刀老祖]生效,扣除20%最大生命值")
else
if state == 1 then
changehumnewvalue(actor, 208, 0, 1)
end
end
end
--不动如山减攻击
function budongrushangongji(actor, state)
state = tonumber(state)
if getflagstatus(actor, VarCfg["F_天命_不动如山标识"]) == 1 then
-- local attack = getbaseinfo(actor, ConstCfg.gbase.custom_attr, 4)
-- local subAttack = math.ceil(attack * 0.1)
-- changehumability(actor, 6, -subAttack, 655350)
local attackAddtion = getbaseinfo(actor, ConstCfg.gbase.custom_attr, 210)
local subAttack = 0
if attackAddtion >= 10 then
subAttack = 10
else
subAttack = attackAddtion
end
changehumnewvalue(actor, 210, -subAttack, 655350)
Player.buffTipsMsg(actor, "[不动如山]生效,扣除10%最大攻击力")
else
--非登录才触发
if state == 1 then
changehumnewvalue(actor, 210, 0, 1)
end
end
end
-- function xiemozhiqufangyu(actor)
-- local hp = getbaseinfo(actor, ConstCfg.gbase.custom_attr, 1)
-- local fangYu = math.floor(hp / 1000)
-- fangYu = fangYu * 10
-- if fangYu then
-- addattlist(actor, "血魔之躯", "=", string.format("3#9#%s|3#10#%s|3#11#%s|3#12#%s", fangYu, fangYu, fangYu, fangYu), 1)
-- end
-- end
function xiemozhiqufangyu(actor)
local hp = getbaseinfo(actor, ConstCfg.gbase.custom_attr, 1)
local fangYuHer = math.floor(hp / 10000)
if fangYuHer > 200 then
fangYuHer = 200
end
fangYuHer = math.ceil(fangYuHer / 2)
if fangYuHer then
addattlist(actor, "血魔之躯", "=",
string.format("3#213#%s|3#214#%s|3#224#%s|3#225#%s", fangYuHer, fangYuHer, fangYuHer, fangYuHer), 1)
end
end
function jielidali_beigonghuifu(actor)
Player.setAttList(actor, "倍攻附加")
end
-------------------------------打开UI全局函数---------------------------------------
function openbag(actor)
openhyperlink(actor, ConstCfg.openlink.Bag)
end
function openplayer(actor)
local client_flag = getconst(actor, "<$CLIENTFLAG>")
if client_flag == "1" then
reddel(actor, 104, 1000)
else
reddel(actor, 107, 1000)
end
setplaydef(actor, VarCfg["N$人物按钮是否添加红点"], 0)
openhyperlink(actor, ConstCfg.openlink.Equip)
end
--打开首充
function open_shou_chong(actor)
Message.sendmsg(actor, ssrNetMsgCfg.ShouChong_OpenUI)
end
--全局函数---
function entermapmsg(actor, isAuto)
local userName = getbaseinfo(actor, ConstCfg.gbase.name)
local mapName = getbaseinfo(actor, ConstCfg.gbase.map_title)
local msg = string.format("勇士{「%s」|254:0:1}闯入了{「%s」|250:0:1}开始传奇之旅!", Player.GetNameEx(actor), mapName)
sendmsg(actor, 2, '{"Msg":"' .. msg .. '","FColor":249,"BColor":151,"Type":0}')
if isAuto == "1" then
startautoattack(actor)
end
end
function sui_ji_start_auto_attack(actor)
startautoattack(actor)
end
function jin_ru_fu_ben_ti_shi(actor, timer)
timer = tonumber(timer) or 0
senddelaymsg(actor, "系统提示:您将在%s后结束副本...", timer, 250, 1)
end
-------------------------------逻辑处理---------------------------------------
--检查模块开启
function Global.checkModuleOpen(actor)
-- openmoduleid = 100
-- GameEvent.push(EventCfg.goOpenModule, actor, openmoduleid)
--通过 openmoduleid 获取模块对象, 同步模块数据
-- Message.sendmsg(actor, ssrNetMsgCfg.Global_OpenModuleRun, openmoduleid)
end
--发送助力
--[[
直播助力奖励发送函数
功能:
1. 主播向指定玩家发送直播助力奖励
2. 检查目标玩家的领取状态
3. 通过邮件系统发送奖励物品
参数:
@param actor 发送者(主播)对象
奖励内容:
- 焚天石 x20
- 天工之锤 x20
- 绑定金币 x880000
- 老G画的饼 x1
- 不当牛马[称号] x1
- 我有一头小毛驴[时装] x1
]]
-- 定义直播助力奖励物品列表
local zhuligive = { { "焚天石", 20 }, { "天工之锤", 20 }, { "绑定金币", 880000 }, { "老G画的饼", 1 }, { "不当牛马[称号]", 1 }, { "我有一头小毛驴[时装]", 1 } }
function fa_song_zhu_li(actor)
-- 获取发送者的账号ID
local accountID = getconst(actor, "<$USERACCOUNT>")
-- 检查发送者是否是主播(通过检查账号是否在主播名单中)
local isLive = checktextlist('..\\QuestDiary\\accountid\\liveuserid.txt', accountID)
if isLive then
-- 获取目标玩家名称(从NPC对话输入框获取)
local targetName = getconst(actor, "<$NPCINPUT(2)>")
-- 获取目标玩家对象
local targetPlayer = getplayerbyname(targetName)
-- 检查目标玩家是否在线
if not targetPlayer or targetPlayer == "" or targetPlayer == "0" or not isnotnull(targetPlayer) then
Player.sendmsgEx(actor, targetName .. "#249|不在线!")
return
end
-- 检查目标玩家是否已经领取过
local flag = getflagstatus(targetPlayer, VarCfg["F_直播助力领取"])
if flag == 1 then
Player.sendmsgEx(actor, targetName .. "#249|已经领取过了!")
return
end
-- 准备邮件信息并发送
local mailTitle = "直播助力"
local mailContent = "请领取您的直播助力"
local userID = getbaseinfo(targetPlayer, ConstCfg.gbase.id)
-- 通过邮件发送奖励物品
Player.giveMailByTable(userID, 20, mailTitle, mailContent, zhuligive, 1, true)
-- 设置玩家已领取标记
setflagstatus(targetPlayer, VarCfg["F_直播助力领取"], 1)
-- 移除领取按钮
delbutton(targetPlayer, 105, 12345)
-- 发送成功提示
Player.sendmsgEx(actor, targetName .. "#249|主播助力发送成功!")
end
end
function zi_dong_fa_song_zhu_li(actor)
local flag = getflagstatus(actor, VarCfg["F_直播助力领取"])
if flag == 0 then
local mailTitle = "直播助力"
local mailContent = "请领取您的直播助力"
local userID = getbaseinfo(actor, ConstCfg.gbase.id)
Player.giveMailByTable(userID, 20, mailTitle, mailContent, zhuligive, 1, true)
setflagstatus(actor, VarCfg["F_直播助力领取"], 1)
delbutton(actor, 105, 12345)
end
end
--主播
function zhi_bo_zhu_li_zhu_bo(actor)
say(actor, [[
<Img|x=6.0|y=0.0|bg=1|move=1|show=4|loadDelay=1|esc=1|img=custom/ZhiBoZhuLi/bg2.png|reset=1>
<Layout|x=732.0|y=24.0|width=80|height=81|link=@exit>
<Button|x=759.0|y=45.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit>
<ItemShow|x=108.0|y=206.0|width=70|height=70|itemid=10044|itemcount=20|showtips=1|bgtype=0>
<ItemShow|x=218.0|y=205.0|width=70|height=70|itemid=10045|itemcount=20|showtips=1|bgtype=0>
<ItemShow|x=330.0|y=206.0|width=70|height=70|itemid=3|itemcount=880000|showtips=1|bgtype=0>
<ItemShow|x=441.0|y=206.0|width=70|height=70|itemid=51118|itemcount=1|showtips=1|bgtype=0>
<ItemShow|x=553.0|y=206.0|width=70|height=70|itemid=10512|itemcount=1|showtips=1|bgtype=0>
<ItemShow|x=665.0|y=206.0|width=70|height=70|itemid=10507|itemcount=1|showtips=1|bgtype=0>
<Input|x=284.0|y=439.0|width=240|isChatInput=0|height=26|size=16|color=255|inputid=2|type=0>
<Button|x=549.0|y=428.0|nimg=custom/ZhiBoZhuLi/sendbtn.png|color=255|submitInput=2|size=18|link=@fa_song_zhu_li>
]])
end
--普通
function zhi_bo_zhu_li(actor)
delaygoto(actor, 5000, "zi_dong_fa_song_zhu_li", 0)
say(actor, [[
<Img|x=6.0|y=0.0|esc=1|loadDelay=1|img=custom/ZhiBoZhuLi/bg1.png|reset=1|show=4|bg=1|move=1>
<Layout|x=732.0|y=24.0|width=80|height=81|link=@exit>
<Button|x=759.0|y=45.0|nimg=public/1900000510.png|pimg=public/1900000511.png|link=@exit>
<ItemShow|x=108.0|y=206.0|width=70|height=70|itemid=10044|itemcount=20|showtips=1|bgtype=0>
<ItemShow|x=218.0|y=205.0|width=70|height=70|itemid=10045|itemcount=20|showtips=1|bgtype=0>
<ItemShow|x=330.0|y=206.0|width=70|height=70|itemid=3|itemcount=880000|showtips=1|bgtype=0>
<ItemShow|x=441.0|y=206.0|width=70|height=70|itemid=51118|itemcount=1|showtips=1|bgtype=0>
<ItemShow|x=553.0|y=206.0|width=70|height=70|itemid=10512|itemcount=1|showtips=1|bgtype=0>
<ItemShow|x=665.0|y=206.0|width=70|height=70|itemid=10507|itemcount=1|showtips=1|bgtype=0>
]])
end
--直播助力
function Global.zhiBoZhuLi(actor)
local client_flag = getconst(actor, "<$CLIENTFLAG>")
local accountID = getconst(actor, "<$USERACCOUNT>")
local isLive = checktextlist('..\\QuestDiary\\accountid\\liveuserid.txt', accountID)
if isLive then
if client_flag == "1" then
addbutton(actor, 105, 54321,
"<Button|id=54321|x=190.0|y=-130.0|nimg=custom/ZhiBoZhuLi/btn.png|size=16|color=251|link=@zhi_bo_zhu_li_zhu_bo>")
else
addbutton(actor, 105, 54321,
"<Button|id=54321|x=190.0|y=-70.0|nimg=custom/ZhiBoZhuLi/btn.png|size=16|color=251|link=@zhi_bo_zhu_li_zhu_bo>")
end
else
local flag = getflagstatus(actor, VarCfg["F_直播助力领取"])
if flag == 0 then
if client_flag == "1" then
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
addbutton(actor, 105, 12345,
"<Button|id=12345|x=190.0|y=-130.0|nimg=custom/ZhiBoZhuLi/btn.png|size=16|color=251|link=@zhi_bo_zhu_li>")
else
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
sendmsg(actor, 1, '{"Msg":"3秒后自动发放主播助力!","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"系统","SendId":"123"}')
addbutton(actor, 105, 12345,
"<Button|id=12345|x=190.0|y=-70.0|nimg=custom/ZhiBoZhuLi/btn.png|size=16|color=251|link=@zhi_bo_zhu_li>")
end
delaygoto(actor, 5000, "zi_dong_fa_song_zhu_li", 0)
end
end
end
function fang_zhi_diao_zhuang_flag(actor)
setplaydef(actor,"N$防止掉装备标记",0)
end
-------------------------------活动begin----------------------------------
---仙王宝藏开始
--11:30
--18:30
function xian_wang_bao_zang_start()
setsysvar(VarCfg["G_仙王宝藏开启标识"], 1)
GameEvent.push(EventCfg.onXianWangBaoZangStart)
end
---仙王宝藏结束
--12:00
--19:00
function xian_wang_bao_zang_end()
setsysvar(VarCfg["G_仙王宝藏开启标识"], 0)
GameEvent.push(EventCfg.onXianWangBaoZangEnd)
end
---异界猎场开始
--13:00
--19:00
function yi_jie_lie_chang_start()
setsysvar(VarCfg["G_异界猎场开启标识"], 1)
GameEvent.push(EventCfg.onYiJieLieChangStart)
end
---异界猎场结束
--13:30
--19:30
function yi_jie_lie_chang_end()
setsysvar(VarCfg["G_异界猎场开启标识"], 0)
GameEvent.push(EventCfg.onYiJieLieChangEnd)
end
-- ---牛马旷工开始
-- --每周1周5 21:00-22:00
-- function niu_ma_kuang_gong_start()
-- local weekDayNumber = tonumber(os.date("%w"))
-- if weekDayNumber == 1 or weekDayNumber == 5 then
-- setsysvar(VarCfg["G_牛马旷工开启标识"], 1)
-- GameEvent.push(EventCfg.onNiuMaKuangGongStart)
-- end
-- end
-- ---牛马旷工结束
-- function niu_ma_kuang_gong_end()
-- local weekDayNumber = tonumber(os.date("%w"))
-- if weekDayNumber == 1 or weekDayNumber == 5 then
-- setsysvar(VarCfg["G_牛马旷工开启标识"], 0)
-- GameEvent.push(EventCfg.onNiuMaKuangGongEnd)
-- end
-- end
---异界迷城开始
--每周1周5 21:00-22:00
function yi_jie_mi_cheng_start()
setsysvar(VarCfg["G_异界迷城开启标识"], 1)
GameEvent.push(EventCfg.onYiJieMiChengStart)
end
---异界迷城结束
function yi_jie_mi_cheng_end()
setsysvar(VarCfg["G_异界迷城开启标识"], 0)
GameEvent.push(EventCfg.onYiJieMiChengEnd)
end
--斩将夺旗活动开始
function zhan_jiang_duo_qi_start()
local weekDayNumber = tonumber(os.date("%w"))
if weekDayNumber == 1 or weekDayNumber == 5 then
if checkkuafuconnect() then
setsysvar(VarCfg["G_斩将夺旗"], 1)
GameEvent.push(EventCfg.onKFZhanJiangDuoQiStart)
if checkkuafuserver() then
setontimerex(3, 1)
end
end
end
end
--斩将夺旗活动结束
function zhan_jiang_duo_qi_end()
local weekDayNumber = tonumber(os.date("%w"))
if weekDayNumber == 1 or weekDayNumber == 5 then
if checkkuafuconnect() then
setsysvar(VarCfg["G_斩将夺旗"], 0)
GameEvent.push(EventCfg.onKFZhanJiangDuoQiEnd)
if checkkuafuserver() then
setofftimerex(3)
end
end
end
end
--天下第一活动开启
function tian_xia_di_yi_start()
local weekDayNumber = tonumber(os.date("%w"))
if weekDayNumber == 1 or weekDayNumber == 3 or weekDayNumber == 5 then
if checkkuafuconnect() then
setsysvar(VarCfg["G_天下第一"], 1)
GameEvent.push(EventCfg.onKFTianXiaDiYiStart)
if checkkuafuserver() then
setontimerex(4, 3)
end
end
end
end
--天下第一活动结束
function tian_xia_di_yi_end()
local weekDayNumber = tonumber(os.date("%w"))
if weekDayNumber == 1 or weekDayNumber == 3 or weekDayNumber == 5 then
if checkkuafuconnect() then
setsysvar(VarCfg["G_天下第一"], 0)
GameEvent.push(EventCfg.onKFTianXiaDiYiEnd)
if checkkuafuserver() then
setofftimerex(4)
end
end
end
end
--双节活动地图开启
function shuang_jie_huo_dong_map_start()
GameEvent.push(EventCfg.onShuangJieHuoDongStart)
end
--双节活动地图关闭
function shuang_jie_huo_dong_map_end()
GameEvent.push(EventCfg.onShuangJieHuoDongEnd)
end
--狂欢小镇刷怪
function kuang_huan_xiao_zhen_shua_guai()
GameEvent.push(EventCfg.onKuangHuanXiaoZhenShuaGuai)
end
-------------------------------活动end-----------------------------------
-------------------------------事件---------------------------------------
--登录完成
function Global.LoginEnd(actor, logindatas)
--gm权限等级
-- if ConstCfg.DEBUG then
-- setgmlevel(actor, 10)
-- end
setflagstatus(actor, VarCfg["F_人物死亡"], 0)
table.insert(logindatas, { ssrNetMsgCfg.Global_SyncAdmini, getgmlevel(actor) })
--绘制魔法球血球
local client_flag = tonumber(getconst(actor, "<$CLIENTFLAG>"))
if client_flag == 2 then
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 0, 1, 3, 6, 101)
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 1, 1, -7, 6, 101)
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 2, 1, 3, 6, 100)
else
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 0, 1, 14, -10, 111)
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 1, 1, -8, -10, 111)
callscriptex(actor, "PLAYMAGICBALLEFFECT", 0, 12, 150, -1, 2, 1, 12, -10, 110)
end
--记录当前地图id
local cur_mapid = getbaseinfo(actor, ConstCfg.gbase.mapid)
setplaydef(actor, VarCfg.S_cur_mapid, cur_mapid)
local jiShaNum = getplaydef(actor, VarCfg["U_杀人数"])
local beiShanum = getplaydef(actor, VarCfg["U_被杀数"])
setranklevelname(actor, "%s\\击杀[" .. jiShaNum .. "]次·死亡[" .. beiShanum .. "]次")
--直播助力
Global.zhiBoZhuLi(actor)
-- if checkitemw(actor, "夜明珠", 1) or checkitemw(actor, "新月宝珠", 1) or checkitemw(actor, "妖月内丹", 1) then
-- setcandlevalue(actor, 100)
-- end
--第二天登录变量重置
if Player.isNextDayLogin(actor) then
resetVar(actor)
end
--根据第一个玩家进入,记录服务器日期
-- local serverDate = getsysvar(VarCfg["G_开区日期"])
-- if serverDate == 0 then
-- setsysvar(VarCfg["G_开区日期"], GetCurrentDateAsNumber())
-- end
end
--点击某NPC
function Global.ClickNpcResponse(actor, npcid)
--Message.sendmsg(actor, ssrNetMsgCfg.Global_ClickNpcResponse, npcid)
end
--背包格子数发送变化
function Global._onBagChange(actor)
--开服天数
local openDay = grobalinfo(ConstCfg.global.openday)
--背包格子数
local bagNum = ConstCfg.bagcellnum + getplaydef(actor, VarCfg.U_Bag_OpenNum)
Message.sendmsg(actor, ssrNetMsgCfg.Global_SyncOpenDay, openDay, bagNum)
end
--[[
玩家死亡事件处理函数
功能:
1. 更新玩家的死亡统计数据
2. 更新玩家的等级称号显示
3. 发送全服死亡通知消息
参数:
@param actor 死亡的玩家对象
@param hiter 击杀者对象(可能是玩家或怪物)
工作流程:
1. 获取并更新玩家的击杀和被杀统计
2. 更新玩家的等级称号显示
3. 获取死亡地点信息
4. 根据击杀者类型发送不同的死亡通知
]]
local function _onPlaydie(actor, hiter)
-- 获取玩家的击杀数和被杀数统计
local jiShaNum = getplaydef(actor, VarCfg["U_杀人数"])
local beiShanum = getplaydef(actor, VarCfg["U_被杀数"])
-- 更新被杀数统计
setplaydef(actor, VarCfg["U_被杀数"], beiShanum + 1)
-- 更新玩家等级称号显示,包含击杀和死亡次数
setranklevelname(actor, "%s\\击杀[" .. jiShaNum .. "]次·死亡[" .. beiShanum + 1 .. "]次")
-- 获取死亡地点信息
local x = getbaseinfo(actor, ConstCfg.gbase.x)
local y = getbaseinfo(actor, ConstCfg.gbase.y)
local mapName = getbaseinfo(actor, ConstCfg.gbase.map_title)
-- 获取击杀者和死亡者的名称
local killer = Player.GetNameEx(hiter)
local myName = Player.GetNameEx(actor)
-- 判断击杀者类型并发送相应的死亡通知
if getbaseinfo(hiter, -1) == true then
-- 玩家被其他玩家击杀的消息
local msgStr = string.format("玩家[%s]在[%s(%d:%d)]把玩家[%s]干掉了!", killer, mapName, x, y, myName)
sendmsg("0", 2, '{"Msg":"' ..
msgStr .. '","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"提示","SendId":"123"}')
else
-- 玩家被怪物击杀的消息
local msgStr = string.format("凶悍的怪物[%s]在[%s(%d:%d)]把玩家[%s]给分尸了!", killer, mapName, x, y, myName)
sendmsg("0", 2, '{"Msg":"' ..
msgStr .. '","FColor":255,"BColor":0,"Type":1,"Time":3,"SendName":"提示","SendId":"123"}')
end
end
GameEvent.add(EventCfg.onPlaydie, _onPlaydie, Global)
local function _onkillplay(actor, play)
local jiShaNum = getplaydef(actor, VarCfg["U_杀人数"])
local beiShanum = getplaydef(actor, VarCfg["U_被杀数"])
setplaydef(actor, VarCfg["U_杀人数"], jiShaNum + 1)
setranklevelname(actor, "%s\\击杀[" .. jiShaNum + 1 .. "]次·死亡[" .. beiShanum .. "]次")
end
GameEvent.add(EventCfg.onkillplay, _onkillplay, Global)
-------------------------------监听事件---------------------------------------
GameEvent.add(EventCfg.onStartUp, Global.onStartUp, Global, 1)
GameEvent.add(EventCfg.onBagChange, Global._onBagChange, Global, 1)
GameEvent.add(EventCfg.onLoginEnd, Global.LoginEnd, Global, 1)
GameEvent.add(EventCfg.onKFLogin, Global.LoginEnd, Global, 1) --跨服登陆
GameEvent.add(EventCfg.goBeforedawn, Global.Beforedawn, Global, 1)
GameEvent.add(EventCfg.onClicknpc, Global.ClickNpcResponse, Global, 1)
-- GameEvent.add(EventCfg.onRecharge, Global.Recharge, Global, 1)
-- GameEvent.add(EventCfg.onVirtualRecharge, Global.onVirtualRecharge, Global, 1)
--开启离线挂机
local function _onExitGame(actor)
local serverName = getconst(actor, "<$SERVERNAME>")
if serverName ~= "" then
local taskID = getplaydef(actor, VarCfg["U_主线任务进度"])
local level = getbaseinfo(actor, ConstCfg.gbase.level)
if taskID > 7 and level >= 150 then
mapmove(actor, "n3", 330, 330, 9)
setofftimer(actor, 1)
setofftimer(actor, 2)
setofftimer(actor, 3)
setofftimer(actor, 4)
setofftimer(actor, 5)
setofftimer(actor, 101)
setofftimer(actor, 102)
setofftimer(actor, 103)
setofftimer(actor, 104)
setofftimer(actor, 105)
offlineplay(actor, 65535) --离线挂机
end
end
end
GameEvent.add(EventCfg.onExitGame, _onExitGame, Global)
local cfg_KuaFuVal = include("QuestDiary/cfgcsv/cfg_KuaFuVal.lua")
--声明跨服变量
local function _goPlayerVar(actor)
for _, value in ipairs(cfg_KuaFuVal) do
FIniPlayVar(actor, value.String, true)
FIniPlayVar(actor, value.Integer, false)
end
end
GameEvent.add(EventCfg.goPlayerVar, _goPlayerVar, Global)
local function _onKFLogin(actor)
if getflagstatus(actor, VarCfg["F_是否进入过跨服"]) == 0 then
setflagstatus(actor, VarCfg["F_是否进入过跨服"], 1)
end
end
GameEvent.add(EventCfg.onKFLogin, _onKFLogin, Global)
--切换地图,主要是方便把地图ID记录到自定义变量中,方便跨服使用
local function _goSwitchMap(actor, cur_mapid, former_mapid, x, y)
Player.SetVarMap(actor, cur_mapid)
end
GameEvent.add(EventCfg.goSwitchMap, _goSwitchMap, Global)
-------------------------------监听网络---------------------------------------
Message.RegisterNetMsg(ssrNetMsgCfg.Global, Global)
return Global