mirror of
https://gitlab.com/YuukiPS/GC-Resources.git
synced 2025-04-28 09:05:26 +00:00
280 lines
10 KiB
Lua
280 lines
10 KiB
Lua
--[[======================================
|
||
|| 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值设回0,ability层只有在对应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)
|