0
0
mirror of https://gitlab.com/YuukiPS/GC-Resources.git synced 2025-04-28 09:05:26 +00:00
GC-Resources/Resources/Scripts/Common/V2_3/WinterCampDevice.lua
Yuuki b09934e7b9 Revert "remove local in defs"
This reverts commit 7e0a645ef33da87ddd5c402c6a64180001c6b03d.
2023-11-23 23:27:47 +08:00

402 lines
14 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.

--[[
2.3雪山冬令营,营地冷暖源装置
限时按顺序激活子装置,启动主装置
10.15迭代不要顺序激活进圈弹banner
]]
--[[
local defs = {
--按想要的解谜顺序, 填子装置的config_id
branch_gadgets = {117012, 117013, 117014},
--主装置的config_id,可填一个或多个
main_gadget = {117011},
--重置倒计时秒数
limit_time = {25},
--这组解谜在哪个suit里
puzzle_suit = 1,
--当前group
group = 133008117,
--营地内龙血矿石组
mineral = {117015, 117016, 117017},
--挑战操作台
challenge_gadget = 117018,
--怪物数量
monster_count = 25,
--挑战时间
time = 120,
--怪物列表
monster_array = {117001,117002,117003,117004,117005,117006,117007,117008,117009,117010},
monster_min = 5,
monster_max = 5,
monster_count =25,
target_point = 117019,
optimiz_region=117043
}
]]
local extraTriggers={
-- { config_id = 8000001,name = "Time_Limit", event = EventType.EVENT_TIME_AXIS_PASS, source = "WinterCamp_LimitTime", condition = "", action = "action_Time_Limit", trigger_count = 0 },
{ config_id = 8000002, name = "Gadget_State_Change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_Gadget_State_Change", trigger_count = 0 },
{ config_id = 8000003, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0},
{ config_id = 8000004, name = "Enter_Optimiz_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ config_id = 8000005, name = "Leave_Optimiz_Region", event = EventType.EVENT_LEAVE_REGION, source = "",condition = "",action = "action_leave_OptimizRegion",trigger_count= 0},
{ config_id = 8000006, name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0},
{ config_id = 8000007, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count = 0 },
{ config_id = 8000008, name = "Select_Option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
{ config_id = 8000009, name = "Mineral_State_Change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_Mineral_State_Change", trigger_count = 0 },
{ config_id = 8000010, name = "TimeAxis_Event", event= EventType.EVENT_TIME_AXIS_PASS, source = "SGV_Checker", condition = "", action = "action_On_TimeAxis", trigger_count = 0 },
{ config_id = 8000011, name = "Enter_Banner_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_BannerRegion", trigger_count = 0 },
{ config_id = 8000012, name = "TimeAxis_Banner", event= EventType.EVENT_TIME_AXIS_PASS, source = "Banner_CD", condition = "", action = "action_On_BannerCD", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[defs.puzzle_suit].triggers,extraTriggers[i].name)
end
--下一个该被激活的branch装置序号.
table.insert(variables,{ config_id=50000001,name = "next_index", value = 1})
--0未完成,1-开始中 2-已经完成
table.insert(variables,{ config_id=50000002,name = "puzzle_state", value = 0, no_refresh = true})
table.insert(variables,{ config_id=50000003,name = "challenge", value = 0})
end
--[[function action_Time_Limit(context,evt)
--如果解谜已开始且还没完成
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 1 then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Timeout. Puzzle Failed.")
FaildProcess(context)
end
return 0
end]]
--10.15迭代进入范围弹出banner 反复弹 战斗过程中不弹 装置已经是暖源了也不弹
function action_enter_BannerRegion(context, evt)
--检查region
if defs.banner_region == nil or evt.param1 ~= defs.banner_region then
return 0
end
--检查暖源
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
return 0
end
--检查战斗状态
if ScriptLib.GetGroupVariableValue(context,"challenge") == 0 then
if ScriptLib.GetGroupTempValue(context, "deny_banner", {}) ~= 1 then
--banner触发CD防止堆积Banner队列
ScriptLib.InitTimeAxis(context, "Banner_CD", {3}, false)
ScriptLib.SetGroupTempValue(context, "deny_banner", 1, {})
ScriptLib.ShowReminder(context, 400108)
end
end
return 0
end
function action_On_BannerCD(context, evt)
ScriptLib.SetGroupTempValue(context, "deny_banner", 0, {})
return 0
end
function action_enter_TutorialRegion(context, evt)
if defs.guide_regionID == nil then
return 0
elseif evt.param1 == defs.guide_regionID then
LF_Try_StartTutorial(context)
end
return 0
end
function LF_Try_StartTutorial(context)
local UidList = ScriptLib.GetSceneUidList(context)
local ownerUid = UidList[1]
local havePlayed = ScriptLib.GetExhibitionAccumulableData(context, ownerUid, 10901104)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 836, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Device_HavePlayed", 1)
end
return 0
end
function FaildProcess(context)
--ScriptLib.EndTimeAxis(context, "WinterCamp_LimitTime")
ScriptLib.SetGroupVariableValue(context,"next_index", 1)
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 0)
SetGadgetStateInTable(context,defs.branch_gadgets,0)
ScriptLib.ShowReminder(context, 400096)
--龙血矿重置
if defs.mineral ~= nil then
for k,v in pairs(defs.mineral) do
ScriptLib.CreateGadget(context, { config_id = v })
end
end
return 0
end
--用于把一个table中的gadget设成指定state
function SetGadgetStateInTable(context,table,state)
for k, v in pairs(table) do
ScriptLib.SetGadgetStateByConfigId(context,v,state)
end
return 0
end
function SuccessProcess(context)
UpLoadActionLog_StateChange(context)
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 2)
SetGadgetStateInTable(context,defs.main_gadget,201)
--在战斗过程中解谜完成立即上SGV
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
if ScriptLib.GetGroupVariableValue(context,"challenge") == 1 then
--用于检查中途加入的玩家
ScriptLib.InitTimeAxis(context, "SGV_Checker", {3}, true)
end
return 0
end
function action_Mineral_State_Change(context, evt)
if GadgetState.GearStart ~= evt.param1 then
return 0
end
local mineral_index = LF_IndexInTable(context,evt.param2,defs.mineral)
if mineral_index == 0 then
return 0
else
--记下最后一次交互的龙血矿index
ScriptLib.SetGroupVariableValue(context, "lastID", mineral_index)
end
return 0
end
function action_Gadget_State_Change(context, evt)
if ScriptLib.GetGroupVariableValue(context, "puzzle_state") == 2 then
return 0
end
local gadget_index = LF_IndexInTable(context,evt.param2,defs.branch_gadgets)
--如果是branch装置。且是被点亮.
if gadget_index ~= 0 and evt.param1 == 201 then
--无论是不是正确的顺序都要mark
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_4", "", {})
local next_index = ScriptLib.GetGroupVariableValue(context,"next_index")
--如果解谜已经开始
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 1 then
--检查是不是正确顺序
--[[if gadget_index ~= next_index then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Wrong Branch Gadget Index. Puzzle Failed.")
FaildProcess(context)
return 0
--如果是正确的交互顺序
else]]
--移除对应的龙血矿
local index_toRemove = ScriptLib.GetGroupVariableValue(context, "lastID")
if index_toRemove ~= 0 then
ScriptLib.RemoveEntityByConfigId(context, defs.group, EntityType.GADGET, defs.mineral[index_toRemove])
end
--这次被交互的是不是最后一个子机关
if next_index == #defs.branch_gadgets then
SuccessProcess(context)
return 0
end
--不是的话继续
next_index = next_index + 1
ScriptLib.SetGroupVariableValue(context,"next_index", next_index)
--end
--如果解谜还没开始
else
--那必须最先交互的是一号机关,否则直接失败
--[[if gadget_index ~= 1 then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Wrong Branch Gadget Start Index. Puzzle Failed.")
FaildProcess(context)
return 0
else]]
--解谜开始
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 1)
ScriptLib.SetGroupVariableValue(context,"next_index", 2)
--移除对应的龙血矿
local index_toRemove = ScriptLib.GetGroupVariableValue(context, "lastID")
if index_toRemove ~= 0 then
ScriptLib.RemoveEntityByConfigId(context, defs.group, EntityType.GADGET, defs.mineral[index_toRemove])
end
--ScriptLib.InitTimeAxis(context,"WinterCamp_LimitTime",defs.limit_time,true)
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Puzzle Start. next_index@"..next_index)
--end
end
end
return 0
end
function action_enter_OptimizRegion(context,evt)
if defs.optimiz_region == nil then
return 0
end
--检查Region的configId是否是优化圈
if evt.param1 == defs.optimiz_region then
ScriptLib.SetPlayerEyePointStream(context, evt.param1, evt.param1, true)
ScriptLib.PrintContextLog(context, "[WinterCamp] Enter optimiz_region. Region_config_id@"..evt.param1 )
end
return 0
end
function action_leave_OptimizRegion(context,evt)
if defs.optimiz_region == nil then
return 0
end
--检查Region的configId是否是优化圈
if evt.param1 == defs.optimiz_region then
ScriptLib.ClearPlayerEyePoint(context, evt.param1)
ScriptLib.PrintContextLog(context, "[WinterCamp] Leave optimiz_region. Region_config_id@"..evt.param1)
end
return 0
end
--用于返回value在table中的key
function LF_IndexInTable(context,value,check_table)
for i=1, #check_table do
if check_table[i] == value then
return i
end
end
--如果没找到返回0
return 0
end
function action_On_TimeAxis(context, evt)
--检查玩家是不是该带着SGV但没带客机中途加入战斗的情况
if evt.source_name == "SGV_Checker" then
LF_Check_AllPlayerSGV(context)
end
--[[--暖源机关auth保持为主机
local uid_list = ScriptLib.GetSceneUidList(context)
if #uid_list ~= 0 then
ScriptLib.ForceRefreshAuthorityByConfigId(context, defs.main_gadget[1], uid_list[1])
end]]
return 0
end
function LF_Check_AllPlayerSGV(context)
--检查暖源状态
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
if ScriptLib.GetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff") == 0 then
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
end
end
return 0
end
function action_select_option(context, evt)
--选项7是开挑战
if evt.param2 == 7 then
ScriptLib.SetGroupVariableValue(context, "challenge", 1)
ScriptLib.DelWorktopOptionByGroupId(context, defs.group, defs.challenge_gadget, 7)
ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 201)
--优化圈
ScriptLib.AddExtraGroupSuite(context, defs.group, 2)
--mark
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_3", "", {})
--暖源状态下开挑战上GV
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
--用于检查中途加入的玩家
ScriptLib.InitTimeAxis(context, "SGV_Checker", {3}, true)
else
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 0)
end
--处理暴风雪特效如果configID已存在 会无事发生
ScriptLib.CreateGadget(context, { config_id = defs.target_point } )
ScriptLib.SetGadgetStateByConfigId(context, defs.target_point, 0 )
end
end
return 0
end
function action_challenge_success(context, evt)
ScriptLib.EndTimeAxis(context, "SGV_Checker")
UpLoadActionLog_Result(context, 0)
ScriptLib.DelWorktopOptionByGroupId(context, defs.group, defs.challenge_gadget, 7)
ScriptLib.KillEntityByConfigId(context, { config_id = defs.challenge_gadget })
--ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 201)
ScriptLib.SetGroupVariableValue(context, "challenge", 0)
--优化圈
ScriptLib.RemoveExtraGroupSuite(context, defs.group, 2)
--[[if defs.optimiz_region ~= nil then
ScriptLib.ClearPlayerEyePoint(context, defs.optimiz_region)
end]]
LF_ResetPlayerSGV(context)
return 0
end
function action_challenge_fail(context, evt)
ScriptLib.EndTimeAxis(context, "SGV_Checker")
UpLoadActionLog_Result(context, 1)
ScriptLib.KillMonsterTide(context, defs.group, 1)
ScriptLib.SetGroupVariableValue(context, "challenge", 0)
--优化圈
ScriptLib.RemoveExtraGroupSuite(context, defs.group, 2)
--ScriptLib.ClearPlayerEyePoint(context, defs.optimiz_region)
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group, defs.challenge_gadget, {7})
ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 0)
ScriptLib.SetGadgetStateByConfigId(context, defs.target_point, GadgetState.GearStop)
LF_ResetPlayerSGV(context)
return 0
end
--上报运营日志数据 s1286671
function UpLoadActionLog_Result(context, result)
local log = {
["result"] = result,--0 -成功 1-失败 具体枚举和TD实现一致 能区分成功or失败即可
}
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_1", "", log)
ScriptLib.PrintContextLog(context, "[WinterCamp] UpLoadActionLog_Result: "..log["result"])
return 0
end
function UpLoadActionLog_StateChange(context) --寒冷装置变为暖源状态时记录
-- 放空即可
local log = {
}
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_2", "", log)
ScriptLib.PrintContextLog(context, "[WinterCamp] UpLoadActionLog_StateChange ")
return 0
end
function LF_ResetPlayerSGV(context)
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 0)
end
return 0
end
LF_Initialize_Group(triggers, suites)