添加配置表

This commit is contained in:
flswld
2022-11-30 00:00:20 +08:00
parent f70a890338
commit d7f3f3b866
33382 changed files with 8476601 additions and 0 deletions

View File

@@ -0,0 +1,198 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--[[
defs = {
order = {xxxx,xxxx,xxxx} --代表个点的顺序填config_id
challenge_id = 888 --挑战的显示文字
}
]]
local OPTION_ID = 92
local temp_Variables = {
{ config_id=50000001,name = "NowOrderKey", value = 1, no_refresh = true }, --用于记录当前是哪个点order中的key 用于断线重连时恢复进度
{ config_id=50000002,name = "NowState", value = 0, no_refresh = true }, --用于记录当前点是哪个状态0待探测 1待交互 用于断线重连时恢复进度
{ config_id=50000003,name = "LD_Finish", value = 0, no_refresh = false }, --修改该值将触发LD_Finish
{ config_id=50000004,name = "AddChallengeProgress", value = 0, no_refresh = false }, --修改该值将触发challenge进度+1
{ config_id=50000005,name = "IS_IN_CHALLENGE", value = 0, no_refresh = false }, --防止重复开启挑战
}
local CHALLENGEID = defs.challenge_id
local temp_Tirgger = {
{ name = "1", config_id = 9000001, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "groupLoad",trigger_count = 0},
{ name = "2", config_id = 9000002, event = EventType.EVENT_ENTER_REGION, source = "1", condition = "", action = "action_EnterRegion",trigger_count = 0},
{ name = "3", config_id = 9000003, event = EventType.EVENT_LEAVE_REGION, source = "1", condition = "", action = "action_LeaveRegion",trigger_count = 0},
{ name = "4", config_id = 9000004, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_SelectOption",trigger_count = 0},
--{ name = "5", config_id = 9000005, event = EventType.EVENT_VARIABLE_CHANGE, source = "ChallengFinish", condition = "condition_EndGameCheck", action = "action_EndGame",trigger_count = 0},
{ name = "6", config_id = 9000006, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_StateChange",trigger_count = 0},
{ name = "7", config_id = 9000007, event = EventType.EVENT_VARIABLE_CHANGE, source = "LD_Finish", condition = "", action = "LD_Finish",trigger_count = 0},
{ name = "8", config_id = 9000008, event = EventType.EVENT_VARIABLE_CHANGE, source = "AddChallengeProgress", condition = "", action = "action_AddChallengeProgress",tag = "1000",trigger_count = 0},
{ name = "9", config_id = 9000009, event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_EndGame",trigger_count = 0},
}
function action_AddChallengeProgress(context,evt)
ScriptLib.PrintContextLog(context,"【action_AddChallengeProgress】")
return 0
end
function action_StateChange(context,evt) --只改个变量,用于存档。
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
ScriptLib.PrintContextLog(context,"【onStateChange】key:"..key .. "|defsconfigid:".. defs.order[key] .. "|evt.param2:" .. evt.param2 .. "|p1:".. evt.param1)
if evt.param2 == defs.order[key] and evt.param1 == 201 then
ScriptLib.SetGroupVariableValue(context, "NowState", 201)
end
return 0
end
function action_EndGame(context)
ScriptLib.PrintContextLog(context,"【EndGame】")
local group = ScriptLib.GetContextGroupId(context)
local uid = ScriptLib.GetSceneUidList(context)
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_Pursina_Group_"..group, 1)
ScriptLib.FinishGroupLinkBundle(context, group) --小地图黄圈提示是绑定groupbundle的Finish掉groupbundle可移除黄圈显示同时group会在离开视野后卸载
ScriptLib.RemoveExtraGroupSuite(context, group, 1) --因为region在suite1这个可以删掉region使得小道具不可用。
return 0
end
function action_EnterRegion(context,evt)
ScriptLib.PrintContextLog(context,"【onEnterRegion】CHALLENGEID="..CHALLENGEID)
if evt.param1 == defs.region_Enter and ScriptLib.GetGroupVariableValue(context,"IS_IN_CHALLENGE") ~= 1 then
ScriptLib.PrintContextLog(context,"【onEnterRegion】evt.param1 == defs.region_Enter, IS_IN_CHALLENGE ~= 1")
ScriptLib.SetGroupVariableValue(context,"IS_IN_CHALLENGE",1)
local uid = ScriptLib.GetSceneUidList(context)
if CHALLENGEID ~= 2002003 then --boss前的探测需要显示0/3
ScriptLib.CreateFatherChallenge(context,CHALLENGEID,CHALLENGEID,99999999, {success=1, fail=1,fail_on_wipe=true})
ScriptLib.StartFatherChallenge(context, CHALLENGEID)
ScriptLib.AttachChildChallenge(context,CHALLENGEID,CHALLENGEID+3,CHALLENGEID+3,{3,1000,1},{uid[1]},{success=1, fail=1})
else
ScriptLib.CreateFatherChallenge(context,CHALLENGEID,CHALLENGEID,99999999, {success=1, fail=1,fail_on_wipe=true})
ScriptLib.StartFatherChallenge(context, CHALLENGEID)
ScriptLib.AttachChildChallenge(context,CHALLENGEID,CHALLENGEID+3,CHALLENGEID+3,{3,1000,3},{uid[1]},{success=1, fail=1})
end
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
--boss前的探测需要显示0/3且0需要给恢复进度
if CHALLENGEID == 2002003 then
for i = 2 , key do
ScriptLib.SetGroupVariableValue(context,"AddChallengeProgress",1)
end
end
end
return 0
end
function action_LeaveRegion(context,evt)
ScriptLib.PrintContextLog(context,"【onLeaveRegion】")
if evt.param1 == defs.region_Leave then
ScriptLib.SetGroupVariableValue(context,"IS_IN_CHALLENGE",0)
ScriptLib.EndFatherChallenge(context, CHALLENGEID)
reset_level(context)
end
return 0
end
function groupLoad(context,evt)
ScriptLib.PrintContextLog(context,"【onGroupLoad】")
reset_level(context)
return 0
end
function reset_level(context) --在leaveRegion和load的时候执行关卡重置根据存储的variable
ScriptLib.PrintContextLog(context,"【[reset_level]】")
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
--先把非1的suite卸载
group_id = ScriptLib.GetContextGroupId(context)
for i = 2 , #suites do
ScriptLib.RemoveExtraGroupSuite(context, group_id, i)
end
--把所有point清空
for i = 1 ,#defs.order do
ScriptLib.RemoveEntityByConfigId(context, group_id, EntityType.GADGET, defs.order[i])
end
--如果是最终阶段 则恢复进度把桩子恢复
if CHALLENGEID == 2002003 then
for i = 2 , key do
ScriptLib.CreateGadget(context, { config_id = 271020 + i })
end
end
--按照进度正常创建点
createPoint(context)
return 0
end
function createPoint(context)--根据Variable创建探测点
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
local state = ScriptLib.GetGroupVariableValue(context, "NowState")
local group = ScriptLib.GetContextGroupId(context)
ScriptLib.PrintContextLog(context,"NowOrderKey:"..key)
ScriptLib.PrintContextLog(context,"NowState:"..state)
ScriptLib.PrintContextLog(context,"22尝试创建gadget并设置目标探索点,configid:"..defs.order[key])
ScriptLib.CreateGadget(context, { config_id = defs.order[key] })
ScriptLib.DigSetSearchingTarget(context,defs.order[key])--程序提供的接口,设置当前点
ScriptLib.SetGroupGadgetStateByConfigId(context, group, defs.order[key], state)
return 0
end
function action_SelectOption(context,evt)
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
ScriptLib.PrintContextLog(context,"【onSelectOption】")
ScriptLib.PrintContextLog(context,"【onSelectOption】evt.param1="..evt.param1)
ScriptLib.PrintContextLog(context,"【onSelectOption】key="..key)
ScriptLib.PrintContextLog(context,"【onSelectOption】defs.order[key]="..defs.order[key])
ScriptLib.PrintContextLog(context,"【onSelectOption】evt.param2="..evt.param2)
if evt.param1 == defs.order[key] and evt.param2 == OPTION_ID then
ScriptLib.DigRetractAllWidget(context)
local group = ScriptLib.GetContextGroupId(context)
ScriptLib.SetGroupGadgetStateByConfigId(context, group, defs.order[key], 202)
ScriptLib.DelWorktopOptionByGroupId(context, group, defs.order[key], OPTION_ID)
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {defs.order[key]}, "INTERACTED", 1)
if key < #defs.order then--如果还有下一个点
--埋点
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_1","" , {["is_target"] = 0})
else
--埋点
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_1","" , {["is_target"] = 1})
end
end
return 0
end
function LD_Finish(context)--玩法完成后被LD调用
ScriptLib.PrintContextLog(context,"【onLD_Finish】")
--再次回首探测器
ScriptLib.DigRetractAllWidget(context)
--销毁旧点
local key = ScriptLib.GetGroupVariableValue(context, "NowOrderKey")
local group = ScriptLib.GetContextGroupId(context)
ScriptLib.RemoveEntityByConfigId(context, group, EntityType.GADGET, defs.order[key])
if key < #defs.order then--如果还有下一个点 创建下一个点
ScriptLib.PrintContextLog(context,"【onLD_Finish】key < #defs.order")
if CHALLENGEID == 2002003 then
ScriptLib.PrintContextLog(context,"【onLD_Finish】CHALLENGEID == 2002003")
ScriptLib.SetGroupVariableValue(context,"AddChallengeProgress",1)
end
ScriptLib.SetGroupVariableValue(context, "NowOrderKey", key+1)
ScriptLib.SetGroupVariableValue(context, "NowState", 0)
createPoint(context)
else
ScriptLib.PrintContextLog(context,"【onLD_Finish】key >= #defs.order")
ScriptLib.SetGroupVariableValue(context,"AddChallengeProgress",1)
end
return 0
end
function SLC_ShowOption(context)
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
local groupID = ScriptLib.GetContextGroupId(context)
ScriptLib.PrintContextLog(context,"尝试设置操作台选项,configid:".. configID)
ScriptLib.SetWorktopOptionsByGroupId(context, groupID, configID, {OPTION_ID})
return 0
end
function Initialize()
--加触发器
for k,v in pairs(temp_Tirgger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
--加变量
for k,v in pairs(temp_Variables) do
table.insert(variables,v)
end
return 0
end
Initialize()

View File

@@ -0,0 +1,56 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--电桩解密玩法Require
--[[
endLinkMap =
{
{inPort = {25013},outPort = {25012}},
{inPort = {25011},outPort = {25004}},
{inPort = {25019},outPort = {25018}},
{inPort = {25016},outPort = {25012}},
{inPort = {25017},outPort = {25012}},
}
]]
function SLC_SyncState(context, param1)
ScriptLib.PrintContextLog(context, "@@ Circuit : Receive_SLC")
local call_config_id = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.source_entity_id })
ScriptLib.SetGroupTempValue(context, "InPortState"..call_config_id, param1, {})
ScriptLib.PrintContextLog(context, "@@ Circuit : CONFIG_ID_"..call_config_id)
ScriptLib.PrintContextLog(context, "@@ Circuit : CONFIG_STATE_"..param1)
local index = 0
for _index, map in pairs(endLinkMap) do
for k,cfg_id in pairs(map.inPort) do
if call_config_id == cfg_id then
index = _index
end
end
end
if index == 0 then
return -1
end
local connectCount = 0
for k,port_cfg in pairs(endLinkMap[index].inPort) do
local portState = ScriptLib.GetGroupTempValue(context, "InPortState"..port_cfg, {})
connectCount = connectCount+portState
end
ScriptLib.PrintContextLog(context, "@@ Circuit : INDEX_"..index)
if connectCount == 0 then
sync_state = 0
end
if connectCount == 1 then
sync_state = 201
end
if connectCount == 2 then
sync_state = 202
end
if connectCount == 3 then
sync_state = 203
end
local out_port = endLinkMap[index].outPort[1]
ScriptLib.PrintContextLog(context, "@@ Circuit : OUT_PORT_"..out_port)
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_ID, out_port, sync_state)
return 0
end

View File

@@ -0,0 +1,150 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--[[
defs = {
group_id = ,
questList = {7216701,7216601,7217201,7217301}, --按天填入完成的任务ID
chestList = {}, --按Suite组填入每组Suite完成时打开的宝箱ID
}
--需要配置一个GroupVariable chestState需要Persistent用来记录没完成的Suite
--需要配置一个GroupVariable suiteBySeq需要Persistent,用来顺序刷新下一个组Suite
]]
local Triggers_LoopSuites = {
[1] = { name = "group_load", config_id = 9000501, event = EventType.EVENT_GROUP_LOAD, source = "",condition = "",action = "action_group_load",trigger_count= 0},
[2] = { name = "gadget_state_change", config_id = 9000502, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "",condition = "",action = "action_gadget_state_change",trigger_count= 0},
}
--在每天自然加载的时候更新Group
function action_group_load(context, evt)
if evt.param1 ~= 1 then
return -1
end
-- ScriptLib.PrintContextLog(context,"@@DFS: Group_Load")
local uidList = ScriptLib.GetSceneUidList(context)
--上线的时候如果同时group load可能找不到uidlist做一个保护
local _suite = 0
if (uidList == nil or #uidList == 0) then
--拿不到玩家的消息就去找通用的存档Group拿任务发过来的信息
_suite = ScriptLib.GetGroupVariableValueByGroup(context, "suiteByDay", 133225176)
-- ScriptLib.PrintContextLog(context,"@@DFS: Get_Suite_By_Group_".._suite)
else
--拿到玩家的EID
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
ScriptLib.PrintContextLog(context,"@@DFS: EntityID_"..avatar_entity)
--遍历拿到任务的进度,根据任务进度取到需要刷新的suiteid
--第一天的结束任务未接取或未完成刷1
if QuestState.UNFINISHED == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[1]) or QuestState.NONE == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[1]) then
_suite = 1
else
--第二天的结束任务未接取或未完成刷2
if QuestState.UNFINISHED == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[2]) or QuestState.NONE == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[2]) then
_suite = 2
else
--第三天结束任务未接取或未完成刷4
if QuestState.UNFINISHED == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[3]) or QuestState.NONE == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[3]) then
_suite = 3
else
--第四天的任务未完成,走营地的循环流程
if QuestState.UNFINISHED == ScriptLib.GetQuestState(context, avatar_entity, defs.questList[4]) then
_suite = 0
end
end
end
end
-- ScriptLib.PrintContextLog(context,"@@DFS: Get_Suite_By_Quest_".._suite)
end
--任务全都做完了或者全都没有接过找没有领奖的Suite切过去
if _suite == 0 then
-- ScriptLib.PrintContextLog(context,"@@DFS: Get_Suite_By_Finish_State".._suite)
local chestState = ScriptLib.GetGroupVariableValue(context, "chestState")
local chestStateList = retStateByDigit(chestState)
local suite_unfinished_list = {}
for index,suite_id in pairs(defs.chestList) do
if chestStateList[index] == 0 or chestStateList[index] == nil then
table.insert(suite_unfinished_list, index)
end
end
_suite = suite_unfinished_list[1]
if _suite == 0 or _suite == nil then
--每天顺序刷新Suite
_suite = ScriptLib.GetGroupVariableValue(context, "suiteBySeq")
if _suite == 0 then
ScriptLib.SetGroupVariableValue(context, "suiteBySeq", 1)
_suite = 1
end
if _suite == 3 then
ScriptLib.SetGroupVariableValue(context, "suiteBySeq", 1)
else
ScriptLib.SetGroupVariableValue(context, "suiteBySeq", _suite+1)
end
end
-- ScriptLib.PrintContextLog(context,"@@DFS: Get_Suite_By_Finish_State".._suite)
end
-- ScriptLib.PrintContextLog(context,"@@DFS: Get_Suite_Final_".._suite)
--任务没做完切到任务对应的Suite
ScriptLib.RefreshGroup(context,{group_id = defs.group_id, suite = _suite})
return 0
end
--拿到按位记录的数据情况
function retStateByDigit(numState)
local list_state = {}
--没有组完成了,返回一个空的
if numState == 0 then
return list_state
end
--[[禁用whi%le循环
whi%le numState ~= 0 do
local last_digit = numState%10
table.insert(list_state, last_digit)
numState = (numState - last_digit)/10
end
]]
--因为一共只有3位数字所以只做三次循环逻辑本质不变
for i=1,3 do
if numState ~= 0 then
local last_digit = numState%10
table.insert(list_state, last_digit)
numState = (numState - last_digit)/10
end
i = i+1
end
return list_state
end
--宝箱的状态变化来记录奖励领取情况
function action_gadget_state_change( context, evt )
local config_id = evt.param2
local config_state = evt.param1
--宝箱打开的时候更新标记对应Suite完成
if config_state ~= 102 then
return -1
end
--按位记录宝箱完成
for k,chest_id in pairs(defs.chestList) do
if chest_id == config_id then
local chestState = ScriptLib.GetGroupVariableValue(context, "chestState")
chestState = chestState + 10^(k-1)
ScriptLib.SetGroupVariableValue(context, "chestState", chestState)
return 0
end
end
return 0
end
--给每个suite塞触发器
function Initialize_DFS()
for k,v in pairs(Triggers_LoopSuites) do
table.insert(triggers, v)
for k_,v_ in pairs(suites) do
table.insert(v_.triggers, v.name)
end
end
return 0
end
Initialize_DFS()

View File

@@ -0,0 +1,83 @@
--[[
defs = {
group_id = ,
decal_opt_map = {
[opt_cfg] = {decal_id = ,index = },
},
suite_decals = ,
suite_opts = ,
}
]]
local Trigger_DecalDecode = {
[1] = { name = "gadget_create", config_id = 9001001, event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_gadget_create", trigger_count = 0 },
[2] = { name = "select_option", config_id = 9001002, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
[3] = { name = "variable_change",config_id = 9001003, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change", trigger_count = 0 },
}
function action_variable_change( context,evt )
local var_name = evt.source_name
local value_new = evt.param1
if var_name == "isNeedNotify" then
ScriptLib.AddExtraGroupSuite(context, defs.group_id, defs.suite_decals)
ScriptLib.AddExtraGroupSuite(context, defs.group_id, defs.suite_opts)
ScriptLib.PrintContextLog(context, "@@ LUA_DD : DD_Init")
end
return 0
end
--物件创建时初始化事件
function action_gadget_create(context, evt)
local config_id = evt.param1
--校验传进来的gadget是不是Group里的操作台不是则返回
if defs.decal_opt_map[config_id] == nil then
return -1
end
--初始化操作台的操作数
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, config_id, {91})
return 0
end
function action_select_option(context,evt)
local config_id = evt.param1 -- 操作台的configid
local option_id = evt.param2 -- 操作id
--校验传进来的gadget是不是Group里的操作台不是则返回
if defs.decal_opt_map[config_id] == nil then
return -1
end
if option_id ~= 91 then
return -1
end
--点亮对应的符文
ScriptLib.PrintContextLog(context, "@@ LUA_DD : Receive_OPT")
local decal_id = defs.decal_opt_map[config_id].decal_id
local decal_state = ScriptLib.GetGadgetStateByConfigId(context, defs.group_id, decal_id)
if decal_state == 202 then
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, decal_id, 201)
elseif decal_state == 201 then
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, decal_id, 202)
end
local wrongNums = 0
for wt_id,infos in pairs(defs.decal_opt_map) do
if infos.index ~= ScriptLib.GetGadgetStateByConfigId(context, defs.group_id, infos.decal_id) then
wrongNums = wrongNums + 1
end
end
if wrongNums == 0 then
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id,defs.suite_opts)
end
return 0
end
--加触发器
function Initialize_DecalDecode()
for k,v in pairs(Trigger_DecalDecode) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize_DecalDecode()

View File

@@ -0,0 +1,560 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--[[
local defs = {
region_Enter = 191004,
region_Leave = 191006
Boss = 222,
}
-- DEFS_MISCS
local Pursina = {
{191001,191008},
{191002,191009},
{191003,191007},
}
]]
--[[ 陈列室的key
2.2挖矿活动__完成boss挑战 Activity_PursinaChallenge_watcher_1
2.2挖矿活动__完成且保持桩子血量 Activity_PursinaChallenge_watcher_2
2.2挖矿活动__n分钟内完成挑战 Activity_PursinaChallenge_watcher_3
2.2挖矿活动__完成且中断特殊技能n次 Activity_PursinaChallenge_watcher_4
2.2挖矿活动__完成且击倒少于n次 Activity_PursinaChallenge_watcher_5
2.2挖矿活动__累计击破弱点n次 Activity_PursinaChallenge_watcher_6
]]
local RMD_HP_LOW = {600077,600090,600091}
local LOWPOWER_SPEED = 0 --低电量充能速度(千分比)
local MEDIUMPOWER_SPEED = 5 --中电量充能速度(千分比)
local HIGHPOWER_SPEED = 10 --高电量充能速度(千分比)
local GALLERY_ID = defs.gallery_id
local CHALLENGEID = 2002007
local CHALLENGEID_CHILD = 2001007
local Operator_Config_id = 0
local Watcher_Condition = { --watcher的条件检测用
[1] = 1, --完成boss挑战【无用】
[2] = 50, --完成且保持所有桩子血量 填0~100
[3] = 180, --n秒内完成挑战 填秒数
[4] = 2, --完成且中断特殊技能n次 填次数
[5] = 2, --完成且击倒少于n次 填次数
[6] = 6, --已废弃
}
local temp_Variables = {
{ config_id=50000001,name = "IsFinished", value = 2, no_refresh = false }, --用于标识是否已完成未开始为2战斗中为0完成后变1.
{ config_id=50000002,name = "Boss_Enhance", value = 0, no_refresh = false }, --用于标识是否狂暴挑战开始时初始化为0其他时候由ServerLuaCall控制
{ config_id=50000003,name = "Active_Count", value = 0, no_refresh = false }, --用于表示当前运行中挖掘器数量。(0~3)
{ config_id=50000004,name = "test_quickFinish", value = 0, no_refresh = false }, --快速完成
{ config_id=50000005,name = "Boss_SetBattle", value = 0, no_refresh = false }, --快速完成
}
local Tirgger_Start = {
{ name = "1", config_id = 9000001, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "Finteract",trigger_count = 0},
{ name = "2", config_id = 9000002, event = EventType.EVENT_TIME_AXIS_PASS, source = "tick", condition = "", action = "tick",trigger_count = 0},
{ name = "3", config_id = 9000003, event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "gallerytimeout",trigger_count = 0},
{ name = "4", config_id = 9000004, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "groupLoad",trigger_count = 0},
{ name = "5", config_id = 9000005, event = EventType.EVENT_GROUP_REFRESH, source = "", condition = "", action = "groupRefresh",trigger_count = 0},
{ name = "6", config_id = 9000006, event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "SetOptionToOperator",trigger_count = 0},
{ name = "7", config_id = 9000007, event = EventType.EVENT_LEAVE_REGION, source = "1", condition = "", action = "leaveRegion",trigger_count = 0},
{ name = "8", config_id = 9000008, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "gadgetDie",trigger_count = 0},
{ name = "9", config_id = 9000009, event = EventType.EVENT_TIME_AXIS_PASS, source = "watcher3", condition = "", action = "action_watcher3",trigger_count = 0},
{ name = "10", config_id = 9000010, event = EventType.EVENT_TIME_AXIS_PASS, source = "refreshgroup", condition = "", action = "action_refreshgroup",trigger_count = 0},
{ name = "11", config_id = 9000011, event = EventType.EVENT_VARIABLE_CHANGE, source = "IsFinished", condition = "condition_EndGameCheck", action = "action_EndGame",tag = "1000",trigger_count = 0},
{ name = "12", config_id = 9000012, event = EventType.EVENT_VARIABLE_CHANGE, source = "test_quickFinish", condition = "", action = "test_quickFinish",trigger_count = 0},
{ name = "13", config_id = 9000013, event = EventType.EVENT_VARIABLE_CHANGE, source = "Boss_SetBattle", condition = "", action = "action_Boss_SetBattle",trigger_count = 1},
{ name = "14", config_id = 9000014, event = EventType.EVENT_VARIABLE_CHANGE, source = "Active_Count", condition = "", action = "action_Active_Count",trigger_count = 0},
{ name = "15", config_id = 9000015, event = EventType.EVENT_ENTER_REGION, source = "1", condition = "", action = "enterRegion",trigger_count = 0},
{ name = "16", config_id = 9000016, event = EventType.EVENT_SCENE_MP_PLAY_ALL_AVATAR_DIE, source = "", condition = "", action = "action_ALL_AVATAR_DIE",trigger_count = 0},
{ name = "17", config_id = 9000017, event = EventType.EVENT_TIME_AXIS_PASS, source = "reminder", condition = "", action = "action_showReminder",trigger_count = 0},
{ name = "18", config_id = 9000018, event = EventType.EVENT_TIME_AXIS_PASS, source = "CreateBoss", condition = "", action = "action_CreateBoss",trigger_count = 0},
}
function action_CreateBoss(context,evt)
ScriptLib.PrintContextLog(context,"【[action_CreateBoss]】evt.param1 = ".. evt.param1)
local result = ScriptLib.CreateMonster(context, {config_id = defs.Boss, delay_time = 0})
ScriptLib.SetGadgetStateByConfigId(context, Pursina[1][1], GadgetState.Default)
ScriptLib.SetGadgetStateByConfigId(context, Pursina[2][1], GadgetState.Default)
ScriptLib.SetGadgetStateByConfigId(context, Pursina[3][1], GadgetState.Default)
if evt.param1 == 1 then
for k,v in pairs(gadgets) do
if v.gadget_id == 70800055 then
ScriptLib.CreateGadget(context,{config_id = v.config_id})
end
if v.gadget_id == 70800054 then
ScriptLib.SetWorktopOptionsByGroupId(context, ScriptLib.GetContextGroupId(context), v.config_id,{175})
ScriptLib.SetGroupTempValue(context,"Operator_Config_id",v.config_id,{})
end
end
end
ScriptLib.PrintContextLog(context,"【[action_CreateBoss]】result = " .. result)
return 0
end
function action_showReminder(context,evt)
ScriptLib.PrintContextLog(context,"【[action_showReminder]】")
ScriptLib.ShowReminder(context,600073)
return 0
end
function log_ActivityDig_2(context,result) --胜负结果 & 失败原因 埋点
ScriptLib.PrintContextLog(context,"【[log_ActivityDig_2]】"..result)
--埋点
local hp1=ScriptLib.GetGroupTempValue(context, "HP_1",{})
local hp2=ScriptLib.GetGroupTempValue(context, "HP_2",{})
local hp3=ScriptLib.GetGroupTempValue(context, "HP_3",{})
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_2",ScriptLib.GetGalleryTransaction(context, GALLERY_ID) , {["result"] = result,["left_hp1"]=hp1,["left_hp2"]=hp2,["left_hp3"]=hp3})
return 0
end
function action_ALL_AVATAR_DIE(context,evt)
ScriptLib.PrintContextLog(context,"【[action_ALL_AVATAR_DIE]】")
log_ActivityDig_2(context,3)
return 0
end
function enterRegion(context,evt)
ScriptLib.PrintContextLog(context,"【[enterRegion]】")
if evt.param1 == defs.region_Enter then
ScriptLib.ForbidPlayerRegionVision(context, context.uid)
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
end
return 0
end
function action_Active_Count(context,evt) --纯reminder 用 无逻辑
if defs.Boss ~= nil then
if evt.param1 == 2 and evt.param1 > evt.param2 then ScriptLib.ShowReminder(context,600081) end
if evt.param1 == 3 and evt.param1 > evt.param2 then ScriptLib.ShowReminder(context,600080) end
end
return 0
end
function action_Boss_SetBattle(context,evt)
local groupID = ScriptLib.GetContextGroupId(context)
--if defs.Boss ~= nil then ScriptLib.SetMonsterBattleByGroup(context, defs.Boss, groupID) end --LD负责通知进战
if defs.Boss ~= nil then
--给血量物件增加血量modifier
ScriptLib.PrintContextLog(context, "【[find3digger]】defs.Boss ~= nil")
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {Pursina[1][2]}, "Upgrade_HP", 1)
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {Pursina[2][2]}, "Upgrade_HP", 1)
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {Pursina[3][2]}, "Upgrade_HP", 1)
end
return 0
end
function test_quickFinish(context,evt)
finishPlay(context)
return 0
end
function condition_EndGameCheck(context,evt)
ScriptLib.PrintContextLog(context,"【onEndGameCheck】")
if evt.param1 == 1 then return true end
return false
end
function action_EndGame(context,evt)--只用来触发挑战,同时关gallery
ScriptLib.PrintContextLog(context,"【EndGame】")
ScriptLib.StopGallery(context,GALLERY_ID,true)
return 0
end
function action_refreshgroup(context,evt)
local groupID = ScriptLib.GetContextGroupId(context)
ScriptLib.RefreshGroup(context, { group_id = groupID, suite = init_config.suite})
return 0
end
function action_watcher3(context,evt)
ScriptLib.PrintContextLog(context, "【[action_watcher3]】")
ScriptLib.SetGroupTempValue(context,"watcher3",1,{})
return 0
end
function gadgetDie(context,evt)
ScriptLib.PrintContextLog(context, "【[gadgetDie]】")
for i = 1 , #Pursina do
if evt.param1 == Pursina[i][2] then
log_ActivityDig_2(context,1)
fail(context)
end
end
return 0
end
function leaveRegion(context,evt)
ScriptLib.PrintContextLog(context, "【[leaveRegion]】")
if evt.param1 == defs.region_Leave then
ScriptLib.PrintContextLog(context, "【[leaveRegion]】2")
ScriptLib.RevertPlayerRegionVision(context, context.uid)
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
if ScriptLib.GetGroupVariableValue(context,"IsFinished") == 0 then --该then内为 未完成玩法时离开region时执行的操作
log_ActivityDig_2(context,4)
fail(context)
end
end
return 0
end
function fail(context) --离场、超时后执行。关tick、关gallery、标记玩法结束、refresh
ScriptLib.PrintContextLog(context, "【[fail]】")
ScriptLib.EndTimeAxis(context, "tick")
--标识回到未开始状态
ScriptLib.SetGroupVariableValue(context, "IsFinished", 2)
local groupID = ScriptLib.GetContextGroupId(context)
-- 停止标识为"looptime"的时间轴【LD需求】
ScriptLib.EndTimeAxis(context, "looptime")
ScriptLib.StopGallery(context,GALLERY_ID,false)
ScriptLib.EndFatherChallenge(context, CHALLENGEID)
--让他清理残留gadget
ScriptLib.SetEntityServerGlobalValueByConfigId(context, Operator_Config_id, "SGV_Try_Clean_Gadgets", 1.0)
ScriptLib.RefreshGroup(context, { group_id = groupID, suite = init_config.suite})
end
--gadget创建时如果是挑战操作台增加挑战选项。
function SetOptionToOperator(context,evt)
ScriptLib.PrintContextLog(context, "【[SetOptionToOperator]】")
if evt.param2 == 70350082 or evt.param2 == 70800055 then
ScriptLib.SetWorktopOptions(context, {175})
ScriptLib.SetGroupTempValue(context,"Operator_Config_id",evt.param1,{})
end
return 0
end
--设置挖掘桩的state为201、给他们创建血量物件、给他们创建billboard
function find3digger(context)
ScriptLib.PrintContextLog(context, "【[find3digger]】")
if Pursina == nil then ScriptLib.PrintContextLog(context, "【LD请注意】未在DEFS_MISCS中找到table:Pursina") end
for i = 1 , #Pursina do
ScriptLib.SetGadgetStateByConfigId(context, Pursina[i][1], GadgetState.GearStart)
ScriptLib.CreateGadget(context, {config_id = Pursina[i][2]})
ScriptLib.CreateGadget(context, {config_id = 888880 + i})
ScriptLib.InitGalleryProgressScore(context, "digProgress".. i - 1, GALLERY_ID, {0,100}, GalleryProgressScoreUIType.GALLERY_PROGRESS_SCORE_UI_TYPE_DIG,GalleryProgressScoreType.GALLERY_PROGRESS_SCORE_NONE)
ScriptLib.SetGroupTempValue(context, "FinishPursina_"..i,0,{})
end
return 0
end
function groupLoad(context,evt)
ScriptLib.PrintContextLog(context, "【[groupLoad]】")
ScriptLib.InitTimeAxis(context,"CreateBoss",{1},false)
return 0
end
function groupRefresh(context,evt)
ScriptLib.PrintContextLog(context, "【[groupRefresh]】[2021_7_29_171549]")
ScriptLib.EndTimeAxis(context, "refreshgroup")
ScriptLib.StopGallery(context,GALLERY_ID,false)
ScriptLib.EndFatherChallenge(context, CHALLENGEID)
ScriptLib.InitTimeAxis(context,"CreateBoss",{1},false)
return 0
end
function Finteract(context, evt)
if evt.param2 == 175 then
local groupID = ScriptLib.GetContextGroupId(context)
--boss专用:设置进战、初始化watcher
if defs.Boss ~= nil then
ScriptLib.PrintContextLog(context, "【[bOSS]1】")
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {defs.Boss}, "isFinalChallenge", 1)
ScriptLib.SetGroupTempValue(context,"watcher2",0,{})
ScriptLib.SetGroupTempValue(context,"watcher3",0,{}) --代表耗时是否能完成watcher
ScriptLib.InitTimeAxis(context, "watcher3", {Watcher_Condition[3]}, false) --限时watcher用
ScriptLib.SetGroupTempValue(context,"watcher4",0,{}) --代表中断特殊技能多少次
ScriptLib.SetGroupTempValue(context,"watcher5",0,{}) --代表boss被击倒多少次
ScriptLib.SetGroupTempValue(context,"watcher6",0,{}) --代表boss被击破弱点多少次
ScriptLib.SetEntityServerGlobalValueByConfigId(context, Pursina[1][1], "SGV_NeedCollider", 1.0)--打开ScenePropCollider激光用
ScriptLib.SetEntityServerGlobalValueByConfigId(context, Pursina[2][1], "SGV_NeedCollider", 1.0)--打开ScenePropCollider激光用
ScriptLib.SetEntityServerGlobalValueByConfigId(context, Pursina[3][1], "SGV_NeedCollider", 1.0)--打开ScenePropCollider激光用
end
--初始化LD用变量
ScriptLib.SetGroupVariableValue(context, "IsFinished", 0)
ScriptLib.SetGroupVariableValue(context, "Boss_Enhance", 0)
ScriptLib.SetGroupVariableValue(context, "Active_Count", 0)
--初始化TD用变量
ScriptLib.SetGroupTempValue(context,"FinishPursinaCount",0,{}) --已经挖完多少个
ScriptLib.SetGroupTempValue(context,"HP_1",100,{}) --初始血量1
ScriptLib.SetGroupTempValue(context,"HP_2",100,{}) --初始血量2
ScriptLib.SetGroupTempValue(context,"HP_3",100,{}) --初始血量3
ScriptLib.SetGroupTempValue(context,"Progress_To_Add_1",0,{}) --挖掘进度中转变量
ScriptLib.SetGroupTempValue(context,"Progress_To_Add_2",0,{}) --挖掘进度中转变量
ScriptLib.SetGroupTempValue(context,"Progress_To_Add_3",0,{}) --挖掘进度中转变量
-- 卸载操作台
if defs.Boss == nil then ScriptLib.SetGadgetStateByConfigId(context, evt.param1, GadgetState.GearStart) end
ScriptLib.DelWorktopOptionByGroupId(context, groupID, evt.param1, 175)
--gallery+challenge同开同关
local uid = ScriptLib.GetSceneUidList(context)
ScriptLib.SetPlayerStartGallery(context, GALLERY_ID, {uid[1]})
ScriptLib.CreateFatherChallenge(context,CHALLENGEID,CHALLENGEID,99999999, {success=1, fail=1,fail_on_wipe=false})
ScriptLib.StartFatherChallenge(context, CHALLENGEID)
ScriptLib.AttachChildChallenge(context,CHALLENGEID,CHALLENGEID_CHILD,CHALLENGEID_CHILD,{3,1000,1},{uid[1]},{success=1, fail=1})
--标记挖掘桩设置为201
find3digger(context)
-- 创建标识为"tick",时间节点为{1}的时间轴true用于控制该时间轴是否循环
ScriptLib.InitTimeAxis(context, "tick", {1}, true)
--5秒后显示reminder
ScriptLib.InitTimeAxis(context, "reminder", {6}, false)
end
return 0
end
function tick(context,evt)--每tick计算进度 "Progress_To_Add_"..i
local FinishPursina = {}
for i = 1, #Pursina do
FinishPursina[i] = ScriptLib.GetGroupTempValue(context,"FinishPursina_"..i,{})
if FinishPursina[i] ~= 1 then
local Progress_wait_for_Add = ScriptLib.GetGroupTempValue(context, "Progress_To_Add_"..i,{}) --取当前待增加进度
if Progress_wait_for_Add >= 10 then
local real_add = math.floor(Progress_wait_for_Add/10)
ScriptLib.AddGalleryProgressScore(context, "digProgress"..i-1, GALLERY_ID, real_add)
ScriptLib.SetGroupTempValue(context,"Progress_To_Add_"..i,Progress_wait_for_Add - real_add*10,{})
local nowProgress = ScriptLib.GetGalleryProgressScore(context,"digProgress".. i-1,GALLERY_ID)
if nowProgress >= 100 then
local groupID = ScriptLib.GetContextGroupId(context)
ScriptLib.SetGadgetStateByConfigId(context,Pursina[i][1], GadgetState.GearAction1)
ScriptLib.RemoveEntityByConfigId(context, groupID, EntityType.GADGET, Pursina[i][2])
ScriptLib.RemoveEntityByConfigId(context, groupID, EntityType.GADGET, 888880+i)
ScriptLib.SetGroupTempValue(context, "FinishPursina_"..i,1,{})
end
end
end
end
if FinishPursina[1] == 1 and FinishPursina[2] == 1 and FinishPursina[3] == 1 then
finishPlay(context)
end
return 0
end
function finishPlay(context)
ScriptLib.PrintContextLog(context, "【[finishPlay]】")
ScriptLib.EndTimeAxis(context, "tick")
local groupID = ScriptLib.GetContextGroupId(context)
--标识设为1
ScriptLib.SetGroupVariableValue(context, "IsFinished", 1)
-- 停止标识为"looptime"的时间轴【LD需求】
ScriptLib.EndTimeAxis(context, "looptime")
--让他清理残留gadget
if Operator_Config_id ~= 0 then
ScriptLib.SetEntityServerGlobalValueByConfigId(context, Operator_Config_id, "SGV_Try_Clean_Gadgets", 1.0)
end
--中间操作台特效关掉
ScriptLib.SetGadgetStateByConfigId(context, ScriptLib.GetGroupTempValue(context,"Operator_Config_id",{}), GadgetState.GearStop)
--处理watcher
local uid = ScriptLib.GetSceneUidList(context)
local groupID = ScriptLib.GetContextGroupId(context)
if defs.Boss ~= nil then
--杀死boss
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {defs.Boss}, "Monster_Konungmathr_None_RealDie_Label", 1)
--2.2挖矿活动__完成
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_1",1)
--2.2挖矿活动__完成且所有光钉血量高于xx
if ScriptLib.GetGroupTempValue(context,"watcher2",{}) == 0 then
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_2", 1)
end
--2.2挖矿活动__特定时间内完成
local temp_result = ScriptLib.GetGroupTempValue(context,"watcher3",{})
if temp_result ~= 1 then
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_3", 1)
ScriptLib.PrintContextLog(context, "[通关成就]特定时间内完成")
end
--[[ --2.2挖矿活动__完成且中断特殊技能n次
local temp_result = ScriptLib.GetGroupTempValue(context,"watcher4",{})
ScriptLib.PrintContextLog(context, "[通关计数]中断特殊技能".. temp_result.. "次")
if temp_result >= Watcher_Condition[4] then
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_4", 1)
end ]]
--2.2挖矿活动__完成且击倒boss不少于n次
local temp_result = ScriptLib.GetGroupTempValue(context,"watcher5",{})
ScriptLib.PrintContextLog(context, "[通关计数]击倒boss".. temp_result.. "")
if temp_result >= Watcher_Condition[5] then
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_5", 1)
end
--2.2挖矿活动__完成且未击倒boss
if temp_result == 0 then
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_4", 1)
end
--完成后等待一段时间refreshgroup
ScriptLib.InitTimeAxis(context, "refreshgroup", {15}, false)
else
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_Pursina_Group_".. groupID,1)
ScriptLib.FinishGroupLinkBundle(context, groupID)
end
log_ActivityDig_2(context,0)
return 0
end
function gallerytimeout(context,evt)
ScriptLib.PrintContextLog(context, "【[gallerytimeout]】")
ScriptLib.PrintContextLog(context, "【[gallerytimeout]】evt.param1="..evt.param1)
ScriptLib.PrintContextLog(context, "【[gallerytimeout]】evt.param2="..evt.param2)
ScriptLib.PrintContextLog(context, "【[gallerytimeout]】GALLERY_ID="..GALLERY_ID)
if evt.param1 == GALLERY_ID and evt.param2 == 0 then
if evt.param3 == 1 then
ScriptLib.PrintContextLog(context, "【[gallerytimeout]】evt.param3="..evt.param3)
--埋点
log_ActivityDig_2(context,2)
end
fail(context)
end
return 0
end
function action_HPChange_1(context,evt)
ScriptLib.PrintContextLog(context, "【[action_HPChange_1]】")
ScriptLib.SetGroupTempValue(context,"HP_1",evt.param3,{})
if evt.param3 < 20 then ScriptLib.ShowReminder(context,RMD_HP_LOW[1]) end
if evt.param3 < Watcher_Condition[2] then ScriptLib.SetGroupTempValue(context,"watcher2",1,{}) end
return 0
end
function action_HPChange_2(context,evt)
ScriptLib.PrintContextLog(context, "【[action_HPChange_2]】")
ScriptLib.SetGroupTempValue(context,"HP_2",evt.param3,{})
if evt.param3 < 20 then ScriptLib.ShowReminder(context,RMD_HP_LOW[2]) end
if evt.param3 < Watcher_Condition[2] then ScriptLib.SetGroupTempValue(context,"watcher2",1,{}) end
return 0
end
function action_HPChange_3(context,evt)
ScriptLib.PrintContextLog(context, "【[action_HPChange_3]】")
ScriptLib.SetGroupTempValue(context,"HP_3",evt.param3,{})
if evt.param3 < 20 then ScriptLib.ShowReminder(context,RMD_HP_LOW[3]) end
if evt.param3 < Watcher_Condition[2] then ScriptLib.SetGroupTempValue(context,"watcher2",1,{}) end
return 0
end
--以下为ServerLuaCall函数。
function AddProgress_LowPower(context)
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
for i = 1 , #Pursina do
if configID ==Pursina[i][1] then
ScriptLib.ChangeGroupTempValue(context,"Progress_To_Add_"..i, LOWPOWER_SPEED,{})
end
end
return 0
end
function AddProgress_MediumPower(context)
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
for i = 1 , #Pursina do
if configID ==Pursina[i][1] then
ScriptLib.ChangeGroupTempValue(context,"Progress_To_Add_"..i, MEDIUMPOWER_SPEED,{})
end
end
return 0
end
function AddProgress_HighPower(context)
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
for i = 1 , #Pursina do
if configID ==Pursina[i][1] then
ScriptLib.ChangeGroupTempValue(context,"Progress_To_Add_"..i, HIGHPOWER_SPEED,{})
end
end
return 0
end
function LowPower(context)
ScriptLib.PrintContextLog(context, "【[LowPower]】")
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_3",ScriptLib.GetGalleryTransaction(context, GALLERY_ID), {["Pursina_ID"] = configID,["change_type"]=4})
return 0
end
function MediumPower(context)
ScriptLib.PrintContextLog(context, "【[MediumPower]】")
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_3",ScriptLib.GetGalleryTransaction(context, GALLERY_ID) , {["Pursina_ID"] = configID,["change_type"]=3})
return 0
end
function HighPower(context)
ScriptLib.PrintContextLog(context, "【[HighPower]】")
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
if defs.Boss ~= nil then ScriptLib.SetGroupVariableValue(context, "Boss_SetBattle", 1) end
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_3",ScriptLib.GetGalleryTransaction(context, GALLERY_ID), {["Pursina_ID"] = configID,["change_type"]=2})
return 0
end
function SLC_ShowUI(context)
ScriptLib.PrintContextLog(context, "【[SLC_ShowUI]】")
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
for i = 1, #Pursina do
if Pursina[i][2] == configID then ScriptLib.CreateGadget(context, {config_id = 888880 + i}) end
end
return 0
end
function SLC_HideUI(context)
ScriptLib.PrintContextLog(context, "【[SLC_HideUI]】")
local configID = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
local groupID = ScriptLib.GetContextGroupId(context)
for i = 1, #Pursina do
if Pursina[i][2] == configID then ScriptLib.RemoveEntityByConfigId(context, groupID, EntityType.GADGET, 888880+i) end
end
return 0
end
function ServerLuaCall_Pursina_Start(context)--桩子物件用,用于当前激活桩子的计数,顺便埋个点
ScriptLib.ChangeGroupVariableValue(context, "Active_Count", 1)
ScriptLib.MarkGroupLuaAction(context, "ActivityDig_3",ScriptLib.GetGalleryTransaction(context, GALLERY_ID), {["Pursina_ID"] = configID,["change_type"]=1})
return 0
end
function ServerLuaCall_Pursina_End(context)--桩子物件用,用于当前激活桩子的计数
ScriptLib.ChangeGroupVariableValue(context, "Active_Count", -1)
return 0
end
function ServerLuaCall_Enhance_Start(context)--事件[Boss狂暴开始]供战斗组的ServerLuaCall调用
ScriptLib.SetGroupVariableValue(context, "Boss_Enhance", 1)
ScriptLib.ShowReminder(context,600083)
return 0
end
function ServerLuaCall_Enhance_End(context)--事件[Boss狂暴结束]供战斗组的ServerLuaCall调用
ScriptLib.SetGroupVariableValue(context, "Boss_Enhance", 0)
return 0
end
function watcher4_count(context)--事件[中断特殊技能]供战斗组的ServerLuaCall调用
ScriptLib.PrintContextLog(context, "【[watcher4_count]】")
ScriptLib.ChangeGroupTempValue(context, "watcher4", 1, {})
return 0
end
function watcher5_count(context)--事件[击倒]供战斗组的ServerLuaCall调用
ScriptLib.PrintContextLog(context, "【[watcher5_count]】")
ScriptLib.ChangeGroupTempValue(context, "watcher5", 1, {})
ScriptLib.ShowReminder(context,600078)
return 0
end
function watcher6_count(context)--事件[击破弱点]供战斗组的ServerLuaCall调用 【直接add陈列室因为不用局内计算 而是累计值】
ScriptLib.PrintContextLog(context, "【[watcher6_count]】")
local uid = ScriptLib.GetSceneUidList(context)
ScriptLib.AddExhibitionAccumulableData(context, uid[1], "Activity_PursinaChallenge_watcher_6", 1)
return 0
end
function ChargeBarChange(context)
ScriptLib.PrintContextLog(context, "【[ChargeBarChange]】")
return 0
end
function Initialize()
--加触发器
for k,v in pairs(Tirgger_Start) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
for k,v in pairs(Pursina) do --根据桩子数量创建监控桩子血量的触发器
table.insert(triggers,{ name = "HP"..k, config_id = 8000000+k, event = EventType.EVENT_SPECIFIC_GADGET_HP_CHANGE, source = tostring(Pursina[k][2]), condition = "", action = "action_HPChange_"..k,trigger_count = 0})
table.insert(suites[1].triggers, "HP"..k)
end
--加变量
for k,v in pairs(temp_Variables) do
table.insert(variables,v)
end
--调整血量物件位置
for k,v in pairs(gadgets) do
for k2,v2 in pairs(Pursina) do
if v.config_id == v2[2] then
for k3,v3 in pairs(gadgets) do
if v3.config_id == v2[1] then v.pos = v3.pos end
end
end
end
if v.config_id == 70800055 then
v.server_global_value_config = {["SGV_Try_Clean_Gadgets"]= 0}
Operator_Config_id = 70800055
end
end
--加物件隐形billboard挂点
for k,v in pairs(gadgets) do
if v.gadget_id == 70800047 then
table.insert(gadgets , {config_id = 888881 , gadget_id = 70800050, pos = v.pos, rot = v.rot, level = v.level, area_id = v.area_id })
break
end
end
for k,v in pairs(gadgets) do
if v.gadget_id == 70800048 then
table.insert(gadgets , {config_id = 888882 , gadget_id = 70800051, pos = v.pos, rot = v.rot, level = v.level, area_id = v.area_id })
break
end
end
for k,v in pairs(gadgets) do
if v.gadget_id == 70800049 then
table.insert(gadgets , {config_id = 888883 , gadget_id = 70800052, pos = v.pos, rot = v.rot, level = v.level, area_id = v.area_id })
break
end
end
return 0
end
Initialize()

View File

@@ -0,0 +1,158 @@
--[[
defs = {
group_id = 133220083, --自己的GroupId
seelie_id = 83001,--配置的雷仙灵需要Persistent
pointarrayLoop = 322000028, --循环的点阵ID
pointarraySeq = 322000028, --顺序的点阵ID
finalPointLoop = 9, --循环点阵的最后一个到达点
finalPointSeq = 15, --顺序点阵的最后一个到达点
pointsLoop = {3,6,9},--循环时的有到达事件的点ID
pointsSeq = {4,10,12,15},--顺序时的有到达事件的点ID
reward_id = 83002, --完成后刷的宝箱
endSuite = 3,--完成时切的Suite
}
--需要在Group里定义的变量
--IsLoop 表示现在这个雷电飞贼走的状态1表示在循环0表示不在循环
--IsFinished 表示这个雷电飞贼是否到达终点需要persistent
--currentPathNodeIndex 当前所在的路点点ID初始为1
--nextRouteIndex 下一个终点的list索引ID
--IsMoving 表示飞贼是否处于移动状态
--在完成后会切SuiteFlow
]]
local Triggers_LoopSeelie = {
[1] = { name = "avatar_near_platform", config_id = 9000401, event = EventType.EVENT_AVATAR_NEAR_PLATFORM, source = "", condition = "", action = "action_avatar_near_platform", trigger_count = 0 },
[2] = { name = "platform_reach",config_id = 9000402, event = EventType.EVENT_PLATFORM_REACH_POINT, source = "", condition = "", action = "action_platform_reach_point", trigger_count = 0 },
}
function GetNextPath(context)
local path = {}
local curNodeIndex = ScriptLib.GetGroupVariableValue(context,"currentPathNodeIndex")
local nextRouteIndex = ScriptLib.GetGroupVariableValue(context,"nextRouteIndex")
--根据状态返回一个移动路径
if 0 ~= ScriptLib.GetGroupVariableValue(context,"IsLoop") then
--循环状态
local nextReachPoint = defs.pointsLoop[nextRouteIndex]
if curNodeIndex == defs.finalPointLoop then
curNodeIndex = 0
end
ScriptLib.PrintLog("@@Lua Loop Seelie: Get_Next_"..nextReachPoint)
for i = curNodeIndex+1, nextReachPoint do
table.insert(path, i)
end
else
local nextReachPoint = defs.pointsSeq[nextRouteIndex]
ScriptLib.PrintLog("@@Lua Loop Seelie: Get_Next_"..nextReachPoint)
for i = curNodeIndex+1, nextReachPoint do
table.insert(path, i)
end
end
return path
end
function MovePlatform(context)
ScriptLib.PrintLog("@@Lua Loop Seelie: Platform Move Start")
if 0 ~= ScriptLib.SetGroupVariableValue(context, "isMoving", 1) then
ScriptLib.PrintContextLog(context, "@@Lua Loop Seelie: Platform Moving Return")
return -1
end
--顺序移动
if 0 ~= ScriptLib.GetGroupVariableValue(context,"IsLoop") then
ScriptLib.SetPlatformPointArray(context, defs.seelie_id, defs.pointarrayLoop, GetNextPath(context), { route_type = 0 })
ScriptLib.PrintLog("@@Lua Loop Seelie: Start_Seq_Move")
else
--循环移动
ScriptLib.SetPlatformPointArray(context, defs.seelie_id, defs.pointarraySeq, GetNextPath(context), { route_type = 0 })
ScriptLib.PrintLog("@@Lua Loop Seelie: Start_Loop_Move")
end
return 0
end
-- 触发操作
function action_platform_reach_point(context, evt)
--消息不是组内飞贼
if defs.seelie_id ~= evt.param1 then
return -1
end
ScriptLib.PrintLog("@@Lua Loop Seelie:Reach Point_".. "_configID_"..evt.param1 .. "_pointarray_ID_ "..evt.param2.."_pointID _"..evt.param3)
--移动结束
ScriptLib.SetGroupVariableValue(context, "isMoving", 0)
ScriptLib.PrintLog("@@Lua Loop Seelie: Move_End")
--停止移动
ScriptLib.StopPlatform(context, defs.seelie_id)
--判断是否到达终点
--循环状态的终点
if 0 ~= ScriptLib.GetGroupVariableValue(context,"IsLoop") then
--循环状态到达终点
if evt.param3 == defs.finalPointLoop then
--下一个路点的索引是表里的第一个
ScriptLib.SetGroupVariableValue(context,"nextRouteIndex", 1)
--更新当前所在的路点
ScriptLib.SetGroupVariableValue(context,"currentPathNodeIndex",evt.param3)
else
--在list里找设一个目标路点
local next = ScriptLib.GetGroupVariableValue(context, "nextRouteIndex")
next = next + 1
ScriptLib.SetGroupVariableValue(context,"nextRouteIndex", next)
--更新当前所在的路点
ScriptLib.SetGroupVariableValue(context,"currentPathNodeIndex",evt.param3)
end
else
--非循环状态的的状态
--到达终点
if evt.param3 == defs.finalPointSeq then
ScriptLib.SetGroupVariableValue(context, "isFinished", 1)
if defs.reward_id ~= 0 then
ScriptLib.CreateGadget(context, { config_id = defs.reward_id })
end
ScriptLib.SetGadgetStateByConfigId(context, defs.seelie_id, 201)
ScriptLib.RefreshGroup(context, { group_id = defs.group_id, suite = defs.endSuite})
ScriptLib.MarkPlayerAction(context, 2014, 3, 1)
return 0
end
--在list里找设一个目标路点
local next = ScriptLib.GetGroupVariableValue(context, "nextRouteIndex")
next = next + 1
ScriptLib.SetGroupVariableValue(context,"nextRouteIndex", next)
--更新当前所在的路点
ScriptLib.SetGroupVariableValue(context,"currentPathNodeIndex",evt.param3)
end
return 0
end
-- 玩家靠近时触发操作
function action_avatar_near_platform(context, evt)
ScriptLib.PrintLog("Near Platform condition : ".. evt.param1.." | RouteID = " .. evt.param2 .. " | Point = ".. evt.param3)
--不是自己Group里的飞贼
if defs.seelie_id ~= evt.param1 then
return -1
end
--201底座状态下不触发移动操作
local state = ScriptLib.GetGadgetStateByConfigId(context, defs.group_id, defs.seelie_id)
ScriptLib.PrintLog("@@Lua Loop Seelie:Platform condition_State_"..state)
if state == 201 then
return -1
end
--移动状态下不触发新一次移动操作
if ScriptLib.GetGroupVariableValue(context, "isMoving") ~= 0 then
return -1
end
MovePlatform(context)
return 0
end
--给每个suite塞触发器
function Initialize_LoopSeelie()
for k,v in pairs(Triggers_LoopSeelie) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize_LoopSeelie()

View File

@@ -0,0 +1,312 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--操作台位置固定,每次有柱子移动时刷新操作台状态,没有柱子的操作台移除操作数
--[[
--定义关卡内的数据结构
--每个点都有一个操作台,根据这个点有没有柱子在来决定操作台的操作内容
defs = {
group_id = 133223403,
pointarray_id = 322300053, --使用的移动点阵ID
pillar_num = 5, --移动石柱的数量
suite_opts = 2, --操作台在的Suite
--定义符文石和移动点之间的位置关系selfSigil是这个点上的提示符文没有就填0
Graph = {
[1]={preNode= 0, nextNode= 0, outNode= 0, inNode= 2, selfSigil= 0},
[2]={preNode= 7, nextNode= 3, outNode= 1, inNode= 0, selfSigil= 3},
[3]={preNode= 2, nextNode= 4, outNode= 0, inNode= 0, selfSigil= 1},
[4]={preNode= 3, nextNode= 6, outNode= 5, inNode= 0, selfSigil= 4},
[5]={preNode= 0, nextNode= 0, outNode= 0, inNode= 4, selfSigil= 0},
[6]={preNode= 4, nextNode= 7, outNode= 0, inNode= 0, selfSigil= 7},
[7]={preNode= 6, nextNode= 2, outNode= 8, inNode= 0, selfSigil= 6},
[8]={preNode= 0, nextNode= 0, outNode= 0, inNode= 7, selfSigil= 0},},
--每个桩的存储id,name不用管initPos是初始位置finPos是最后的正确位置
PillarInfo = {
[403001] = { name = "Pillar01", initPos = 1, finPos = 2},
[403002] = { name = "Pillar02", initPos = 7, finPos = 3},
[403003] = { name = "Pillar03", initPos = 8, finPos = 7},
[403004] = { name = "Pillar04", initPos = 5, finPos = 4},
[403005] = { name = "Pillar05", initPos = 4, finPos = 6},
},
--每个操作台对应的位置
OperatorPos = {
[403006] = 1,
[403007] = 2,
[403008] = 3,
[403009] = 4,
[403010] = 5,
[403011] = 6,
[403012] = 7,
[403013] = 8,},
}
]]
--把符文石和操作台拆到两个Suite里收到消息的时候才会加载操作台并且修改符文石的状态
local Trigger_PillarMove = {
[1] = { name = "gadget_create", config_id = 9000201, event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_gadget_create", trigger_count = 0 },
[2] = { name = "select_option", config_id = 9000202, event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
[3] = { name = "platform_reach",config_id = 9000203, event = EventType.EVENT_PLATFORM_REACH_POINT, source = "", condition = "", action = "action_platform_reach_point", trigger_count = 0 },
[4] = { name = "group_load",config_id = 9000204, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
[5] = { name = "variable_change",config_id = 9000205, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change", trigger_count = 0 },
}
--管理每个操作台的移动方向逻辑,返回一个操作台可以进行的操作列表
function GetOptList(opt_config_id)
local opt_list = {}
local opt_pos = defs.OperatorPos[opt_config_id]
local opt_map = defs.Graph[opt_pos]
--前一个的符文,拿到操作数
if opt_map.preNode ~= 0 then
local preSigil = (defs.Graph[opt_map.preNode]).selfSigil
if preSigil ~= 0 then
table.insert(opt_list, 300+preSigil)
else
table.insert(opt_list, 308)
end
end
--后一个的符文,拿到操作数
if opt_map.nextNode ~= 0 then
local nextSigil = (defs.Graph[opt_map.nextNode]).selfSigil
if nextSigil ~= 0 then
table.insert(opt_list, 300+nextSigil)
else
table.insert(opt_list, 308)
end
end
--有外接点,塞一个向外移动
if opt_map.outNode ~= 0 then
table.insert(opt_list, 309)
end
--有内接点,塞一个向内移动
if opt_map.inNode ~= 0 then
table.insert(opt_list, 310)
end
return opt_list
end
--解码传进来的操作数,找到正确的终点
function GetEndRoute(opt_config_id, opt_sel_id)
local target_sigil = 0
local endRoute = 0
--拿到传进来的操作台的位置和邻接的操作台对应符文
local opt_pos = defs.OperatorPos[opt_config_id]
local opt_map = defs.Graph[opt_pos]
--向外侧移动
if opt_sel_id == 309 then
endRoute = opt_map.outNode
end
--向内侧移动
if opt_sel_id == 310 then
endRoute = opt_map.inNode
end
--向有符文处移动,301~307
if opt_sel_id <= 308 and opt_sel_id > 300 then
if opt_sel_id == 308 then
target_sigil = 0
else
target_sigil = opt_sel_id - 300
end
--防止为0index报nil
if opt_map.preNode ~= 0 then
if target_sigil == defs.Graph[opt_map.preNode].selfSigil then
endRoute = opt_map.preNode
end
end
--防止为0index报nil
if opt_map.nextNode ~= 0 then
if target_sigil == defs.Graph[opt_map.nextNode].selfSigil then
endRoute = opt_map.nextNode
end
end
end
return {opt_pos,endRoute}
end
--更新操作台的操作数
function CheckAndModifyOps(context, opt_config_id)
--先将操作置为空方便刷新
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, opt_config_id, {})
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Group_"..defs.group_id)
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Modify_Start_"..opt_config_id)
local opt_pos = defs.OperatorPos[opt_config_id]
--遍历所有柱子的位置,找到现在这个操作台上的柱子,打开操作台
for cfg_id,info in pairs(defs.PillarInfo) do
if opt_pos == ScriptLib.GetGroupTempValue(context, info.name, {}) then
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, opt_config_id, GetOptList(opt_config_id))
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : OPT_OPEN")
return 0
end
end
--遍历结束没有找到柱子,将操作台的操作置为空
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, opt_config_id, {})
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Modify_Empty")
return 0
end
--检查现在的柱子位置状态,全部正确就返回刷奖励
function CheckState(context)
local rightCounts = 0
for config_id,info in pairs(defs.PillarInfo) do
if info.finPos == ScriptLib.GetGroupTempValue(context, info.name, {}) then
rightCounts = rightCounts + 1
end
end
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Check_Fail")
--满足排列记录完成
if rightCounts == defs.pillar_num then
--记录完成
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
--清空操作台可操作内容
for config_id,pos in pairs(defs.OperatorPos) do
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, config_id, {})
end
end
return 0
end
--物件创建时初始化事件
function action_gadget_create(context, evt)
local config_id = evt.param1
--校验传进来的gadget是不是Group里的操作台不是则返回
if defs.OperatorPos[config_id] == nil then
return -1
end
--初始化操作台的操作数
CheckAndModifyOps(context, config_id)
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Init_End")
return 0
end
--操作台收到移动指令时移动当前位置的柱子
function action_select_option(context, evt)
local config_id = evt.param1 -- 操作台的configid
local option_id = evt.param2 -- 操作id
--校验传进来的gadget是不是Group里的操作台不是则返回
if defs.OperatorPos[config_id] == nil then
return -1
end
--检测是否有石柱在移动有的话则不会执行指令应该要弹一个Reminder
if 0 ~= ScriptLib.GetGroupTempValue(context, "isMoving", {}) then
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Is_Moving")
ScriptLib.ShowReminder(context, 400095)
return -1
end
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_"..config_id.."_Received_"..option_id)
local path = GetEndRoute(config_id, option_id)
local pillar_config_id = 0
for cfg_id,info in pairs(defs.PillarInfo) do
if path[2] == ScriptLib.GetGroupTempValue(context, info.name, {}) then
--有柱子卡了,弹提示,结束
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Stucked")
ScriptLib.ShowReminder(context, 400095)
return -1
end
if path[1] == ScriptLib.GetGroupTempValue(context, info.name, {}) then
pillar_config_id = cfg_id
end
end
-- ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_ConfigID_"..pillar_config_id)
ScriptLib.SetGroupTempValue(context, "TargetPoint", path[2], {})
ScriptLib.SetPlatformPointArray(context, pillar_config_id, defs.pointarray_id, path, { route_type = 0})
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, config_id, {})
ScriptLib.StartPlatform(context, pillar_config_id)
ScriptLib.SetGroupTempValue(context, "isMoving", 1, {})
--柱子变成203状态带特效
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, pillar_config_id, 203)
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Move_Start")
return 0
end
--石柱每次到达更新信息
function action_platform_reach_point( context, evt)
--确认是组里的柱子到了位置
local pillar_config_id = evt.param1
--到达的柱子是这组Group里的
local point_id = evt.param3
if nil == defs.PillarInfo[pillar_config_id] then
return -1
end
--到的不是目标点
if point_id ~= ScriptLib.GetGroupTempValue(context, "TargetPoint", {}) then
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : IS_START_POINT")
return -1
end
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_"..pillar_config_id.."_Reach_Point"..point_id)
--更新柱子的位置信息,储存
ScriptLib.SetGroupTempValue(context, defs.PillarInfo[pillar_config_id].name, point_id, {})
if point_id == defs.PillarInfo[pillar_config_id].finPos then
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : RightPos")
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, pillar_config_id, 201)
else
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : WrongPos")
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, pillar_config_id, 202)
end
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Set_Pillar_State")
--刷新所有操作台的信息,拿状态
for cfg_id,pos in pairs(defs.OperatorPos) do
CheckAndModifyOps(context, cfg_id)
end
--校验是否为正确结果,正确则结束
CheckState(context)
--标记没柱子在移动了
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Pillar_Move_Finish")
ScriptLib.SetGroupTempValue(context, "isMoving", 0, {})
return 0
end
--变量发生变化的时候切换组内加载组内的所有操作台,开启操作
function action_variable_change( context,evt )
local var_name = evt.source_name
local value_new = evt.param1
if var_name == "isNeedNotify" then
for cfg_id,info in pairs(defs.PillarInfo) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 202)
end
ScriptLib.AddExtraGroupSuite(context, defs.group_id, defs.suite_opts)
end
if var_name == "isQuestNotify" then
for cfg_id,info in pairs(defs.PillarInfo) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 202)
end
ScriptLib.AddExtraGroupSuite(context, defs.group_id, defs.suite_opts)
end
ScriptLib.PrintContextLog(context, "@@ LUA_PILLAR : Can be pushed")
return 0
end
--在Group加载的时候重置柱子记录的位置防止断线重连的时候出错
--新版本把柱子的位置全都用TempValue记这样更保险
function action_group_load(context, evt)
if 0 ~= ScriptLib.GetGroupVariableValue(context, "Finished") then
--完成了就切到Suite3
ScriptLib.RefreshGroup(context, { group_id = defs.group_id , suite = 3})
return 0
end
for cfg_id,info in pairs(defs.PillarInfo) do
ScriptLib.SetGroupTempValue(context, info.name, info.initPos, {})
end
if 0 ~= ScriptLib.GetGroupVariableValue(context, "isQuestNotify") then
for cfg,infos in pairs(defs.PillarInfo) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg, 202)
end
ScriptLib.AddExtraGroupSuite(context, defs.group_id, defs.suite_opts)
end
return 0
end
--加触发器
function Initialize_PM()
for k,v in pairs(Trigger_PillarMove) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize_PM()

View File

@@ -0,0 +1,515 @@
local startChallenge = 16
local getCard = 13
local quitDungeon = 15
local extrTriggers = {
initialtrigger = {
["Gadget_Create"] = { config_id = 8000001, name = "Gadget_Create", event= EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_WhenGadgetCreate", trigger_count = 0 },
["Option_Dwon"] = { config_id = 8000002, name = "Option_Dwon", event= EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_WhenOptionDown", trigger_count = 0 },
["Challenge_Success"] = { config_id = 8000003, name = "Challenge_Success", event= EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_ChallengeSuccess", trigger_count = 0 },
["Challenge_Fail"] = { config_id = 8000004, name = "Challenge_Fail", event= EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_ChallengeFail", trigger_count = 0 },
["BOSSRoom_StateChange"] = { config_id = 8000005, name = "BOSSRoom_StateChange", event= EventType.EVENT_ROGUE_CELL_STATE_CHANGE, source = "", condition = "", action = "action_BossRoomStateChange", trigger_count = 0 },
["Dungeon_Settle"] = { config_id = 8000006, name = "Dungeon_Settle", event= EventType.EVENT_DUNGEON_SETTLE, source = "", condition = "", action = "action_DungeonSettle", trigger_count = 0 },
["Finish_Card"] = { config_id = 8000008, name = "Finish_Card", event= EventType.EVENT_ROGUE_CELL_FINISH_SELECT_CARD, source = "", condition = "", action = "action_FinishCard", trigger_count = 0 },
["Room_Ready"] = { config_id = 8000009, name = "Room_Ready", event= EventType.EVENT_ROGUE_CELL_CONSTRUCT, source = "", condition = "", action = "action_WhenRoomReady", trigger_count = 0 },
["ThunderFloor_TimeAxis"] = { config_id = 8000010, name = "ThunderFloor_TimeAxis", event= EventType.EVENT_TIME_AXIS_PASS, source = "thunderfloor_timer", condition = "", action = "action_ThunderFloorTimeAxis", trigger_count = 0 },
--["Monster_Die"] = { config_id = 8000011, name = "Monster_Die", event= EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_monster_die", trigger_count = 0 },
["Group_Ready"] = { config_id = 8000011, name = "Group_Ready", event= EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_WhenGroupReady", trigger_count = 0 },
["Enter_Region"] = { config_id = 8000012, name = "Enter_Region", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterBossRegion", trigger_count = 0 },
["Leave_Region"] = { config_id = 8000013, name = "Leave_Region", event= EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_LeaveBossRegion", trigger_count = 0 },
--["Quest_Start"] = { config_id = 8000014, name = "Quest_Start", event= EventType.EVENT_QUEST_START, source = "", condition = "", action = "action_QuestStart", trigger_count = 0 },
},
unloadtrigger = {
["Quest_Region"] = { config_id = 8000007, name = "Quest_Region", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterQuestRegion", trigger_count = 0 },
},
}
function RemoveBUFF( context )
local UidList = ScriptLib.GetSceneUidList(context)
ScriptLib.SetTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_SR_AreaNoEnemyAtkSpeedUp", 0)
ScriptLib.SendServerMessageByLuaKey(context, "ROGUE_DISABLE_HALO", UidList)
return 0
end
function action_QuestStart( context,evt )
if preQuestID == nil then
return 0
end
if evt.param1 == preQuestID then
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest Start Delete Destination")
ScriptLib.KillEntityByConfigId(context, { group_id = GroupId, config_id = DestinationConfigID, entity_type = EntityType.GADGET })
end
return 0
end
--监听cell分配
function action_WhenGadgetCreate(context, evt)
local roomState = ScriptLib.GetRogueCellState(context, GroupId)
if evt.param1 == BossOperatorConfigID and roomState == 0 then
ScriptLib.PrintContextLog(context, "## RG_LOG : Set StartChallenge Option")
ScriptLib.SetWorktopOptionsByGroupId(context, GroupId, BossOperatorConfigID, {startChallenge})
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 0)
elseif evt.param1 == BossOperatorConfigID and roomState == 1 then
ScriptLib.PrintContextLog(context, "## RG_LOG : Set GadgetState To 201")
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 201)
elseif evt.param1 == BossOperatorConfigID and roomState == 2 then
ScriptLib.PrintContextLog(context, "## RG_LOG : Set Gacha Option")
ScriptLib.SetWorktopOptionsByGroupId(context, GroupId, BossOperatorConfigID, {getCard})
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 203)
elseif evt.param1 == BossOperatorConfigID and roomState == 3 then
ScriptLib.PrintContextLog(context, "## RG_LOG : Set Gacha Off Option")
--设置gadget状态
--操作台
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 204)
--开剧情门
if doorConfigID~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorConfigID, 201)
end
--开BOSS后门
if doorBossBackID ~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorBossBackID, 201)
end
elseif evt.param1 == QuitPointConfigID then
ScriptLib.PrintContextLog(context, "## RG_LOG : Set QuitPoint Option")
ScriptLib.SetWorktopOptionsByGroupId(context, GroupId, QuitPointConfigID, {quitDungeon})
elseif evt.param1 == doorBossFrontID and roomState == 0 then
--开门
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorBossFrontID, 201)
end
return 0
end
function action_WhenGroupReady( context,evt )
-- Group加载
--开启雷电地板时间轴
ScriptLib.InitTimeAxis(context, "thunderfloor_timer", ThunderFloorTimeAxis, true)
return 0
end
function action_WhenRoomReady(context,evt)
-- 当房间准备好后
local roomState = ScriptLib.GetRogueCellState(context, GroupId)
local uidList = ScriptLib.GetSceneUidList(context)
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
--如果任务还未完成
if roomState == 3 and ScriptLib.GetQuestState(context, avatar_entity, questID) ~= QuestState.FINISHED then
--开启任务region
ScriptLib.CreateGroupTrigger(context, "Quest_Region")
end
--获取任务,如果有任务,需要特殊创建门的位置
if preQuestID~= nil then
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest "..preQuestID.." State = "..ScriptLib.GetQuestState(context, avatar_entity, preQuestID))
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest "..nextQuestID.." State = "..ScriptLib.GetQuestState(context, avatar_entity, nextQuestID))
end
if nextQuestID == 0 then
ScriptLib.PrintContextLog(context, "## RG_LOG : No Quest Create DestinationPoint")
--创建指引点
ScriptLib.CreateGadget(context, { config_id = DestinationConfigID })
elseif ScriptLib.GetQuestState(context, avatar_entity, nextQuestID) == QuestState.FINISHED then
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest Finish Create DestinationPoint")
--创建指引点,定点
ScriptLib.CreateGadgetByConfigIdByPos(context, DestinationConfigID, DestinationPos, {x=0, y=DestinationRot[1], z=0 })
else
ScriptLib.PrintContextLog(context, "## RG_LOG : Has Quest Create DestinationPoint")
--创建指引点
ScriptLib.CreateGadget(context, { config_id = DestinationConfigID })
end
return 0
end
-- function action_monster_die( context, evt )
-- local UidList = ScriptLib.GetSceneUidList(context)
-- -- 杀怪计数
-- ScriptLib.AddExhibitionAccumulableData(context, UidList[1], "Rogue_KillMonster_Count", 1)
-- return 0
-- end
function action_FinishCard( context, evt )
-- 抽卡后切房间状态
--设置房间状态
ScriptLib.SetRogueCellState(context, GroupId, 3)
return 0
end
function action_BossRoomStateChange( context, evt )
-- BOSS房间状态变化
if evt.param1 == 0 then
--开门
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorBossFrontID, 201)
end
--抽卡完成后
if evt.param1 == 3 then
--删除按键
ScriptLib.DelWorktopOptionByGroupId(context, GroupId, BossOperatorConfigID, getCard)
--设置gadget状态
--操作台
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 204)
--开剧情门
if doorConfigID~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorConfigID, 201)
end
--开BOSS后门
if doorBossBackID ~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorBossBackID, 201)
end
--如果任务完成,直接设置地城成功
local uidList = ScriptLib.GetSceneUidList(context)
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
if questID == 0 then
ScriptLib.PrintContextLog(context, "## RG_LOG : No Quest")
ScriptLib.CauseDungeonSuccess(context)
elseif ScriptLib.GetQuestState(context, avatar_entity, questID) == QuestState.FINISHED then
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest Finished")
ScriptLib.CauseDungeonSuccess(context)
else
ScriptLib.PrintContextLog(context, "## RG_LOG : Create QuestRegion")
--开启任务region
ScriptLib.CreateGroupTrigger(context, "Quest_Region")
end
end
return 0
end
function action_EnterQuestRegion( context,evt )
-- 进入任务region
if evt.param1 ~= questRegionID then
return 0
end
--删除指引点
if DestinationConfigID ~= 0 then
ScriptLib.KillEntityByConfigId(context, { group_id = GroupId, config_id = DestinationConfigID, entity_type = EntityType.GADGET })
end
ScriptLib.PrintContextLog(context, "## RG_LOG : Player In QuestRegion")
ScriptLib.AddQuestProgress(context, ""..finishQuestID)
return 0
end
function action_EnterBossRegion( context,evt )
if evt.param1 == RegionID then
--设置进入房间
ScriptLib.EnterRogueCell(context, GroupId)
--挑战房间加载eyepoint锚点
ScriptLib.SetPlayerEyePoint(context, RegionID, RegionID)
end
if evt.param1 == PlotRoom.regionID then
--设置进入房间
ScriptLib.EnterRogueCell(context, PlotRoom.groupID)
end
return 0
end
function action_LeaveBossRegion( context,evt )
if evt.param1 ~= RegionID then
return 0
end
--清楚eyepoint锚点
ScriptLib.ClearPlayerEyePoint(context, RegionID)
return 0
end
function action_DungeonSettle( context,evt )
-- dungeonsettle后
if evt.param1 == 0 then
return 0
end
--获取任务,如果有任务,需要特殊创建门的位置
local uidList = ScriptLib.GetSceneUidList(context)
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
if nextQuestID == 0 then
ScriptLib.PrintContextLog(context, "## RG_LOG : No Quest Create QuitPoint")
--创建跳层机关
ScriptLib.CreateGadget(context, { config_id = QuitPointConfigID })
elseif ScriptLib.GetQuestState(context, avatar_entity, nextQuestID) == QuestState.FINISHED then
ScriptLib.PrintContextLog(context, "## RG_LOG : Quest Finish Create QuitPoint")
--创建跳层机关,定点
ScriptLib.CreateGadgetByConfigIdByPos(context, QuitPointConfigID, BossDoorPos, {x=0, y=BossDoorRot[1], z=0})
else
ScriptLib.PrintContextLog(context, "## RG_LOG : Has Quest Create QuitPoint")
--创建跳层机关
ScriptLib.CreateGadget(context, { config_id = QuitPointConfigID })
end
--开启最后一个门
if lastDoorConfigID ~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, lastDoorConfigID, 201)
end
return 0
end
function action_WhenOptionDown(context,evt)
local UidList = ScriptLib.GetSceneUidList(context)
ScriptLib.PrintContextLog(context, "## RG_LOG : Option Down ConfigID Is "..evt.param1.." Option ID Is "..evt.param2)
if evt.param1 == BossOperatorConfigID and evt.param2 == startChallenge then
--连通性检查
if ScriptLib.IsRogueBossCellPrevCellFinish(context) == false then
ScriptLib.ShowReminder(context, 470080101)
ScriptLib.PrintContextLog(context, "## RG_LOG : Chuan Men Gua Bi")
return 0
end
--距离检查
local PlayerPos = ScriptLib.GetPosByEntityId(context, ScriptLib.GetAvatarEntityIdByUid(context, UidList[1]))
local OptionPos = ScriptLib.GetPosByEntityId(context, ScriptLib.GetEntityIdByConfigId(context, BossOperatorConfigID))
if math.abs(PlayerPos.x - OptionPos.x) > 10 or math.abs(PlayerPos.y - OptionPos.y) > 10 or math.abs(PlayerPos.z - OptionPos.z) > 10 then
ScriptLib.PrintContextLog(context, "## RG_LOG : Delta X = "..math.abs(PlayerPos.x - OptionPos.x))
ScriptLib.PrintContextLog(context, "## RG_LOG : Delta Y = "..math.abs(PlayerPos.y - OptionPos.y))
ScriptLib.PrintContextLog(context, "## RG_LOG : Delta Z = "..math.abs(PlayerPos.z - OptionPos.z))
ScriptLib.ShowReminder(context, 470080102)
ScriptLib.PrintContextLog(context, "## RG_LOG : Diao Xian Gua Bi")
return 0
end
--设置房间状态
ScriptLib.SetRogueCellState(context, GroupId, 1)
--删除按键
ScriptLib.PrintContextLog(context, "## RG_LOG : Delete StartChallenge Option")
ScriptLib.DelWorktopOptionByGroupId(context, GroupId, BossOperatorConfigID, startChallenge)
--开启高危挑战
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStartChallenge", {BossPoolID,GroupId})
--创建空气墙
ScriptLib.CreateGadget(context, { config_id = AirWallConfigID })
--关门
if doorBossFrontID~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, doorBossFrontID, 0)
end
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 201)
elseif evt.param1 == BossOperatorConfigID and evt.param2 == getCard then
local UidList = ScriptLib.GetSceneUidList(context)
ScriptLib.PrintContextLog(context, "## RG_LOG : Card UidList == "..UidList[1])
--抽卡
ScriptLib.DoRoguelikeCardGachaByLua(context, UidList[1])
elseif evt.param1 == QuitPointConfigID then
ScriptLib.PrintContextLog(context, "## RG_LOG : GOTO NEXT DUNGEON")
--进入下一层
ScriptLib.EnterRogueDungeonNextLevel(context)
end
return 0
end
function action_ThunderFloorTimeAxis( context,evt )
if evt.param1 == 1 then
--开启雷电地板
for i,v in ipairs(ThunderFloorList) do
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, v, 201)
end
elseif evt.param1 ==2 then
--关闭雷电地板
for i,v in ipairs(ThunderFloorList) do
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, v, 0)
end
end
return 0
end
function action_ChallengeSuccess(context,evt)
--关闭怪物潮
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStopChallenge", {BossPoolID,GroupId})
--移除空气墙
ScriptLib.RemoveEntityByConfigId(context, GroupId, EntityType.GADGET, AirWallConfigID)
if isLastRoom == 1 then
--设置房间状态
ScriptLib.SetRogueCellState(context, GroupId, 3)
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 204)
else
--设置房间状态
ScriptLib.SetRogueCellState(context, GroupId, 2)
--设置抽卡按键
ScriptLib.SetWorktopOptionsByGroupId(context, GroupId, BossOperatorConfigID, {getCard})
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 203)
end
--关闭雷电地板
for i,v in ipairs(ThunderFloorList) do
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, v, 0)
end
return 0
end
function action_ChallengeFail(context,evt)
--设置房间状态
ScriptLib.SetRogueCellState(context, GroupId, 0)
-- 重新设置option
ScriptLib.SetWorktopOptionsByGroupId(context, GroupId, BossOperatorConfigID, {startChallenge})
--关闭怪物潮
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStopChallenge", {BossPoolID,GroupId})
--移除空气墙
ScriptLib.RemoveEntityByConfigId(context, GroupId, EntityType.GADGET, AirWallConfigID)
--设置gadget状态
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, BossOperatorConfigID, 0)
--关闭雷电地板
for i,v in ipairs(ThunderFloorList) do
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupId, v, 0)
end
return 0
end
function LF_Initialize_Group()
for k,v in pairs(extrTriggers.initialtrigger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
for k,v in pairs(extrTriggers.unloadtrigger) do
table.insert(triggers, v)
end
return 0
end
LF_Initialize_Group()

View File

@@ -0,0 +1,91 @@
local extrTriggers = {
initialtrigger = {
["Enter_Room"] = { config_id = 8000001, name = "Enter_Room", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterRoom", trigger_count = 0 },
["Gadget_StateChange"] = { config_id = 8000002, name = "Gadget_StateChange", event= EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_GadgetStateChange", trigger_count = 0 },
["Room_Ready"] = { config_id = 8000003, name = "Room_Ready", event= EventType.EVENT_ROGUE_CELL_CONSTRUCT, source = "", condition = "", action = "action_RoomReady", trigger_count = 0 },
}
}
function action_RoomReady( context,evt )
for i,v in ipairs(ChestConfigIDList) do
if ScriptLib.GetGadgetStateByConfigId(context, GroupId, v) == 0 then
ScriptLib.PrintContextLog(context, "##Rogue LOG : action_RoomReady Has Close Chest ")
return 0
end
end
--设置为完成
ScriptLib.SetRogueCellState(context, GroupId, 4)
return 0
end
function action_EnterRoom( context,evt )
if evt.param1 ~= RegionID then
return 0
end
--设置进入房间
ScriptLib.EnterRogueCell(context, GroupId)
ScriptLib.PrintContextLog(context, "##Rogue LOG : Get Chest State == "..ScriptLib.GetGadgetStateByConfigId(context, GroupId, ChestConfigID))
--ScriptLib.GetEntityIdByConfigId(context, ChestConfigID)
for i,v in ipairs(ChestConfigIDList) do
if ScriptLib.GetGadgetStateByConfigId(context, GroupId, v) == 0 then
ScriptLib.SetRogueCellState(context, GroupId, 2)
ScriptLib.PrintContextLog(context, "##Rogue LOG : Has Close Chest ")
return 0
end
end
--设置为完成
ScriptLib.SetRogueCellState(context, GroupId, 3)
-- if ScriptLib.GetGadgetStateByConfigId(context, GroupId, ChestConfigID) == -1 then
-- --设置为完成
-- ScriptLib.SetRogueCellState(context, GroupId, 3)
-- else
-- ScriptLib.SetRogueCellState(context, GroupId, 2)
-- end
return 0
end
function action_GadgetStateChange( context,evt )
if evt.param1 == 102 then
for i,v in ipairs(ChestConfigIDList) do
if ScriptLib.GetGadgetStateByConfigId(context, GroupId, v) == 0 then
ScriptLib.PrintContextLog(context, "##Rogue LOG : Has Close Chest ")
return 0
end
end
ScriptLib.PrintContextLog(context, "##Rogue LOG : Chest State GO TO 102, Set Room State ")
--设置为完成
ScriptLib.SetRogueCellState(context, GroupId, 3)
end
return 0
end
function LF_Initialize_Group()
for k,v in pairs(extrTriggers.initialtrigger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
return 0
end
LF_Initialize_Group()

View File

@@ -0,0 +1,248 @@
local extrTriggers = {
initialtrigger = {
["Room_Ready"] = { config_id = 9000001, name = "Room_Ready", event= EventType.EVENT_TIME_AXIS_PASS, source = "delayToClearMonster", condition = "", action = "ClearMonster", trigger_count = 0 },
["ALL_PLAYER_DIE"] = { config_id = 9000002, name = "ALL_PLAYER_DIE", event= EventType.EVENT_DUNGEON_ALL_AVATAR_DIE, source = "", condition = "", action = "action_all_avatar_die", trigger_count = 0 },
["Remainder_Region"] = { config_id = 8000003, name = "Remainder_Region", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterRemainderRegion", trigger_count = 0 },
["Gadget_Create"] = { config_id = 8000004, name = "Gadget_Create", event= EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_GadgetCreate", trigger_count = 0 },
["Select_Option"] = { config_id = 8000005, name = "Select_Option", event= EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_SelectOption", trigger_count = 0 },
}
}
local optionID = 205
function RemoveBUFF( context )
local UidList = ScriptLib.GetSceneUidList(context)
ScriptLib.AddTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_SR_AreaNoEnemyAtkSpeedUp", -1)
return 0
end
function RogueStartChallenge( context, prev_context, monsterPool, groupID )
local hasChallenge = 0
local UidList = ScriptLib.GetSceneUidList(prev_context)
local param = {}
local MonsterBuff = ScriptLib.GetTeamServerGlobalValue(context, UidList[1], "SGV_ROGUECURSE_MONSTERBUFF")
for i,v in ipairs(challengeList) do
if v.monsterPool == monsterPool then
hasChallenge = hasChallenge + 1
--开启挑战
--调整参数
for i,v in ipairs(v.challengeParamList) do
if v ~= -1 then
table.insert(param,v)
else
table.insert(param, groupID)
end
end
ScriptLib.ActiveChallenge(prev_context, param[1], param[2], param[3], param[4], param[5], param[6])
-- ScriptLib.CreateFatherChallenge(context, 101, 111175, 9999, {success = 1, fail = 1, fail_on_wipe=true})
-- ScriptLib.AttachChildChallenge(context, 101, 103, 111173, challengeParamList,{},{success=1,fail=1})
-- ScriptLib.StartFatherChallenge(context, 101)
--放怪
if MonsterBuff == 1 then
ScriptLib.AutoPoolMonsterTide(prev_context, 1, groupID, {v.monsterPool}, 0, {}, {MonsterAffix}, v.monsterPoolParamList)
else
ScriptLib.AutoPoolMonsterTide(prev_context, 1, groupID, {v.monsterPool}, 0, {}, {}, v.monsterPoolParamList)
end
--辅助怪
if v.extraMonsterPool ~= 0 then
if MonsterBuff == 1 then
ScriptLib.AutoPoolMonsterTide(prev_context, 2, groupID, {v.extraMonsterPool}, 0, {}, {MonsterAffix}, v.extraMonsterPoolParamList)
else
ScriptLib.AutoPoolMonsterTide(prev_context, 2, groupID, {v.extraMonsterPool}, 0, {}, {}, v.extraMonsterPoolParamList)
end
end
end
end
if hasChallenge == 0 then
--报错
ScriptLib.PrintContextLog(prev_context, "## RG_LOG : Not Match The Challenge")
elseif hasChallenge ==1 then
ScriptLib.PrintContextLog(prev_context, "## RG_LOG : Challenge Start")
else
--报错
ScriptLib.PrintContextLog(prev_context, "## RG_LOG : Duplicate Challenge Match")
end
return 0
end
function RogueStopChallenge( context, prev_context, monsterPool, groupID )
ScriptLib.SetGroupTempValue(context, "monsterPool", monsterPool, {})
ScriptLib.SetGroupTempValue(context, "groupID", groupID, {})
--停止怪物潮
ScriptLib.EndPoolMonsterTide(context, groupID, 1)
--停止辅助怪物潮
for i,v in ipairs(challengeList) do
if v.monsterPool == monsterPool and v.extraMonsterPool ~= 0 then
ScriptLib.EndPoolMonsterTide(context, groupID, 2)
end
end
--延时清怪
ScriptLib.InitTimeAxis(context, "delayToClearMonster", {1}, false)
return 0
end
function action_GadgetCreate( context,evt )
ScriptLib.PrintContextLog(context, "## RG_LOG : SerchPoint ID IS "..evt.param2)
if evt.param2 == 70310145 then
ScriptLib.PrintContextLog(context, "## RG_LOG : SerchPoint Set Opiton ")
ScriptLib.SetWorktopOptionsByGroupId(context, MainGroupID, evt.param1, {optionID})
end
return 0
end
function action_SelectOption( context,evt )
if evt.param2 == optionID then
--根据configID不同发送不同的reminder
for i,v in ipairs(PointToReminderList) do
if v.configID == evt.param1 then
ScriptLib.ShowReminder(context, v.reminderID)
ScriptLib.KillEntityByConfigId(context, {config_id = evt.param1})
break
end
end
end
return 0
end
function action_EnterRemainderRegion( context,evt )
local randomReminder = 0
--复制一份remainderList
local TempReminderList = {}
for i,v in ipairs(ReminderList) do
table.insert(TempReminderList, v)
end
--去重
for i=1,10 do
local curReminder = ScriptLib.GetGroupTempValue(context, "duplicateReminder"..i, {})
ScriptLib.PrintContextLog(context, "## RG_LOG : duplicateReminder "..i.." IS "..curReminder)
if curReminder == 0 then
break
end
for i,v in ipairs(TempReminderList) do
if v == curReminder then
table.remove(TempReminderList, i)
break
end
end
end
--取随机reminder
ScriptLib.PrintContextLog(context, "## RG_LOG : TempReminderList Long IS "..#TempReminderList)
if #TempReminderList >= 1 then
randomReminder = math.random(1,#TempReminderList)
end
if randomReminder == 0 then
return 0
end
ScriptLib.PrintContextLog(context, "## RG_LOG : randomReminder IS "..randomReminder)
ScriptLib.ShowReminder(context, TempReminderList[randomReminder])
ScriptLib.PrintContextLog(context, "## RG_LOG : ReminderID IS "..TempReminderList[randomReminder])
--记录已经播过的reminder
for i=1,10 do
if ScriptLib.GetGroupTempValue(context, "duplicateReminder"..i, {}) == 0 then
ScriptLib.SetGroupTempValue(context, "duplicateReminder"..i, TempReminderList[randomReminder], {})
break
end
end
--移除region
ScriptLib.RemoveEntityByConfigId(context, MainGroupID, EntityType.REGION, evt.param1)
return 0
end
function action_all_avatar_die( context,evt )
-- 所有角色死亡
local UidList = ScriptLib.GetSceneUidList(context)
for i,v in ipairs(UidList) do
if ScriptLib.IsPlayerAllAvatarDie(context, v) == false then
return 0
end
end
ScriptLib.CauseDungeonFail(context)
return 0
end
function ClearMonster( context,evt )
local monsterPool = ScriptLib.GetGroupTempValue(context, "monsterPool", {})
local groupID = ScriptLib.GetGroupTempValue(context, "groupID", {})
--停止怪物潮
ScriptLib.ClearPoolMonsterTide(context, groupID, 1)
--停止辅助怪物潮
for i,v in ipairs(challengeList) do
if v.monsterPool == monsterPool and v.extraMonsterPool ~= 0 then
ScriptLib.ClearPoolMonsterTide(context, groupID, 2)
end
end
return 0
end
function LF_Initialize_Group()
for k,v in pairs(extrTriggers.initialtrigger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
return 0
end
LF_Initialize_Group()

View File

@@ -0,0 +1,178 @@
local extrTriggers = {
initialtrigger = {
["Room_Ready"] = { config_id = 8000001, name = "Room_Ready", event= EventType.EVENT_ROGUE_CELL_CONSTRUCT, source = "", condition = "", action = "action_WhenGetRoomType", trigger_count = 0 },
["Start_Challenge"] = { config_id = 8000002, name = "Start_Challenge", event= EventType.EVENT_ROGUE_CELL_STATE_CHANGE, source = "", condition = "", action = "action_CellStateChange", trigger_count = 0 },
["Challenge_Success"] = { config_id = 8000003, name = "Challenge_Success", event= EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_ChallengeSuccess", trigger_count = 0 },
["Challenge_Fail"] = { config_id = 8000004, name = "Challenge_Fail", event= EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_ChallengeFail", trigger_count = 0 },
["Enter_Room"] = { config_id = 8000005, name = "Enter_Room", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterUnBattleRoom", trigger_count = 0 },
["Leave_Room"] = { config_id = 8000006, name = "Leave_Room", event= EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_LeaveRoom", trigger_count = 0 },
--["Monster_Die"] = { config_id = 8000006, name = "Monster_Die", event= EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_monster_die", trigger_count = 0 },
}
}
local MAX_battleroombuff_LV = 6
local MAX_reviveroombuff_LV = 2
--监听cell分配
function action_WhenGetRoomType(context, evt)
--存下当前房间类型
ScriptLib.SetGroupTempValue(context, "RoomType", evt.param2, {})
return 0
end
-- function action_monster_die( context, evt )
-- local UidList = ScriptLib.GetSceneUidList(context)
-- -- 杀怪计数
-- ScriptLib.AddExhibitionAccumulableData(context, UidList[1], "Rogue_KillMonster_Count", 1)
-- return 0
-- end
function action_CellStateChange(context,evt)
local UidList = ScriptLib.GetSceneUidList(context)
--检查当前房间类型
local roomType = ScriptLib.GetGroupTempValue(context, "RoomType", {})
ScriptLib.PrintContextLog(context, "## RG_LOG : roomType == "..roomType)
--存下当前poolID
ScriptLib.SetGroupTempValue(context, "PoolId", evt.param2, {})
--进入挑战状态
if evt.param1 == 1 and (roomType == 3 or roomType ==4) then
--开启挑战
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStartChallenge", {evt.param2,GroupId})
end
--完成回复房间加BUFF
if roomType == 5 and evt.param1 == 3 then
local TeamValue = ScriptLib.GetTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_REVIVEROOMBUFF")
ScriptLib.PrintContextLog(context, "##Rogue LOG : ReviveBUFF TeamValue =="..TeamValue)
--改SGV
if TeamValue >0 and TeamValue <= MAX_reviveroombuff_LV then
ScriptLib.AddTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_REVIVEROOMBUFF", 1)
end
end
--完成战斗房间加BUFF
if (roomType == 3 or roomType == 4) and evt.param1 == 2 then
local TeamValue = ScriptLib.GetTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_BATTLEROOMBUFF")
ScriptLib.PrintContextLog(context, "##Rogue LOG : ReviveBUFF TeamValue =="..TeamValue)
--改SGV
if TeamValue >0 and TeamValue <= MAX_battleroombuff_LV then
ScriptLib.AddTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_BATTLEROOMBUFF", 1)
end
end
return 0
end
function action_EnterUnBattleRoom(context,evt)
-- 玩家进入非战斗房直接开门
local roomType = ScriptLib.GetGroupTempValue(context, "RoomType", {})
if RegionID ~= evt.param1 then
return 0
end
--设置进入房间
ScriptLib.EnterRogueCell(context, GroupId)
if roomType == 3 or roomType ==4 then
--挑战房间加载eyepoint锚点
ScriptLib.SetPlayerEyePoint(context, RegionID, RegionID)
ScriptLib.PrintContextLog(context, "##Rogue LOG : Set EyePoint")
return 0
end
if ScriptLib.GetRogueCellState(context, GroupId) ~= 0 then
return 0
end
--设置为挑战完成
ScriptLib.SetRogueCellState(context, GroupId, 2)
return 0
end
function action_LeaveRoom( context,evt )
local roomType = ScriptLib.GetGroupTempValue(context, "RoomType", {})
if RegionID ~= evt.param1 then
return 0
end
--清楚eyepoint锚点
ScriptLib.ClearPlayerEyePoint(context, RegionID)
return 0
end
function action_ChallengeSuccess(context,evt)
-- 改变房间状态 完成
ScriptLib.SetRogueCellState(context, GroupId, 2)
--清理怪物
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStopChallenge", {ScriptLib.GetGroupTempValue(context, "PoolId", {}),GroupId})
return 0
end
function action_ChallengeFail(context,evt)
-- 改变房间状态 未开始
ScriptLib.SetRogueCellState(context, GroupId, 0)
--清理怪物
ScriptLib.ExecuteGroupLua(context, MainGroupID, "RogueStopChallenge", {ScriptLib.GetGroupTempValue(context, "PoolId", {}),GroupId})
return 0
end
function RemoveBUFF( context )
local UidList = ScriptLib.GetSceneUidList(context)
ScriptLib.AddTeamServerGlobalValue(context, UidList[1], "SGV_ROGUE_SR_AreaNoEnemyAtkSpeedUp", -1)
return 0
end
function LF_Initialize_Group()
for k,v in pairs(extrTriggers.initialtrigger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
return 0
end
LF_Initialize_Group()

View File

@@ -0,0 +1,89 @@
local extrTriggers = {
initialtrigger = {
["Quest_Finish"] = { config_id = 8000001, name = "Quest_Finish", event= EventType.EVENT_QUEST_FINISH, source = "", condition = "", action = "action_questFinish", trigger_count = 0 },
["Gadget_Create"] = { config_id = 8000002, name = "Gadget_Create", event= EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_gadgetCreate", trigger_count = 0 },
["Enter_Region"] = { config_id = 8000003, name = "Enter_Region", event= EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_EnterFirstRegion", trigger_count = 0 },
["Room_Ready"] = { config_id = 8000004, name = "Room_Ready", event= EventType.EVENT_ROGUE_CELL_CONSTRUCT, source = "", condition = "", action = "action_RoomReady", trigger_count = 0 },
}
}
function action_questFinish( context,evt )
if evt.param1 ~= QuestID then
return 0
end
--开门
if RoomDoorConfigID ~= 0 then
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupID, RoomDoorConfigID, 201)
end
--设置引导点
ScriptLib.CreateGadget(context, { config_id = DestinationConfigID })
return 0
end
function action_RoomReady( context,evt )
local uidList = ScriptLib.GetSceneUidList(context)
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
--如果任务完成
if DestinationConfigID ~= 0 and QuestID ~= 0 and ScriptLib.GetQuestState(context, avatar_entity, QuestID) == QuestState.FINISHED then
--设置引导点
ScriptLib.CreateGadget(context, { config_id = DestinationConfigID })
end
return 0
end
function action_gadgetCreate( context,evt )
local uidList = ScriptLib.GetSceneUidList(context)
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, uidList[1])
--ScriptLib.PrintContextLog(context, "## RG_LOG : First Room QuestState is "..ScriptLib.GetQuestState(context, avatar_entity, QuestID))
--如果任务完成
if RoomDoorConfigID ~= 0 and QuestID ~= 0 and ScriptLib.GetQuestState(context, avatar_entity, QuestID) == QuestState.FINISHED then
--开门
ScriptLib.SetGroupGadgetStateByConfigId(context, GroupID, RoomDoorConfigID, 201)
end
return 0
end
function action_EnterFirstRegion( context,evt )
if evt.param1 ~= RegionID then
return 0
end
--设置进入房间
ScriptLib.EnterRogueCell(context, GroupID)
return 0
end
function LF_Initialize_Group()
for k,v in pairs(extrTriggers.initialtrigger) do
table.insert(triggers, v)
table.insert(suites[init_config.suite].triggers, v.name)
end
return 0
end
LF_Initialize_Group()

View File

@@ -0,0 +1,123 @@
--ServerUploadTool Save to [/root/env/data/lua/common/V2_2]
--[[
defs = {
group_id = ,
region_id = ,
seelie_id = ,
selfLoopPointArray = ,
selfLoopRoute = {}
chaseLoopPointArray = ,
chaseLoopRoute = {},
}
]]
function MovePlatform(context)
ScriptLib.SetPlatformPointArray(context, defs.seelie_id, defs.chaseLoopPointArray, GetNextPath(context), { route_type = 0 })
-- ScriptLib.PrintContextLog(context,"@@Lua Loop Seelie: Start_Loop_Move")
return 0
end
function GetNextPath(context)
local path = {}
local nextNode = 0
local nextIndex = 0
local curNode = ScriptLib.GetGroupVariableValue(context,"currentPathNodeID")
-- ScriptLib.PrintContextLog(context,"@@Lua Loop Seelie: Cur_"..curNode)
local len = #defs.chaseLoopRoute
for index,point_id in pairs(defs.chaseLoopRoute) do
if curNode == point_id then
nextIndex = index
end
end
--检查是不是最后一个点,或者当前的点不在循环队列里
if nextIndex == len or nextIndex == 0 then
nextIndex = 1
else
nextIndex = nextIndex + 1
end
nextNode = defs.chaseLoopRoute[nextIndex]
path = {curNode,nextNode}
-- ScriptLib.PrintContextLog(context,"@@Lua Loop Seelie: Cur_"..curNode.."_NEXT_"..nextNode)
return path
end
local Triggers_SelfLoopSeelie = {
[1] = { name = "avatar_near_platform", config_id = 9001201, event = EventType.EVENT_AVATAR_NEAR_PLATFORM, source = "", condition = "", action = "action_avatar_near_platform", trigger_count = 0 },
[2] = { name = "platform_reach",config_id = 9001202, event = EventType.EVENT_PLATFORM_REACH_POINT, source = "", condition = "", action = "action_platform_reach_point", trigger_count = 0 },
[3] = { name = "group_load",config_id = 9001203, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
[4] = { name = "enter_region",config_id = 9001204, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0 },
}
function action_group_load( context, evt )
--初始化这个变量保证接下来是对的
ScriptLib.SetGroupVariableValue(context, "selfLooping", 1)
--这个变量不知道为啥会存档,在这里初始化一下
ScriptLib.SetGroupVariableValue(context,"currentPathNodeID", 1)
--开始自转
ScriptLib.SetPlatformPointArray(context, defs.seelie_id, defs.selfLoopPointArray, defs.selfLoopRoute, { route_type = 2 })
return 0
end
function action_enter_region(context,evt)
--判断是不是自己的Region
if evt.param1 ~= defs.region_id then
return -1
end
--看看是不是在自转状态,如果是就停下来往目标点走,不是就返回
if 1 ~= ScriptLib.GetGroupVariableValue(context, "selfLooping") then
return -1
end
-- ScriptLib.PrintContextLog(context,"@@Lua SelfLoop: Enter_Region")
--取消自转状态
ScriptLib.SetGroupVariableValue(context, "selfLooping", 0)
ScriptLib.SetPlatformPointArray(context, defs.seelie_id, defs.chaseLoopPointArray, {1,2} , { route_type = 0 })
return 0
end
-- 玩家靠近时触发操作
function action_avatar_near_platform(context, evt)
-- ScriptLib.PrintContextLog(context,"@@Lua SelfLoopL:Near Platform condition : ".. evt.param1.." | RouteID = " .. evt.param2 .. " | Point = ".. evt.param3)
--不是自己Group里的飞贼
if defs.seelie_id ~= evt.param1 then
return -1
end
if 0 == ScriptLib.GetGroupVariableValue(context, "selfLooping") then
MovePlatform(context)
end
return 0
end
-- 触发操作
function action_platform_reach_point(context, evt)
ScriptLib.PrintContextLog(context,"@@Lua Loop Seelie:Reach Point_configID_"..evt.param1.."_pointID _"..evt.param3)
--消息不是组内飞贼
if defs.seelie_id ~= evt.param1 then
return -1
end
--如果到的点是出发点,就返回-1
if evt.param3 == ScriptLib.GetGroupVariableValue(context,"currentPathNodeID") then
return -1
end
--到了,让平台停下来
ScriptLib.StopPlatform(context, defs.seelie_id)
--更新现在到的点ID
ScriptLib.SetGroupVariableValue(context,"currentPathNodeID",evt.param3)
-- ScriptLib.PrintContextLog(context,"@@Lua Loop Seelie: Move_End")
return 0
end
--给每个suite塞触发器
function Initialize_SelfLoopSeelie()
for k,v in pairs(Triggers_SelfLoopSeelie) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize_SelfLoopSeelie()

View File

@@ -0,0 +1,44 @@
--[[
--V2_2/ShowDecals
defs = {
time_axis_decal = {0.2,0.4,0.6,0.8,1}, --decal出现的时间不用改
decalsList = {}--decal出现的configID按顺序填
}
]]--
local Triggers_ShowDecals = {
[1] = { name = "variable_change",config_id = 9000801, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change", trigger_count = 0 },
[2] = { name = "time_axis_pass", config_id = 9000802, event = EventType.EVENT_TIME_AXIS_PASS, source = "",condition = "",action = "action_time_axis_pass",trigger_count= 0},
}
--group的状态发生变化时开始按顺序刷Decal
function action_variable_change( context,evt )
local var_name = evt.source_name
local value_new = evt.param1
if var_name == "isNeedNotify" then
ScriptLib.InitTimeAxis(context, "decals", defs.time_axis_decal, false)
end
return 0
end
function action_time_axis_pass(context, evt)
if evt.source_name == "decals" then
ScriptLib.CreateGadget(context, { config_id = defs.decalsList[evt.param1] })
if evt.param1 == #defs.time_axis_decal then
ScriptLib.EndTimeAxis(context, "decals")
end
end
return 0
end
function Initialize_ShowDecals()
for k,v in pairs(Triggers_ShowDecals) do
table.insert(triggers, v)
for k_,v_ in pairs(suites) do
table.insert(v_.triggers, v.name)
end
end
return 0
end
Initialize_ShowDecals()

View File

@@ -0,0 +1,12 @@
--雷鸟小像刷新出来的Group向父Group发送消息
--[[
defs = {
index = ,--在子Group里的位置
father_group_id = , --父GroupID
self_group_id = ,--自己的GroupID
remind_gadget = 70310098,--通知Gadgetid
}
]]
--在完成的时候将Group的Variable变为201

View File

@@ -0,0 +1,175 @@
--这个是雷鸟小像的主Group用来管理子Group的刷新
--[[
defs = {
group_id = 111101220, --当前Group的ID
isRandom = false,--定义这个组是否会随机取
child_group = {[111101219] = 2}, --groupid和需要切到的SuiteID一一对应
notifyQuest = true, --修改Group里一个变量
hasChild = false, --表示是否有子Grouptrue表示有
selfSuiteId = 2, --需要切的自己的suite
hasMultiStatues = false, --是否有多个雷鸟雕像
statuesMap =
{
[config_id] = suite_id, --雷鸟雕像和需要切出来的Suite的对应表
},
}
]]
--雷鸟小像执行的SLC调用此SLC来刷新对应的Group
--子Group在场上处于空Suite的隐藏状态在收到SLC时发消息给子Group切换suite
--每个子Group配置一个变量Finished
local Triggers_TBird = {
[1] = { name = "group_load", config_id = 9000101, event = EventType.EVENT_GROUP_LOAD, source = "",condition = "",action = "action_group_load",trigger_count= 0},
[2] = { name = "group_will_unload", config_id = 9000102, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "",condition = "",action = "action_group_will_unload",trigger_count= 0},
}
--按羽毛时发过来的SLC根据DEFS内的配置进行客制化的操作
function SLC_CallTsurumiGroup(context)
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : Receive_SLC")
--拿到发消息的雕像的id
local config_id = ScriptLib.GetGadgetConfigId(context, { gadget_eid = context.source_entity_id })
--如果需要通知任务就改Group里的变量1的时候就不再改变
if defs.notifyQuest == true then
if 0 ~= ScriptLib.GetGroupVariableValueByGroup(context, "Notified", defs.group_id) then
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : Has_Notified")
return -1
end
--改这个变量然后LD监听
ScriptLib.SetGroupVariableValue(context, "Notified", 1)
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : Set_Notified")
end
--走到刷新Suite
--检查自己有没有子Group有就走刷新逻辑
if defs.hasChild == true then
GotoRandomSuiteByDay(context)
else
--刷自己的子GroupSuite
if defs.hasMultiStatues == false then
ScriptLib.AddExtraGroupSuite(context,defs.group_id, defs.selfSuiteId)
else
--group里有多个雷鸟雕像刷雕像对应的Suite
for cfg_id,suite_id in pairs(defs.statuesMap) do
if cfg_id == config_id then
ScriptLib.AddExtraGroupSuite(context,defs.group_id, suite_id)
return 0
end
end
end
end
return 0
end
--需要随机一个Suite的时候走这个
function GotoRandomSuiteByDay( context )
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : Start_Goto_Suite")
--拿到Group里的标记变量确认当前没有刷新Group或者切换Suite
if 0 ~= ScriptLib.GetGroupTempValue(context, "HasRefreshed", {}) then
return -1
end
local child_unfinshed = {}
--这里写一个For循环拿到子group的状态
for child_id,suite_id in pairs(defs.child_group) do
--把Group不是完成状态的子Group加进去
local child_state = ScriptLib.GetGroupVariableValueByGroup(context, "Finished", child_id)
--完成的Group会将自己的值置为1
if child_state ~= 1 then
table.insert(child_unfinshed, child_id)
end
end
--如果子Group是空的那么就表示全部完成直接返回
if #child_unfinshed == 0 then
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : NULL_CHILD")
return -1
end
--计算种子的奇偶性来判断是否刷新,可能需要弹消息
--这里拿到当天更新的随机种子通过种子对Group取余获得今天刷新的Group
--每天只会刷新一个Group那么需要一个东西来记录今天已经有Group完成过了
--每天的随机种子同步,当种子是偶数时代表今天的未完成可以刷新,当种子是奇数时表示今天的已经完成了,不再刷新
local seed = ScriptLib.GetGroupVariableValue(context, "Seed")
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : SEED_"..seed)
if seed%2 ~= 0 then
return -1
end
--拿到未完成的Group长度
local length = #child_unfinshed
--拿到今天刷新的Group的ID
local index = seed%length + 1
local child_group_id = child_unfinshed[index]
local child_suite_id = defs.child_group[child_group_id]
--[[
local isStoneSeq = ScriptLib.GetGroupVariableValueByGroup(context, "TsurumiStone", child_group_id)
local isPillarMove = ScriptLib.GetGroupVariableValueByGroup(context, "isPillarMove", child_group_id)
--如果不是符文石组
if 0 == isStoneSeq then
--拿到今天需要刷新的Group给这个Group发一个消息来切换Group的Suite
ScriptLib.AddExtraGroupSuite(context,child_group_id,child_suite_id)
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : CHILD_GROUP_"..child_group_id.."_SUITE_"..child_suite_id)
else
if 0 == isPillarMove then
--切子Group的变量来控制刷新
ScriptLib.SetGroupVariableValueByGroup(context, "TsurumiStone", isStoneSeq+1, child_group_id)
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : CHILD_GROUP_STONE_"..child_group_id.."_SUITE_")
else
--切子Group的变量来控制刷新
ScriptLib.SetGroupVariableValueByGroup(context, "isPillarMove", isStoneSeq+1, child_group_id)
ScriptLib.PrintContextLog(context, "@@ LUA_Tsurumi : CHILD_GROUP_STONE_"..child_group_id.."_SUITE_")
end
end
]]--
local isNeedNotify = ScriptLib.GetGroupVariableValueByGroup(context, "isNeedNotify", child_group_id)
--如果是不需要通知的就直接切Suite2
if isNeedNotify == 0 then
ScriptLib.AddExtraGroupSuite(context,child_group_id,child_suite_id)
else
--如果是需要通知的,就改变量发消息
ScriptLib.SetGroupVariableValueByGroup(context, "isNeedNotify", isNeedNotify+1, child_group_id)
end
--标记现在已经切过Suite
ScriptLib.SetGroupTempValue(context, "HasRefreshed", 1, {})
return 0
end
--Group每天自然刷新获取一个固定的随机数
function action_group_load( context, evt )
--Group是否是自然刷新自然刷新则重置随机数
--在Group加载时标记一个临时变量保证不会重复切换子Group的Suite
ScriptLib.SetGroupTempValue(context, "HasRefreshed", 0, {})
ScriptLib.SetGroupVariableValue(context, "Notified", 0)
--如果不是自然刷新就直接返回,不更新今天的种子
if evt.param1 ~= 1 then
return -1
end
--每天自然刷新的时候更新Group里的随机数保证每天刷新的Group是同一个这是一个Persistent的GroupVariable
--自然刷新的随机数是一个整数偶数
local GenerateSeed = os.time()
if GenerateSeed%2 ~=0 then
GenerateSeed = GenerateSeed + 1
end
--更新今天的种子
ScriptLib.SetGroupVariableValue(context, "Seed", GenerateSeed)
return 0
end
function action_group_will_unload(context, evt)
--Group在卸载的时候重置任务通知标记
ScriptLib.SetGroupVariableValue(context, "Notified", 0)
--Group在卸载的时候重置标记
ScriptLib.SetGroupTempValue(context, "HasRefreshed", 0, {})
return 0
end
--给每个suite塞触发器
function Initialize_TB()
for k,v in pairs(Triggers_TBird) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize_TB()

View File

@@ -0,0 +1,127 @@
--[[
defs = {
group_id = ,
Lightup_Seq = {1,2,3,4,5}
}
]]
local Tirgger_Stone_Seq = {
[1] = { name = "group_load", config_id = 9000301, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
[2] = { name = "state_change", config_id = 9000302, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadget_state_change", trigger_count = 0 },
[3] = { name = "variable_change", config_id = 9000303, event = EventType.EVENT_VARIABLE_CHANGE, source = "", condition = "", action = "action_variable_change", trigger_count = 0 },
}
--在GadgetStateChange的时候记录状态并且计数+1
function action_gadget_state_change( context, evt )
local config_id = evt.param2
local cur_state = evt.param1
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : State_Change_"..cur_state)
if cur_state ~= 201 then
return -1
end
--鉴定是不是需要点亮的石头,不是就返回
local isInSuite = 0
for k,stone_cfg in pairs(defs.Lightup_Seq) do
if stone_cfg == config_id then
isInSuite = isInSuite + 1
end
end
if isInSuite == 0 then
return -1
end
--在重置过程中不会触发后续的操作
if 0 ~= ScriptLib.GetGroupTempValue(context, "Reseting", {}) then
return -1
end
--找到当前点亮的是不是对应的
local cur_seq = ScriptLib.GetGroupTempValue(context, "LightedIndex", {})
--记录现在点亮的符文石
ScriptLib.SetGroupTempValue(context, "Lighted"..config_id, cur_seq, {})
ScriptLib.SetGroupTempValue(context, "LightedIndex", cur_seq+1, {})
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Current_Seq_"..cur_seq)
--当前是最后一个点亮的就开始校验
if #defs.Lightup_Seq == cur_seq then
--按顺序校验
local rightCounts = 0
for k,cfg in pairs(defs.Lightup_Seq) do
if k == ScriptLib.GetGroupTempValue(context, "Lighted"..cfg, {}) then
rightCounts = rightCounts + 1
end
end
--成功
if rightCounts == #defs.Lightup_Seq then
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
--失败
else
--没有按顺序点亮
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Reset")
ScriptLib.SetGroupTempValue(context, "Reseting", 1, {})
for k,cfg in pairs(defs.Lightup_Seq) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg, 202)
end
--记录失败次数
local failCount = ScriptLib.GetGroupVariableValue(context, "FailCount")
ScriptLib.SetGroupVariableValue(context, "FailCount", failCount + 1)
--重置记录变量
ScriptLib.SetGroupTempValue(context, "LightedIndex", 1, {})
ScriptLib.SetGroupTempValue(context, "Reseting", 0, {})
end
end
return 0
end
--Group加载的时候重置临时记录用的变量
function action_group_load( context,evt )
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Init")
ScriptLib.SetGroupTempValue(context, "LightedIndex", 1, {})
ScriptLib.SetGroupTempValue(context, "Reseting", 0, {})
if 0 ~= ScriptLib.GetGroupVariableValue(context, "Finished") then
for k,cfg in pairs(defs.Lightup_Seq) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg, 201)
end
return 0
end
if 0 ~= ScriptLib.GetGroupVariableValue(context, "isQuestNotify") then
for k,cfg_id in pairs(defs.Lightup_Seq) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 202)
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Can be hit")
end
end
return 0
end
--变量发生变化的时候切换组内所有符文石状态
function action_variable_change( context,evt )
local var_name = evt.source_name
local value_new = evt.param1
if var_name == "isNeedNotify" then
for k,cfg_id in pairs(defs.Lightup_Seq) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 202)
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Can be hit")
end
end
if var_name == "isQuestNotify" then
for k,cfg_id in pairs(defs.Lightup_Seq) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 202)
ScriptLib.PrintContextLog(context, "@@ LUA_StoneSeq : Can be hit")
end
end
return 0
end
--加触发器
function Initialize_TSS()
for k,v in pairs(Tirgger_Stone_Seq) do
table.insert(triggers, v)
for k_,v_ in pairs(suites) do
table.insert(v_.triggers, v.name)
end
end
return 0
end
Initialize_TSS()

View File

@@ -0,0 +1,108 @@
--鹤观的火把解密Require
--[[
defs = {
group_id = 111101219,
torch_list = {219001,219002,219003,219004,219005}, --这里填所有的火把configid
torch_solution = {219001,219003,219005}, --这里填解密的正确解的火把id
chest_id = 219006,--刷新的宝箱configId
}
]]
local Triggers_Start = {
[1] = { name = "gadget_state_change", config_id = 9000001, event = EventType.EVENT_GADGET_STATE_CHANGE, source = "",condition = "",action = "action_gadget_state_change",trigger_count= 0},
[2] = { name = "group_load", config_id = 9000002, event = EventType.EVENT_GROUP_LOAD, source = "",condition = "",action = "action_group_load",trigger_count= 0},
}
--火把点亮状态改变
function action_gadget_state_change( context, evt )
local config_id = evt.param2
local cur_state = evt.param1
--检查是不是在重置整个火把组,是则不处理
if 0 ~= ScriptLib.GetGroupTempValue(context, "Reseting",{}) then
return -1
end
--只在火把点亮时检查
if cur_state ~= 201 then
return -1
end
--完成了的话就不再处理
if 0 ~= ScriptLib.GetGroupVariableValue(context, "Finished") then
return 0
end
--检查所有火把的状态,如果已经是无解状态,则重置
local lightedTorch = {}
--检查所有火把的状态,并放到一个表里
for key,cfg_id in pairs(defs.torch_list) do
local torch_state = ScriptLib.GetGadgetStateByConfigId(context, defs.group_id, cfg_id)
if torch_state == 201 then
table.insert(lightedTorch, cfg_id)
end
end
--点燃的火把数量等于正确解数量时进行一次校验
if #lightedTorch == #defs.torch_solution then
local right_count = 0
for k_l = 1,#defs.torch_solution do
for k_s= 1,#lightedTorch do
if defs.torch_solution[k_l] == lightedTorch[k_s] then
right_count = right_count + 1
end
end
end
if right_count == #defs.torch_solution then
--成功刷新宝箱,将火把置为点燃状态
ScriptLib.SetGroupTempValue(context, "Reseting", 1, {})
for key,cfg_id in pairs(defs.torch_list) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 203)
end
ScriptLib.CreateGadget(context, { config_id = defs.chest_id })
ScriptLib.SetGroupVariableValue(context, "Finished", 1)
ScriptLib.SetGroupTempValue(context, "Reseting", 0, {})
end
end
--火把全部点完进行重置
if #lightedTorch > #defs.torch_solution then
--失败重置所有火把状态
--标记现在是重置状态不会走到gadgetStateChange里
if #lightedTorch >= #defs.torch_list then
ScriptLib.SetGroupTempValue(context, "Reseting", 1, {})
for key,cfg_id in pairs(defs.torch_list) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 201)
end
for key,cfg_id in pairs(defs.torch_list) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 0)
end
ScriptLib.SetGroupTempValue(context, "Reseting", 0, {})
end
end
return 0
end
function action_group_load( context,evt )
--在GroupLoad的时候初始化一下临时变量
ScriptLib.SetGroupTempValue(context, "Reseting", 0, {})
if 0 ~= ScriptLib.GetGroupVariableValue(context, "Finished") then
--完成了就把火把全切到点亮状态
for key,cfg_id in pairs(defs.torch_list) do
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, cfg_id, 201)
end
return 0
end
return 0
end
--给每个suite塞触发器
function Initialize()
for k,v in pairs(Triggers_Start) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
return 0
end
Initialize()