0
0
mirror of https://gitlab.com/YuukiPS/GC-Resources.git synced 2025-04-28 09:05:26 +00:00
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

438 lines
17 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: UnstableSpray
|| owner: shuyi.chang
|| description: 爆炸魔药活动
|| LogName: ## [UnstableSpray]
|| Protection:
=======================================]]
--[[
local defs =
{
-- 本轮对应的gallery id
galleryId = 0,
-- 开启挑战的场景物件id
startId = 46002,
-- todo: 临时,挑战区域,进了区域之后加载操作台
maxRegion = 46027,
-- 是否是起始group
isStartLevel = true,
-- 下一关的group id
nextGroupId = xxxxx,
-- 怪物资源包configs约定好只会有两波怪物潮配多了也不会刷
monsterPoolTable = {
{
pool_list = {35001},
point_array_id = 0,
point_id_list = {},
affix_list = {},
param = {total_count = 99, min_count = 1, max_count = 3, tag = 0, fill_time = 0, fill_count = 0, is_ordered = false, is_tag_bit_match = false},
},
{
pool_list = {35001},
point_array_id = 0,
point_id_list = {},
affix_list = {},
param = {total_count = 99, min_count = 1, max_count = 3, tag = 0, fill_time = 0, fill_count = 0, is_ordered = false, is_tag_bit_match = false},
},
},
-- 第一波怪物潮持续秒数不能大于总时间90s
switchTime = 45,
-- buff持续时间通常不需要修改
buffDuration = 15,
-- 每轮中每阶段的最大时间一共有3个阶段总时长为3*30s = 90s通常不用改
stageMaxDuration = 30,
}
--]]
local extraTriggers =
{
{ config_id = 50000001, name = "ENTER_REGION", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_ENTER_REGION", trigger_count = 0},
{ config_id = 50000002, name = "START_CHALLENGE", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_START_CHALLENGE", trigger_count = 0 },
{ config_id = 50000003, name = "STAGE_COMPLETE", event = EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_STAGE_COMPLETE", trigger_count = 0 },
{ config_id = 50000004, name = "MONSTER_DIE", event = EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_MONSTER_DIE", trigger_count = 0 },
{ config_id = 50000005, name = "GALLERY_STOP", event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_GALLERY_STOP", trigger_count = 0 },
{ config_id = 50000006, name = "DUNGEON_ALL_PLAYER_DIE", event = EventType.EVENT_DUNGEON_ALL_AVATAR_DIE, source = "", condition = "", action = "action_DUNGEON_ALL_AVATAR_DIE", trigger_count = 0 },
{ config_id = 50000007, name = "VARIABLE_CHANGE", event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_VARIABLE_CHANGE", trigger_count = 0 },
{ config_id = 50000008, name = "DUNGEON_SETTLE", event = EventType.EVENT_DUNGEON_SETTLE, source = "", condition = "", action = "action_DUNGEON_SETTLE", trigger_count = 0 },
}
local extraVariables =
{
-- 记录目前是第几个三十秒
{ config_id = 5000101, name = "stage", value = 0, no_refresh = false },
-- 记录自己能不能加载
{ config_id = 5000102, name = "levelEnabled", value = 0, no_refresh = false },
-- 当前是第几个怪物潮
{ config_id = 5000103, name = "firstTideClose", value = 0, no_refresh = false },
-- 记录此关用到的buff
{ config_id = 5000201, name = "sgv1", value = 0, no_refresh = false },
{ config_id = 5000202, name = "sgv2", value = 0, no_refresh = false },
{ config_id = 5000203, name = "sgv3", value = 0, no_refresh = false },
{ config_id = 5000204, name = "sgv4", value = 0, no_refresh = false },
}
local worktopField =
{
configId = 10460099,
gadgetId = 70360001,
optionId = 429,
}
-- local transParam =
-- {
-- pos = {x = 0, y = 0, z = 0},
-- rot = {x = 0, y = 0, z = 0},
-- radius = 1,
-- }
-- local offset = {x = 0, y = 0, z = 0}
-- local worktop = { config_id = worktopField.configId, gadget_id = worktopField.gadgetId, pos = gadgets[defs.startId].pos, rot = gadgets[defs.startId].rot, level = 1, area_id = gadgets[defs.startId].area_id, worktop_config = { init_options = { worktopField.optionId } } }
--================================================================
-- 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
-- insert gadgets
-- gadgets[worktopField.configId] = worktop
-- -- set transport parameter
-- transParam.pos.x = transParam.pos.x + offset.x
-- transParam.pos.y = transParam.pos.y + offset.y
-- transParam.pos.z = transParam.pos.z + offset.z
end
function LF_PrintList(context, name, list)
local emptyStr = name
for k, v in pairs(list) do
emptyStr = emptyStr..", "..v
end
ScriptLib.PrintContextLog(context, "## [UnstableSpray] list = "..emptyStr)
end
function LF_LevelStart(context)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] LF_LevelStart is called")
-- 生成操作台和选项
ScriptLib.SetGadgetStateByConfigId(context, defs.startId, 0)
ScriptLib.SetWorktopOptionsByGroupId(context, base_info.group_id, defs.startId, {worktopField.optionId})
-- 保底把所有sgv的group var都设为0
for i = 1, 4 do
local varName = "sgv"..i
ScriptLib.SetGroupVariableValue(context, varName, 0)
end
end
function LF_CheckAndRecordBuff(context, buffIdx)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] LF_CheckAndRecordBuff is called, buffIdx = ".. buffIdx)
-- 检查这个buff idx是不是已经被记录在group var里了
for i = 1, 4 do
local varName = "sgv"..i
local varValue = ScriptLib.GetGroupVariableValue(context, varName)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] group var "..varName.." = "..varValue )
if varValue == buffIdx then
-- 如果这个var记录了这个buff idx就不用再继续了
ScriptLib.PrintContextLog(context, "## [UnstableSpray] group varName = "..varName.." is already set to "..varValue )
return 0
elseif varValue == 0 then
-- 还没有被记录过检查自己是否是0即还未记录过buff是则用这个var记录
ScriptLib.SetGroupVariableValue(context, varName, buffIdx)
local temp = ScriptLib.GetGroupVariableValue(context, varName)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] group varName "..varName.." is unused and set to "..temp )
return 0
end
-- 如果这个var记录了别的buff idx继续for loop
end
end
--================================================================
-- Triggers
--================================================================
-- todo: 应该放在group load的时刻?
function action_ENTER_REGION(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] player enters region "..evt.param1)
if defs.isStartLevel == true then
ScriptLib.SetGroupVariableValue(context, "levelEnabled", 1)
end
return 0
end
function action_START_CHALLENGE(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] worktop "..evt.param1..", option = "..evt.param2)
local uid = ScriptLib.GetSceneOwnerUid(context)
if evt.param2 == worktopField.optionId then
-- 操作台物件转换状态,选项失效
ScriptLib.SetGadgetStateByConfigId(context, defs.startId, 202)
ScriptLib.DelWorktopOptionByGroupId(context, base_info.group_id, defs.startId, worktopField.optionId)
-- 挑战开始
-- ScriptLib.ActiveChallenge(context, challengeId, challengeId, base_info.group_id, 999, 90, 0)
-- 开启gallery通过gallery给玩家身上挂t键ability group服务器直接挂本轮使用的buff abilitygroup
ScriptLib.StartGallery(context, defs.galleryId)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] start gallery "..defs.galleryId)
-- 临时每个可用的ability group都给team身上添加对应的SGV
-- for i = 1, #sgvStringTable do
-- ScriptLib.AddTeamServerGlobalValue(context, uid_list[1], sgvStringTable[i], 0)
-- end
-- 起state时间轴
ScriptLib.InitTimeAxis(context, "challengeTimer", {defs.stageMaxDuration, 2 * defs.stageMaxDuration, 3 * defs.stageMaxDuration}, false)
ScriptLib.SetGroupVariableValue(context, "stage", 1)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] group variable stage is set to 1")
-- 起怪物潮切换时间轴
ScriptLib.InitTimeAxis(context, "poolTimer", {defs.switchTime}, false)
if defs.monsterPoolTable[1] == nil then
return 0
end
-- 刷怪
-- ScriptLib.AutoMonsterTide(context, 1, base_info.group_id, defs.tides.monsters, defs.tides.sum, defs.tides.max, defs.tides.min)
ScriptLib.AutoPoolMonsterTide(context, 1, base_info.group_id, defs.monsterPoolTable[1].pool_list, defs.monsterPoolTable[1].point_array_id,
defs.monsterPoolTable[1].point_id_list, defs.monsterPoolTable[1].affix_list, defs.monsterPoolTable[1].param)
end
return 0
end
function action_STAGE_COMPLETE(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] time axis "..evt.source_name..", stage "..evt.param1.. " is finished")
local uid = ScriptLib.GetSceneOwnerUid(context)
if evt.source_name == "challengeTimer" then
-- 更新阶段
local temp = evt.param1 + 1
ScriptLib.SetGroupVariableValue(context, "stage", temp)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] group variable stage is set to "..temp)
-- 【时间轴总长度会比90s多一点应该跑不到这里gallery就已经结束并强制卸载group了目前走event gallery stop】
if evt.param1 == 3 then
-- -- 第三轮结束,停止刷怪
-- -- ScriptLib.KillMonsterTide(context, base_info.group_falseid, 1)
-- ScriptLib.ClearPoolMonsterTide(context, base_info.group_id, 1)
-- ScriptLib.ClearPoolMonsterTide(context, base_info.group_id, 2)
-- -- gallery成功
-- ScriptLib.StopGallery(context, defs.galleryId, false)
end
elseif evt.source_name == "poolTimer" then
-- 关闭上一个怪物潮
ScriptLib.EndPoolMonsterTide(context, base_info.group_id, 1)
ScriptLib.SetGroupVariableValue(context, "firstTideClose", 1)
else
-- 不是challenge timer也不是怪物潮timer就肯定是sgv timer
-- SGV设为0buff效果结束
ScriptLib.SetTeamServerGlobalValue(context, uid, evt.source_name, 0)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] "..evt.source_name.." is set to 0")
end
return 0
end
function action_MONSTER_DIE(context, evt)
local monsterId = ScriptLib.GetMonsterIdByEntityId(context, evt.source_eid)
ScriptLib.UpdatePlayerGalleryScore(context, defs.galleryId, {["monster_id"] = monsterId})
ScriptLib.PrintContextLog(context, "## [UnstableSpray] monster id = "..monsterId..", config id = "..evt.param1..
", entity id = "..evt.source_eid.." is dead")
local firstTideClose = ScriptLib.GetGroupVariableValue(context, "firstTideClose")
local remainMax = 0
if defs.remainMax ~= nil then
remainMax = defs.remainMax
end
if firstTideClose == 1 and #ScriptLib.GetGroupAliveMonsterList(context, base_info.group_id) == remainMax then
if defs.monsterPoolTable[2] == nil then
return 0
end
-- 第一波怪物潮都死了
-- 开下一个怪物潮
ScriptLib.AutoPoolMonsterTide(context, 2, base_info.group_id, defs.monsterPoolTable[2].pool_list, defs.monsterPoolTable[2].point_array_id,
defs.monsterPoolTable[2].point_id_list, defs.monsterPoolTable[2].affix_list, defs.monsterPoolTable[2].param)
ScriptLib.SetGroupVariableValue(context, "firstTideClose", 2)
end
return 0
end
function action_GALLERY_STOP(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] gallery = "..evt.param1.." finishes, fail = "..evt.param2)
local uid = ScriptLib.GetSceneOwnerUid(context)
-- gallery结束停止刷怪
ScriptLib.ClearPoolMonsterTide(context, base_info.group_id, 1)
ScriptLib.ClearPoolMonsterTide(context, base_info.group_id, 2)
-- 只有gallery成功才算这一轮结束
if evt.param2 == 0 then
-- 通知下一个group加载下一轮的group的操作台
if defs.nextGroupId ~= -1 then
ScriptLib.SetGroupVariableValueByGroup(context, "levelEnabled", 1, defs.nextGroupId)
end
end
-- 所有buff sgv保底归零
for i = 1, 4 do
local buffIdx = ScriptLib.GetGroupVariableValue(context, "sgv"..i)
local sgv = ScriptLib.InstableSprayGetSGVByBuffId(context, buffIdx)
if sgv ~= "" then
ScriptLib.EndTimeAxis(context, sgv)
ScriptLib.SetTeamServerGlobalValue(context, uid, sgv, 0)
local v = ScriptLib.GetTeamServerGlobalValue(context, uid, sgv)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] level ends and "..sgv.." = "..v)
end
end
return 0
end
function action_DUNGEON_ALL_AVATAR_DIE(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] all avatar dies in dungeon"..evt.source_name.."uid = "..evt.uid)
ScriptLib.CauseDungeonFail(context)
-- gallery失败
ScriptLib.StopGallery(context, defs.galleryId, true)
return 0
end
-- 副本结算
function action_DUNGEON_SETTLE(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] dungeon settles, result = "..evt.param1)
-- gallery失败
ScriptLib.StopGallery(context, defs.galleryId, true)
return 0
end
function action_VARIABLE_CHANGE(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] variable "..evt.source_name.." changes from "..evt.param2.." to "..evt.param1 )
if evt.source_name ~= "levelEnabled" or evt.param2 == evt.param1 then
return 0
end
if evt.param1 == 1 then
-- 加载操作台
LF_LevelStart(context)
end
return 0
end
--================================================================
-- Server Lua Call Functions
--================================================================
function SLC_TriggerAbility(context, evt)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] SLC_TriggerAbility is called")
local uid = ScriptLib.GetSceneOwnerUid(context)
local stage = ScriptLib.GetGroupVariableValue(context, "stage")
-- 本次随机出可用的buff index listidx为活动表中idx
local curBuffIdx = ScriptLib.InstableSprayRandomBuffs(context, defs.galleryId, stage)
LF_PrintList(context, "curBuffIdx", curBuffIdx)
for i = 1, #curBuffIdx do
local sgv = ScriptLib.InstableSprayGetSGVByBuffId(context, curBuffIdx[i])
-- 修改team身上sgv为1
ScriptLib.AddTeamServerGlobalValue(context, uid, sgv, 0)
local var = ScriptLib.SetTeamServerGlobalValue(context, uid, sgv, 1)
local v = ScriptLib.GetTeamServerGlobalValue(context, uid, sgv)
ScriptLib.PrintContextLog(context, "## [UnstableSpray] "..sgv.." is set to "..v..", var = "..var)
-- 通知gallery重置buff icon时间轴
ScriptLib.UpdatePlayerGalleryScore(context, defs.galleryId, {buff_id = curBuffIdx[i], buff_max_time = defs.buffDuration})
-- 起控制modifier生效时间长度的时间轴
-- 时间轴的key就是SGV name
ScriptLib.InitTimeAxis(context, sgv, {defs.buffDuration}, false)
-- 50000201开始的4个id专门用来记录本局的4个buff
-- group var名称为sgv1,sgv2,sgv3,sgv4
-- group var值为活动表中buff idx
-- 更新group var
LF_CheckAndRecordBuff(context, curBuffIdx[i])
-- local var1 = ScriptLib.SetGroupVariableValue(context, "sgv"..i, curBuffIdx[i])
-- local r = ScriptLib.GetGroupVariableValue(context, "sgv"..i)
-- ScriptLib.PrintContextLog(context, "## [UnstableSpray] group variable sgv"..i.." is set to "..r..", var = "..var1)
end
return 0
end
--================================================================
-- Initialize
--================================================================
LF_Initialize_Group(triggers, suites, variables, gadgets, regions)