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/Activity_TreasureSeelie.lua
2023-10-22 15:27:31 +08:00

931 lines
34 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: Activity_TreasureSeelie
|| owner: chao.cui
|| description: 3.0 寻宝仙灵
|| LogName: TD
|| Protection: ???
=======================================]]
--[[
defs =
{
-- 挑战编号
challenge_id = 2009009,
-- 探查点交互选项ID
starter_option_id = 175,
-- 挖掘点交互选项ID
dig_option_id = 39,
-- 能量球所在suite
energy_ball_suite = 10,
-- 备用元素微粒suite
-- element_suite = 11,
}
-- 各玩法阶段配置
local play_stage =
{
[1] =
{
gallery_id = 26001,
-- 挑战限时
challenge_time = 300,
-- 收集元素微粒数量
element_target = 3,
-- 探查点configID
starter_operator_configID = ,
-- 挖掘点configID
dig_operator_configID = ,
-- 宝箱configID
treasure_configID = ,
-- 探查点suite
starter_operator_suite = ,
-- 玩法suite
level_suite = ,
-- 挖掘点suite
dig_operator_suite ,
-- 宝箱suite
treasure_suite = ,
},
[2] =
{
},
[3] =
{
}
}
-- 备用元素微粒的configID
local extra_elements =
{
73017,73018,73019,73020,73021,73022,73023,73024
}
]]--
local extraTriggers =
{
--测试用
--{ config_id = 41000001, name = "Gallery_Stop", event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_gallery_stop", trigger_count = 0 },
--{ config_id = 49000001, name = "tri_reminder", event = EventType.EVENT_VARIABLE_CHANGE, source = "style", condition = "", action = "action_reminder_style", trigger_count = 0 },
--
{ config_id = 40000001, name = "tri_group_load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
{ config_id = 40000003, name = "tri_select_option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
-- 挑战触发Trigger
{ config_id = 40000004, name = "tri_element_get", event = EventType.EVENT_VARIABLE_CHANGE, source = "element_counter", condition = "condition_element_get", action = "", trigger_count = 0, tag = "666" },
--{ config_id = 40000002, name = "tri_energy_ball_get", event = EventType.EVENT_VARIABLE_CHANGE, source = "energy_ball_counter", condition = "", action = "action_energy_ball_picked", trigger_count = 0 },
{ config_id = 40000005, name = "tri_gadget_create", event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_gadget_create", trigger_count = 0 },
{ config_id = 40000006, name = "tri_challenge_fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count= 0 },
{ config_id = 40000007, name = "tri_challenge_success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count= 0 },
-- 玩法区域
{ config_id = 40000008, name = "tri_enter_play_region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", forbid_guest = false, trigger_count = 0 },
{ config_id = 40000009, name = "tri_leave_play_region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", forbid_guest = false, trigger_count = 0 },
--
{ config_id = 40000010, name = "tri_gadget_state_change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "condition_gadget_state_change", action = "action_gadget_state_change", trigger_count = 0 },
{ config_id = 40000011, name = "tri_group_will_unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0 },
{ config_id = 40000012, name = "tri_monster_die", event = EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_monster_die", trigger_count = 0 },
{ config_id = 40000013, name = "tri_perform_timer", event = EventType.EVENT_TIMER_EVENT, source = "", condition = "", action = "action_perform_timer", trigger_count = 0 },
{ config_id = 40000014, name = "tri_seelie_out", event = EventType.EVENT_VARIABLE_CHANGE, source = "seelie_out", condition = "", action = "action_var_seelie_out", trigger_count = 0 },
}
---------- Basic Functions -------------
-- 打印日志
function PrintLog(context, content)
local log = "## [Activity_TreasureSeelie] TD: "..content
ScriptLib.PrintContextLog(context, log)
end
--------- Level Functions -----------
function LF_Initialize_Group(triggers, suites)
-- Triggers
for _k, _tri in pairs(extraTriggers) do
table.insert(triggers, _tri)
table.insert(suites[1].triggers, _tri.name)
end
-- Vars
table.insert(variables, { config_id = 50000001, name = "energy_ball_counter", value = 0, no_refresh = true})
table.insert(variables, { config_id = 50000002, name = "element_counter", value = 0, no_refresh = false})
table.insert(variables, { config_id = 50000003, name = "current_challenge_stage", value = 0, no_refresh = false})
-- 进度存储
table.insert(variables, { config_id = 50000004, name = "stage_progress1", value = 0, no_refresh = true})
table.insert(variables, { config_id = 50000005, name = "stage_progress2", value = 0, no_refresh = true})
table.insert(variables, { config_id = 50000006, name = "stage_progress3", value = 0, no_refresh = true})
-- 总进度
table.insert(variables, { config_id = 50000007, name = "stage_counter", value = 0, no_refresh = true})
-- 仙灵是否离体
table.insert(variables, { config_id = 50000008, name = "seelie_out", value = 0, no_refresh = true})
-- 仙灵是否装备
-- var并没有什么用,改为从GV:_SeekerSeelieV3_equipped直接获取 by siyu.li
table.insert(variables, { config_id = 50000009, name = "seelie_equipped", value = 0, no_refresh = false})
-- 元素微粒使用计数
table.insert(variables, { config_id = 50000010, name = "element_used", value = 0, no_refresh = false})
return 0
end
-- 进入玩法区域弹提示
function LF_Try_StartTutorial(context)
ScriptLib.ShowCommonPlayerTips(context, 1, {"UI_ACTIVITY_TREASURE_ENTER_AREA_REMIND_TITLE", "UI_ACTIVITY_TREASURE_ENTER_AREA_REMIND_DESC"})
return 0
end
-- 重置关卡
function LF_Reset_Level(context)
PrintLog(context, "LF_Reset_Level")
-- 修复区域完成后的仙灵BUG区域探索完成后不再重置
if ScriptLib.GetGroupVariableValue(context, "stage_counter") >= 3 then
-- 通知小道具卸下
--ScriptLib.SetGroupVariableValue(context, "seelie_equipped", 0)
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieGameplayGroup", 0)
return 0
end
for i = 2, #suites do
ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, i)
end
ScriptLib.RefreshGroup(context, { group_id = base_info.group_id, suite = 1 })
return 0
end
-- 第stage个探查点被发现
function LF_SearchPoint_Found(context, stage)
PrintLog(context, "发现探查点:"..stage)
ScriptLib.ShowReminder(context, 600128)
-- 存档
ScriptLib.SetGroupVariableValue(context, "stage_progress"..stage, 1)
-- 探查点出现
LF_Show_Search_Point(context, stage, true)
end
-- 第stage个挖掘点被发现
function LF_DigPoint_Found(context, stage)
PrintLog(context, "发现挖掘点:"..stage)
-- 存档
ScriptLib.SetGroupVariableValue(context, "stage_progress"..stage, 2)
-- 挖掘点出现
LF_Show_Dig_Point(context, stage, true)
end
-- 与configID探查点交互开启玩法
function LF_Search_Point_Interacted(context, configID)
local stage = 1
for i = 1, #play_stage do
if play_stage[i].starter_operator_configID == configID then
stage = i
break
end
end
if ScriptLib.IsGalleryStart(context, play_stage[stage].gallery_id) then
return -1
end
LF_Start_Play(context, stage)
end
-- 与挖掘点交互(挖出宝箱)
function LF_Dig_Point_Interacted(context, configID)
--local widget_equipped = ScriptLib.GetGroupVariableValue(context, "seelie_equipped")
local widget_equipped = ScriptLib.GetTeamAbilityFloatValue(context, context.owner_uid, "_SeekerSeelieV3_equipped")
if widget_equipped == nil then
widget_equipped = 0
end
if widget_equipped == 0 then
--REMINDER "请先装备小道具"
ScriptLib.ShowReminder(context, 600132)
return
end
local stage = 1
for i = 1, #play_stage do
if play_stage[i].dig_operator_configID == configID then
stage = i
break
end
end
-- 存档
ScriptLib.SetGroupVariableValue(context, "stage_progress"..stage, 3)
-- 隐藏挖掘点
-- 宝箱不开不隐藏mark,只隐藏效果 by siyu.li
ScriptLib.SetGadgetStateByConfigId(context, play_stage[stage].dig_operator_configID, 202)
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, play_stage[stage].dig_operator_configID, defs.dig_option_id)
-- LF_Show_Dig_Point(context, stage, false)
-- 加载宝箱suite
suite_index = play_stage[stage].treasure_suite
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
-- 仙灵回身边
PrintLog(context, "仙灵回身边")
ScriptLib.SetGroupVariableValue(context, "seelie_out", 0)
LF_Objects_Display(context, true)
end
-- (根据小道具是否离体)控制【能量球】和【探查点】的显隐
function LF_Objects_Display(context, is_display)
if is_display == true then
-- 恢复能量球显示
LF_Show_Energy_Balls(context, true)
-- 恢复所有未完成的探查点
for i = 1, #play_stage do
local progress = ScriptLib.GetGroupVariableValue(context, "stage_progress"..i)
if progress == 1 then
LF_Show_Search_Point(context, i, true)
-- 如果宝箱未开启,则额外标记mark by siyu.li
elseif progress == 3 then
ScriptLib.SetGadgetStateByConfigId(context, play_stage[i].dig_operator_configID, 202)
end
end
PrintLog(context, "显示能量球&探查点")
else
-- 隐藏全部探查点
for i = 1, #play_stage do
local progress = ScriptLib.GetGroupVariableValue(context, "stage_progress"..i)
LF_Show_Search_Point(context, i, false)
-- 若宝箱未开启,同时隐藏mark by siyu.li
if progress == 3 then
ScriptLib.SetGadgetStateByConfigId(context, play_stage[i].dig_operator_configID, 201)
end
end
-- 卸载能量球suite
LF_Show_Energy_Balls(context, false)
PrintLog(context, "隐藏能量球&探查点")
end
end
-- 开启第stage个玩法
function LF_Start_Play(context, stage)
PrintLog(context, "开启玩法阶段"..stage)
ScriptLib.SetGroupVariableValue(context, "current_challenge_stage", stage)
ScriptLib.SetGroupVariableValue(context, "element_used", 0)
-- 重置element_counter
ScriptLib.SetGroupVariableValue(context, "element_counter", 0)
-- 加载玩法suite
LF_Show_Level(context, stage, true)
local configID = play_stage[stage].starter_operator_configID
--切探查点状态(发射子弹)
ScriptLib.SetGadgetStateByConfigId(context, configID, 201)
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, configID, defs.starter_option_id)
-- 隐藏小道具
PrintLog(context, "仙灵飞出去")
ScriptLib.SetGroupVariableValue(context, "seelie_out", 1)
-- 能量球和探查点不可见
LF_Objects_Display(context, false)
-- 开挑战
LF_Init_Challenge(context, stage)
-- 开Gallery
local gallery_id = play_stage[stage].gallery_id
if 0 ~= ScriptLib.StartGallery(context, gallery_id) then
PrintLog(context, "开启Gallery失败")
end
local progress_tbl = {0, play_stage[stage].element_target}
PrintLog(context, "进度需求:"..play_stage[stage].element_target)
ScriptLib.InitGalleryProgressScore(context, "Seelie", gallery_id, progress_tbl, GalleryProgressScoreUIType.GALLERY_PROGRESS_SCORE_UI_TYPE_TREASURE, GalleryProgressScoreType.GALLERY_PROGRESS_SCORE_NO_DEGRADE)
end
function LF_Stop_Play(context, stage, success)
PrintLog(context, "stop stage"..stage)
ScriptLib.SetGroupVariableValue(context, "element_counter", 0)
-- 停Gallery (param3-is_fail)
ScriptLib.StopGallery(context, play_stage[stage].gallery_id, not success)
-- 移除玩法suite
LF_Show_Level(context, stage, false)
-- 移除动态添加的元素微粒
local num = ScriptLib.GetGroupVariableValue(context, "element_used")
for i = 1, num do
local cid = extra_elements[i]
ScriptLib.KillEntityByConfigId(context, { config_id = cid })
end
ScriptLib.SetGroupVariableValue(context, "current_challenge_stage", 0)
end
-- 检查是否满足【能量球】和【探查点】的显示条件(小道具装备&&仙灵未离体)
function LF_Player_Can_See(context)
if not ScriptLib.IsInRegion(context, context.owner_uid, suites[1].regions[1]) then
return false
end
local seelie_out = ScriptLib.GetGroupVariableValue(context, "seelie_out")
PrintLog(context, "小道具离体:"..seelie_out)
--local widget_equipped = ScriptLib.GetGroupVariableValue(context, "seelie_equipped")
--[[if context.owner_uid == nil then
PrintLog(context, "LF_Player_Can_See : owner_uid=nil")
else
PrintLog(context, "LF_Player_Can_See : owner_uid="..context.owner_uid)
end--]]
local uid_list = ScriptLib.GetSceneUidList(context)
host_uid = context.owner_uid
if uid_list[1] ~= nil then
host_uid = uid_list[1]
end
local widget_equipped = ScriptLib.GetTeamAbilityFloatValue(context, host_uid, "_SeekerSeelieV3_equipped")
if widget_equipped == nil then
widget_equipped = 0
end
PrintLog(context, "小道具装备:"..widget_equipped)
if seelie_out == 0 and widget_equipped == 1 then
return true
end
return false
end
-- function LF_Get_Owner_UID(context)
-- local UidList = ScriptLib.GetSceneUidList(context)
-- local ownerUid = UidList[1]
-- PrintLog(context, "OWNER_UID:"..ownerUid)
-- return ownerUid
-- end
-- 显示/隐藏【能量球】
function LF_Show_Energy_Balls(context, show)
if show == true then
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, defs.energy_ball_suite)
else
ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, defs.energy_ball_suite)
end
end
-- 显示/隐藏某阶段的【探查点】
function LF_Show_Search_Point(context, stage, show)
local configID = play_stage[stage].starter_operator_configID
if show == true then
ScriptLib.SetGadgetStateByConfigId(context, configID, 0)
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, configID, {defs.starter_option_id})
else
ScriptLib.SetGadgetStateByConfigId(context, configID, 202)
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, configID, defs.starter_option_id)
end
end
-- 显示/隐藏某阶段的【挖掘点】
function LF_Show_Dig_Point(context, stage, show)
local suite_index = play_stage[stage].dig_operator_suite
local configID = play_stage[stage].dig_operator_configID
if show == true then
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
-- 切状态显示mark
ScriptLib.SetGadgetStateByConfigId(context, configID, 0)
else
-- 切状态隐藏mark
if 0 ~= ScriptLib.SetGadgetStateByConfigId(context, configID, 201) then
PrintLog(context, "隐藏挖掘点mark失败")
end
--ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, suite_index)
end
end
-- 显示/隐藏某阶段的【关卡内容】
function LF_Show_Level(context, stage, show)
local suite_index = play_stage[stage].level_suite
if show == true then
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
else
ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, suite_index)
end
end
function LF_Init_Challenge(context, stage)
local challenge_time = play_stage[stage].challenge_time
local target = play_stage[stage].element_target
--参数1限时时间 参数2event_type所在枚举序号 参数3 trigger_tag参数4次数
local c_index = 1 --跑酷
if #suites[play_stage[stage].level_suite].monsters > 0 then
c_index = 2 --战斗
end
c_index = stage * 10 +c_index
if 0 ~= ScriptLib.StartChallenge(context, c_index, defs.challenge_id, {challenge_time, 3, 666, target}) then
PrintLog(context, "开启挑战失败")
else
local uid_list = ScriptLib.GetSceneUidList(context)
for i,uid in ipairs(uid_list) do
if ScriptLib.IsInRegion(context, uid, play_stage[stage].optimize_region) then
ScriptLib.SetPlayerGroupVisionType(context, {uid}, {0})
ScriptLib.ForbidPlayerRegionVision(context, uid)
end
end
end
end
function LF_Set_Seelie_Light_Level(context, light_level)
--local ownerUid = LF_Get_Owner_UID(context)
local ownerUid = ScriptLib.GetSceneOwnerUid(context)
if 0 == ScriptLib.SetTeamServerGlobalValue(context, ownerUid, "SGV_SeelieLightLevel", light_level) then
PrintLog(context, "设置仙灵亮度等级:"..light_level)
end
if light_level == 3 then
-- 延时X秒设亮度为0
ScriptLib.CreateGroupTimerEvent(context, base_info.group_id, "PerformEnd", 4)
end
end
-- 恢复存档
function LF_Load_Level(context)
-- progress 存档
-- 1- 探查点出现
-- 2- 挖掘点出现
-- 3- 宝箱出现
-- 4- 宝箱开启
-- 能量球
-- if LF_Player_Can_See(context) == true then
-- LF_Show_Energy_Balls(context, true)
-- end
-- 服务器core可能引起seelie_out未能重置,以及原始能量球残留
ScriptLib.SetGroupVariableValue(context, "seelie_out", 0)
for i = 1, #play_stage do
LF_Show_Level(context, i, false)
end
-- 加载所有探查点suite。探查点的可见性与物件状态关联
for i = 1, #play_stage do
local suite_index = play_stage[i].starter_operator_suite
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
end
-- 根据存档加载挖掘点&宝箱
for i = 1, #play_stage do
local progress = ScriptLib.GetGroupVariableValue(context, "stage_progress"..i)
-- 宝箱未开恢复mark by siyu.li
if progress == 2 or progress == 3 then
local suite_index = play_stage[i].dig_operator_suite
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
if progress == 3 then
if ScriptLib.IsInRegion(context, context.owner_uid, suites[1].regions[1]) then
ScriptLib.SetGadgetStateByConfigId(context, play_stage[i].dig_operator_configID, 202)
else
ScriptLib.SetGadgetStateByConfigId(context, play_stage[i].dig_operator_configID, 201)
end
end
end
--[[ if progress == 3 then
local suite_index = play_stage[i].treasure_suite
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
end--]]
end
end
--------- Server Lua Call -----------
-- 拾取能量球
function SLC_Activity_TreasureSeelie_PickEnergyBall(context)
-- 能量球计数
local num = ScriptLib.GetGroupVariableValue(context, "energy_ball_counter")
num = num + 1
ScriptLib.SetGroupVariableValue(context, "energy_ball_counter", num)
PrintLog(context, "拾取能量球"..num)
-- 仙灵表现(亮度)
local light_level = num % 3
if light_level == 0 then
light_level = 3
end
LF_Set_Seelie_Light_Level(context, light_level)
-- 显示能量球进度的定制REMINDER "x/3"
ScriptLib.TreasureSeelieCollectOrbsNotify(context, light_level, 3)
local order = ScriptLib.GetTreasureSeelieDayByGroupId(context, 0)
-- 发现新的探查点
if num == 3 or num == 6 or num == 9 then
local stage = math.floor(num/3)
LF_SearchPoint_Found(context, stage)
-- 运营埋点:能量球进度 & 探查点发现进度
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie1", "", {["region_order"] = order, ["energy_ball_counter"] = num, ["find_point"] = stage})
else
-- 运营埋点:能量球进度 & 探查点发现进度
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie1", "", {["region_order"] = order, ["energy_ball_counter"] = num})
end
return 0
end
-- 拾取元素微粒
function SLC_Activity_TreasureSeelie_PickElementParticle(context)
local num = ScriptLib.GetGroupVariableValue(context, "element_counter")
num = num + 1
ScriptLib.SetGroupVariableValue(context, "element_counter", num)
PrintLog(context, "拾元素微粒"..num)
-- Gallery通信
local stage = ScriptLib.GetGroupVariableValue(context, "current_challenge_stage")
PrintLog(context, "stage:"..stage)
if stage > 0 then
local gallery_id = play_stage[stage].gallery_id
PrintLog(context, "galleryID:"..gallery_id)
ScriptLib.AddGalleryProgressScore(context, "Seelie", gallery_id, 1)
end
return 0
end
-- 仙灵小道具玩家主动操作 (0-卸下, 1-装备)
function SLC_Activity_TreasureSeelie_SeelieEquipStateChanged(context, equipped)
PrintLog(context, "仙灵小道具装备状态:"..equipped)
--ScriptLib.SetGroupVariableValue(context, "seelie_equipped", math.floor(equipped))
if equipped == 1 then
if LF_Player_Can_See(context) == true then
if ScriptLib.GetGroupTempValue(context, "widget_first_used", {}) == 0 then
local _r = suites[1].regions[1]
if ScriptLib.IsInRegion(context, context.owner_uid, _r) then
local order = ScriptLib.GetTreasureSeelieDayByGroupId(context, base_info.group_id)
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie2", "", {["region_order"] = order, ["widget_first_use"] = ScriptLib.GetServerTime(context)})
ScriptLib.SetGroupTempValue(context, "widget_first_used", 1, {})
end
end
LF_Objects_Display(context, true)
end
else
LF_Objects_Display(context, false)
end
return 0
end
---------- Triggers -----------
function condition_element_get(context, evt)
if evt.param1 > evt.param2 then
return true
end
return false
end
function action_group_load(context, evt)
PrintLog(context, "寻宝仙灵 GROUP LOAD: 0610-1314")
LF_Load_Level(context)
return 0
end
-- 进入玩法区域
function action_enter_region(context, evt)
if evt.param1 == suites[1].regions[1] then
if context.uid ~= context.owner_uid then
return -1
end
PrintLog(context, "进入玩法区域")
if ScriptLib.GetGroupVariableValue(context, "stage_counter") >= 3 then
return 0
end
-- 弹引导REMINDER
LF_Try_StartTutorial(context)
-- 通知team仙灵小道具已进入玩法区域可装备
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieGameplayGroup", 1)
-- 根据关卡进度通知team仙灵是否可见
local seelie_out = ScriptLib.GetGroupVariableValue(context, "seelie_out")
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieInvisible", seelie_out)
-- 根据关卡进度还原仙灵亮度
local num = ScriptLib.GetGroupVariableValue(context, "energy_ball_counter")
local light_level = num % 3
LF_Set_Seelie_Light_Level(context, light_level)
--
if LF_Player_Can_See(context) == true then
LF_Objects_Display(context, true)
else
LF_Objects_Display(context, false)
end
for i = 1, #play_stage do
local progress = ScriptLib.GetGroupVariableValue(context, "stage_progress"..i)
if progress == 3 then
ScriptLib.SetGadgetStateByConfigId(context, play_stage[i].dig_operator_configID, 201)
local suite_index = play_stage[i].treasure_suite
ScriptLib.AddExtraGroupSuite(context, base_info.group_id, suite_index)
end
end
return 0
else
for stage=1,#play_stage do
if evt.param1 == play_stage[stage].optimize_region then
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
ScriptLib.ForbidPlayerRegionVision(context, context.uid)
PrintLog(context, "进入挑战区域")
return 0
else
break
end
end
end
return -1
end
end
-- 离开玩法区域
function action_leave_region(context, evt)
local stage = ScriptLib.GetGroupVariableValue(context, "current_challenge_stage")
if evt.param1 == suites[1].regions[1] then
if context.uid ~= context.owner_uid then
return -1
end
PrintLog(context, "离开玩法区域")
ScriptLib.SetGroupTempValue(context, "widget_first_used", 0, {})
-- 将未结束的挑战设置失败
if stage > 0 then
ScriptLib.StopChallenge(context, 1, 0)
end
-- 通知小道具卸下
--ScriptLib.SetGroupVariableValue(context, "seelie_equipped", 0)
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieGameplayGroup", 0)
-- 隐藏能量球和探查点
LF_Objects_Display(context, false)
return 0
elseif stage ~= 0 and evt.param1 == play_stage[stage].optimize_region then
if ScriptLib.IsChallengeStartedByChallengeId(context, defs.challenge_id) then
PrintLog(context, "离开玩法区域")
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
ScriptLib.RevertPlayerRegionVision(context, context.uid)
if context.uid ~= context.owner_uid then
return -1
end
-- 将未结束的挑战设置失败
local c_index = 1
if #suites[play_stage[stage].level_suite].monsters > 0 then
c_index = 2
end
c_index = stage * 10 + c_index
ScriptLib.StopChallenge(context, c_index, 0)
end
return 0
else
return -1
end
end
function action_gadget_create(context, evt)
local configID = evt.param1
-- 给探查点和挖掘点分别上选项
for i = 1, #play_stage do
local progress = ScriptLib.GetGroupVariableValue(context, "stage_progress"..i)
if configID == play_stage[i].starter_operator_configID then
if progress == 1 and LF_Player_Can_See(context) == true then
LF_Show_Search_Point(context, i, true)
else
LF_Show_Search_Point(context, i, false)
end
elseif configID == play_stage[i].dig_operator_configID then
PrintLog(context, "挖掘点create")
if progress == 2 then
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, configID, {defs.dig_option_id})
end
end
end
return 0
end
function action_var_seelie_out(context, evt)
PrintLog(context, "seelie_out变化")
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieInvisible", evt.param1)
return 0
end
-- 操作台交互
function action_select_option(context, evt)
PrintLog(context, "操作台选项事件")
local config_id = evt.param1
local option_id = evt.param2
if option_id == defs.starter_option_id then
LF_Search_Point_Interacted(context, config_id)
end
if option_id == defs.dig_option_id then
LF_Dig_Point_Interacted(context, config_id)
end
return 0
end
function action_challenge_success(context, evt)
local stage = ScriptLib.GetGroupVariableValue(context, "current_challenge_stage")
local uid_list = ScriptLib.GetSceneUidList(context)
for i,uid in ipairs(uid_list) do
-- 防止联机玩家提前出圈被强迫处理视野
if ScriptLib.IsInRegion(context, uid, play_stage[stage].optimize_region) then
ScriptLib.SetPlayerGroupVisionType(context, {uid}, {1})
ScriptLib.RevertPlayerRegionVision(context, uid)
end
end
local stage = ScriptLib.GetGroupVariableValue(context, "current_challenge_stage")
local order = ScriptLib.GetTreasureSeelieDayByGroupId(context, 0)
-- 运营埋点探查点stage完成
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie2", "", {["region_order"] = order, ["region_progress_type"] = 3, ["challenge_order"] = stage})
-- 发现挖掘点
LF_DigPoint_Found(context, stage)
LF_Stop_Play(context, stage, true)
return 0
end
function action_challenge_fail(context, evt)
local stage = ScriptLib.GetGroupVariableValue(context, "current_challenge_stage")
local uid_list = ScriptLib.GetSceneUidList(context)
for i,uid in ipairs(uid_list) do
-- 防止联机玩家提前出圈被强迫处理视野
if ScriptLib.IsInRegion(context, uid, play_stage[stage].optimize_region) then
ScriptLib.SetPlayerGroupVisionType(context, {uid}, {1})
ScriptLib.RevertPlayerRegionVision(context, uid)
end
end
LF_Stop_Play(context, stage, false)
-- 仙灵回身边
PrintLog(context, "仙灵回身边")
ScriptLib.SetGroupVariableValue(context, "seelie_out", 0)
LF_Objects_Display(context, true)
-- 联机不能确保情况
local uid_list = ScriptLib.GetSceneUidList(context)
--PrintLog(context, "离开玩法区域")
return 0
end
function condition_gadget_state_change(context, evt)
PrintLog(context, evt.param2.."|"..evt.param1.."->"..evt.param3)
if evt.param1 ~= 102 then
return false
else return true
end
end
function action_gadget_state_change(context, evt)
local new_state = evt.param1
if new_state == 102 then
PrintLog(context, "宝箱打开")
-- 宝箱的configID
local configID = evt.param2
local stage = 1
for i = 1, #play_stage do
if play_stage[i].treasure_configID == configID then
stage = i
break
end
end
ScriptLib.SetGroupVariableValue(context, "stage_progress"..stage, 4)
-- 开宝箱删除mark by siyu.li
-- LF_Show_Dig_Point(context, stage, false)
ScriptLib.SetGadgetStateByConfigId(context, play_stage[stage].dig_operator_configID, 203)
-- 总进度+1
ScriptLib.ChangeGroupVariableValue(context, "stage_counter", 1)
local counter = ScriptLib.GetGroupVariableValue(context, "stage_counter")
PrintLog(context, "区域完成进度:"..counter)
local order = ScriptLib.GetTreasureSeelieDayByGroupId(context, 0)
-- Reminder "显示宝箱进度"
if counter == 1 then
ScriptLib.ShowReminder(context, 600129)
-- 运营埋点挖掘点1完成
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie2", "", {["region_order"] = order, ["region_progress_type"] = 2, ["dig_point_order"] = stage, ["token_progress"] = 60, ["token_goal"] = 180})
elseif counter == 2 then
ScriptLib.ShowReminder(context, 600130)
-- 运营埋点挖掘点2完成
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie2", "", {["region_order"] = order, ["region_progress_type"] = 2, ["dig_point_order"] = stage, ["token_progress"] = 120, ["token_goal"] = 180})
elseif counter == 3 then
ScriptLib.ShowReminder(context, 600131)
PrintLog(context, "区域完成")
-- 运营埋点区域完成挖掘点3完成
ScriptLib.MarkGroupLuaAction(context, "ActivityTreasureSeelie2", "", {["region_order"] = order, ["region_progress_type"] = 1, ["dig_point_order"] = stage, ["token_progress"] = 180, ["token_goal"] = 180})
-- 活动cond中直接做掉了,按理不需要lua处理,改为卸载自身 by siyu.li
--if 0 ~= ScriptLib.DeactivateGroupLinkBundle(context, base_info.group_id) then
-- PrintLog(context, "关闭黄圈失败")
--end
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieGameplayGroup", 0)
--ScriptLib.updateBundleMarkShowStateByGroupId(context, base_info.group_id, false)
ScriptLib.RemoveExtraGroupSuite(context, base_info.group_id, 1)
end
end
return 0
end
--卸载保护
function action_group_will_unload(context,evt)
PrintLog(context, "GROUP UNLOAD.")
LF_Reset_Level(context)
return 0
end
function action_monster_die(context, evt)
local eid = evt.source_eid
local pos = ScriptLib.GetPosByEntityId(context, eid)
local index = ScriptLib.GetGroupVariableValue(context, "element_used")
index = index + 1
ScriptLib.SetGroupVariableValue(context, "element_used", index)
local cid = extra_elements[index]
local ret = ScriptLib.CreateGadgetByConfigIdByPos(context, cid, {x=pos.x,y=pos.y,z=pos.z}, {x=0.000,y=0.000,z=0.000})
--PrintLog(context, "ret"..ret)
-- if 0 ~= ScriptLib.SetGadgetStateByConfigId(context, cid, 201) then
-- PrintLog(context, "改元素微粒状态失败")
-- end
return 0
end
function action_perform_timer(context, evt)
ScriptLib.SetTeamServerGlobalValue(context, context.owner_uid, "SGV_SeelieLightLevel", 0)
return 0
end
LF_Initialize_Group(triggers, suites)