0
0
mirror of https://gitlab.com/YuukiPS/GC-Resources.git synced 2025-04-28 09:05:26 +00:00
Yuuki b09934e7b9 Revert "remove local in defs"
This reverts commit 7e0a645ef33da87ddd5c402c6a64180001c6b03d.
2023-11-23 23:27:47 +08:00

445 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/V3_0]
-- goto 1176 296 -1594
--[[======================================
|| filename: GopherPlay
|| owner: zijun.ma
|| description: 地鼠玩法
|| LogName: TD_GopherPlay
|| Protection: [Protection]
=======================================]]
-- local defs =
-- {
-- regionId = 12345,
-- targetScore = 3,
-- maxTime = 90,
-- startId = 0,
-- }
local GopherPlay = {
RegionCid = defs.regionId,
ChallengeIndex = 83,
OptionId = 175,
LargeMushroomId = 70310220,
ConfigList =
{
defs.gadget_mushroom01,defs.gadget_mushroom02,defs.gadget_mushroom03,
defs.gadget_mushroom04,defs.gadget_mushroom05,defs.gadget_mushroom06
},
ZeroArray = {0,0,0,0,0,0},
}
-- local GopherArray = {
-- [1] =
-- {-- time里面有两个值一个是指延时多久出现一个是指延时多久消失。譬如{1,5}是指第1秒后出现第5秒后消失。
-- [1] = { array = { 0, 0, 0, 1, 2, 1}, time = {1,5}},
-- [2] = { array = { 1, 2, 1, 0, 0, 0}, time = {1,5}},
-- [3] = { array = { 0, 1, 0, 2, 1, 0}, time = {1,5}},
-- [4] = { array = { 0, 2, 1, 2, 0, 0}, time = {1,5}},
-- },
-- [2] =
-- {
-- [1] = { array = { 0, 0, 0, 1, 2, 1}, time = {1,5}},
-- [2] = { array = { 1, 2, 1, 0, 0, 0}, time = {1,5}},
-- [3] = { array = { 0, 1, 0, 2, 1, 0}, time = {1,5}},
-- [4] = { array = { 0, 2, 1, 2, 0, 0}, time = {1,5}},
-- },
-- }
local GopherState = {
[0] = 0,
[1] = 901,
[2] = 902,
}
-- 流程规划
-- 严格根据Size初始化地鼠列表
-- LF_StartChallenge()
-- 按照选取的资料组开始挑战
-- LF_TimeAxisManager()
-- LF_SummonGopher()
-- LF_GopherDisappear()
-- LF_GopherBeHit()
-- LF_ChallengeJudge()
local GopherPlay_Trigger = {
{ keyWord = "TimeAxisManager", event = EventType.EVENT_TIME_AXIS_PASS, source = "", trigger_count = 0},
-- Group是DynamicGroup所以初始化倒不是问题
--{ keyWord = "ChallengeInit", event = EventType.EVENT_GROUP_LOAD, source = "GopherPlay", trigger_count = 0},
{ keyWord = "ChallengeSuccess", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", trigger_count = 0},
{ keyWord = "ChallengeFail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", trigger_count = 0},
{ keyWord = "SelectOption", event = EventType.EVENT_SELECT_OPTION, source = "", trigger_count = 0},
{ keyWord = "GroupLoad", event = EventType.EVENT_GROUP_LOAD, source = "", trigger_count = 0},
-- { keyWord = "GadgetStateChange", event = EventType.EVENT_GADGET_STATE_CHANGE, condition = "condition_GadgetStateChange", source = "", trigger_count = 0},
{ keyWord = "VariableChange", event = EventType.EVENT_VARIABLE_CHANGE, source = "score", trigger_count = 0, tag = "99"},
{ keyWord = "TempVariableChange", event = EventType.EVENT_VARIABLE_CHANGE, source = "scoreTemp", trigger_count = 0},
}
local GopherPlay_Variables = {
-- 记录是否已成功
{ config_id = 50000001, name = "succeed", value = 0, no_refresh = true },
-- -- 记录这一轮击杀了多少个大蘑菇
-- { config_id = 50000002, name = "scoreTemp", value = 0, no_refresh = false },
}
function LF_Initialize_Level()
local startConfigID = 40000001
for _,v in pairs(GopherPlay_Trigger) do
v.config_id = startConfigID
if v.keyWordType == nil then
v.name = "tri_" .. v.keyWord
else
v.name = "tri_" .. v.keyWord .. v.keyWordType
end
v.action = "action_" .. v.keyWord
if v.condition == nil then
v.condition = ""
end
startConfigID = startConfigID + 1
table.insert(triggers, v)
end
LF_InsertTriggers(GopherPlay_Trigger,RequireSuite)
-- add variables
for _,v in pairs(GopherPlay_Variables) do
table.insert(variables, v)
end
return 0
end
--[[=====================================
|| action函数
--======================================]]
function action_TimeAxisManager(context,evt)
local timeProcess = evt.param1
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: time axis "..evt.source_name..", stage "..timeProcess.. " is finished")
if timeProcess%2 == 0 then
-- 偶数时,走消失逻辑
LF_GopherDisappear(context)
else
-- 奇数时,走出现逻辑
LF_SummonGopher(context)
end
return 0
end
function action_ChallengeSuccess(context,evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: challenge index = "..evt.param1.." succeeds")
ScriptLib.SetGroupVariableValue(context, "succeed", 1)
LF_StopChallenge(context, true)
return 0
end
function action_ChallengeFail(context,evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: challenge index = "..evt.param1.." fails")
LF_StopChallenge(context, false)
return 0
end
function action_SelectOption(context, evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: worktop "..evt.param1..", option = "..evt.param2)
-- 和操作台交互,开启挑战
LF_StartChallenge(context)
return 0
end
function action_GroupLoad(context, evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: group is loaded")
local succeed = ScriptLib.GetGroupVariableValue(context, "succeed")
if succeed == 0 then
succeed = false
else
succeed = true
end
LF_StopChallenge(context, succeed)
return 0
end
function action_VariableChange(context, evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: group var "..evt.source_name.." changes from "..evt.param2.." to "..evt.param1)
return 0
end
function action_TempVariableChange(context, evt)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: group var "..evt.source_name.." changes from "..evt.param2.." to "..evt.param1)
local largeMushroomCount = ScriptLib.GetGroupTempValue(context, "LargeMushroomCount", {})
-- 击杀了这一轮所有大蘑菇,而且不能是最后成功的那一下
if evt.param1 >= largeMushroomCount and ScriptLib.GetGroupTempValue(context, "score", {}) < defs.targetScore then
LF_GopherDisappear(context)
end
return 0
end
-- function condition_GadgetStateChange(context, evt)
-- -- 只有当是大蘑菇并且进入202的时候才能触发这个trigger
-- local config_id = evt.param2
-- local gadget_id = ScriptLib.GetGadgetIdByEntityId(context, evt.source_eid)
-- local gadgetState = ScriptLib.GetGadgetStateByConfigId(context, 0, config_id)
-- ScriptLib.PrintContextLog(context, "## TD_GopherPlay configId = ".. config_id .. ", gadgetId = "..gadget_id..", gadgetState change from "..evt.param2.." to "..gadgetState)
-- if 202 == gadgetState and gadget_id == GopherPlay.LargeMushroomId then
-- return true
-- end
-- return false
-- end
-- function action_GadgetStateChange(context, evt)
-- SLC_AddScore(context, evt)
-- return 0
-- end
--[[=====================================
|| 流程函数
--======================================]]
function LF_StartChallenge(context)
-- 删除操作台选项操作台进202
ScriptLib.DelWorktopOptionByGroupId(context, 0, defs.startId, GopherPlay.OptionId)
ScriptLib.SetGadgetStateByConfigId(context, defs.startId, 202)
-- 运行后,开启挑战
math.randomseed(tostring(ScriptLib.GetServerTime(context)):reverse():sub(1, 6))
local randomIndex = math.random(#GopherArray)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : 使用Index=".. randomIndex .."的矩阵作为当前的挑战矩阵")
ScriptLib.StartChallenge(context, GopherPlay.ChallengeIndex, GopherPlay.ChallengeIndex, {defs.maxTime, 3, 99, defs.targetScore})
ScriptLib.AddExtraGroupSuite(context, 0, 2)
-- 初始化地鼠index
ScriptLib.SetGroupTempValue(context, "CurIndex", randomIndex, {})
ScriptLib.SetGroupTempValue(context, "CurArrayIndex", 1, {})
-- ScriptLib.SetGroupTempValue(context, "Score", 0, {})
local timeAxis = GopherArray[randomIndex][1].time
ScriptLib.InitTimeAxis(context, "GopherPlay_1", timeAxis, false)
return 0
end
function LF_StopChallenge(context, success)
-- 关闭时间轴
local curArrayIndex = ScriptLib.GetGroupTempValue(context, "CurArrayIndex", {})
ScriptLib.EndTimeAxis(context, "GopherPlay_"..curArrayIndex)
ScriptLib.EndTimeAxis(context, "GopherPlay_"..curArrayIndex + 1)
-- 设置所有蘑菇钻地
LF_SetArrayGadgetState(context,GopherPlay.ZeroArray)
if success == true then
-- 成功删除操作台选项操作台进202
ScriptLib.DelWorktopOptionByGroupId(context, 0, defs.startId, GopherPlay.OptionId)
ScriptLib.SetGadgetStateByConfigId(context, defs.startId, 202)
else
-- 失败重置回suite 1
ScriptLib.RefreshGroup(context, { group_id = base_info.group_id, suite = 1 })
ScriptLib.SetWorktopOptionsByGroupId(context, 0, defs.startId, {GopherPlay.OptionId})
end
return 0
end
function LF_SummonGopher(context)
-- 召唤地鼠
local currentIndex = ScriptLib.GetGroupTempValue(context, "CurIndex", {})
currentIndex = Fix(currentIndex,GopherArray,"LF_SummonGopher:currentIndex")
local curArrayIndex = ScriptLib.GetGroupTempValue(context, "CurArrayIndex", {})
curArrayIndex = Fix(curArrayIndex,GopherArray[currentIndex],"LF_SummonGopher:curArrayIndex")
local tempArray = GopherArray[currentIndex][curArrayIndex].array
LF_SetArrayGadgetState(context,tempArray)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : 已成功设置第"..currentIndex.."种,第"..curArrayIndex.."轮的地鼠出场")
-- 记录这一轮有多少大蘑菇,并把tempScore清零
local largeMushroomCount = LF_CalLargeMushroom(context, tempArray)
ScriptLib.SetGroupTempValue(context, "LargeMushroomCount", largeMushroomCount, {})
ScriptLib.SetGroupTempValue(context, "scoreTemp", 0, {})
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: largeMushroomCount = "..largeMushroomCount..", group var scoreTemp is reset to 0")
ScriptLib.SetGroupTempValue(context, "last", 0, {})
return 0
end
function LF_CalLargeMushroom(context, array)
local temp = 0
for i = 1, #array do
if array[i] == 2 then
temp = temp + 1
end
end
return temp
end
function LF_GopherDisappear(context)
-- 地鼠消失
local currentIndex = ScriptLib.GetGroupTempValue(context, "CurIndex", {})
local currentArrayIndex = ScriptLib.GetGroupTempValue(context, "CurArrayIndex", {})
local arrayLens = #GopherArray[currentIndex]
-- 设置所有蘑菇钻地
LF_SetArrayGadgetState(context,GopherPlay.ZeroArray)
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : 已成功设置第"..currentIndex.."轮的地鼠消失" )
local temp = currentArrayIndex + 1
if temp > arrayLens then
temp = 1
end
ScriptLib.SetGroupTempValue(context, "CurArrayIndex", temp, {})
local nextIdx = ScriptLib.GetGroupTempValue(context, "CurArrayIndex", {})
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : current index = "..currentIndex..", next array index = "..nextIdx)
-- 开启下一个时间轴
local timeAxis = GopherArray[currentIndex][nextIdx].time
if #timeAxis ~= 2 then
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: next time axis not allowed")
return 0
end
ScriptLib.PrintContextLog(context, "## TD_GopherPlay: time axis = "..timeAxis[1]..", "..timeAxis[2])
ScriptLib.EndTimeAxis(context, "GopherPlay_"..currentArrayIndex)
ScriptLib.InitTimeAxis(context, "GopherPlay_"..nextIdx, timeAxis, false)
return 0
end
-- 根据给定的Array分别对GopherPlay.ConfigList进行设置
function LF_SetArrayGadgetState(context,array)
for i = 1,#GopherPlay.ConfigList do
local configId = GopherPlay.ConfigList[i]
local index = Fix(i,array,"LF_SetArrayGadgetState:index")
local curState = array[index]
if curState < 0 or curState > 2 then
curState = 0
end
local gadgetState = GopherState[curState]
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : cid -> " .. configId .. " | gadgetState -> " .. gadgetState)
ScriptLib.SetGadgetStateByConfigId(context, configId, gadgetState)
end
return 0
end
function SLC_AddScore(context,evt)
local configId = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.target_entity_id })
if configId == 0 then
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : SLC_AddScore is called, configId = "..configId..", wrong config id and return immediately")
return 0
end
local before = ScriptLib.GetGroupTempValue(context, "last", {})
ScriptLib.SetGroupTempValue(context, "last", configId, {})
local last = ScriptLib.GetGroupTempValue(context, "last", {})
if before == last then
-- 防止短时间内被打两次
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : SLC_AddScore is called, configId = "..configId..", before = "..before..
", last = "..last..", mushroom is hit twice, ignore second time")
return 0
end
local temp1 = ScriptLib.GetGroupTempValue(context, "score", {})
local temp2 = ScriptLib.GetGroupTempValue(context, "scoreTemp", {})
ScriptLib.SetGroupTempValue(context, "score", temp1 + 1, {})
ScriptLib.SetGroupTempValue(context, "scoreTemp", temp2 + 1, {})
local temp = ScriptLib.GetGroupTempValue(context, "score", {})
ScriptLib.PrintContextLog(context, "## TD_GopherPlay : 成功击碎一枚大箱子,分数+1,当前分数为".. temp)
return 0
end
--[[=====================================
|| 常用工具包
--======================================]]
-- 标准的InsertTriggers方法
function LF_InsertTriggers(TempTrigger,TempRequireSuite)
local hasRequireSuitList = not (TempRequireSuite == nil or #TempRequireSuite <=0)
if hasRequireSuitList then
if (init_config.io_type ~= 1) then
--常规group注入。trigger注入白名单定义的suite list
for i = 1, #TempRequireSuite do
for k,v in pairs(TempTrigger) do
if (TempRequireSuite[i]<=#suites) then
table.insert(suites[TempRequireSuite[i]].triggers, v.name)
end
end
end
else
--flow group注入。trigger注入白名单定义的suite list
for i = 1, #TempRequireSuite do
for k,v in pairs(TempTrigger) do
if (TempRequireSuite[i]<=#suite_disk) then
table.insert(suite_disk[TempRequireSuite[i]].triggers, v.name)
end
end
end
end
else
--不存在白名单设置走常规的trigger注入流程
if (init_config.io_type ~= 1) then
for i = 1, #suites do
for k,v in pairs(TempTrigger) do
table.insert(suites[i].triggers, v.name)
end
end
else
for i = 1, #suite_disk do
for k,v in pairs(TempTrigger) do
table.insert(suite_disk[i].triggers, v.name)
end
end
end
end
end
-- 简单拆分一个数组
function LF_ArrayToString(array)
local s = "{"
for k,v in pairs(array) do
if k < #array then
s = s .. v ..","
else
s = s .. v
end
end
s = s .."}"
return s
end
-- 根据数组的长度修饰num
function Fix(value,array,error)
if value < 1 then
ScriptLib.PrintLog(error .. "value = " .. value)
return 1
end
if value > #array then
ScriptLib.PrintLog(error .. "value = " .. value)
return #array
end
return value
end
LF_Initialize_Level()