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/WinterCampParkour.lua
KingRainbow44 8dd3a721e5
Revert "The Great De-Local'ifying of defs and base_info"
This reverts commit 0989747b
2023-08-30 21:15:50 -04:00

462 lines
16 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.

--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3雪山活动 铁人三项跑酷
单Group版
]]
--[[
local defs = {
gallery_id = ,
group_id = ,
--开启机关交互后,加载哪个/些suit
load_on_start = {2},
--开启机关的configIDSelectOption为175
starter_gadget = 0,
--全程终点region的ConfigID
end_region = 0,
--玩法RegionID进入此圈开启性能优化在suit1
optimiz_region = {},
--全程终点在哪个suit,如果这个group非终点则配0
ending_suit = 0,
--挑战限时秒
challenge_time = 300,
--金币和冰柱的对应关系
--[冰柱config_id]={金币config_id1,金币config_id2...}
coin_ice = {
[108010] = {108015,108023},
[108011] = {108017,108024},
[108012] = {108019,108025},
},
--镜头注目
look_pos = {x=555, y=555, z=555},
duration = 2,
}
]]
local triggers_start={
--测试用
--[[{ config_id = 8000000, name = "Test_GM", event = EventType.EVENT_VARIABLE_CHANGE, source = "testGM", condition = "", action = "", trigger_count = 0, tag = "100"},
{ config_id = 80000010, name = "Challenge_SuccessTest", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0},]]
{ config_id = 8000001, name = "Select_Option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
{ config_id = 8000002, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "",condition = "",action = "action_challenge_fail",trigger_count= 0},
{ config_id = 8000003, name = "Coin_Get", event = EventType.EVENT_VARIABLE_CHANGE, source = "coin_counter", condition = "", action = "", trigger_count = 0, tag = "888"},
{ config_id = 8000004, name = "Spec_Coin_Get", event = EventType.EVENT_VARIABLE_CHANGE, source = "spec_coin_counter", condition = "", action = "", trigger_count = 0, tag = "999"},
--玩法RegionID进入此圈开启性能优化放在load_on_start第一个suit里
{ config_id = 8000005, name = "Enter_Optimiz_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ config_id = 8000006, name = "Leave_Optimiz_Region", event = EventType.EVENT_LEAVE_REGION, source = "",condition = "",action = "action_leave_OptimizRegion",trigger_count= 0},
{ config_id = 8000007, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
{ config_id = 8000008, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0},
}
--[[local triggers_optimiz = {
}]]
local triggers_end={
--终点的trigger单独拿出来以备同一赛道需要多个Group
{ config_id = 8100001, name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "condition_enter_final", action = "", trigger_count = 0, tag = "666" },
{ config_id = 8100002, name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0}
}
function LF_Initialize_Group(triggers, suites)
--起点用触发器
for k,v in pairs(triggers_start) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
--[[--性能优化圈用触发器
for k,v in pairs(triggers_optimiz) do
table.insert(triggers, v)
table.insert(suites[defs.optimiz_suit].triggers, v.name)
end]]
--全程结尾触发器 终点的trigger单独拿出来以备同一赛道需要多个Group
for k,v in pairs(triggers_end) do
table.insert(triggers, v)
table.insert(suites[defs.ending_suit].triggers, v.name)
end
table.insert(variables,{ config_id=50000001,name = "coin_counter", value = 0})
table.insert(variables,{ config_id=50000002,name = "spec_coin_counter", value = 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, 10901102)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 834, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Parkour_HavePlayed", 1)
end
return 0
end
--统计纹章。0普通 1限时
function SLC_WinterCampCoinGet(context,param1)
ScriptLib.PrintContextLog(context, "[WinterCamp] Got SLC_WinterCampCoinGet. param@"..param1 )
if param1 == 0 then
--触发挑战Trigger
ScriptLib.ChangeGroupVariableValue(context, "coin_counter", 1)
elseif param1 == 1 then
--触发挑战Trigger
ScriptLib.ChangeGroupVariableValue(context, "spec_coin_counter", 1)
end
--["pick_up"] 0普通金币 1限时币 2大跳 3盾 4体力
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["pick_up"] = param1})
return 0
end
--机关开启处理
function action_select_option(context, evt)
--检查SelectOption
if defs.starter_gadget ~= evt.param1 or 175 ~= evt.param2 then
return -1
end
--检查是否单机
if true == ScriptLib.CheckIsInMpMode(context) then
--local starter_entity = ScriptLib.GetEntityIdByConfigId(context, defs.starter_gadget)
--local center = ScriptLib.GetPosByEntityId(context, starter_entity)--这个接口取到的小数位数太多 没法直接用
for k,v in pairs(gadgets) do
if k == defs.starter_gadget then
center = v.pos
break
end
end
ScriptLib.ShowReminderRadius(context, 400053, center, 2)
return -1
end
--LD用多个Region覆盖赛道范围这个变量用于判断是否出圈
ScriptLib.SetGroupTempValue(context, "is_in_region", 0, {})
--切操作台状态
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.GearStart)
--去掉操作台SelectOption
ScriptLib.DelWorktopOptionByGroupId(context, defs.group_id, defs.starter_gadget, 175)
--加载第一波suit
for k,v in pairs(defs.load_on_start) do
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
end
--环境小动物关闭
ScriptLib.SwitchSceneEnvAnimal(context, 0)
--VisionType 龙血古树赛道不屏蔽3 神像赛道不屏蔽5
if defs.group_id == 133008671 then
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0,3})
elseif defs.group_id == 133008673 then
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0,5})
else
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
end
ScriptLib.ForbidPlayerRegionVision(context, context.uid)
--起Gallery
ScriptLib.StartGallery(context, defs.gallery_id)
InitChallenge(context)
--镜头注目
CameraAction(context)
--关闭其他营地黄圈
LF_Close_OtherHintCircle(context)
return 0
end
function InitChallenge(context)
--设置标记
ScriptLib.SetGroupTempValue(context, "challenge_state", 1, {})
--ScriptLib.PrintContextLog(context, "[WinterCamp] Gallery Started. gallery_id@"..evt.param1)
--起挑战
ScriptLib.CreateFatherChallenge(context, 1, defs.father_challenge, defs.challenge_time, {success = 10, fail = 5})
--先开再attach给子挑战保序
ScriptLib.StartFatherChallenge(context,1)
ScriptLib.AttachChildChallenge(context,1, 2003003, 2003003,{4, 666,1,1},{},{success = 10,fail = 5}) --限时到达
ScriptLib.AttachChildChallenge(context, 1, 2003004, 2003004,{3, 888,999},{},{success = 0,fail = 0}) --收集普通纹章
ScriptLib.AttachChildChallenge(context, 1, 2003005, 2003005,{3, 999,999},{},{success = 0,fail = 0}) --收集限时纹章
--ScriptLib.AttachChildChallenge(context, 2003002, 99999, 2003004,{3, 100,1,1},{},{success = 10,fail = 0}) -- 测试结算
return 0
end
function action_challenge_success(context,evt)
if evt.param1 ~= defs.father_challenge then
return -1
end
ScriptLib.SetGroupTempValue(context, "challenge_state", 0, {})
--终点kill特效
ScriptLib.KillEntityByConfigId(context, { group_id = defs.group_id, config_id = defs.end_gadget, entity_type = EntityType.GADGET })
for i = 2, (#suites-1) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, i)
end
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
LF_RevertVisionType(context)
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
--设置操作台选项
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, defs.starter_gadget, {175})
ScriptLib.RefreshGroup(context, { group_id = defs.group_id, suite = 1 })
--重置变量
ScriptLib.SetGroupVariableValue(context, "spec_coin_counter", 0)
ScriptLib.SetGroupVariableValue(context, "coin_counter", 0)
--恢复其他营地黄圈
LF_Open_OtherHintCircle(context)
--停Gallery
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
--ScriptLib.StopGallery(context, defs.gallery_id, false)
ScriptLib.StopGalleryByReason(context, defs.gallery_id, 3)
return 0
end
function action_challenge_fail(context, evt)
--evt.param2剩余时间
if evt.param2 <= 0 then
LF_FailChallenge(context,1)
else
LF_FailChallenge(context,2)
end
return 0
end
function LF_FailChallenge(context,reason)
ScriptLib.SetGroupTempValue(context, "challenge_state", 0, {})
-- 设置操作台选项
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, defs.starter_gadget, {175})
for i = 2, #suites do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, i)
end
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--ScriptLib.AddPlayerGroupVisionType(context, {context.uid}, {1})
LF_RevertVisionType(context)
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
--重置变量
ScriptLib.SetGroupVariableValue(context, "spec_coin_counter", 0)
ScriptLib.SetGroupVariableValue(context, "coin_counter", 0)
--停Gallery
--ScriptLib.StopGallery(context, defs.gallery_id, true)
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
ScriptLib.StopGalleryByReason(context, defs.gallery_id, reason)
ScriptLib.RefreshGroup(context, { group_id = defs.group_id, suite = 1 })
--恢复其他营地黄圈
LF_Open_OtherHintCircle(context)
return 0
end
--跑酷期间,关闭其他两种活动营地的黄圈
--group bundle没在不会报错返回0 活动没开有warnin
function LF_Close_OtherHintCircle(context)
local explore_id = ScriptLib.WinterCampGetExploreGroupBundleId(context)
if explore_id ~= 0 then
ScriptLib.DeactivateGroupLinkBundleByBundleId(context, explore_id)
end
local battle_id = ScriptLib.WinterCampGetBattleGroupBundleId(context)
if battle_id ~= 0 then
ScriptLib.DeactivateGroupLinkBundleByBundleId(context, battle_id)
end
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Close Other HintCircle. explore_id@"..explore_id.." battle_id@"..battle_id)
return 0
end
--跑酷结束,恢复其他两种活动营地的黄圈
function LF_Open_OtherHintCircle(context)
local explore_id = ScriptLib.WinterCampGetExploreGroupBundleId(context)
if explore_id ~= 0 then
ScriptLib.ActivateGroupLinkBundleByBundleId(context, explore_id)
end
local battle_id = ScriptLib.WinterCampGetBattleGroupBundleId(context)
if battle_id ~= 0 then
ScriptLib.ActivateGroupLinkBundleByBundleId(context, battle_id)
end
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Open Other HintCircle. explore_id@"..explore_id.." battle_id@"..battle_id)
return 0
end
--含金币冰柱破碎通知对应的金币gadget切状态
function SLC_SpecialIcePillarBreak(context)
local cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Break Special IcePillar. cfg_id@"..cfg_id)
for k,v in pairs(defs.coin_ice) do
if k == cfg_id then
ChangeCoinState(context,v)
return 0
end
end
ScriptLib.PrintContextLog(context, "[WinterCamp] #WARN# Break an Special IcePillar with No Coins! Check defs.")
return -1
end
--将table中的金币设为可吃状态
function ChangeCoinState(context, coin_table)
for k,v in pairs(coin_table) do
ScriptLib.SetGadgetStateByConfigId(context, v, 0)
end
return 0
end
--上报获得buff球
function SLC_ReportBuffGet(context, param1)
--["pick_up"] 0普通金币 1限时币 2大跳 3盾 4体力
--ScriptLib.PrintContextLog(context, "[WinterCamp] Got SLC_ReportBuffGet. param@"..param1 )
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["pick_up"] = param1})
return 0
end
function action_enter_OptimizRegion(context,evt)
--检查Region的configId是否是优化圈
if CheckIsInTable(context,evt.param1,defs.optimiz_region) then
ScriptLib.ChangeGroupTempValue(context, "is_in_region", 1, {})
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) == 1 then
--ScriptLib.SetPlayerEyePointStream(context, evt.param1, evt.param1, false)
ScriptLib.PrintContextLog(context, "[WinterCamp] Enter optimiz_region. Region_config_id@"..evt.param1 )
end
end
return 0
end
function action_leave_OptimizRegion(context,evt)
--检查Region的configId是否是优化圈
if CheckIsInTable(context,evt.param1,defs.optimiz_region) then
ScriptLib.ChangeGroupTempValue(context, "is_in_region", -1, {})
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) ~= 1 then
return 0
end
--ScriptLib.ClearPlayerEyePoint(context, evt.param1)
--如果完全出圈了,触发挑战失败
local is_in_region = ScriptLib.GetGroupTempValue(context, "is_in_region", {})
ScriptLib.PrintContextLog(context, "[WinterCamp] Leave optimiz_region. Region_config_id@"..evt.param1.." is_in_region@"..is_in_region)
if is_in_region <= 0 then
LF_FailChallenge(context,2)
end
end
return 0
end
--终点检查
function condition_enter_final(context, evt)
if evt.param1 ~= defs.end_region then
return false
end
return true
end
--卸载保护
function action_group_will_unload(context,evt)
--停Gallery
--ScriptLib.StopGallery(context, defs.gallery_id, true)
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
--[[[ScriptLib.StopGalleryByReason(context, defs.gallery_id, 4)
for k,v in pairs(defs.optimiz_region) do
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.REGION, v)
end]]
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--VisionType恢复
LF_RevertVisionType(context)
return 0
end
function LF_RevertVisionType(context)
local uidList = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uidList) do
ScriptLib.RevertPlayerRegionVision(context, v)
end
return 0
end
function CameraAction(context)
if defs.look_pos and defs.duration then
--触发镜头注目,强制注目形式,不广播其他玩家
local pos_follow = {x=0, y=0, z=0}
ScriptLib.BeginCameraSceneLook(context, { look_pos = defs.look_pos, is_allow_input = false, duration = defs.duration, is_force = true, is_broadcast = false, is_recover_keep_current = true, delay = 0,
is_set_follow_pos = false, follow_pos = pos_follow, is_force_walk = false, is_change_play_mode = false,
is_set_screen_XY = false, screen_x = 0, screen_y = 0 })
return 0
else
ScriptLib.PrintContextLog(context, "[WinterCamp] #WARN# Camera action config is nil, Please Check defs.")
end
return 0
end
--用于检查value是否在目标table中
function CheckIsInTable(context,value,check_table)
for i = 1,#check_table do
if check_table[i] == value then
return true
end
end
return false
end
LF_Initialize_Group(triggers, suites)