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/V3_0/ContinuousTrampoline.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

280 lines
10 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.

--[[======================================
|| filename: ContinuousTrampoline
|| owner: shuyi.chang
|| description: 连续弹跳蘑菇
|| LogName: ## [ContinuousTrampoline]
|| Protection:
=======================================]]
-- local defs =
-- {
-- maxRegion = 34004,
-- maxJumpTimes = 5,
-- mushroomList = {
-- [1] = {34001, 34002,},
-- [2] = {34003},
-- [3] = {34004, 34005, 34006,},
-- [4] = {34007,},
-- [5] = {34008,},
-- [6] = {34019,},
-- [7] = {34010,},
-- },
-- }
local challengeId = 84
local extraTriggers =
{
{ config_id = 5000001, name = "GROUP_LOAD", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_GROUP_LOAD", trigger_count = 0},
{ config_id = 5000002, name = "ENTER_REGION", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_ENTER_REGION", forbid_guest = true, trigger_count = 0},
{ config_id = 5000003, name = "AVATAR_JUMP", event = EventType.EVENT_VARIABLE_CHANGE, source = "jumpTimes", condition = "", action = "action_AVATAR_JUMP", trigger_count = 0, tag = "99"},
{ config_id = 5000004, name = "CHALLENGE_FAIL", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_CHALLENGE_FAIL", trigger_count = 0 },
{ config_id = 5000005, name = "CHALLENGE_SUCCESS", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_CHALLENGE_SUCCESS", trigger_count = 0 },
{ config_id = 5000006, name = "LEAVE_REGION", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_LEAVE_REGION", trigger_count = 0},
{ config_id = 5000007, name = "GROUP_WILL_UNLOAD", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_GROUP_WILL_UNLOAD", trigger_count = 0},
}
local extraVariables =
{
-- 记录玩家连续跳跃次数
{ config_id = 5000101, name = "jumpTimes", value = 0, no_refresh = false },
-- 记录最后一个跳过的蘑菇的index
{ config_id = 5000102, name = "mushroomIdx", value = 1, no_refresh = true },
-- 记录最后一个跳过的蘑菇的index
{ config_id = 5000103, name = "succeed", value = 0, no_refresh = true },
{ config_id = 5000104, name = "onMushroom", value = 0, no_refresh = false },
}
local mushroomRegion = {}
local abilityGroup = "ActivityAbility_ContinuousTrampoline"
--================================================================
-- Local Functions
--================================================================
function LF_Initialize_Group(triggers, suites, variables, gadgets, regions)
-- insert triggers
for i = 1, #extraTriggers do
table.insert(triggers, extraTriggers[i])
end
-- add triggers to suite
for i = 1, #extraTriggers do
table.insert(suites[1].triggers,extraTriggers[i].name)
end
-- insert variables
for i = 1, #extraVariables do
table.insert(variables, extraVariables[i])
end
-- add ability group
-- regions[defs.maxRegion].team_ability_group_list = {abilityGroup}
-- local regionBaseId = 4000000
-- -- 每个蘑菇都加一个region
-- for i = 1, #defs.mushroomList do
-- for j = 1, #defs.mushroomList[i] do
-- local idTemp = regionBaseId + i * 10 + j
-- local posTemp = {x = gadgets[defs.mushroomList[i][j]].pos.x, y = gadgets[defs.mushroomList[i][j]].pos.y + 2.5, z = gadgets[defs.mushroomList[i][j]].pos.z}
-- local regionTemp = { config_id = idTemp,
-- shape = RegionShape.CYLINDER, radius = 1.5, pos = { x = posTemp.x, y = posTemp.y, z = posTemp.z }, height = 3.000 }
-- regions[idTemp] = regionTemp
-- mushroomRegion[i] = idTemp
-- -- add region to suites
-- table.insert(suites[1].regions, idTemp)
-- end
-- end
end
function LF_CreateMushrooms(context, index)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] LF_CreateMushrooms is called, index = "..index)
for i = 1, #defs.mushroomList[index] do
ScriptLib.CreateGadget(context, { config_id = defs.mushroomList[index][i] })
end
end
function LF_KillMushrooms(context, index)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] LF_KillMushrooms is called, index = "..index)
for i = 1, #defs.mushroomList[index] do
ScriptLib.KillEntityByConfigId(context, { group_id = base_info.group_id, config_id = defs.mushroomList[index][i] })
end
end
function LF_RestartChallenge(context)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] LF_RestartChallenge is called")
ScriptLib.StopChallenge(context, challengeId, 0)
ScriptLib.StartChallenge(context, challengeId, challengeId, {3, 99, defs.maxJumpTimes})
end
--================================================================
-- Trigger functions
--================================================================
function action_GROUP_LOAD(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] group is loaded")
if ScriptLib.GetGroupVariableValue(context, "succeed") == 0 then
local currentMushroomIdx = ScriptLib.GetGroupVariableValue(context, "mushroomIdx")
LF_CreateMushrooms(context, currentMushroomIdx)
end
return 0
end
function action_GROUP_WILL_UNLOAD(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] group will unload")
-- 挑战底层问题group unload时强制挑战失败
ScriptLib.StopChallenge(context, challengeId, 0)
return 0
end
function action_ENTER_REGION(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] enter region = "..evt.param1)
if evt.param1 == defs.maxRegion and ScriptLib.GetGroupVariableValue(context, "succeed") == 0 then
-- 开启挑战
ScriptLib.StartChallenge(context, challengeId, challengeId, {3, 99, defs.maxJumpTimes})
-- else
-- for i = 1, #mushroomRegion do
-- if evt.param1 == mushroomRegion[i] then
-- -- 进入了一个蘑菇区域
-- ScriptLib.SetGroupVariableValue(context, "onMushroom", 1)
-- break
-- end
-- end
end
return 0
end
function action_LEAVE_REGION(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] leave region = "..evt.param1)
local uid_list = ScriptLib.GetSceneUidList(context)
if evt.param1 == defs.maxRegion then
ScriptLib.StopChallenge(context, challengeId, 0)
-- else
-- for i = 1, #mushroomRegion do
-- if evt.param1 == mushroomRegion[i] then
-- -- 离开了一个蘑菇区域
-- ScriptLib.SetGroupVariableValue(context, "onMushroom", 0)
-- local isJumping = ScriptLib.GetTeamServerGlobalValue(context, uid_list[1], "_ABILITY_Activity_Trampoline_Jump")
-- if isJumping == false then
-- LF_RestartChallenge(context)
-- end
-- break
-- end
-- end
end
return 0
end
function action_CHALLENGE_FAIL(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] challenge "..evt.param1.." fails")
ScriptLib.SetGroupVariableValue(context, "jumpTimes", 0)
return 0
end
function action_CHALLENGE_SUCCESS(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] challenge "..evt.param1.." succeeds")
ScriptLib.SetGroupVariableValue(context, "succeed", 1)
return 0
end
function action_AVATAR_JUMP(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] "..evt.source_name.." changes from "..evt.param2.." to ".. evt.param1)
return 0
end
--================================================================
-- SLC functions
--================================================================
function SLC_Jump_Succeed_Once(context, evt)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] SLC_Jump_Succeed_Once is called")
-- 为了处理断网情况需要给ability层一个callback把gv值设回0ability层只有在对应gv值为0的情况下才允许发slc
ScriptLib.SetTeamEntityGlobalFloatValue(context, {context.owner_uid}, "_ABILITY_Activity_Trampoline_JumpTimes", 0)
-- 跳跃成功一次
ScriptLib.ChangeGroupVariableValue(context, "jumpTimes", 1)
ScriptLib.ChangeGroupVariableValue(context, "mushroomIdx", 1)
local curJumpTimes = ScriptLib.GetGroupVariableValue(context, "jumpTimes")
local currentMushroomIdx = ScriptLib.GetGroupVariableValue(context, "mushroomIdx");
local lastOne = false
if currentMushroomIdx > #defs.mushroomList then
ScriptLib.SetGroupVariableValue(context, "mushroomIdx", 1)
currentMushroomIdx = ScriptLib.GetGroupVariableValue(context, "mushroomIdx");
lastOne = true
end
-- 检查挑战是否成功
if curJumpTimes < defs.maxJumpTimes and currentMushroomIdx > 0 then
LF_CreateMushrooms(context, currentMushroomIdx)
end
if lastOne then
LF_KillMushrooms(context, #defs.mushroomList)
elseif currentMushroomIdx > 1 then
-- 这里主要是保一下要干掉的蘑菇组index一定大于0
LF_KillMushrooms(context, currentMushroomIdx - 1)
end
return 0
end
function SLC_Fall_Onto_Ground(context, evt)
-- 玩家进入落到地上的动画状态超级跳前会短暂进入FallOnGround和FallOnGroundLit在ability层过滤掉了这种情况
local uid_list = ScriptLib.GetSceneUidList(context)
ScriptLib.PrintContextLog(context, "## [ContinuousTrampoline] SLC_Fall_Onto_Ground is called")
-- 判断是不是落在了蘑菇上的region落在上面了不算失败
-- local onMushroom = ScriptLib.GetGroupVariableValue(context, "onMushroom")
-- if onMushroom == 1 then
-- return 0
-- end
-- 检查跳了几次
local jumpTimes = ScriptLib.GetGroupVariableValue(context, "jumpTimes")
if jumpTimes < defs.maxJumpTimes and jumpTimes > 0 then
LF_RestartChallenge(context)
end
return 0
end
--================================================================
-- Initialize
--================================================================
LF_Initialize_Group(triggers, suites, variables, gadgets, regions)