mirror of
https://gitlab.com/YuukiPS/GC-Resources.git
synced 2025-04-28 09:05:26 +00:00
472 lines
18 KiB
Lua
472 lines
18 KiB
Lua
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
|
||
|
||
--[[
|
||
2.3迷城战线复刻
|
||
|
||
每个小房间内容是单独的挑战。
|
||
此group负责管理:负责记着3个特殊挑战的进度、负责持续显示父挑战标题、挑战阶段、挂个大region用于触发断线重连后挑战接续
|
||
|
||
和关卡约定的challenge Index:
|
||
父挑战 999
|
||
点亮三颗符文 901
|
||
启动遗迹控制台 902
|
||
最终挑战 903
|
||
]]
|
||
--[[
|
||
local defs = {
|
||
|
||
--galleryID
|
||
gallery_id = ,
|
||
|
||
--galley限时秒数
|
||
--迷城战线v2的限时用Gallery控制(excel表)此处用于保证FatherChallenge的时长不要小于Gallery
|
||
time_limit = 300,
|
||
|
||
--父挑战ChallengeId
|
||
challenge_id = 228,
|
||
|
||
--父挑战大RegionID,这个region用于地城中断线重连接续挑战
|
||
region_id = ,
|
||
|
||
--激活古代符文ChallengeId
|
||
key_challenge = 229,
|
||
--启动遗迹控制台ChallengeId
|
||
worktop_challenge = 230,
|
||
--最终挑战ChallengeId
|
||
final_challenge = 231,
|
||
|
||
--激活古代符文目标数量
|
||
key_target = 3,
|
||
}
|
||
]]
|
||
|
||
--Mist_trial的Buff_obtain日志
|
||
local buff_gadgetId = {
|
||
"Buff_Attack",
|
||
"Buff_Heal"
|
||
}
|
||
|
||
local extraTriggers = {
|
||
--这个Trigger用于在地城内断线重连时接续父挑战
|
||
{ config_id = 8000001, name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "condition_Enter_FatherRegion", action = "action_Enter_FatherRegion", trigger_count = 0 },
|
||
{ config_id = 8000002, name = "Gallery_Stop", event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_Gallery_Stop", trigger_count = 0 },
|
||
|
||
--用于获知玩法到哪个阶段了
|
||
{ config_id = 8000004, name = "Key_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "901", condition = "", action = "action_Key_Challenge_Success", trigger_count = 0},
|
||
{ config_id = 8000005, name = "Worktop_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "902", condition = "", action = "action_Worktop_Challenge_Success", trigger_count = 0},
|
||
{ config_id = 8000006, name = "Final_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "903", condition = "", action = "action_Final_Challenge_Success", trigger_count = 0},
|
||
|
||
--用于玩家开启迷城战线时,初始化标志位
|
||
{ config_id = 8000007, name = "Gallery_Start", event = EventType.EVENT_GALLERY_START, source = "", condition = "", action = "action_Gallery_Start", trigger_count = 0 },
|
||
|
||
--子挑战成功时,向其所在Group发消息
|
||
{ config_id = 8000008, name = "Sub_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_Sub_Challenge_Success", trigger_count = 0},
|
||
--外部挂载子挑战用trigger---
|
||
{ config_id = 8000009, name = "Variable_Change_MistTail", event = EventType.EVENT_VARIABLE_CHANGE, source = "catchKey", condition = "", action = "",trigger_count = 0 , tag = "666" },
|
||
|
||
}
|
||
|
||
--和关卡约定的challenge Index
|
||
local cfg = {
|
||
["father_index"] = 999,
|
||
["key_challenge_index"] = 901,
|
||
["worktop_challenge_index"] = 902,
|
||
["final_challenge_index"] = 903
|
||
}
|
||
|
||
function LF_Initialize_Group(triggers, suites)
|
||
for i=1,#extraTriggers do
|
||
table.insert(triggers, extraTriggers[i])
|
||
table.insert(suites[1].triggers,extraTriggers[i].name)
|
||
end
|
||
--Gallery是否在进行 0-未开始 1-进行中 2-已成功(不再触发)
|
||
table.insert(variables,{ config_id=50000001,name = "gallery_state", value = 0, no_refresh = true})
|
||
--父挑战状态 0-初始 1-进了地城但未开始 2-进行中(正在激活古代符文 3-进行中(启动遗迹控制台)4-进行中(最终挑战) 5-全部完成
|
||
table.insert(variables,{ config_id=50000002,name = "father_state", value = 0, no_refresh = true})
|
||
|
||
--钥匙房 激活古代符文进度
|
||
table.insert(variables,{ config_id=50000003,name = "key_progress", value = 0, no_refresh = true})
|
||
|
||
--子挑战用的触发器
|
||
table.insert(variables,{ config_id=50000004,name = "catchKey", value = 0, no_refresh = false})
|
||
|
||
--地脉异常等级
|
||
table.insert(variables,{ config_id=50000005,name = "floor_level", value = 1, no_refresh = true})
|
||
|
||
return 0
|
||
end
|
||
-----------------以下由关卡调用---------------------
|
||
|
||
--小房间的操作台选项“开启挑战”,调这个方法-----
|
||
--由于参数个数限制,需要先调用SetKillMonsterTarget
|
||
--参数为 {子挑战child_index, 子挑战challengeID}
|
||
--使用前请保证父挑战已经启动
|
||
function StartSubChallengeKillMonster(context, prev_context, child_index, challenge_id)
|
||
|
||
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
|
||
|
||
if father_state ~= 0 and father_state ~= 1 then
|
||
--添加子挑战
|
||
--挑战类型为:击杀指定数量怪物 参数1: 指定groupid, 参数2:指定group内怪物死亡的数量
|
||
|
||
local target_count = ScriptLib.GetGroupTempValue(context, "target_count",{})
|
||
|
||
--ScriptLib.SetGroupVariableValue(context, "catchKey", 0)
|
||
|
||
ScriptLib.AttachChildChallenge(context, cfg.father_index, child_index, challenge_id, {3, 666, target_count, 1}, {},{success=1, fail=1})
|
||
|
||
else
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Trying to start a subchallenge while father is not actived!! ")
|
||
end
|
||
return 0
|
||
end
|
||
|
||
--参数为 {怪物所在group_id, 目标个数target_count}
|
||
function SetKillMonsterTarget(context, prev_context, group_id, target_count)
|
||
|
||
ScriptLib.SetGroupTempValue(context, "target_group", group_id, {})
|
||
ScriptLib.SetGroupTempValue(context, "target_count", target_count, {})
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Set Kill Monster Target. Group@" .. group_id.." Count@".. target_count)
|
||
|
||
return 0
|
||
end
|
||
|
||
-- 为StartSubChallengeCustom所创建的自定义类型子挑战加分。
|
||
-- 钥匙房不要用这个,用 AddMistTrialKeyProgress
|
||
function AddMistTrialChildChallengeScore(context, prev_context, score)
|
||
--由于单子b1295835,一旦没结束,尝试重置“catchKey”时会触发上一个意外没关掉的挑战的VariableChange
|
||
--迷城并不关心杀怪的数量,所以在接到调用时,只需要让catchKey浮动变化就可以了,也就不需要重置。(其实不浮动变化也可,因为只要Set就会触发VariableChange这个Trigger,但还是变吧万一以后Trigger改了
|
||
if ScriptLib.GetGroupVariableValue(context, "catchKey") > 0 then
|
||
ScriptLib.SetGroupVariableValue(context, "catchKey", 0)
|
||
else
|
||
ScriptLib.SetGroupVariableValue(context, "catchKey", 1)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
--终止特定子挑战
|
||
function StopMistTrialChildChallenge(context, prev_context, childIndex, isWin)
|
||
-- isWin = 0 (失败) 1(完成)
|
||
ScriptLib.StopChallenge(context, childIndex, isWin)
|
||
return 0
|
||
end
|
||
|
||
--当钥匙房被完成时,调这个方法-----
|
||
--参数为 {1}
|
||
function AddMistTrialKeyProgress(context, prev_context, param)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Key Progress. add@"..param)
|
||
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
|
||
--if father_state == 2 then
|
||
ScriptLib.ChangeGroupVariableValue(context, "key_progress", param)
|
||
local key_progress = ScriptLib.GetGroupVariableValue(context, "key_progress")
|
||
Reminder_Key_Progress(context, key_progress)
|
||
--else
|
||
--ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Trying to finish a key room while father challenge is @"..father_state.." (need 2)")
|
||
--end
|
||
return 0
|
||
end
|
||
--由于复活的实现原因,不能反复Attach,如果一个地城有多个复活房,每次交互复活房操作台的时候先调用这个来移除
|
||
function RemoveReviveAbility(context, prev_context)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Remove MistTrial Revive Ability.")
|
||
ScriptLib.DelGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
|
||
return 0
|
||
end
|
||
|
||
--LD通知Ability变动 。 参数 0-地脉异常升级 1-全队复活
|
||
|
||
function ModifyMistTrialAbility(context, prev_context, param)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Modify MistTrial Ability. Param@"..param)
|
||
|
||
if param == 0 then
|
||
--设置地脉异常等级,初始1级 升档最多3次 一共4个档
|
||
ScriptLib.ChangeGroupTempValue(context, "Buff_Attack", 1, {})
|
||
ScriptLib.ChangeGroupVariableValue(context, "floor_level", 1)
|
||
|
||
local floor_level = ScriptLib.GetGroupVariableValue(context, "floor_level")
|
||
|
||
if floor_level > 4 or floor_level < 1 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected floor_level: Got@"..floor_level.." (floor_level is 1 ~ 4 in MistTrialV2)")
|
||
|
||
return 0
|
||
else
|
||
ScriptLib.SetMistTrialServerGlobalValue(context, floor_level)
|
||
end
|
||
|
||
return 0
|
||
|
||
elseif param == 1 then
|
||
|
||
--复活
|
||
ScriptLib.ChangeGroupTempValue(context, "Buff_Heal", 1, {})
|
||
ScriptLib.AttachGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
|
||
|
||
return 0
|
||
|
||
else
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected ModifyMistTrialAbility param: Got@"..param.." (param is 0 or 1 in MistTrialV2)")
|
||
end
|
||
|
||
return 0
|
||
end
|
||
|
||
-----------------以下非关卡调用---------------------
|
||
|
||
--用于获知挑战进行到哪个阶段了.三符文完成
|
||
function action_Key_Challenge_Success(context, evt)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 3)
|
||
return 0
|
||
end
|
||
--用于获知挑战进行到哪个阶段了.激活操作台完成
|
||
function action_Worktop_Challenge_Success(context, evt)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 4)
|
||
return 0
|
||
end
|
||
--用于获知挑战进行到哪个阶段了.最终挑战完成
|
||
function action_Final_Challenge_Success(context, evt)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||
return 0
|
||
end
|
||
--初始化标志位
|
||
function action_Gallery_Start(context, evt)
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Start Detected!! GalleryId@"..evt.param1)
|
||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 1)
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 2)
|
||
ResetGroupTempVar(context)
|
||
--由于复活的实现原因,需要手动下下来才行(复刻不要再复用这个1.5的远古ability了!)b1326884
|
||
ScriptLib.DelGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
|
||
|
||
return 0
|
||
end
|
||
|
||
--当一个小房间的杀怪挑战完成时,向那个group发一个success
|
||
function action_Sub_Challenge_Success(context, evt)
|
||
if CheckIsInTable(context, tonumber(evt.source_name)) == 1 then
|
||
--特殊三挑战不发,发了也没用
|
||
return 0
|
||
else
|
||
local fromGroup = ScriptLib.GetGroupTempValue(context, "target_group", {})
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] A Sub Challenge Finished. ChallengeID@"..evt.param1.." ChallengeIndex@"..evt.source_name..". Send GroupVar(succcess = 1) to Group@"..fromGroup)
|
||
ScriptLib.SetGroupVariableValueByGroup(context, "success", 1, fromGroup)
|
||
end
|
||
|
||
return 0
|
||
end
|
||
--钥匙房进度
|
||
function Reminder_Key_Progress(context, progress)
|
||
|
||
if progress == 1 then
|
||
ScriptLib.ShowReminder(context, 43001002)
|
||
return 0
|
||
elseif progress == 2 then
|
||
ScriptLib.ShowReminder(context, 43001003)
|
||
return 0
|
||
elseif progress == 3 then
|
||
ScriptLib.ShowReminder(context, 43001004)
|
||
return 0
|
||
else
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Key Progress Change! value@"..progress)
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function condition_Enter_FatherRegion(context, evt)
|
||
if evt.param1 ~= defs.region_id then
|
||
return false
|
||
end
|
||
return true
|
||
end
|
||
--由大Region触发,用且仅用于接续父挑战
|
||
function action_Enter_FatherRegion(context, evt)
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Enter father region triggered...")
|
||
|
||
if ScriptLib.GetGroupVariableValue(context, "father_state") == 0 then
|
||
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 1)
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] First Time Enter region. Set mark.")
|
||
return 0
|
||
end
|
||
|
||
local gallery_state = ScriptLib.GetGroupVariableValue(context, "gallery_state")
|
||
|
||
if gallery_state == 2 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] ...gallery is finished, will do nothing.")
|
||
|
||
return 0
|
||
|
||
elseif gallery_state == 1 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery_state = 1 & father_state is not 0, Trying to get Challenge Progress. ")
|
||
|
||
if ResumeMistTrial(context) == -1 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Challenge Progress!!")
|
||
|
||
end
|
||
return 0
|
||
|
||
elseif gallery_state == 0 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] ...gallery is not started, will do nothing.")
|
||
|
||
return 0
|
||
else
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Gallery state! gallery_state@".. gallery_state)
|
||
return 0
|
||
end
|
||
|
||
return 0
|
||
end
|
||
|
||
--当需要接续挑战时,根据挑战阶段挂载对应的子挑战,如果是一阶段,还需要续上挑战进度
|
||
function ResumeMistTrial(context, evt)
|
||
|
||
--父挑战状态 0-初始 1-进了地城但未开始 2-进行中(正在激活古代符文 3-进行中(启动遗迹控制台)4-进行中(最终挑战) 5-全部完成
|
||
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] ResumeMistTrial Called. father_state@".. father_state)
|
||
--迷城战线v2的限时用Gallery控制(excel表)
|
||
--此处用于保证接续挑战时,CreateFatherChallenge的时长不要小于Gallery
|
||
local father_life = 1800
|
||
|
||
if father_state == 0 or father_state == 1 then
|
||
|
||
--挑战还没开始过,就触发了接续挑战
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Mark has set 1 but father challenge state is 0 ! ")
|
||
|
||
return 0
|
||
|
||
elseif father_state == 2 then
|
||
--接续钥匙房挑战 defs.key_challenge
|
||
local saved = ScriptLib.GetGroupVariableValue(context, "key_progress")
|
||
|
||
--创建父挑战
|
||
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
|
||
|
||
--挑战类型为:触发特定Trigger 参数1: event_type所在枚举序号; 参数2: trigger_tag;参数3: 次数;参数4:Bool,次数达成是否计为成功;参数5:初始次数值
|
||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.key_challenge_index, defs.key_challenge, {3,901,defs.key_target,1,saved}, {}, {success=1, fail=1} )
|
||
ScriptLib.StartFatherChallenge(context, cfg.father_index)
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 激活古代符文. Saved key num@"..saved)
|
||
|
||
return 0
|
||
|
||
elseif father_state == 3 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 启动遗迹控制台.")
|
||
|
||
--创建父挑战
|
||
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
|
||
|
||
--接续启动遗迹控制台 defs.worktop_challenge
|
||
--挑战类型为:触发特定Trigger 参数1: event_type所在枚举序号; 参数2: trigger_tag;参数3: 次数;参数4:Bool,次数达成是否计为成功;参数5:初始次数值
|
||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.worktop_challenge_index, defs.worktop_challenge, {7,902,1,1}, {}, {success=1, fail=1} )
|
||
|
||
ScriptLib.StartFatherChallenge(context, cfg.father_index)
|
||
|
||
return 0
|
||
|
||
elseif father_state == 4 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 最终挑战.")
|
||
|
||
--创建父挑战
|
||
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
|
||
|
||
--接续 完成最终挑战
|
||
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.final_challenge_index, defs.final_challenge, {3,903,1,1}, {}, {success=99999, fail=1} )
|
||
|
||
ScriptLib.StartFatherChallenge(context, cfg.father_index)
|
||
|
||
return 0
|
||
|
||
|
||
elseif father_state == 5 then
|
||
|
||
--挑战还没开始过,就触发了接续挑战
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Trying to resume challenge but it is all clear. Do nothing.")
|
||
|
||
return 0
|
||
end
|
||
return -1
|
||
end
|
||
|
||
function action_Gallery_Stop(context, evt)
|
||
|
||
if evt.param1 ~= defs.gallery_id then
|
||
return -1
|
||
end
|
||
UpLoadActionLog(context)
|
||
--evt.param3
|
||
--1、时间到 2、客户端中断 3、LUA中断
|
||
if evt.param3 == 1 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Time Up.")
|
||
|
||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||
|
||
ScriptLib.FailMistTrialDungeonChallenge(context, 999)
|
||
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||
|
||
elseif evt.param3 == 2 then
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Client.")
|
||
|
||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||
|
||
ScriptLib.FailMistTrialDungeonChallenge(context, 999)
|
||
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||
|
||
elseif evt.param3 == 3 then
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Lua.")
|
||
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
|
||
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
|
||
end
|
||
|
||
return 0
|
||
end
|
||
function ResetGroupTempVar(context)
|
||
for k,v in pairs(buff_gadgetId) do
|
||
ScriptLib.SetGroupTempValue(context, v,0,{})
|
||
end
|
||
return 0
|
||
end
|
||
--上报运营日志数据 需求单s1286673
|
||
function UpLoadActionLog(context)
|
||
|
||
local log = {
|
||
["Buff_Attack"] = 0,
|
||
["Buff_Heal"] = 0
|
||
}
|
||
|
||
for k, v in pairs(log) do
|
||
log[k] = ScriptLib.GetGroupTempValue(context, k ,{})
|
||
end
|
||
ScriptLib.MarkGroupLuaAction(context, "Mist_trial", "", log)
|
||
|
||
ScriptLib.PrintContextLog(context, "[MistTrialV2] UpLoadActionLog: "..log["Buff_Attack"].." |"..log["Buff_Heal"])
|
||
return 0
|
||
end
|
||
--用于检查value是否在目标table中
|
||
function CheckIsInTable(context,check_value)
|
||
--和关卡约定的challenge Index
|
||
local indexs = {999,901,902,903}
|
||
|
||
for k,v in pairs(indexs) do
|
||
if v == check_value then
|
||
--ScriptLib.PrintContextLog(context, "[MistTrialV2] Check Is SpecialChallenge. return 1")
|
||
return 1
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
|
||
LF_Initialize_Group(triggers, suites) |