添加配置表

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,218 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3兽境之王
处理战斗触发和重置 天气开关 EyePoint圈
--怪物脱战时会在一系列表演之后发一个SLC_BossBattleResetgroup重置
]]
--[[
local defs = {
--开启怪物用的特效gadget
gadget_starter = 275001,
--开启怪物用的region
start_region = 275003,
--战斗开启后加载哪些suit
init_on_battle = {2},
--场地范围半径
battle_radius = 40,
--场地范围Region/中心点
battle_regionID = 275004,
--优化圈
optimize_regionID = 275005,
--怪物configID
monster_configID = 275002,
--groupID
group_id = 133225275,
--战斗天气ID
weather_ID = 3321,
}
]]
local extraTriggers={
--{ config_id = 8000001,name = "Enter_StartRegion", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_Enter_StartRegion", trigger_count = 0 , forbid_guest = false },
{ config_id = 8000002,name = "Leave_BattleRegion", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_Leave_BattleRegion", trigger_count = 0, forbid_guest = false },
{ config_id = 8000003,name = "Enter_BattleRegion", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_Enter_BattleRegion", trigger_count = 0 , forbid_guest = false },
{ config_id = 8000004,name = "Boss_Die", event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "condition_Boss_Die", action = "action_Boss_Die", trigger_count = 0 },
{ config_id = 8000005,name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_Group_Will_Unload", trigger_count = 0 },
{ config_id = 8000006,name = "Boss_In_Battle", event = EventType.EVENT_MONSTER_BATTLE, source = "", condition = "", action = "action_Boss_In_Battle", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
--挑战状态标记
table.insert(variables,{ config_id=50000001,name = "challenge_state", value = 0})
table.insert(variables,{ config_id=50000002,name = "boss_exist", value = 1 })
end
function condition_Boss_Die(context, evt)
if evt.param1 ~= defs.monster_configID then
return false
end
return true
end
function action_Group_Will_Unload(context, evt)
ScriptLib.PrintContextLog(context, "[Boss_Hound] Group Will Unload in Battle. Reset Weather and Optimize Suite.")
--ScriptLib.SetWeatherAreaState(context, defs.weather_ID, 0)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
LF_ResetBattle(context)
end
return 0
end
function action_Boss_Die(context, evt)
ScriptLib.SetGroupVariableValue(context, "challenge_state", 2)
ScriptLib.SetWeatherAreaState(context, defs.weather_ID, 0)
--移除优化圈
for k,v in pairs(defs.init_on_battle) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
ScriptLib.SetGroupVariableValue(context, "boss_exist", 0)
return 0
end
--处理玩家出战斗圈
function action_Leave_BattleRegion(context, evt)
if evt.param1 ~= defs.battle_regionID then
return 0
end
ScriptLib.ClearPlayerEyePoint(context, defs.optimize_regionID)
ScriptLib.PrintContextLog(context, "[Boss_Hound] Player leave region. uid@"..context.uid)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
--local count = ScriptLib.GetRegionEntityCount(context, { region_eid = eid, entity_type = EntityType.AVATAR })
--尝试转移config_id的authority, 当uid和config_id的authority不一致时尝试转移到region_config_id里的玩家。
local new_auth = ScriptLib.TryReallocateEntityAuthority(context, context.uid, defs.monster_configID, evt.param1)
--[[if count <= 0 then
ScriptLib.PrintContextLog(context, "[Boss_Hound] No Player in Region. Reset Battle.")
LF_ResetBattle(context)
end]]
end
return 0
end
--战斗期间入圈处理EyePoint
function action_Enter_BattleRegion(context, evt)
if evt.param1 ~= defs.battle_regionID then
return 0
end
ScriptLib.SetPlayerEyePoint(context, defs.optimize_regionID, defs.battle_regionID)
return 0
end
--[[function action_Enter_StartRegion(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 0 or
evt.param1 ~= defs.start_region then
return 0
end
LF_StartBattle(context)
return 0
end]]
--触发战斗
function action_Boss_In_Battle(context, evt)
if evt.param1 ~= defs.monster_configID then
return 0
end
ScriptLib.PrintContextLog(context, "[Boss_Hound] Start Battle.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
--ScriptLib.CreateMonster(context, { config_id = defs.monster_configID, delay_time = 0 })
--ScriptLib.KillGroupEntity(context,{ group_id = defs.group_id, gadgets = {defs.gadget_starter}})
ScriptLib.SetWeatherAreaState(context, defs.weather_ID, 1)
for k,v in pairs(defs.init_on_battle) do
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
ScriptLib.PrintContextLog(context, "[Boss_Hound] Add Suit @"..v)
end
return 0
end
function LF_ResetBattle(context)
ScriptLib.PrintContextLog(context, "[Boss_Hound] Reset Battle.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetWeatherAreaState(context, defs.weather_ID, 0)
--ScriptLib.RefreshGroup(context, {group_id = defs.group_id, suite = 1})
for k,v in pairs(defs.init_on_battle) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
--ScriptLib.CreateGadget(context, { config_id = defs.gadget_starter})
--需要重新生成Boss
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.MONSTER, defs.monster_configID)
ScriptLib.CreateMonster(context, { config_id = defs.monster_configID, delay_time = 0 })
return 0
end
--返回场内(battle_radius) 的一个活的玩家uid没找到的话返回0
function LF_Get_BattleField_AlivePlayer(context)
local uid_list = ScriptLib.GetSceneUidList(context)
for i,v in ipairs(uid_list) do
if LF_Get_Distance(context, v, defs.battle_regionID) < defs.battle_radius then
if ScriptLib.IsPlayerAllAvatarDie(context, v) == false then
ScriptLib.PrintContextLog(context, "[Boss_Hound] Get_BattleField_AlivePlayer. UID@"..v)
return v
end
end
end
return 0
end
function LF_Get_Distance(context, uid, config_id)
local eid = ScriptLib.GetAvatarEntityIdByUid(context, uid)
local pos1 = ScriptLib.GetPosByEntityId(context, eid)
local pos2 = regions[config_id].pos
local X = pos1.x - pos2.x
local Y = pos1.y - pos2.y
local Z = pos1.z - pos2.z
return math.sqrt(X*X+Y*Y+Z*Z)
end
--Boss脱战时调用
function SLC_BossBattleReset(context)
--[[
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
ScriptLib.PrintContextLog(context, "[Boss_Hound] #WARN# Got SLC_BossBattleReset, while challenge_state is 0 (Not in Battle). Tell TD.")
return 0
end]]
--planA: 接到直接重置
LF_ResetBattle(context)
--planB: 尝试找场内玩家转移auth。 找不到就ResetBattle
--[[local target_uid = LF_Get_BattleField_AlivePlayer(context)
if target_uid ~= 0 then
ScriptLib.PrintContextLog(context, "[Boss_Hound] Got SLC_BossBattleReset, then found alive player@"..target_uid.." in field, trying Refresh Authority.")
ScriptLib.ForceRefreshAuthorityByConfigId(context, defs.monster_configID, target_uid)
else
ScriptLib.PrintContextLog(context, "[Boss_Hound] No alive player in battle field. Reset Battle.")
LF_ResetBattle(context)
end]]
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,58 @@
--[[
2.3导能原盘-物件增幅装置
]]
--[[
local defs = {
}
]]
local extraTriggers={
{ config_id = 8000001,name = "ANY_MONSTER_LIVE", event = EventType.EVENT_ANY_MONSTER_LIVE, source = "", condition = "", action = "action_Set_SGV", trigger_count = 0 },
{ config_id = 8000002, name = "EVENT_ANY_GADGET_DIE", event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_Refresh_SGV", trigger_count = 0 },
{ config_id = 8000003, name = "EVENT_GADGET_CREATE", event = EventType.EVENT_GADGET_CREATE, source = "", condition = "", action = "action_Refresh_SGV", trigger_count = 0 },
{ config_id = 8000004, name = "EVENT_GROUP_LOAD", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_EVENT_GROUP_LOAD", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
end
function action_EVENT_GROUP_LOAD(context,evt)
for i=1,#monsters do
ScriptLib.CreateMonsterWithGlobalValue(context, monsters[i].config_id,{["SGV_Energy_Level"] = 0})
end
return 0
end
function action_Set_SGV(context,evt)
local powerGadgetNum=0
--根据group内残留的增幅器数量来给怪物上SGV
powerGadgetNum=ScriptLib.CheckRemainGadgetCountByGroupId(context, {group_id = defs.group_id,gadget_id={70350201}})
ScriptLib.SetEntityServerGlobalValueByConfigId(context, evt.param1, "SGV_Energy_Level", powerGadgetNum)
return 0
end
function action_Refresh_SGV(context,evt)
--物件数量发生变动时修改group内怪物的层数
local powerGadgetNum=0
--根据group内残留的增幅器数量来给怪物上SGV
powerGadgetNum=ScriptLib.CheckRemainGadgetCountByGroupId(context, {group_id = defs.group_id,gadget_id={70350201}})
local monsterTable=ScriptLib.GetGroupAliveMonsterList(context,defs.group_id)
if monsterTable~=nil and monsterTable~=-1 then
for i=1,#monsterTable do
ScriptLib.SetEntityServerGlobalValueByConfigId(context, monsterTable[i], "SGV_Energy_Level", powerGadgetNum)
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,130 @@
--[[
2.3导能原盘-物件增幅装置
地城版
--场上每存在一个被激怒的漂浮灵全体怪物的攻击力上升X%
只有激怒的漂浮灵才加buff用SLC通知Buff层数增减
SGV_EnergyDisk_Level 当前Buff层数
SGV_EnergyDisk_RefreshBuff 通知场地中心物件刷Buff
]]
--[[
local defs = {
buff_gadget = ,
}
]]
local extraTriggers={
--{ config_id = 8000001,name = "MONSTER_LIVE", event = EventType.EVENT_POOL_MONSTER_TIDE_CREATE, source = "", condition = "", action = "action_Monster_Tide_Create", trigger_count = 0 },
--{ config_id = 8000002,name = "MONSTER_LIVE", event = EventType.EVENT_ANY_MONSTER_LIVE, source = "", condition = "", action = "action_Monster_Tide_Create", trigger_count = 0 },
--{ config_id = 8000002,name = "MONSTER_DIE", event = EventType.EVENT_POOL_MONSTER_TIDE_DIE, source = "", condition = "", action = "action_Monster_Tide_Die", trigger_count = 0 },
{ config_id = 8000003,name = "Group_Load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_Group_Load", trigger_count = 0 },
{ config_id = 8000004, name = "SELECT_OPTION", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_EVENT_SELECT_OPTION", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
table.insert(variables,{ config_id=50000001,name = "buff_level", value = 0})
end
function action_Group_Load(context, evt)
local cur_level = ScriptLib.GetGroupVariableValue(context,"buff_level")
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_Level", cur_level)
--ScriptLib.SetGroupTempValue(context, "step", 0, {})
return 0
end
function action_EVENT_SELECT_OPTION(context,evt)
if 1001 ~= evt.param1 then
return 0
end
if 175 ~= evt.param2 then
return 0
end
--重置等级
ScriptLib.SetGroupVariableValue(context, "buff_level", 0)
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_Level", 0)
return 0
end
--改变刷Buff物件上的Buff等级
--param1变化值
function SLC_Change_EnhanceLevel(context, param1)
ScriptLib.PrintContextLog(context, "[EnergyDisk] Get SLC_Change_EnhanceLevel. param1@"..param1.." from@"..context.source_entity_id)
if defs.buff_gadget == nil then
return 0
end
--先将中央物件置为可触发
--LF_DisTrigger_BuffGadget(context)
local cur_level = ScriptLib.GetGroupVariableValue(context,"buff_level")
local tmp = cur_level + param1
if tmp < 0 or tmp > 4 then
ScriptLib.PrintContextLog(context, "[EnergyDisk] #WARN# Get SLC at cur_level@"..cur_level.." change value@"..param1)
return 0
else
--设置等级
ScriptLib.SetGroupVariableValue(context, "buff_level", tmp)
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_Level", tmp)
--通知刷一次buff (怪物侧会监听,此处不用)
--LF_Trigger_BuffGadget(context)
end
return 0
end
--[[
function action_Monster_Tide_Create(context, evt)
ScriptLib.PrintContextLog(context, "[EnergyDisk] Monster_Tide_Create. Index@"..evt.source_eid)
if defs.buff_gadget == nil then
return 0
end
--if evt.source_eid == 2 then
--如果招出来是怪,则触发一次中央物件
LF_Trigger_BuffGadget(context)
--elseif evt.source_eid == 1 then
--如果招出来是漂浮灵,则将中央物件置为可触发
--LF_DisTrigger_BuffGadget(context)
--end
return 0
end
function action_Monster_Tide_Die(context, evt)
if defs.buff_gadget == nil then
return 0
end
if evt.source_eid == 2 then
--如果是怪,则触发一次中央物件
LF_Trigger_BuffGadget(context)
end
return 0
end
]]
function LF_Trigger_BuffGadget(context)
if ScriptLib.GetGroupTempValue(context, "step", {}) == 0 then
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_RefreshBuff", 1)
ScriptLib.SetGroupTempValue(context, "step", 1, {})
else
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_RefreshBuff", 0)
ScriptLib.SetGroupTempValue(context, "step", 0, {})
end
return 0
end
--[[function LF_DisTrigger_BuffGadget(context)
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.buff_gadget, "SGV_EnergyDisk_RefreshBuff", 0)
return 0
end]]
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,300 @@
--[[
2.3狗子活动 救小动物战斗关
]]
--[[
local defs = {
group_id = ,
--触发开始/接续挑战的region
start_region_id = ,
--玩法限定region出圈触发暂离
level_region_id = ,
--挑战id
challenge_id = 2003001,
-- 挑战index
ChallengeIndex = 1002,
--目标开笼子数
taget_score = 5,
--迭代:杀到这个数才能开笼子
Monster_Count = 8,
--目标笼子
--[笼子configID] = {老狗configID, 新狗configID}
target_id = {
[笼子configID] = {老狗configID, 新狗configID}
}
}
]]
local extraTriggers={
{ config_id = 8000001,name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0 },
--挑战计数trigger
{ config_id = 8000002, name = "Variable_Change", event = EventType.EVENT_VARIABLE_CHANGE, source = "saved_progress", condition = "", action = "", trigger_count = 0 ,tag = "1000"},
{ config_id = 8000003,name = "LeaveRegion_Region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", trigger_count = 0 },
{ config_id = 8000004,name = "GadgetState_Change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_gadgetstate_change", trigger_count = 0 },
{ config_id = 8000005,name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count = 0 },
{ config_id = 8000006, name = "ANY_MONSTER_DIE", event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_ANY_MONSTER_DIE", trigger_count = 0 },
{ config_id = 8000007, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_Will_Unload", trigger_count = 0},
{ config_id = 8000008, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_Challenge_Fail", trigger_count = 0},
{ config_id = 8000009, name = "Group_Load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_Group_Load", trigger_count = 0},
--{ config_id = 8000006, name = "Animal_Time_Axis", event= EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
--活动任务中,第一个潜行、战斗营地的首次挑战是由任务通知开启的
{ config_id = 8100001, name = "Quest_Notify_Challenge", event= EventType.EVENT_QUEST_FINISH, source = "", condition = "", action = "action_quest_notify", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
--进度保存
table.insert(variables,{ config_id=50000001,name = "saved_progress", value = 0, no_refresh =true})
--杀怪计数
table.insert(variables,{ config_id=50000002,name = "kill_count", value = 0})
--挑战状态标记
table.insert(variables,{ config_id=50000003,name = "challenge_state", value = 0})
end
function action_ANY_MONSTER_DIE(context, evt)
--排除狗 其他都是要杀的怪
local monster_id = monsters[evt.param1].monster_id
if monster_id == 28020403 then
return 0
end
ScriptLib.ChangeGroupVariableValue(context, "kill_count", 1)
--检查杀够数量了没
if defs.Monster_Count ~= nil then
local kill_count = ScriptLib.GetGroupVariableValue(context, "kill_count")
if kill_count >= defs.Monster_Count then
LF_EnableCageInteract(context)
end
end
return 0
end
function LF_DisableCageInteract(context)
for k, v in pairs(defs.target_id) do
--客户端交互
ScriptLib.SetGadgetStateByConfigId(context, k, 903)
--服务器交互
ScriptLib.SetGadgetEnableInteract(context, defs.group_id, k, false)
end
return 0
end
function LF_EnableCageInteract(context)
for k, v in pairs(defs.target_id) do
--服务器交互
ScriptLib.SetGadgetEnableInteract(context, defs.group_id, k, true)
--客户端交互
ScriptLib.SetGadgetStateByConfigId(context, k, 0)
end
return 0
end
function action_quest_notify(context,evt)
ScriptLib.PrintContextLog(context, "[HachiBattle] Quest notify Challenge UID@"..context.uid)
--检查是不是起点区域
if defs.start_region_id ~= evt.param1 then
return -1
end
--检查联机
if true == ScriptLib.CheckIsInMpMode(context) then
ScriptLib.ShowReminder(context, 400053)
return -1
end
--检查挑战状态
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 0 then
return -1
else
--处理开始挑战
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
ScriptLib.SetGroupTempValue(context, "player_uid", context.uid, {} )
local start_process = ScriptLib.GetGroupVariableValue(context,"saved_progress")
ScriptLib.PrintContextLog(context, "[HachiBattle] Start Challenge. ChallengeID@ "..defs.challenge_id.." TargetCages@".. defs.taget_score.." CurrentCages@"..start_process)
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, defs.ChallengeIndex, defs.challenge_id, {3, 1000, defs.taget_score, 1, start_process})
end
return 0
end
function action_gadgetstate_change(context, evt)
if evt.param1 ~= 201 then
return 0
end
--GadgetLua上已经有这个判断了 做双保险
if ScriptLib.CheckIsInMpMode(context) == true then
ScriptLib.PrintContextLog(context, "[HachiBattle] Is in MP mode, refuse state cahnge.")
ScriptLib.SetGadgetStateByConfigId(context, evt.param2, 0)
--将其状态置回去后,还需设为可交互
ScriptLib.SetGadgetEnableInteract(context, defs.group_id, evt.param2, true)
return 0
end
local result = CheckTableAndReturnValue(context, evt.param2, defs.target_id)
if result ~= 0 then
--ScriptLib.PrintContextLog(context, "[HachiSneak] Cage Opend! configID@"..evt.param2)
ScriptLib.ChangeGroupVariableValue(context,"saved_progress",1)
local player_uid = ScriptLib.GetGroupTempValue(context, "player_uid", {})
ScriptLib.AddExhibitionAccumulableData(context, player_uid, "Activity_Hachi_Group_"..defs.group_id, 1)
-- 移除老狗
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.MONSTER, result[1])
-- 刷出新狗
if 0 ~= ScriptLib.CreateMonster(context, { config_id = result[2], delay_time = 0 }) then
ScriptLib.PrintContextLog(context, "[HachiBattle] #WARN# Create NewDog Faild targetID@"..result[2])
return -1
end
--以新狗的configID为Key创建时间轴
--ScriptLib.InitTimeAxis(context, tostring(result[2]), {6}, false)
end
return 0
end
--狗消失
function action_time_axis_pass(context, evt)
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.MONSTER, tonumber(evt.source_name))
return 0
end
function action_leave_region(context,evt)
if defs.level_region_id ~= evt.param1 then
return -1
end
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return -1
end
--暂离挑战
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
--ScriptLib.StopChallenge(context,defs.challenge_id,1)
ScriptLib.PauseChallenge(context, defs.ChallengeIndex)
return 0
end
function action_enter_region(context,evt)
-- 通知groupid为220000037中,configid为的怪物入战或者脱战set为1是入战为0是脱战
-- ScriptLib.SetMonsterBattleByGroup(context, 598013, defs.group_id)
--检查是不是起点区域
if defs.start_region_id ~= evt.param1 then
return 0
end
--检查联机
if true == ScriptLib.CheckIsInMpMode(context) then
ScriptLib.ShowReminder(context, 400053)
return 0
end
--检查挑战状态
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 0 then
return 0
else
--处理开始挑战
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
--禁用笼子交互(不在这处理了LD直接配初始状态903)
--LF_DisableCageInteract(context)
ScriptLib.SetGroupTempValue(context, "player_uid", context.uid, {} )
local start_process = ScriptLib.GetGroupVariableValue(context,"saved_progress")
ScriptLib.PrintContextLog(context, "[HachiBattle] Start Challenge. ChallengeID@ "..defs.challenge_id.." TargetCages@".. defs.taget_score.." CurrentCages@"..start_process)
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, defs.ChallengeIndex, defs.challenge_id, {3, 1000, defs.taget_score, 1, start_process})
--重新进圈开挑战时,再检查一次杀怪数量
local kill_count = ScriptLib.GetGroupVariableValue(context, "kill_count")
if kill_count >= defs.Monster_Count then
for k, v in pairs(defs.target_id) do
--客户端可交互的笼子
if 0 == ScriptLib.GetGadgetStateByConfigId(context, defs.group_id, k) then
--设置服务器可交互
ScriptLib.SetGadgetEnableInteract(context, defs.group_id, k, true)
end
end
end
end
return 0
end
function action_challenge_success(context, evt)
--任务通知
ScriptLib.AddQuestProgress(context, defs.group_id.."_finish")
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 2)
return 0
end
--用于检查key是否在目标table中返回value
function CheckTableAndReturnValue(context,key,table)
for k, v in pairs(table) do
if k == key then
return v
end
end
return 0
end
function action_Will_Unload(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
end
return 0
end
function action_Challenge_Fail(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
end
return 0
end
--12.14补丁,雷雨天无狗导致第二波怪没刷出来 b1324472
--只修改后两个营地,第一个营地suite数不一样
function action_Group_Load(context,evt)
if 133212598 == defs.group_id then
return 0
end
local kill_count = ScriptLib.GetGroupVariableValue(context, "kill_count")
ScriptLib.PrintContextLog(context, "[HachiBattle] Group load. kill_count@"..kill_count.." first wave monster@"..#suites[3].monsters)
if #suites[3].monsters == kill_count then
ScriptLib.PrintContextLog(context, "[HachiBattle] Try re-add suite 4.")
ScriptLib.AddExtraGroupSuite(context, defs.group_id, 4)
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,107 @@
--[[
2.3狗子活动 救小动物潜行关
]]
--[[
local defs = {
group_id = 246101001,
--Boss目标点
target_points = {1004,1005,1006,1007,1008,1009,1010,1011,1012}
}
]]
local extraTriggers={
{ config_id = 8000001, name = "TimeAxis_Event", event= EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
{ config_id = 8000002, name = "Battle_Start", event = EventType.EVENT_ANY_MONSTER_LIVE, source = "", condition = "", action = "action_ResetGroupTempVar", trigger_count = 0 },
--{ config_id = 8000000, name = "Group_Load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
end
--随机激活一个目标点 排除上一个
function SLC_ActiveRandomPoint(context)
if ScriptLib.GetGroupTempValue(context, "deny_call",{}) == 1 then
ScriptLib.PrintContextLog(context, "[HachiDungeon] #WARN# Get SLC During Cool Down Time! Do nothing.")
return 0
end
local last_index = ScriptLib.GetGroupTempValue(context, "last_index",{})
local list = {table.unpack(defs.target_points)}
ScriptLib.PrintContextLog(context, "[HachiDungeon] Get Random Result: ListCount@"..#list.." Last Index@"..last_index)
--如果不是第一次随机
if last_index ~= 0 then
table.remove(list, last_index)
ScriptLib.PrintContextLog(context, "[HachiDungeon] Remove from Pool @"..list[rand_index])
end
math.randomseed(ScriptLib.GetServerTime(context))
rand_index = math.random(#list)
ScriptLib.PrintContextLog(context, "[HachiDungeon] Get Random Result: configID@"..list[rand_index])
last_index = LF_GetKeyByValue(context, list[rand_index], defs.target_points)
ScriptLib.SetGroupTempValue(context, "last_index", last_index, {})
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, list[rand_index], 201)
--CD时间轴 时间到了将刚才的物件切回0
ScriptLib.SetGroupTempValue(context, "deny_call", 1, {})
ScriptLib.InitTimeAxis(context, "cool_down", {10}, false)
return 0
end
function action_time_axis_pass(context, evt)
local last_index = ScriptLib.GetGroupTempValue(context, "last_index",{})
ScriptLib.PrintContextLog(context, "[HachiDungeon] Cool down finished, Reset Point State: configID@"..defs.target_points[last_index])
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.target_points[last_index], 0)
ScriptLib.SetGroupTempValue(context, "deny_call", 0, {})
return 0
end
function action_ResetGroupTempVar(context)
ScriptLib.SetGroupTempValue(context, "buff_num",0,{})
return 0
end
function SLC_HachiDungeonBuff_Mark(context)
ScriptLib.ChangeGroupTempValue(context, "buff_num", 1, {})
return 0
end
--上报运营日志数据 需求单s1286672
function UpLoadActionLog(context)
local log = {
["buff_num"] = 0,--本次地城挑战获得的buff个数若没有获得buff则记0
}
log["buff_num"] = ScriptLib.GetGroupTempValue(context, "buff_num" ,{})
ScriptLib.MarkGroupLuaAction(context, "ActivityHachi_2", "", log)
ScriptLib.PrintContextLog(context, "[HachiSneak] UpLoadActionLog: buff_num@"..log["buff_num"])
return 0
end
function LF_GetKeyByValue(context, value, table)
for k,v in pairs(table) do
if value == v then
return k
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,586 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3狗子活动 救小动物潜行关
]]
--[[
local defs = {
group_id = ,
--触发开始/接续挑战的region此region在suite1
start_region_id = ,
--开始挑战后哪些suit要Add
challenge_suits =
{ 2 },
--挑战index
ChallengeIndex = 1001,
--开始小光柱
starting_point_id = 590040,
--玩法限定region出圈触发暂离此region在suite1
level_region_id = ,
--挑战id
challenge_id = 2003001,
--目标捕捉数
taget_score = 5,
--已捕捉数
exhibition_id = 5,
--狗和寻路点。格式为:[狗configid] = {startMarkFlag, endMarkFlag},
waypoint = {
[0000] = {1, 10},
[0000] = {11, 20},
}
}
]]
local extraTriggers={
{ config_id = 8000000, name = "Group_Load", event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0 },
{ config_id = 8000001,name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0 },
{ config_id = 8000002,name = "LeaveRegion_Region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", trigger_count = 0 },
--挑战计数trigger
{ config_id = 8000003, name = "Variable_Change", event = EventType.EVENT_VARIABLE_CHANGE, source = "saved_progress", condition = "", action = "", trigger_count = 0 ,tag = "1000"},
{ config_id = 8000004,name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count = 0 },
{ config_id = 8000005, name = "Group_Refresh", event = EventType.EVENT_GROUP_REFRESH, source = "", condition = "", action = "action_group_refresh", trigger_count = 0 },
{ config_id = 8000006, name = "Any_Monster_Die", event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_any_monster_die", trigger_count = 0 },
{ config_id = 8000007, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
{ config_id = 8000008,name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count = 0 },
--挑战暂离
{ config_id = 8000009,name = "Challenge_Pause", event = EventType.EVENT_CHALLENGE_PAUSE, source = "", condition = "", action = "action_challenge_pause", trigger_count = 0 },
--活动任务中,第一个潜行、战斗营地的首次挑战是由任务通知开启的
{ config_id = 8800001, name = "Quest_Notify_Challenge", event= EventType.EVENT_QUEST_FINISH, source = "4003109", condition = "", action = "action_quest4003109_notify", trigger_count = 0 },
{ config_id = 8800002, name = "Quest_Notify_Challenge2", event= EventType.EVENT_QUEST_FINISH, source = "4003103", condition = "", action = "action_quest4003103_notify", trigger_count = 0 },
}
--运营日志所需key都是累计值。
--作为groupTempVa在挑战开始时重置在挑战结束时上报。需求见单号 1286672
local log_enum = {
"found_times",--本次挑战中被狗子发现的次数 怪物SLC
"tool1_used_times",--本次挑战中使用潜行物件烟雾的次数 物件SLC
"tool2_used_times",--本次挑战中使用潜行物件诱饵的次数 物件SLC
"widget_times",--本次挑战中使用抓捕小道具的次数 小道具SLC
"capture_times"--本次挑战中抓到小动物的次数 小道具SLC
}
function Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
--进度保存
table.insert(variables,{ config_id=50000001,name = "saved_progress", value = 0, no_refresh =true})
--挑战状态标记
table.insert(variables,{ config_id=50000002,name = "challenge_state", value = 0})
--路点状态标记
table.insert(variables,{ config_id=50000003,name = "waypoint_set", value = 0})
--最多4只动物 存活记录
table.insert(variables,{ config_id=50000004,name = "animal", value = 10000})
--第一个营地的挑战是否已通过任务正常开启(如果不是的话,接到第二次任务通知,要再开一次挑战)
table.insert(variables,{ config_id=50000005,name = "quest_done", value = 0, no_refresh =true})
end
function action_challenge_pause(context, evt)
UpLoadActionLog(context, evt.param_str1)
return 0
end
--处理小动物意外死亡 约定小动物都在Suit 5
function action_any_monster_die(context, evt)
if CheckIsInTable(context, evt.param1, suites[5].monsters) then
local exist_int = ScriptLib.GetGroupVariableValue(context, "animal")
local exist_table = LF_Split_Int(context, exist_int)
ScriptLib.PrintContextLog(context, "[HachiSneak] Try Set Animal. exist_int@"..exist_int)
local animal_index = GetIndexInTable(context, evt.param1, suites[5].monsters)
if exist_table[animal_index] == 0 then
local ret = ScriptLib.CreateMonster(context, { config_id = evt.param1, delay_time = 2 })
ScriptLib.PrintContextLog(context, "[HachiSneak] Reset animal@"..evt.param1.." ret@"..ret)
end
end
return 0
end
--Group一旦被卸载的保护
function action_group_will_unload(context,evt)
--清SGV
ScriptLib.PrintContextLog(context, "[HachiSneak] SGV_CAN_CLEAR_THREAT Set: 0")
local uidList = ScriptLib.GetSceneUidList(context)
if #uidList > 0 then
ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "SGV_CAN_CLEAR_THREAT", 0)
--ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "Hachi_IsInSmokeArea", 0)
end
--弹出暂离提示
--ScriptLib.PauseChallenge(context, defs.ChallengeIndex)
--如果正在挑战中,清挑战标记
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
end
return 0
end
function action_group_load(context, evt)
if defs.group_id == 133212590 then--首个潜行营地和任务耦合
PrepareStartPoint(context)
end
--LF_SetAnimal(context)
return 0
end
function action_group_refresh(context, evt)
if defs.group_id == 133212590 then--首个潜行营地和任务耦合
PrepareStartPoint(context)
end
return 0
end
--根据任务状态,是否显示常规潜行起点。 4003103任务状态为finished时开启黄点
function PrepareStartPoint(context)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 2 then
return 0
end
if true == ScriptLib.CheckIsInMpMode(context) then
--ScriptLib.ShowReminder(context, 400053)
return 0
end
--此处不能通过get玩家questState来判断因为可能取不到玩家uid
if ScriptLib.GetGroupVariableValue(context, "quest_done") == 0 then
--隐藏黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 201)
else
--显示黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 0)
end
return 0
end
--狗潜行活动的挑战ability上给玩家挂一个onKill时执行的SLC
--关卡接到后检查任务状态如果标志任务4003103没完成则退出挑战状态
function SLC_PlayerDie_DuringQuest(context)
if ScriptLib.GetGroupVariableValue(context,"challenge_state") ~= 1 then
return 0
end
local quest_state = ScriptLib.GetQuestState(context, context.source_entity_id, 4003103)
if 3 ~= quest_state then
--允许再次接受任务通知
ScriptLib.SetGroupVariableValue(context, "quest_done", 0)
--恢复玩家SGV
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_CAN_CLEAR_THREAT", 0)
--ScriptLib.SetTeamServerGlobalValue(context, context.uid, "Hachi_IsInSmokeArea", 0)
--暂离挑战
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
--ScriptLib.StopChallenge(context,defs.challenge_id,1)
ScriptLib.PauseChallenge(context, defs.ChallengeIndex)
--处理黄点
--ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 0)
--移除开挑战时添加的suit
for k,v in pairs(defs.challenge_suits) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
end
return 0
end
function LF_SetAnimal(context)
if #suites[5].monsters > 4 then
ScriptLib.PrintContextLog(context, "[HachiSneak] #WARN# Too Many Animal in Suit 5! Tell LD.")
return -1
end
local exist_int = ScriptLib.GetGroupVariableValue(context, "animal")
local exist_table = LF_Split_Int(context, exist_int)
ScriptLib.PrintContextLog(context, "[HachiSneak] Try Set Animal. exist_int@"..exist_int)
for i=1, #suites[5].monsters do
if exist_table[i] == 0 then
ScriptLib.CreateMonster(context, { config_id = suites[5].monsters[i], delay_time = 0 })
end
end
return 0
end
function LF_Split_Int(context, num)
local tb = {0,0,0,0}
for i=1, #tb do
tb[i] = num%10
num = math.floor(num/10)
end
return tb
end
function action_challenge_success(context, evt)
--任务通知
ScriptLib.AddQuestProgress(context, defs.group_id.."_finish")
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 2)
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, GadgetState.GearStart)
--移除开挑战时添加的suit
for k,v in pairs(defs.challenge_suits) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
--恢复玩家SGV
ScriptLib.PrintContextLog(context, "[HachiSneak] SGV_CAN_CLEAR_THREAT Set: 0")
local uidList = ScriptLib.GetSceneUidList(context)
if #uidList > 0 then
ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "SGV_CAN_CLEAR_THREAT", 0)
--ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "Hachi_IsInSmokeArea", 0)
end
UpLoadActionLog(context, evt.param_str1)
return 0
end
--常规流程不会有失败,做个保底
function action_challenge_fail(context,evt)
UpLoadActionLog(context, evt.param_str1)
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 0)
--恢复玩家SGV
ScriptLib.PrintContextLog(context, "[HachiSneak] SGV_CAN_CLEAR_THREAT Set: 0")
local uidList = ScriptLib.GetSceneUidList(context)
if #uidList > 0 then
ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "SGV_CAN_CLEAR_THREAT", 0)
--ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "Hachi_IsInSmokeArea", 0)
--移除开挑战时添加的suit
end
for k,v in pairs(defs.challenge_suits) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
return 0
end
function ResetGroupTempVar(context)
for k,v in pairs(log_enum) do
ScriptLib.SetGroupTempValue(context, v,0,{})
end
return 0
end
--给狗分配路点。为了保证时序这个方法由怪物在ability准备好后调用只调用一次
function SetHachiWayPointGV(context)
if ScriptLib.GetGroupVariableValue(context, "waypoint_set") == 0 then
ScriptLib.SetGroupVariableValue(context, "waypoint_set", 1)
for k,v in pairs(defs.waypoint) do
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {k}, "_INU_SHIHANDAI_SEARCH_START" ,v[1])
ScriptLib.AddEntityGlobalFloatValueByConfigId(context, {k}, "_INU_SHIHANDAI_SEARCH_END" ,v[2])
local tmp = ScriptLib.GetEntityIdByConfigId(context, k)
ScriptLib.PrintContextLog(context, "[HachiSneak] Add GV: DogConfigID@"..k.." EntityID@"..tmp.." SEARCH_START@"..v[1].." SEARCH_END@"..v[2])
end
end
return 0
end
function action_quest4003109_notify(context,evt)
ScriptLib.PrintContextLog(context, "[HachiSneak] 4003109 Quest notify Challenge. UID@"..context.uid)
--不再接受任务通知
ScriptLib.SetGroupVariableValue(context, "quest_done", 1)
--处理开始挑战
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
ScriptLib.SetGroupVariableValue(context, "waypoint_set", 0)
ScriptLib.SetGroupTempValue(context, "player_uid", context.uid, {} )
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 201)
local start_process = ScriptLib.GetGroupVariableValue(context,"saved_progress")
ScriptLib.PrintContextLog(context, "[HachiSneak] Start Challenge. ChallengeID@ "..defs.challenge_id.." TargetScore@".. defs.taget_score.." CurrentScore@"..start_process)
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, defs.ChallengeIndex, defs.challenge_id, {3, 1000, defs.taget_score, 1, start_process})
--迭代后suite 5 的内容不通过addsuit来加由LF_SetAnimal管
for k,v in pairs(defs.challenge_suits) do
if k ~= 5 then
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
ScriptLib.PrintContextLog(context, "[HachiSneak] Add Suit @"..v)
end
end
--安排动物
LF_SetAnimal(context)
--重置日志
ResetGroupTempVar(context)
return 0
end
function action_quest4003103_notify(context,evt)
ScriptLib.PrintContextLog(context, "[HachiSneak] 4003103 Quest notify Challenge. UID@"..context.uid)
if ScriptLib.GetGroupVariableValue(context, "quest_done") ~= 0 then
return 0
end
--不再接受任务通知
ScriptLib.SetGroupVariableValue(context, "quest_done", 1)
--处理开始挑战
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
ScriptLib.SetGroupVariableValue(context, "waypoint_set", 0)
ScriptLib.SetGroupTempValue(context, "player_uid", context.uid, {} )
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 201)
local start_process = ScriptLib.GetGroupVariableValue(context,"saved_progress")
ScriptLib.PrintContextLog(context, "[HachiSneak] Start Challenge. ChallengeID@ "..defs.challenge_id.." TargetScore@".. defs.taget_score.." CurrentScore@"..start_process)
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, defs.ChallengeIndex, defs.challenge_id, {3, 1000, defs.taget_score, 1, start_process})
--迭代后suite 5 的内容不通过addsuit来加由LF_SetAnimal管
for k,v in pairs(defs.challenge_suits) do
if k ~= 5 then
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
ScriptLib.PrintContextLog(context, "[HachiSneak] Add Suit @"..v)
end
end
--安排动物
LF_SetAnimal(context)
--重置日志
ResetGroupTempVar(context)
return 0
end
function action_leave_region(context,evt)
if defs.level_region_id ~= evt.param1 then
return -1
end
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return -1
end
--暂离挑战
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
--ScriptLib.StopChallenge(context,defs.challenge_id,1)
ScriptLib.PauseChallenge(context, defs.ChallengeIndex)
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, 0)
--移除开挑战时添加的suit
for k,v in pairs(defs.challenge_suits) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, v)
end
--恢复玩家SGV
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_CAN_CLEAR_THREAT", 0)
--ScriptLib.SetTeamServerGlobalValue(context, context.uid, "Hachi_IsInSmokeArea", 0)
return 0
end
function action_enter_region(context,evt)
--检查是不是起点区域
if defs.start_region_id ~= evt.param1 then
return -1
end
--检查前置任务 4003103任务状态不为finished时隐藏黄点不可踩region开挑战
local avatar_entity = ScriptLib.GetAvatarEntityIdByUid(context, context.uid)
if 3 ~= ScriptLib.GetQuestState(context, avatar_entity, 4003103) then
return -1
end
--检查联机
if true == ScriptLib.CheckIsInMpMode(context) then
ScriptLib.ShowReminder(context, 400053)
return -1
end
--检查挑战状态
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 0 then
return -1
else
--处理开始挑战
--挑战标记
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
ScriptLib.SetGroupVariableValue(context, "waypoint_set", 0)
ScriptLib.SetGroupTempValue(context, "player_uid", context.uid, {} )
--处理黄点
ScriptLib.SetGroupGadgetStateByConfigId(context, defs.group_id, defs.starting_point_id, GadgetState.GearStart)
--读取进度
--local start_process = ScriptLib.GetGroupVariableValue(context,"saved_progress")
local start_process = ScriptLib.GetExhibitionAccumulableData(context, context.uid, defs.exhibition_id)
ScriptLib.PrintContextLog(context, "[HachiSneak] Start Challenge. ChallengeID@ "..defs.challenge_id.." TargetScore@".. defs.taget_score.." CurrentScore@"..start_process)
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, defs.ChallengeIndex, defs.challenge_id, {3, 1000, defs.taget_score, 1, start_process})
--迭代后suite 5 的内容不通过addsuit来加由LF_SetAnimal管
for k,v in pairs(defs.challenge_suits) do
if v ~= 5 then
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
ScriptLib.PrintContextLog(context, "[HachiSneak] Add Suit @"..v)
end
end
--安排动物
LF_SetAnimal(context)
--重置日志
ResetGroupTempVar(context)
end
return 0
end
--小动物被抓时,告诉关卡进度+1, 然后移除它并标记到GroupVar
function MonsterCallCaught(context)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
ScriptLib.PrintContextLog(context, "[HachiSneak] #WARN# Challenge Not Open but Got Animal LuaCall!!")
return -1
end
local player_uid = ScriptLib.GetGroupTempValue(context, "player_uid", {})
ScriptLib.ChangeGroupTempValue(context, "capture_times", 1, {})
ScriptLib.ChangeGroupVariableValue(context,"saved_progress",1)
ScriptLib.AddExhibitionAccumulableData(context, player_uid, "Activity_Hachi_Group_"..defs.group_id, 1)
ScriptLib.PrintContextLog(context, "[HachiSneak] Exhibition Update. UID@"..player_uid.." key@".."Activity_Hachi_Group_"..defs.group_id)
--
local animal = ScriptLib.GetMonsterConfigId(context, { monster_eid = context.source_entity_id })
LF_MarkAnimal(context,animal)
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.MONSTER, animal)
--ScriptLib.KillEntityByConfigId(context, { config_id = animal })
return 0
end
function LF_MarkAnimal(context,animal_id)
local animal_index = GetIndexInTable(context, animal_id, suites[5].monsters)
local mark = math.pow(10,animal_index-1)
ScriptLib.PrintContextLog(context, "[HachiSneak] Exhibition Update. animal_index@"..animal_index.." AnimalMark@"..mark)
ScriptLib.ChangeGroupVariableValue(context, "animal",mark)
return 0
end
--日志埋点 小道具使用次数
function HachiSneakWidgetUsed(context)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
ScriptLib.PrintContextLog(context, "[HachiSneak] #WARN# Challenge Not Open but Got Widget LuaCall!!")
return -1
end
ScriptLib.PrintContextLog(context, "[HachiSneak] Widget Use!!")
ScriptLib.ChangeGroupTempValue(context, "widget_times", 1, {})
return 0
end
--用于记录本次挑战中被狗子发现的次数 日志埋点
function MonsterCallPlayerCaught(context)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return -1
end
ScriptLib.PrintContextLog(context, "[HachiSneak] Got PlayerCaught LuaCall!!")
ScriptLib.ChangeGroupTempValue(context, "found_times", 1, {})
return 0
end
--烟雾弹物件会serverLuaCall处理玩家清仇恨的SGV。清仇恨功能详见单子s1260223。
function SLC_SmokeClearThreat(context)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return -1
end
ScriptLib.PrintContextLog(context, "[HachiSneak] SGV_CAN_CLEAR_THREAT Set: 1")
local uidList = ScriptLib.GetSceneUidList(context)
if #uidList > 0 then
ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "SGV_CAN_CLEAR_THREAT", 1)
end
return 0
end
--烟雾弹物件会serverLuaCall处理玩家清仇恨的SGV。清仇恨功能详见单子s1260223。
function SLC_SmokeSetThreat(context)
--[[if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return -1
end]]
ScriptLib.PrintContextLog(context, "[HachiSneak] SGV_CAN_CLEAR_THREAT Set: 0")
local uidList = ScriptLib.GetSceneUidList(context)
if #uidList > 0 then
ScriptLib.SetTeamServerGlobalValue(context, uidList[1], "SGV_CAN_CLEAR_THREAT", 0)
end
return 0
end
--上报运营日志数据
function UpLoadActionLog(context,transaction)
local log = {
["found_times"] = 0,--本次挑战中被狗子发现的次数 怪物SLC
["tool1_used_times"] = 0,--本次挑战中使用潜行物件烟雾的次数 物件SLC
["tool2_used_times"] = 0,--本次挑战中使用潜行物件诱饵的次数 物件SLC
["widget_times"] = 0,--本次挑战中使用抓捕小道具的次数 小道具SLC
["capture_times"] = 0--本次挑战中抓到小动物的次数 小道具SLC
}
for k, v in pairs(log) do
log[k] = ScriptLib.GetGroupTempValue(context, k ,{})
end
ScriptLib.MarkGroupLuaAction(context, "ActivityHachi_1", transaction, log)
ScriptLib.PrintContextLog(context, "[HachiSneak] UpLoadActionLog: "..log["found_times"].." |"..log["tool1_used_times"].." |"..log["tool2_used_times"].." |"..log["widget_times"].." |"..log["capture_times"])
return 0
end
function SLC_HachiGadgetActionMark(context,param1)
--["tool1_used_times"] = 0,--本次挑战中使用潜行物件烟雾的次数
--["tool2_used_times"] = 0,--本次挑战中使用潜行物件诱饵的次数
ScriptLib.PrintContextLog(context, "[HachiSneak] Got SLC_HachiGadgetActionMark @"..param1)
if param1 == 1 then
ScriptLib.ChangeGroupTempValue(context, "tool1_used_times", 1, {})
elseif param1 == 2 then
ScriptLib.ChangeGroupTempValue(context, "tool2_used_times", 1, {})
end
return 0
end
--用于检查value是否在目标table中
function CheckIsInTable(context,value,check_table)
for i = 1, #check_table do
if check_table[i] == value then
return true
end
end
return false
end
function GetIndexInTable(context, value, check_table)
for i = 1, #check_table do
if check_table[i] == value then
return i
end
end
return 0
end
Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,472 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3迷城战线复刻
每个小房间内容是单独的挑战。
此group负责管理负责记着3个特殊挑战的进度、负责持续显示父挑战标题、挑战阶段、挂个大region用于触发断线重连后挑战接续
和关卡约定的challenge Index
父挑战 999
点亮三颗符文 901
启动遗迹控制台 902
最终挑战 903
]]
--[[
local defs = {
--galleryID
gallery_id = ,
--galley限时秒数
--迷城战线v2的限时用Gallery控制excel表此处用于保证FatherChallenge的时长不要小于Gallery
time_limit = 300,
--父挑战ChallengeId
challenge_id = 228,
--父挑战大RegionID,这个region用于地城中断线重连接续挑战
region_id = ,
--激活古代符文ChallengeId
key_challenge = 229,
--启动遗迹控制台ChallengeId
worktop_challenge = 230,
--最终挑战ChallengeId
final_challenge = 231,
--激活古代符文目标数量
key_target = 3,
}
]]
--Mist_trial的Buff_obtain日志
local buff_gadgetId = {
"Buff_Attack",
"Buff_Heal"
}
local extraTriggers = {
--这个Trigger用于在地城内断线重连时接续父挑战
{ config_id = 8000001, name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "condition_Enter_FatherRegion", action = "action_Enter_FatherRegion", trigger_count = 0 },
{ config_id = 8000002, name = "Gallery_Stop", event = EventType.EVENT_GALLERY_STOP, source = "", condition = "", action = "action_Gallery_Stop", trigger_count = 0 },
--用于获知玩法到哪个阶段了
{ config_id = 8000004, name = "Key_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "901", condition = "", action = "action_Key_Challenge_Success", trigger_count = 0},
{ config_id = 8000005, name = "Worktop_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "902", condition = "", action = "action_Worktop_Challenge_Success", trigger_count = 0},
{ config_id = 8000006, name = "Final_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "903", condition = "", action = "action_Final_Challenge_Success", trigger_count = 0},
--用于玩家开启迷城战线时,初始化标志位
{ config_id = 8000007, name = "Gallery_Start", event = EventType.EVENT_GALLERY_START, source = "", condition = "", action = "action_Gallery_Start", trigger_count = 0 },
--子挑战成功时向其所在Group发消息
{ config_id = 8000008, name = "Sub_Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_Sub_Challenge_Success", trigger_count = 0},
--外部挂载子挑战用trigger---
{ config_id = 8000009, name = "Variable_Change_MistTail", event = EventType.EVENT_VARIABLE_CHANGE, source = "catchKey", condition = "", action = "",trigger_count = 0 , tag = "666" },
}
--和关卡约定的challenge Index
local cfg = {
["father_index"] = 999,
["key_challenge_index"] = 901,
["worktop_challenge_index"] = 902,
["final_challenge_index"] = 903
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[1].triggers,extraTriggers[i].name)
end
--Gallery是否在进行 0-未开始 1-进行中 2-已成功(不再触发)
table.insert(variables,{ config_id=50000001,name = "gallery_state", value = 0, no_refresh = true})
--父挑战状态 0-初始 1-进了地城但未开始 2-进行中(正在激活古代符文 3-进行中启动遗迹控制台4-进行中(最终挑战) 5-全部完成
table.insert(variables,{ config_id=50000002,name = "father_state", value = 0, no_refresh = true})
--钥匙房 激活古代符文进度
table.insert(variables,{ config_id=50000003,name = "key_progress", value = 0, no_refresh = true})
--子挑战用的触发器
table.insert(variables,{ config_id=50000004,name = "catchKey", value = 0, no_refresh = false})
--地脉异常等级
table.insert(variables,{ config_id=50000005,name = "floor_level", value = 1, no_refresh = true})
return 0
end
-----------------以下由关卡调用---------------------
--小房间的操作台选项“开启挑战”,调这个方法-----
--由于参数个数限制需要先调用SetKillMonsterTarget
--参数为 {子挑战child_index, 子挑战challengeID}
--使用前请保证父挑战已经启动
function StartSubChallengeKillMonster(context, prev_context, child_index, challenge_id)
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
if father_state ~= 0 and father_state ~= 1 then
--添加子挑战
--挑战类型为:击杀指定数量怪物 参数1 指定groupid 参数2指定group内怪物死亡的数量
local target_count = ScriptLib.GetGroupTempValue(context, "target_count",{})
--ScriptLib.SetGroupVariableValue(context, "catchKey", 0)
ScriptLib.AttachChildChallenge(context, cfg.father_index, child_index, challenge_id, {3, 666, target_count, 1}, {},{success=1, fail=1})
else
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Trying to start a subchallenge while father is not actived!! ")
end
return 0
end
--参数为 {怪物所在group_id, 目标个数target_count}
function SetKillMonsterTarget(context, prev_context, group_id, target_count)
ScriptLib.SetGroupTempValue(context, "target_group", group_id, {})
ScriptLib.SetGroupTempValue(context, "target_count", target_count, {})
ScriptLib.PrintContextLog(context, "[MistTrialV2] Set Kill Monster Target. Group@" .. group_id.." Count@".. target_count)
return 0
end
-- 为StartSubChallengeCustom所创建的自定义类型子挑战加分。
-- 钥匙房不要用这个,用 AddMistTrialKeyProgress
function AddMistTrialChildChallengeScore(context, prev_context, score)
--由于单子b1295835,一旦没结束尝试重置“catchKey”时会触发上一个意外没关掉的挑战的VariableChange
--迷城并不关心杀怪的数量所以在接到调用时只需要让catchKey浮动变化就可以了也就不需要重置。其实不浮动变化也可因为只要Set就会触发VariableChange这个Trigger但还是变吧万一以后Trigger改了
if ScriptLib.GetGroupVariableValue(context, "catchKey") > 0 then
ScriptLib.SetGroupVariableValue(context, "catchKey", 0)
else
ScriptLib.SetGroupVariableValue(context, "catchKey", 1)
end
return 0
end
--终止特定子挑战
function StopMistTrialChildChallenge(context, prev_context, childIndex, isWin)
-- isWin = 0 (失败) 1(完成)
ScriptLib.StopChallenge(context, childIndex, isWin)
return 0
end
--当钥匙房被完成时,调这个方法-----
--参数为 {1}
function AddMistTrialKeyProgress(context, prev_context, param)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Key Progress. add@"..param)
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
--if father_state == 2 then
ScriptLib.ChangeGroupVariableValue(context, "key_progress", param)
local key_progress = ScriptLib.GetGroupVariableValue(context, "key_progress")
Reminder_Key_Progress(context, key_progress)
--else
--ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Trying to finish a key room while father challenge is @"..father_state.." (need 2)")
--end
return 0
end
--由于复活的实现原因不能反复Attach如果一个地城有多个复活房每次交互复活房操作台的时候先调用这个来移除
function RemoveReviveAbility(context, prev_context)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Remove MistTrial Revive Ability.")
ScriptLib.DelGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
return 0
end
--LD通知Ability变动 。 参数 0-地脉异常升级 1-全队复活
function ModifyMistTrialAbility(context, prev_context, param)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Modify MistTrial Ability. Param@"..param)
if param == 0 then
--设置地脉异常等级初始1级 升档最多3次 一共4个档
ScriptLib.ChangeGroupTempValue(context, "Buff_Attack", 1, {})
ScriptLib.ChangeGroupVariableValue(context, "floor_level", 1)
local floor_level = ScriptLib.GetGroupVariableValue(context, "floor_level")
if floor_level > 4 or floor_level < 1 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected floor_level: Got@"..floor_level.." (floor_level is 1 ~ 4 in MistTrialV2)")
return 0
else
ScriptLib.SetMistTrialServerGlobalValue(context, floor_level)
end
return 0
elseif param == 1 then
--复活
ScriptLib.ChangeGroupTempValue(context, "Buff_Heal", 1, {})
ScriptLib.AttachGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
return 0
else
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected ModifyMistTrialAbility param: Got@"..param.." (param is 0 or 1 in MistTrialV2)")
end
return 0
end
-----------------以下非关卡调用---------------------
--用于获知挑战进行到哪个阶段了.三符文完成
function action_Key_Challenge_Success(context, evt)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
ScriptLib.SetGroupVariableValue(context, "father_state", 3)
return 0
end
--用于获知挑战进行到哪个阶段了.激活操作台完成
function action_Worktop_Challenge_Success(context, evt)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
ScriptLib.SetGroupVariableValue(context, "father_state", 4)
return 0
end
--用于获知挑战进行到哪个阶段了.最终挑战完成
function action_Final_Challenge_Success(context, evt)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Get Challenge Success. @"..evt.param1)
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
return 0
end
--初始化标志位
function action_Gallery_Start(context, evt)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Start Detected!! GalleryId@"..evt.param1)
ScriptLib.SetGroupVariableValue(context, "gallery_state", 1)
ScriptLib.SetGroupVariableValue(context, "father_state", 2)
ResetGroupTempVar(context)
--由于复活的实现原因需要手动下下来才行复刻不要再复用这个1.5的远古ability了b1326884
ScriptLib.DelGalleryAbilityGroup(context, {}, defs.gallery_id, 0)
return 0
end
--当一个小房间的杀怪挑战完成时向那个group发一个success
function action_Sub_Challenge_Success(context, evt)
if CheckIsInTable(context, tonumber(evt.source_name)) == 1 then
--特殊三挑战不发,发了也没用
return 0
else
local fromGroup = ScriptLib.GetGroupTempValue(context, "target_group", {})
ScriptLib.PrintContextLog(context, "[MistTrialV2] A Sub Challenge Finished. ChallengeID@"..evt.param1.." ChallengeIndex@"..evt.source_name..". Send GroupVar(succcess = 1) to Group@"..fromGroup)
ScriptLib.SetGroupVariableValueByGroup(context, "success", 1, fromGroup)
end
return 0
end
--钥匙房进度
function Reminder_Key_Progress(context, progress)
if progress == 1 then
ScriptLib.ShowReminder(context, 43001002)
return 0
elseif progress == 2 then
ScriptLib.ShowReminder(context, 43001003)
return 0
elseif progress == 3 then
ScriptLib.ShowReminder(context, 43001004)
return 0
else
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Key Progress Change! value@"..progress)
end
return 0
end
function condition_Enter_FatherRegion(context, evt)
if evt.param1 ~= defs.region_id then
return false
end
return true
end
--由大Region触发用且仅用于接续父挑战
function action_Enter_FatherRegion(context, evt)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Enter father region triggered...")
if ScriptLib.GetGroupVariableValue(context, "father_state") == 0 then
ScriptLib.SetGroupVariableValue(context, "father_state", 1)
ScriptLib.PrintContextLog(context, "[MistTrialV2] First Time Enter region. Set mark.")
return 0
end
local gallery_state = ScriptLib.GetGroupVariableValue(context, "gallery_state")
if gallery_state == 2 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] ...gallery is finished, will do nothing.")
return 0
elseif gallery_state == 1 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery_state = 1 & father_state is not 0, Trying to get Challenge Progress. ")
if ResumeMistTrial(context) == -1 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Challenge Progress!!")
end
return 0
elseif gallery_state == 0 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] ...gallery is not started, will do nothing.")
return 0
else
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Unexpected Gallery state! gallery_state@".. gallery_state)
return 0
end
return 0
end
--当需要接续挑战时,根据挑战阶段挂载对应的子挑战,如果是一阶段,还需要续上挑战进度
function ResumeMistTrial(context, evt)
--父挑战状态 0-初始 1-进了地城但未开始 2-进行中(正在激活古代符文 3-进行中启动遗迹控制台4-进行中(最终挑战) 5-全部完成
local father_state = ScriptLib.GetGroupVariableValue(context, "father_state")
ScriptLib.PrintContextLog(context, "[MistTrialV2] ResumeMistTrial Called. father_state@".. father_state)
--迷城战线v2的限时用Gallery控制excel表
--此处用于保证接续挑战时CreateFatherChallenge的时长不要小于Gallery
local father_life = 1800
if father_state == 0 or father_state == 1 then
--挑战还没开始过,就触发了接续挑战
ScriptLib.PrintContextLog(context, "[MistTrialV2] #WRONG# Mark has set 1 but father challenge state is 0 ! ")
return 0
elseif father_state == 2 then
--接续钥匙房挑战 defs.key_challenge
local saved = ScriptLib.GetGroupVariableValue(context, "key_progress")
--创建父挑战
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
--挑战类型为触发特定Trigger 参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.key_challenge_index, defs.key_challenge, {3,901,defs.key_target,1,saved}, {}, {success=1, fail=1} )
ScriptLib.StartFatherChallenge(context, cfg.father_index)
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 激活古代符文. Saved key num@"..saved)
return 0
elseif father_state == 3 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 启动遗迹控制台.")
--创建父挑战
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
--接续启动遗迹控制台 defs.worktop_challenge
--挑战类型为触发特定Trigger 参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.worktop_challenge_index, defs.worktop_challenge, {7,902,1,1}, {}, {success=1, fail=1} )
ScriptLib.StartFatherChallenge(context, cfg.father_index)
return 0
elseif father_state == 4 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Resuming MistTrial Starting: 最终挑战.")
--创建父挑战
ScriptLib.CreateFatherChallenge(context, cfg.father_index, defs.challenge_id, father_life , {success=99999, fail=99999})
--接续 完成最终挑战
ScriptLib.AttachChildChallenge(context, cfg.father_index, cfg.final_challenge_index, defs.final_challenge, {3,903,1,1}, {}, {success=99999, fail=1} )
ScriptLib.StartFatherChallenge(context, cfg.father_index)
return 0
elseif father_state == 5 then
--挑战还没开始过,就触发了接续挑战
ScriptLib.PrintContextLog(context, "[MistTrialV2] Trying to resume challenge but it is all clear. Do nothing.")
return 0
end
return -1
end
function action_Gallery_Stop(context, evt)
if evt.param1 ~= defs.gallery_id then
return -1
end
UpLoadActionLog(context)
--evt.param3
--1、时间到 2、客户端中断 3、LUA中断
if evt.param3 == 1 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Time Up.")
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
ScriptLib.FailMistTrialDungeonChallenge(context, 999)
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
elseif evt.param3 == 2 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Client.")
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
ScriptLib.FailMistTrialDungeonChallenge(context, 999)
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
elseif evt.param3 == 3 then
ScriptLib.PrintContextLog(context, "[MistTrialV2] Gallery Stop Triggered. reason@ Lua.")
ScriptLib.SetGroupVariableValue(context, "gallery_state", 2)
ScriptLib.SetGroupVariableValue(context, "father_state", 5)
end
return 0
end
function ResetGroupTempVar(context)
for k,v in pairs(buff_gadgetId) do
ScriptLib.SetGroupTempValue(context, v,0,{})
end
return 0
end
--上报运营日志数据 需求单s1286673
function UpLoadActionLog(context)
local log = {
["Buff_Attack"] = 0,
["Buff_Heal"] = 0
}
for k, v in pairs(log) do
log[k] = ScriptLib.GetGroupTempValue(context, k ,{})
end
ScriptLib.MarkGroupLuaAction(context, "Mist_trial", "", log)
ScriptLib.PrintContextLog(context, "[MistTrialV2] UpLoadActionLog: "..log["Buff_Attack"].." |"..log["Buff_Heal"])
return 0
end
--用于检查value是否在目标table中
function CheckIsInTable(context,check_value)
--和关卡约定的challenge Index
local indexs = {999,901,902,903}
for k,v in pairs(indexs) do
if v == check_value then
--ScriptLib.PrintContextLog(context, "[MistTrialV2] Check Is SpecialChallenge. return 1")
return 1
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,93 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3迷城战线复刻
]]
--[[
--以下buff球会计入Mist_trial的Buff_obtain日志
local buff_gadgetId = {
"Buff_Attack",
"Buff_Heal",
"Buff_Speed"
}
local extraTriggers = {
--日志用Trigger
{ config_id = 8000010, name = "Buff_GadgetDie", event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_Buff_GadgetDie",trigger_count = 0}
}
function LF_Initialize_Group(triggers, suites)
table.insert(triggers, extraTriggers[1])
for i=1,#suites do
table.insert(suites[i].triggers,extraTriggers[1].name)
end
--gallery流水号
--table.insert(variables,{ name = "gallery_trans", value = 0})
return 0
end
function action_Buff_GadgetDie(context, evt)
--在gadgetDie里试图GetGadgetIdByEntityId是徒劳的
--local gadget_id = ScriptLib.GetGadgetIdByEntityId(context, evt.source_eid)
local gadget_id = LF_GetGadgetIDByConfigID(context, evt.param1)
if gadget_id == 0 then
return 0
end
ScriptLib.PrintContextLog(context, "[MistTrialV2] Buff_GadgetDie gadgetID@"..gadget_id)
--70350245 试玩地城 攻击球
--70350246 试玩地城 治疗球
--70350247 试玩地城 移速球
if gadget_id == 70350245 then
ScriptLib.ChangeGroupTempValue(context, "Buff_Attack", 1, {})
elseif gadget_id == 70350246 then
ScriptLib.ChangeGroupTempValue(context, "Buff_Heal", 1, {})
elseif gadget_id == 70350247 then
ScriptLib.ChangeGroupTempValue(context, "Buff_Speed", 1, {})
end
return 0
end
function LF_GetGadgetIDByConfigID(context, config_id)
local gadget_id = 0
for k,v in pairs(gadgets) do
if v.config_id == config_id then
gadget_id = v.gadget_id
return gadget_id
end
end
return 0
end
--重置计数 gallery开启时调用
function ResetGroupTempVar(context, prev_context)
for k,v in pairs(buff_gadgetId) do
ScriptLib.SetGroupTempValue(context, v,0,{})
end
return 0
end
--上报运营日志数据 需求单s1286673
function UpLoadActionLog(context,prev_context, gallery)
local log = {
["Buff_Attack"] = 0,
["Buff_Heal"] = 0,
["Buff_Speed"] = 0,
}
for k, v in pairs(log) do
log[k] = ScriptLib.GetGroupTempValue(context, k ,{})
end
--local gallery_trans = ScriptLib.GetGalleryTransaction(context, gallery)
--local gallery_trans = ScriptLib.GetGroupVariableValue(context, "gallery_trans")
ScriptLib.MarkGroupLuaAction(context, "Mist_trial", "", log)
ScriptLib.PrintContextLog(context, "[MistTrialV2] UpLoadActionLog: "..log["Buff_Attack"].." |"..log["Buff_Heal"].." |"..log["Buff_Speed"])
return 0
end
--LF_Initialize_Group(triggers, suites)
]]

View File

@@ -0,0 +1,402 @@
--[[
2.3雪山冬令营,营地冷暖源装置
限时按顺序激活子装置,启动主装置
10.15迭代不要顺序激活进圈弹banner
]]
--[[
local defs = {
--按想要的解谜顺序, 填子装置的config_id
branch_gadgets = {117012, 117013, 117014},
--主装置的config_id,可填一个或多个
main_gadget = {117011},
--重置倒计时秒数
limit_time = {25},
--这组解谜在哪个suit里
puzzle_suit = 1,
--当前group
group = 133008117,
--营地内龙血矿石组
mineral = {117015, 117016, 117017},
--挑战操作台
challenge_gadget = 117018,
--怪物数量
monster_count = 25,
--挑战时间
time = 120,
--怪物列表
monster_array = {117001,117002,117003,117004,117005,117006,117007,117008,117009,117010},
monster_min = 5,
monster_max = 5,
monster_count =25,
target_point = 117019,
optimiz_region=117043
}
]]
local extraTriggers={
-- { config_id = 8000001,name = "Time_Limit", event = EventType.EVENT_TIME_AXIS_PASS, source = "WinterCamp_LimitTime", condition = "", action = "action_Time_Limit", trigger_count = 0 },
{ config_id = 8000002, name = "Gadget_State_Change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_Gadget_State_Change", trigger_count = 0 },
{ config_id = 8000003, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0},
{ config_id = 8000004, name = "Enter_Optimiz_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ config_id = 8000005, name = "Leave_Optimiz_Region", event = EventType.EVENT_LEAVE_REGION, source = "",condition = "",action = "action_leave_OptimizRegion",trigger_count= 0},
{ config_id = 8000006, name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0},
{ config_id = 8000007, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count = 0 },
{ config_id = 8000008, name = "Select_Option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
{ config_id = 8000009, name = "Mineral_State_Change", event = EventType.EVENT_GADGET_STATE_CHANGE, source = "", condition = "", action = "action_Mineral_State_Change", trigger_count = 0 },
{ config_id = 8000010, name = "TimeAxis_Event", event= EventType.EVENT_TIME_AXIS_PASS, source = "SGV_Checker", condition = "", action = "action_On_TimeAxis", trigger_count = 0 },
{ config_id = 8000011, name = "Enter_Banner_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_BannerRegion", trigger_count = 0 },
{ config_id = 8000012, name = "TimeAxis_Banner", event= EventType.EVENT_TIME_AXIS_PASS, source = "Banner_CD", condition = "", action = "action_On_BannerCD", trigger_count = 0 },
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[defs.puzzle_suit].triggers,extraTriggers[i].name)
end
--下一个该被激活的branch装置序号.
table.insert(variables,{ config_id=50000001,name = "next_index", value = 1})
--0未完成,1-开始中 2-已经完成
table.insert(variables,{ config_id=50000002,name = "puzzle_state", value = 0, no_refresh = true})
table.insert(variables,{ config_id=50000003,name = "challenge", value = 0})
end
--[[function action_Time_Limit(context,evt)
--如果解谜已开始且还没完成
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 1 then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Timeout. Puzzle Failed.")
FaildProcess(context)
end
return 0
end]]
--10.15迭代进入范围弹出banner 反复弹 战斗过程中不弹 装置已经是暖源了也不弹
function action_enter_BannerRegion(context, evt)
--检查region
if defs.banner_region == nil or evt.param1 ~= defs.banner_region then
return 0
end
--检查暖源
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
return 0
end
--检查战斗状态
if ScriptLib.GetGroupVariableValue(context,"challenge") == 0 then
if ScriptLib.GetGroupTempValue(context, "deny_banner", {}) ~= 1 then
--banner触发CD防止堆积Banner队列
ScriptLib.InitTimeAxis(context, "Banner_CD", {3}, false)
ScriptLib.SetGroupTempValue(context, "deny_banner", 1, {})
ScriptLib.ShowReminder(context, 400108)
end
end
return 0
end
function action_On_BannerCD(context, evt)
ScriptLib.SetGroupTempValue(context, "deny_banner", 0, {})
return 0
end
function action_enter_TutorialRegion(context, evt)
if defs.guide_regionID == nil then
return 0
elseif evt.param1 == defs.guide_regionID then
LF_Try_StartTutorial(context)
end
return 0
end
function LF_Try_StartTutorial(context)
local UidList = ScriptLib.GetSceneUidList(context)
local ownerUid = UidList[1]
local havePlayed = ScriptLib.GetExhibitionAccumulableData(context, ownerUid, 10901104)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 836, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Device_HavePlayed", 1)
end
return 0
end
function FaildProcess(context)
--ScriptLib.EndTimeAxis(context, "WinterCamp_LimitTime")
ScriptLib.SetGroupVariableValue(context,"next_index", 1)
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 0)
SetGadgetStateInTable(context,defs.branch_gadgets,0)
ScriptLib.ShowReminder(context, 400096)
--龙血矿重置
if defs.mineral ~= nil then
for k,v in pairs(defs.mineral) do
ScriptLib.CreateGadget(context, { config_id = v })
end
end
return 0
end
--用于把一个table中的gadget设成指定state
function SetGadgetStateInTable(context,table,state)
for k, v in pairs(table) do
ScriptLib.SetGadgetStateByConfigId(context,v,state)
end
return 0
end
function SuccessProcess(context)
UpLoadActionLog_StateChange(context)
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 2)
SetGadgetStateInTable(context,defs.main_gadget,201)
--在战斗过程中解谜完成立即上SGV
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
if ScriptLib.GetGroupVariableValue(context,"challenge") == 1 then
--用于检查中途加入的玩家
ScriptLib.InitTimeAxis(context, "SGV_Checker", {3}, true)
end
return 0
end
function action_Mineral_State_Change(context, evt)
if GadgetState.GearStart ~= evt.param1 then
return 0
end
local mineral_index = LF_IndexInTable(context,evt.param2,defs.mineral)
if mineral_index == 0 then
return 0
else
--记下最后一次交互的龙血矿index
ScriptLib.SetGroupVariableValue(context, "lastID", mineral_index)
end
return 0
end
function action_Gadget_State_Change(context, evt)
if ScriptLib.GetGroupVariableValue(context, "puzzle_state") == 2 then
return 0
end
local gadget_index = LF_IndexInTable(context,evt.param2,defs.branch_gadgets)
--如果是branch装置。且是被点亮.
if gadget_index ~= 0 and evt.param1 == 201 then
--无论是不是正确的顺序都要mark
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_4", "", {})
local next_index = ScriptLib.GetGroupVariableValue(context,"next_index")
--如果解谜已经开始
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 1 then
--检查是不是正确顺序
--[[if gadget_index ~= next_index then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Wrong Branch Gadget Index. Puzzle Failed.")
FaildProcess(context)
return 0
--如果是正确的交互顺序
else]]
--移除对应的龙血矿
local index_toRemove = ScriptLib.GetGroupVariableValue(context, "lastID")
if index_toRemove ~= 0 then
ScriptLib.RemoveEntityByConfigId(context, defs.group, EntityType.GADGET, defs.mineral[index_toRemove])
end
--这次被交互的是不是最后一个子机关
if next_index == #defs.branch_gadgets then
SuccessProcess(context)
return 0
end
--不是的话继续
next_index = next_index + 1
ScriptLib.SetGroupVariableValue(context,"next_index", next_index)
--end
--如果解谜还没开始
else
--那必须最先交互的是一号机关,否则直接失败
--[[if gadget_index ~= 1 then
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Wrong Branch Gadget Start Index. Puzzle Failed.")
FaildProcess(context)
return 0
else]]
--解谜开始
ScriptLib.SetGroupVariableValue(context,"puzzle_state", 1)
ScriptLib.SetGroupVariableValue(context,"next_index", 2)
--移除对应的龙血矿
local index_toRemove = ScriptLib.GetGroupVariableValue(context, "lastID")
if index_toRemove ~= 0 then
ScriptLib.RemoveEntityByConfigId(context, defs.group, EntityType.GADGET, defs.mineral[index_toRemove])
end
--ScriptLib.InitTimeAxis(context,"WinterCamp_LimitTime",defs.limit_time,true)
ScriptLib.PrintContextLog(context,"[WinterCampDevice] Puzzle Start. next_index@"..next_index)
--end
end
end
return 0
end
function action_enter_OptimizRegion(context,evt)
if defs.optimiz_region == nil then
return 0
end
--检查Region的configId是否是优化圈
if evt.param1 == defs.optimiz_region then
ScriptLib.SetPlayerEyePointStream(context, evt.param1, evt.param1, true)
ScriptLib.PrintContextLog(context, "[WinterCamp] Enter optimiz_region. Region_config_id@"..evt.param1 )
end
return 0
end
function action_leave_OptimizRegion(context,evt)
if defs.optimiz_region == nil then
return 0
end
--检查Region的configId是否是优化圈
if evt.param1 == defs.optimiz_region then
ScriptLib.ClearPlayerEyePoint(context, evt.param1)
ScriptLib.PrintContextLog(context, "[WinterCamp] Leave optimiz_region. Region_config_id@"..evt.param1)
end
return 0
end
--用于返回value在table中的key
function LF_IndexInTable(context,value,check_table)
for i=1, #check_table do
if check_table[i] == value then
return i
end
end
--如果没找到返回0
return 0
end
function action_On_TimeAxis(context, evt)
--检查玩家是不是该带着SGV但没带客机中途加入战斗的情况
if evt.source_name == "SGV_Checker" then
LF_Check_AllPlayerSGV(context)
end
--[[--暖源机关auth保持为主机
local uid_list = ScriptLib.GetSceneUidList(context)
if #uid_list ~= 0 then
ScriptLib.ForceRefreshAuthorityByConfigId(context, defs.main_gadget[1], uid_list[1])
end]]
return 0
end
function LF_Check_AllPlayerSGV(context)
--检查暖源状态
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
if ScriptLib.GetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff") == 0 then
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
end
end
return 0
end
function action_select_option(context, evt)
--选项7是开挑战
if evt.param2 == 7 then
ScriptLib.SetGroupVariableValue(context, "challenge", 1)
ScriptLib.DelWorktopOptionByGroupId(context, defs.group, defs.challenge_gadget, 7)
ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 201)
--优化圈
ScriptLib.AddExtraGroupSuite(context, defs.group, 2)
--mark
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_3", "", {})
--暖源状态下开挑战上GV
if ScriptLib.GetGroupVariableValue(context,"puzzle_state") == 2 then
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 1)
end
--用于检查中途加入的玩家
ScriptLib.InitTimeAxis(context, "SGV_Checker", {3}, true)
else
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 0)
end
--处理暴风雪特效如果configID已存在 会无事发生
ScriptLib.CreateGadget(context, { config_id = defs.target_point } )
ScriptLib.SetGadgetStateByConfigId(context, defs.target_point, 0 )
end
end
return 0
end
function action_challenge_success(context, evt)
ScriptLib.EndTimeAxis(context, "SGV_Checker")
UpLoadActionLog_Result(context, 0)
ScriptLib.DelWorktopOptionByGroupId(context, defs.group, defs.challenge_gadget, 7)
ScriptLib.KillEntityByConfigId(context, { config_id = defs.challenge_gadget })
--ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 201)
ScriptLib.SetGroupVariableValue(context, "challenge", 0)
--优化圈
ScriptLib.RemoveExtraGroupSuite(context, defs.group, 2)
--[[if defs.optimiz_region ~= nil then
ScriptLib.ClearPlayerEyePoint(context, defs.optimiz_region)
end]]
LF_ResetPlayerSGV(context)
return 0
end
function action_challenge_fail(context, evt)
ScriptLib.EndTimeAxis(context, "SGV_Checker")
UpLoadActionLog_Result(context, 1)
ScriptLib.KillMonsterTide(context, defs.group, 1)
ScriptLib.SetGroupVariableValue(context, "challenge", 0)
--优化圈
ScriptLib.RemoveExtraGroupSuite(context, defs.group, 2)
--ScriptLib.ClearPlayerEyePoint(context, defs.optimiz_region)
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group, defs.challenge_gadget, {7})
ScriptLib.SetGadgetStateByConfigId(context, defs.challenge_gadget, 0)
ScriptLib.SetGadgetStateByConfigId(context, defs.target_point, GadgetState.GearStop)
LF_ResetPlayerSGV(context)
return 0
end
--上报运营日志数据 s1286671
function UpLoadActionLog_Result(context, result)
local log = {
["result"] = result,--0 -成功 1-失败 具体枚举和TD实现一致 能区分成功or失败即可
}
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_1", "", log)
ScriptLib.PrintContextLog(context, "[WinterCamp] UpLoadActionLog_Result: "..log["result"])
return 0
end
function UpLoadActionLog_StateChange(context) --寒冷装置变为暖源状态时记录
-- 放空即可
local log = {
}
ScriptLib.MarkGroupLuaAction(context, "ActivityWinterCamp_2", "", log)
ScriptLib.PrintContextLog(context, "[WinterCamp] UpLoadActionLog_StateChange ")
return 0
end
function LF_ResetPlayerSGV(context)
local uid_list = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uid_list) do
ScriptLib.SetTeamServerGlobalValue(context, v, "SGV_WinterCamp_PlayerBuff", 0)
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,260 @@
--[[
2.3雪山活动 盲盒雪堆
]]
--[[
local defs = {
--挑战ID
challenge_id = ,
--挑战的region configID
region_id = ,
--挖雪堆目标数
target_count = 10,
}
]]
local extraTriggers={
{ config_id = 8000001,name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_region", trigger_count = 0 },
--挑战计数trigger
{ config_id = 8000002, name = "Variable_Change", event = EventType.EVENT_VARIABLE_CHANGE, source = "saved_progress", condition = "", action = "", trigger_count = 0 ,tag = "1000"},
{ config_id = 8000003,name = "Leave_Region", event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_region", trigger_count = 0 },
{ config_id = 8000009, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_Group_Will_Unload", trigger_count = 0 },
{ config_id = 8000004,name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "", condition = "", action = "action_challenge_success", trigger_count = 0 },
--处理意外Fail的情况,重置标志
{ config_id = 8000005,name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "", condition = "", action = "action_challenge_fail", trigger_count = 0 },
{ config_id = 8000006,name = "Challenge_Pause", event = EventType.EVENT_CHALLENGE_PAUSE, source = "", condition = "", action = "action_challenge_pause", trigger_count = 0 },
--{ config_id = 8000007, name = "TimeAxis_Event", event= EventType.EVENT_TIME_AXIS_PASS, source = "", condition = "", action = "action_time_axis_pass", trigger_count = 0 },
{ config_id = 8000008, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0}
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
--进度保存
table.insert(variables,{ config_id=50000001,name = "saved_progress", value = 0, no_refresh =true})
-- 0-未完成 1-进行中 2-已完成
table.insert(variables,{ config_id=50000002,name = "challenge_state", value = 0, no_refresh =true})
end
function action_enter_TutorialRegion(context, evt)
if defs.guide_regionID == nil then
return 0
elseif evt.param1 == defs.guide_regionID then
LF_Try_StartTutorial(context)
end
return 0
end
function LF_Try_StartTutorial(context)
local UidList = ScriptLib.GetSceneUidList(context)
local ownerUid = UidList[1]
local havePlayed = ScriptLib.GetExhibitionAccumulableData(context, ownerUid, 10901103)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 835, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Gacha_HavePlayed", 1)
end
return 0
end
function action_Group_Will_Unload(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetGroupTempValue(context, "temp_start", 0, {})
end
return 0
end
function action_enter_region(context, evt)
if evt.param1 ~= defs.region_id then
return 0
end
LF_TryStartChallenge(context)
return 0
end
function action_challenge_pause(context, evt)
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Challenge Paused.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetGroupTempValue(context, "temp_start", 0, {})
return 0
end
function action_challenge_fail(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.PrintContextLog(context,"[WinterCampGacha] #WARN# Challenge Failed, not really expected in this activiy.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetGroupTempValue(context, "temp_start", 0, {})
end
return 0
end
function action_leave_region (context, evt)
if evt.param1 ~= defs.region_id then
return 0
end
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Leave Region, Pause Challenge.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetGroupTempValue(context, "temp_start", 0, {})
ScriptLib.PauseChallenge(context, 1)
end
return 0
end
function action_challenge_success(context, evt)
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Challenge Done.")
ScriptLib.SetGroupVariableValue(context, "challenge_state", 2)
ScriptLib.SetGroupTempValue(context, "temp_start", 3, {})
return 0
end
--圈外打雪堆 直接拉起挑战tempStart 5秒没进圈、没接着打雪堆->挑战暂离(9.22迭代:出圈挑战不退出,不调用这个了)
function StartChallengeOutOfRegion(context)
local temp_start = ScriptLib.GetGroupTempValue(context, "temp_start",{})
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Start Challenge OutOfRegion: temp_start@".. temp_start)
if temp_start == 0 then
local start_process = ScriptLib.GetGroupVariableValue(context, "saved_progress")
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, 1, defs.challenge_id, {3, 1000, defs.target_count, 1 , start_process})
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
--tempStart的状态标记
-- 0-圈外可触发tempStart。 1-触发了tempStart但未进圈 2-在圈里不触发tempStart 3- 挑战已完成不触发tempStart
ScriptLib.SetGroupTempValue(context, "temp_start", 1, {})
--起时间轴
ScriptLib.InitTimeAxis(context, "temp_start_life", {6}, false)
elseif temp_start == 1 then
--续命
ScriptLib.InitTimeAxis(context, "temp_start_life", {6}, false)
end
return 0
end
function LF_TryStartChallenge(context)
ScriptLib.SetGroupTempValue(context, "temp_start", 2, {})
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 0 then
local start_process = ScriptLib.GetGroupVariableValue(context, "saved_progress")
--参数1 event_type所在枚举序号 参数2 trigger_tag参数3 次数参数4Bool次数达成是否计为成功参数5初始次数值
ScriptLib.StartChallenge(context, 1, defs.challenge_id, {3, 1000, defs.target_count, 1 , start_process})
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
end
return 0
end
--[[function action_time_axis_pass(context, evt)
if ScriptLib.GetGroupTempValue(context, "temp_start",{}) == 1 then
ScriptLib.PauseChallenge(context, 1)
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
ScriptLib.SetGroupTempValue(context, "temp_start", 0, {})
end
return 0
end
]]
function GadgetCall_SnowPile_Interact(context)
--StartChallengeOutOfRegion(context)
LF_TryStartChallenge(context)
local configId = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
--向服务器请求本次雪堆结果 1 刷怪0掉落-1有错误
local result = ScriptLib.WinterCampSnowDriftInteract(context, configId)
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Get result form server: result@".. result)
if result == 1 then
local tmp = GetMonsterSuit(context,configId)
ScriptLib.ChangeGroupVariableValue(context, "saved_progress", 1)
ScriptLib.AddExtraGroupSuite(context, defs.group_id,tmp)
--杀死雪堆
ScriptLib.KillGroupEntity(context, { group_id = defs.group_id, gadgets = {configId} })
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Add Monster suitID@".. tmp.." GroupID@"..defs.group_id)
return 0
elseif result == 0 then
ScriptLib.ChangeGroupVariableValue(context, "saved_progress", 1)
--杀死雪堆
ScriptLib.KillGroupEntity(context, { group_id = defs.group_id, gadgets = {configId} })
ScriptLib.PrintContextLog(context,"[WinterCampGacha] Get a Reward.")
return 0
elseif result == -1 then
ScriptLib.PrintContextLog(context,"[WinterCampGacha] #WRONG# SnowDrift Result Get -1 . Please Check Activity State!")
--如果活动状态异常把雪堆物件状态设回0去
ScriptLib.SetGadgetStateByConfigId(context, configId, 0)
return 0
else
ScriptLib.PrintContextLog(context,"[WinterCampGacha] #WRONG# SnowDrift Interact Get Unkown Result!!!!")
--如果活动状态异常把雪堆物件状态设回0去
ScriptLib.SetGadgetStateByConfigId(context, configId, 0)
return 0
end
return -1
end
--当雪堆该刷怪时刷哪个Suit
--雪堆1 对应suite2 雪堆2 对应suite3 以此类推
function GetMonsterSuit(context, cfg_id)
local tmp = 0
for k,v in ipairs(suites[1].gadgets) do
if cfg_id == v then
tmp = k+1
return tmp
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,525 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3雪山活动 冰骗骗花ScenePlay
]]
--[[
local defs = {
--战斗开始加载suit空气墙等
add_onStart = {2},
--开启流程的操作台configID
gadget_starter = 66007
,
--领奖台configID
gadget_reward = 66003,
--Boss的ConfigID
boss_id = 66005,
--暖源的IDlist
heat_id =
{66009,66010,66011},
--点位configID
point_list = {66012,66013,66014},
--招怪池
monster_list = {66025,66026,66027,66028,66029},
--招gadget池-召唤
summoner_list = {66022,66023,66024},
--招gadget池-射击
shooter_list = {66019,66020,66021}
}
]]
local cfg = {
group_id = 133002066,
play_type = 5,
play_id = 5,
}
local optimizSuite = {
{
monsters = { },
gadgets = { },
regions = {66004,66008},--固定ID。 Not in any Suite
triggers = { "Enter_Optimiz_Region","Leave_Optimiz_Region"},
rand_weight = 100
}
}
--每次开战要清空的陈列室key
local exhibition_toClear = {
"WinterCamp_Boss_SummonMonster_Killed",--单局击杀怪物
"WinterCamp_Boss_HitBack",--击回果实
"WinterCamp_Boss_PickUp",--拾取结晶
"WinterCamp_Boss_Mimik_Killer",--最后一击
"WinterCamp_Boss_NoHitBySkillA",--被钻地击中
"WinterCamp_Boss_NoHitBySkillB",--被锤击击中
}
local SGVMark_toClear = {
"SGV_Mimik_PickUped",--拾取结晶
"SGV_HitByMimik_SkillA",--被钻地击中
"SGV_HitByMimik_SkillB",--被锤击击中
}
local extraTriggers={
{ name = "Monster_Die", config_id = 8000001, event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_any_monster_die", trigger_count = 0 },
{ name = "Enter_Optimiz_Region", config_id = 8000002, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ name = "Leave_Optimiz_Region", config_id = 8000003, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_OptimizRegion", trigger_count = 0 },
{ name = "Group_Will_Unload", config_id = 8000004, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
--ScenePlay流程Trigger
{ name = "MP_Battle_State", config_id = 8100001, event = EventType.EVENT_SCENE_MP_PLAY_BATTLE_STATE, source = "", condition = "condition_battle_state", action = "action_battle_state", trigger_count = 0 },
{ name = "MP_Battle_Result", config_id = 8100002, event = EventType.EVENT_SCENE_MP_PLAY_BATTLE_RESULT, source = "", condition = "", action = "action_battle_result", trigger_count = 0 },
{ name = "MP_Battle_Interrupt", config_id = 8100003, event = EventType.EVENT_SCENE_MP_PLAY_BATTLE_INTERRUPT, source = "", condition = "", action = "action_battle_interrupt", trigger_count = 0},
{ name = "MP_All_Player_Die", config_id = 8100004, event = EventType.EVENT_SCENE_MP_PLAY_ALL_AVATAR_DIE, source = "", condition = "", action = "action_all_player_die", trigger_count = 0 },
--Boss战斗流程Trigger
{ name = "Gadget_Die", config_id = 8200001, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_gadget_die", trigger_count = 0},
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
for i,v in ipairs(optimizSuite) do
table.insert(suites, v)
end
--挑战状态标记
table.insert(variables,{ config_id=50000001,name = "challenge_state", value = 0})
end
--监听战斗阶段变化
function condition_battle_state(context, evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Battle State Notify: play_type@"..evt.param1.." play_id@"..evt.param2.." state@"..evt.param3)
if evt.param1 == cfg.play_type and evt.param2 == cfg.play_id then
return true
end
return false
end
function action_battle_state(context, evt)
--BATTLE_PREPARE
if evt.param3 == 2 then
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, defs.gadget_starter, false)
--ScriptLib.SetGadgetStateByConfigId(context, defs.gadget_starter, 201)
ScriptLib.KillGroupEntity(context,{ group_id = cfg.group_id, gadgets = {defs.gadget_starter}})
--BATTLE_READY
elseif evt.param3 == 3 then
ScriptLib.PrestartScenePlayBattle(context, {duration = 600, start_cd = 3, progress_stage = {1}, group_id = cfg.group_id})
--加载优化圈所在suit 取最后一个suit
ScriptLib.AddExtraGroupSuite(context, cfg.group_id, #suites)
--BATTLE_START
elseif evt.param3 == 5 then
ScriptLib.SetGroupVariableValue(context, "challenge_state", 1)
--检查玩家数量 如果场上没人了 需要失败
if LF_Check_AllPlayer_OutRegion(context, 66008) then
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
end
LF_Clear_Exhibition(context)
LF_Battle_Start(context, evt)
end
return 0
end
function LF_Clear_Exhibition(context)
local uid_list = ScriptLib.GetSceneUidList(context)
for i, v in pairs(uid_list) do
for j, n in pairs(exhibition_toClear) do
--ScriptLib.PrintContextLog(context, "[WinterCampMimik] Handle exhibition_toClear. uid@"..v.." key@"..n)
ScriptLib.ClearExhibitionReplaceableData(context, v, n)
end
--清除Team上残留的标识SGV
for k, m in pairs(SGVMark_toClear) do
ScriptLib.SetTeamServerGlobalValue(context, v, m, 0)
end
end
return 0
end
--战斗开始流程
function LF_Battle_Start(context, evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Battle_Start Called.")
--环境小动物关闭
ScriptLib.SwitchSceneEnvAnimal(context, 0)
for k,v in pairs(defs.add_onStart) do
ScriptLib.AddExtraGroupSuite(context, cfg.group_id, v)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Add Suit on Battle Start@"..v)
end
ScriptLib.SetMonsterBattleByGroup(context, defs.boss_id, cfg.group_id)
return 0
end
--Boss通知关闭暖源禁止交互
function SLC_Close_WarmPoint(context, evt)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
for k,v in pairs(defs.heat_id) do
ScriptLib.SetGadgetStateByConfigId(context, v, GadgetState.Default)
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, v, false)
end
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get SLC from Boss, But challenge_state is not 1.")
end
return 0
end
--Boss请求获取联机玩家数量
function SLC_Get_PlayerCount(context)
local uidList = ScriptLib.GetSceneUidList(context)
local num = #uidList
ScriptLib.PrintContextLog(context, "[WinterCampMimik] SLC_Get_PlayerCount. result@"..num)
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.boss_id, "SGV_Mimik_PlayerNum", num)
return 0
end
function LF_Reset_WarmPoint(context,evt)
for k,v in pairs(defs.heat_id) do
ScriptLib.SetGadgetStateByConfigId(context, v, GadgetState.GearStart)
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, v, true)
end
return 0
end
function action_battle_result(context,evt)
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--优化圈移除
ScriptLib.RemoveEntityByConfigId(context, cfg.group_id, EntityType.REGION, 66008)
--胜利结束
if evt.param3 == 1 then
ScriptLib.CreateScenePlayGeneralRewardGadget(context, {group_id = cfg.group_id, config_id = defs.gadget_reward})
LF_ResetBattle(context)
--失败结束
elseif evt.param3 == 0 then
LF_ResetBattle(context)
end
return 0
end
--战斗结束重置Group状态和标志位
function LF_ResetBattle(context,evt)
ScriptLib.SetGroupVariableValue(context, "challenge_state", 0)
--ScriptLib.SetGadgetStateByConfigId(context, defs.gadget_starter, GadgetState.Default)
ScriptLib.RefreshGroup(context,{group_id=cfg.group_id,suite=1})
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, defs.gadget_starter, true)
for k,v in pairs(defs.add_onStart) do
ScriptLib.RemoveExtraGroupSuite(context, cfg.group_id, v)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Remove Suit on Battle End@"..v)
end
--移除优化圈所在suit 取最后一个suit
ScriptLib.RemoveExtraGroupSuite(context, cfg.group_id, #suites)
return 0
end
function action_battle_interrupt(context, evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] battle_interrupt Triggered.")
LF_ResetBattle(context)
return 0
end
function action_all_player_die(context, evt)
local uid_list=ScriptLib.GetSceneUidList(context)
--检查存活
local cnt = #uid_list
for i,v in ipairs(uid_list) do
if ScriptLib.IsPlayerAllAvatarDie(context, v) then
cnt = cnt - 1
end
end
if cnt <= 0 then
ScriptLib.PrintContextLog(context, "[WinterCampMimik] All Player Die.")
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
return 0
end
--检查全部离场
if LF_Check_AllPlayer_OutRegion(context, 66004) then
ScriptLib.PrintContextLog(context, "[WinterCampMimik] All Player Out Region.")
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
return 0
end
return 0
end
function action_any_monster_die(context, evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Monster Die Triggered. ConfigID@"..evt.param1)
if evt.param1 == defs.boss_id then
ScriptLib.AddScenePlayBattleProgress(context, cfg.group_id, 1)
else
end
return 0
end
function action_enter_OptimizRegion(context,evt)
if evt.param1 ~= 66004 then
return 0
end
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Enter optimiz_region. UID@"..context.uid )
ScriptLib.SetPlayerEyePoint(context, 66004, 66008)
--ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
--ScriptLib.ForbidPlayerRegionVision(context, context.uid)
ScriptLib.SetLimitOptimization(context, context.uid, true)
return 0
end
function action_leave_OptimizRegion(context,evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Leave optimiz_region. UID@"..context.uid.." RegionID@"..evt.param1)
--小圈检查场内玩家数量
if evt.param1 == 66004 then
if LF_Check_AllPlayer_OutRegion(context,66004) then
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
end
--大圈清eyePoint
elseif evt.param1 == 66008 then
ScriptLib.ClearPlayerEyePoint(context, 66004)
ScriptLib.SetLimitOptimization(context, context.uid, false)
end
return 0
end
--Boss脱战通知
function SLC_Boss_OutOfBattle(context)
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
return 0
end
--卸载保护
function action_group_will_unload( context, evt )
ScriptLib.RemoveEntityByConfigId(context, cfg.group_id, EntityType.REGION, 66008)
ScriptLib.FailScenePlayBattle(context, cfg.group_id)
return 0
end
--以性能圈判断,玩家是否全部离场
function LF_Check_AllPlayer_OutRegion(context,region_id)
--非战斗阶段 跳过
if ScriptLib.GetGroupVariableValue(context, "challenge_state") ~= 1 then
return false
end
local eid = ScriptLib.GetEntityIdByConfigId(context, region_id)
local count = ScriptLib.GetRegionEntityCount(context, { region_eid = eid, entity_type = EntityType.AVATAR })
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Count player in Battle Field: RegionID@"..region_id.. "PlayerCount@".. count)
if count < 1 then
return true
end
return false
end
--Boss通知在点位上创建Gadgetparam10-招怪物件 1-发子弹物件
function SLC_TryCreateGadget(context, param1)
local point_index = 0
local point_configID = 0
point_index = LF_Get_RandomAvailiblePoint_Index(context, param1)
if point_index == 0 then
return 0
end
if param1 == 0 then
point_configID = defs.point_list[point_index]
ScriptLib.PrintContextLog(context, "[WinterCampMimik] To Create gadget. gadget@"..defs.summoner_list[point_index].." at Point@"..point_configID.." (Index@"..point_index..")")
--pointIndex和gadget池index对应
ScriptLib.CreateGadgetByConfigIdByPos(context, defs.summoner_list[point_index], gadgets[point_configID].pos, gadgets[point_configID].rot)
elseif param1 == 1 then
point_configID = defs.point_list[point_index]
ScriptLib.PrintContextLog(context, "[WinterCampMimik] To Create gadget. gadget@"..defs.shooter_list[point_index].." at Point@"..point_configID.." (Index@"..point_index..")")
--pointIndex和gadget池index对应
ScriptLib.CreateGadgetByConfigIdByPos(context, defs.shooter_list[point_index], gadgets[point_configID].pos, gadgets[point_configID].rot)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get Unknown SLC param. Please check Boss ability.")
end
return 0
end
--招怪的物件通知在附近招怪 param1:招怪数量。
--全局招怪上限为5招怪池被用尽了的话即使再接到招怪SLC也不会再招
function SLC_GadgetTryCreateMonster(context, param1)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Get SLC_GadgetTryCreateMonster. MonsterCount@"..param1)
if param1 >5 then
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# SLC_GadgetTryCreateMonster param cannot larger than 5. Please check ability.")
return 0
end
local pos = ScriptLib.GetPosByEntityId(context, context.source_entity_id)
--local rot = ScriptLib.GetRotationByEntityId(context, context.source_entity_id)
local rot = { x = 0, y = 0, z = 0 }
local r = 2
for i = 1, param1 do
local summon_pos = LF_GetRandomPosition(context, r, pos)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_GetRandomPosition. X@"..summon_pos.x.." Y@"..summon_pos.y.." Z@"..summon_pos.z)
--ScriptLib.PrintContextLog(context, "[WinterCampMimik] GetRotationByEntityId. rotX@"..rot.x.." rotY@"..rot.y.." rotZ@"..rot.z)
--ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Try_SummonMonster. posX@"..pos_list[i].x .." posZ@"..pos_list[i].z .." rot@"..rot)
LF_Try_SummonMonster(context,summon_pos,rot)
end
return 0
end
--返回五个随机点
function LF_GetRandomPosition(context, radius, pos)
local pos_result = {x = 0, y = 0, z = 0}
math.randomseed(ScriptLib.GetServerTime(context))
pos_result.x = math.floor(pos.x + (2*math.random()-1)*radius)
pos_result.y = math.floor(pos.y)
pos_result.z = math.floor(pos.z + (2*math.random()-1)*radius)
return pos_result
end
function LF_Try_SummonMonster(context,pos,rot)
--如果config_id已存在接口会返回-2
for i = 1, #defs.monster_list do
local config_id = defs.monster_list[i]
local ret = ScriptLib.CreateMonsterByConfigIdByPos(context, config_id, pos, rot)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Try_SummonMonster. configID@"..config_id.." ret@"..ret)
if ret == 0 then
--成功创建了就停 通知怪物入战
ScriptLib.SetMonsterBattleByGroup(context, config_id, cfg.group_id)
break
end
end
return 0
end
function SLC_KillBossGadget(context,param1) --param1 1射击物件 0招怪物件
if param1 == 0 or param1 == 1 then
local configId = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.KillGroupEntity(context,{ group_id = cfg.group_id, gadgets = {configId}})
LF_Set_PointAvailible_OnGadgetDie(context, param1, evt.param1)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# SLC_KillBossGadget Get Unknown Param: @"..param1)
end
return 0
end
function action_gadget_die(context,evt)
local gadget_id = gadgets[evt.param1].gadget_id
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Get Gadget_Die. gadgetID@"..gadget_id)
--42601027 射击物件
if gadget_id == 42601027 then
LF_Set_PointAvailible_OnGadgetDie(context, 1, evt.param1)
--42601028 招怪物件
elseif gadget_id == 42601028 then
LF_Set_PointAvailible_OnGadgetDie(context, 0, evt.param1)
end
return 0
end
--从point_list中返回一个随机的、gadgetState为0的点,并把这个点gadgetState设为非零
-- 占用状态 201 物件池中的物件index各自对应一个点
function LF_Get_RandomAvailiblePoint_Index(context, gadget_type)
local availible_points = {}
--找所有空闲的点
for k,v in pairs(defs.point_list) do
if ScriptLib.GetGadgetStateByConfigId(context, 0, v) == 0 then
table.insert(availible_points, v)
end
end
if #availible_points > 0 then
--抓个壮丁
local rand_index = 0
math.randomseed(ScriptLib.GetServerTime(context))
rand_index = math.random(#availible_points)
--mark他
if gadget_type == 0 then
ScriptLib.SetGadgetStateByConfigId(context, availible_points[rand_index], 201)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Set Point Usage Mark. configID@"..availible_points[rand_index].." gadget_type@"..gadget_type)
elseif gadget_type == 1 then
ScriptLib.SetGadgetStateByConfigId(context, availible_points[rand_index], 201)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Set Point Usage Mark. configID@"..availible_points[rand_index].." gadget_type@"..gadget_type)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get an Unkown gadget_type. Tell TD.")
end
--返回被mark的point的原始Index
local mark_index = GetIndexByValue(context, availible_points[rand_index],defs.point_list)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] mark_index @"..mark_index)
return mark_index
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Failed to Get an availible point.")
end
return 0
end
--找到一个point_list中gadgetState不为0的点设为0可用状态参数为Gadget的configID
function LF_Set_PointAvailible_OnGadgetDie(context, gadget_type, die_gadget)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Set_PointAvailible_OnGadgetDie. die_gadget@"..die_gadget)
local point_index = 0
if gadget_type == 1 then
point_index = GetIndexByValue(context, die_gadget,defs.shooter_list)
else
point_index = GetIndexByValue(context, die_gadget,defs.summoner_list)
end
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Try Release a point. configID@"..defs.point_list[point_index])
ScriptLib.SetGadgetStateByConfigId(context, defs.point_list[point_index], 0)
return 0
end
function GetIndexByValue(context, value, check_table)
for i=1, #check_table do
if value == check_table[i] then
return i
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,398 @@
--[[
2.3雪山活动 冰骗骗花任务版 无ScenePlay 仅Boss逻辑
Group加载直接开打
]]
--[[
local defs = {
--战斗开始加载suit空气墙等
add_onStart = {2},
--开启流程的操作台configID
gadget_starter = 66007
,
--领奖台configID
gadget_reward = 66003,
--Boss的ConfigID
boss_id = 66005,
--暖源的IDlist
heat_id =
{66009,66010,66011},
--点位configID
point_list = {66012,66013,66014},
--招怪池
monster_list = {66025,66026,66027,66028,66029},
--招gadget池-召唤
summoner_list = {66022,66023,66024},
--招gadget池-射击
shooter_list = {66019,66020,66021}
}
]]
local cfg = {
group_id = 133002108,
--play_type = 5,
--play_id = 5,
}
local optimizSuite = {
{
monsters = { },
gadgets = { },
regions = {108024,108025},--固定ID。 Not in any Suite
triggers = { "Enter_Optimiz_Region","Leave_Optimiz_Region"},
rand_weight = 100
}
}
local extraTriggers={
{ name = "Monster_Die", config_id = 8000001, event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_any_monster_die", trigger_count = 0 },
{ name = "Enter_Optimiz_Region", config_id = 8000002, event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ name = "Leave_Optimiz_Region", config_id = 8000003, event = EventType.EVENT_LEAVE_REGION, source = "", condition = "", action = "action_leave_OptimizRegion", trigger_count = 0 },
{ name = "Group_Load", config_id = 8000004, event = EventType.EVENT_GROUP_LOAD, source = "", condition = "", action = "action_group_load", trigger_count = 0},
{ name = "Group_UnLoad", config_id = 8000005, event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
--Boss战斗流程Trigger
{ name = "Gadget_Die", config_id = 8200001, event = EventType.EVENT_ANY_GADGET_DIE, source = "", condition = "", action = "action_gadget_die", trigger_count = 0},
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
for i,v in ipairs(optimizSuite) do
table.insert(suites, v)
end
--挑战状态标记
table.insert(variables,{ config_id=50000001,name = "challenge_state", value = 0})
end
function action_group_load(context, evt)
LF_Battle_Start(context)
return 0
end
--战斗开始流程
function LF_Battle_Start(context)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Battle_Start Called.")
--环境小动物关闭
ScriptLib.SwitchSceneEnvAnimal(context, 0)
--加载优化圈所在suit 取最后一个suit
ScriptLib.AddExtraGroupSuite(context, cfg.group_id, #suites)
--[[ 任务版InitSuite是2无需add
for k,v in pairs(defs.add_onStart) do
ScriptLib.AddExtraGroupSuite(context, cfg.group_id, v)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Add Suit on Battle Start@"..v)
end]]
--ScriptLib.SetMonsterBattleByGroup(context, defs.boss_id, cfg.group_id)
return 0
end
--Group卸载保护
function action_group_will_unload(context, evt)
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
return 0
end
--Boss通知关闭暖源禁止交互
function SLC_Close_WarmPoint(context, param1)
if ScriptLib.GetGroupVariableValue(context, "challenge_state") == 1 then
for k,v in pairs(defs.heat_id) do
ScriptLib.SetGadgetStateByConfigId(context, v, GadgetState.Default)
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, v, false)
end
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get SLC from Boss, But challenge_state is not 1.")
end
return 0
end
--Boss请求获取联机玩家数量
function SLC_Get_PlayerCount(context)
local uidList = ScriptLib.GetSceneUidList(context)
local num = #uidList
ScriptLib.PrintContextLog(context, "[WinterCampMimik] SLC_Get_PlayerCount. result@"..num)
ScriptLib.SetEntityServerGlobalValueByConfigId(context, defs.boss_id, "SGV_Mimik_PlayerNum", num)
return 0
end
function LF_Reset_WarmPoint(context)
for k,v in pairs(defs.heat_id) do
ScriptLib.SetGadgetStateByConfigId(context, v, GadgetState.GearStart)
ScriptLib.SetGadgetEnableInteract(context, cfg.group_id, v, true)
end
return 0
end
function LF_Battle_Finish(context)
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
for k,v in pairs(defs.add_onStart) do
ScriptLib.RemoveExtraGroupSuite(context, cfg.group_id, v)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Remove Suit on Battle End@"..v)
end
--移除优化圈所在suit 取最后一个suit
ScriptLib.RemoveExtraGroupSuite(context, cfg.group_id, #suites)
ScriptLib.SetGroupVariableValue(context, "challenge_state", 2)
return 0
end
function action_any_monster_die(context, evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Monster Die Triggered. ConfigID@"..evt.param1)
if evt.param1 == defs.boss_id then
LF_Battle_Finish(context)
end
return 0
end
function action_enter_OptimizRegion(context,evt)
if evt.param1 ~= 108024 then
return 0
end
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Enter optimiz_region. UID@"..context.uid )
ScriptLib.SetPlayerEyePoint(context, 108024, 108025)
--ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
--ScriptLib.ForbidPlayerRegionVision(context, context.uid)
ScriptLib.SetLimitOptimization(context, context.uid, true)
return 0
end
function action_leave_OptimizRegion(context,evt)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Leave optimiz_region. UID@"..context.uid.." RegionID@"..evt.param1)
--如果是内圈,检查场内玩家数量
if evt.param1 == 108024 then
if LF_Check_AllPlayer_OutRegion(context) then
--ScriptLib.FailScenePlayBattle(context, cfg.group_id) 任务版无ScenePlay
end
end
--如果是外圈清EyePoint
if evt.param1 ~= 108025 then
ScriptLib.ClearPlayerEyePoint(context, 108024)
--ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
--ScriptLib.RevertPlayerRegionVision(context, context.uid)
ScriptLib.SetLimitOptimization(context, context.uid, false)
end
return 0
end
--Boss脱战通知
function SLC_Boss_OutOfBattle(context)
--ScriptLib.FailScenePlayBattle(context, cfg.group_id)
return 0
end
--以性能圈的内圈判断,玩家是否全部离场
function LF_Check_AllPlayer_OutRegion(context)
local eid = ScriptLib.GetEntityIdByConfigId(context, 108024)
local count = ScriptLib.GetRegionEntityCount(context, { region_eid = eid, entity_type = EntityType.AVATAR })
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Count player in Battle Field: Count@".. count)
if count < 1 then
return true
end
return false
end
--Boss通知在点位上创建Gadgetparam10-招怪物件 1-发子弹物件
function SLC_TryCreateGadget(context, param1)
local point_index = 0
local point_configID = 0
point_index = LF_Get_RandomAvailiblePoint_Index(context, param1)
if point_index == 0 then
return 0
end
if param1 == 0 then
point_configID = defs.point_list[point_index]
ScriptLib.PrintContextLog(context, "[WinterCampMimik] To Create gadget. gadget@"..defs.summoner_list[point_index].." at Point@"..point_configID.." (Index@"..point_index..")")
--pointIndex和gadget池index对应
ScriptLib.CreateGadgetByConfigIdByPos(context, defs.summoner_list[point_index], gadgets[point_configID].pos, gadgets[point_configID].rot)
elseif param1 == 1 then
point_configID = defs.point_list[point_index]
ScriptLib.PrintContextLog(context, "[WinterCampMimik] To Create gadget. gadget@"..defs.shooter_list[point_index].." at Point@"..point_configID.." (Index@"..point_index..")")
--pointIndex和gadget池index对应
ScriptLib.CreateGadgetByConfigIdByPos(context, defs.shooter_list[point_index], gadgets[point_configID].pos, gadgets[point_configID].rot)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get Unknown SLC param. Please check Boss ability.")
end
return 0
end
--招怪的物件通知在附近招怪 param1:招怪数量。
--全局招怪上限为5招怪池被用尽了的话即使再接到招怪SLC也不会再招
function SLC_GadgetTryCreateMonster(context, param1)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Get SLC_GadgetTryCreateMonster. MonsterCount@"..param1)
if param1 >5 then
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# SLC_GadgetTryCreateMonster param cannot larger than 5. Please check ability.")
return 0
end
local pos = ScriptLib.GetPosByEntityId(context, context.source_entity_id)
--local rot = ScriptLib.GetRotationByEntityId(context, context.source_entity_id)
local rot = { x = 0, y = 0, z = 0 }
local r = 5
for i = 1, param1 do
local summon_pos = LF_GetRandomPosition(context, r, pos)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_GetRandomPosition. X@"..summon_pos.x.." Y@"..summon_pos.y.." Z@"..summon_pos.z)
--ScriptLib.PrintContextLog(context, "[WinterCampMimik] GetRotationByEntityId. rotX@"..rot.x.." rotY@"..rot.y.." rotZ@"..rot.z)
--ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Try_SummonMonster. posX@"..pos_list[i].x .." posZ@"..pos_list[i].z .." rot@"..rot)
LF_Try_SummonMonster(context,summon_pos,rot)
end
return 0
end
--返回五个随机点
function LF_GetRandomPosition(context, radius, pos)
local pos_result = {x = 0, y = 0, z = 0}
math.randomseed(ScriptLib.GetServerTime(context))
pos_result.x = math.floor(pos.x + (2*math.random()-1)*radius)
pos_result.y = math.floor(pos.y)
pos_result.z = math.floor(pos.z + (2*math.random()-1)*radius)
return pos_result
end
function LF_Try_SummonMonster(context,pos,rot)
--如果config_id已存在接口会返回-2
for i = 1, #defs.monster_list do
local config_id = defs.monster_list[i]
local ret = ScriptLib.CreateMonsterByConfigIdByPos(context, config_id, pos, rot)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Try_SummonMonster. configID@"..config_id.." ret@"..ret)
if ret == 0 then
--成功创建了就停 通知怪物入战
ScriptLib.SetMonsterBattleByGroup(context, config_id, cfg.group_id)
break
end
end
return 0
end
function SLC_KillBossGadget(context,param1) --param1 1射击物件 0招怪物件
if param1 == 0 or param1 == 1 then
local configId = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.KillGroupEntity(context,{ group_id = cfg.group_id, gadgets = {configId}})
LF_Set_PointAvailible_OnGadgetDie(context, param1, evt.param1)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# SLC_KillBossGadget Get Unknown Param: @"..param1)
end
return 0
end
function action_gadget_die(context,evt)
local gadget_id = gadgets[evt.param1].gadget_id
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Get Gadget_Die. gadgetID@"..gadget_id)
--42601027 射击物件
if gadget_id == 42601027 then
LF_Set_PointAvailible_OnGadgetDie(context, 1, evt.param1)
--42601028 招怪物件
elseif gadget_id == 42601028 then
LF_Set_PointAvailible_OnGadgetDie(context, 0, evt.param1)
end
return 0
end
--从point_list中返回一个随机的、gadgetState为0的点,并把这个点gadgetState设为非零
-- 占用状态 201 物件池中的物件index各自对应一个点
function LF_Get_RandomAvailiblePoint_Index(context, gadget_type)
local availible_points = {}
--找所有空闲的点
for k,v in pairs(defs.point_list) do
if ScriptLib.GetGadgetStateByConfigId(context, 0, v) == 0 then
table.insert(availible_points, v)
end
end
if #availible_points > 0 then
--抓个壮丁
local rand_index = 0
math.randomseed(ScriptLib.GetServerTime(context))
rand_index = math.random(#availible_points)
--mark他
if gadget_type == 0 then
ScriptLib.SetGadgetStateByConfigId(context, availible_points[rand_index], 201)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Set Point Usage Mark. configID@"..availible_points[rand_index].." gadget_type@"..gadget_type)
elseif gadget_type == 1 then
ScriptLib.SetGadgetStateByConfigId(context, availible_points[rand_index], 201)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Set Point Usage Mark. configID@"..availible_points[rand_index].." gadget_type@"..gadget_type)
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Get an Unkown gadget_type. Tell TD.")
end
--返回被mark的point的原始Index
local mark_index = GetIndexByValue(context, availible_points[rand_index],defs.point_list)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] mark_index @"..mark_index)
return mark_index
else
ScriptLib.PrintContextLog(context, "[WinterCampMimik] #WARN# Failed to Get an availible point.")
end
return 0
end
--找到一个point_list中gadgetState不为0的点设为0可用状态参数为Gadget的configID
function LF_Set_PointAvailible_OnGadgetDie(context, gadget_type, die_gadget)
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_Set_PointAvailible_OnGadgetDie. die_gadget@"..die_gadget)
local point_index = 0
if gadget_type == 1 then
point_index = GetIndexByValue(context, die_gadget,defs.shooter_list)
else
point_index = GetIndexByValue(context, die_gadget,defs.summoner_list)
end
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Try Release a point. configID@"..defs.point_list[point_index])
ScriptLib.SetGadgetStateByConfigId(context, defs.point_list[point_index], 0)
return 0
end
function GetIndexByValue(context, value, check_table)
for i=1, #check_table do
if value == check_table[i] then
return i
end
end
return 0
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,117 @@
--[[
2.3雪山活动 冰骗骗花ScenePlay
]]
local cfg_watcher = {
--果实召唤怪ID
summon_monsterId = 20010901,
}
local watcher_triggers={
--{ name = "Monster_Die", config_id = 8300001, event = EventType.EVENT_ANY_MONSTER_DIE, source = "", condition = "", action = "action_any_monster_die", trigger_count = 0 },
{ name = "Monster_Die_Before_Leave_Scene", config_id = 8300001, event = EventType.EVENT_MONSTER_DIE_BEFORE_LEAVE_SCENE, source = "", condition = "", action = "action_Monster_Die_BeforeLeaveScene", trigger_count = 0 }
}
function LF_Initialize_Watcher(triggers, suites)
for i=1,#watcher_triggers do
table.insert(triggers, watcher_triggers[i])
table.insert(suites[init_config.suite].triggers,watcher_triggers[i].name)
end
end
function action_Monster_Die_BeforeLeaveScene(context, evt)
if evt.param1 == defs.boss_id then
ScriptLib.PrintContextLog(context, "[WinterCampMimik] Boss killed by uid@"..evt.param2)
LF_Mimik_Killer(context, evt.param2)
LF_ReportSkillExhibition(context)
else
local monster_id = monsters[evt.param1].monster_id
if monster_id == cfg_watcher.summon_monsterId then
LF_Summon_Monster_Killed(context, evt.param2)
end
end
return 0
end
--玩家击回果实
function SLC_Player_HitBack(context, evt)
LF_Player_HitBack(context, context.uid)
return 0
end
--玩家拾取结晶
function SLC_Player_PickUp(context, evt)
LF_Player_PickUp(context, context.uid)
--标记拾取过结晶的玩家
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_Mimik_PickUped", 1)
return 0
end
--被SkillA打到的玩家做个标记
function SLC_Watcher_OnHitBy_SkillA(context)
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_HitByMimik_SkillA", 1)
return 0
end
--被SkillB打到的玩家做个标记
function SLC_Watcher_OnHitBy_SkillB(context)
ScriptLib.SetTeamServerGlobalValue(context, context.uid, "SGV_HitByMimik_SkillB", 1)
return 0
end
--战斗胜利时,未被除名的玩家上传陈列室
function LF_ReportSkillExhibition(context)
local uid_list = ScriptLib.GetSceneUidList(context)
for i, v in ipairs(uid_list) do
local resultA = ScriptLib.GetTeamServerGlobalValue(context, v, "SGV_HitByMimik_SkillA")
local resultB = ScriptLib.GetTeamServerGlobalValue(context, v, "SGV_HitByMimik_SkillB")
local hasPickUp = ScriptLib.GetTeamServerGlobalValue(context, v, "SGV_Mimik_PickUped")
ScriptLib.PrintContextLog(context, "[WinterCampMimik] LF_ReportSkillExhibition. UID@"..v.." resultA@"..resultA.." resultB"..resultB.." hasPickUp@"..hasPickUp)
if resultA ~= 1 then
ScriptLib.AddExhibitionReplaceableData(context, v, "WinterCamp_Boss_NoHitBySkillA", 1)
end
if resultB ~= 1 then
ScriptLib.AddExhibitionReplaceableData(context, v, "WinterCamp_Boss_NoHitBySkillB", 1)
end
if hasPickUp ~= 1 then
ScriptLib.AddExhibitionReplaceableData(context, v, "WinterCamp_Boss_NoPickUp", 1)
end
end
return 0
end
--写陈列室 - 降下最后一击的玩家
function LF_Mimik_Killer(context, uid)
ScriptLib.AddExhibitionReplaceableData(context, uid, "WinterCamp_Boss_Mimik_Killer", 1)
return 0
end
--写陈列室 - 果实召唤怪的击杀数
function LF_Summon_Monster_Killed(context, uid)
--单局
ScriptLib.AddExhibitionReplaceableData(context, uid, "WinterCamp_Boss_SummonMonster_Killed", 1)
--累计
ScriptLib.AddExhibitionAccumulableData(context, uid, "WinterCamp_Boss_SummonMonster_KilledTotal", 1)
return 0
end
--写陈列室 - 击回果实数
function LF_Player_HitBack(context, uid)
ScriptLib.AddExhibitionReplaceableData(context, uid, "WinterCamp_Boss_HitBack", 1)
return 0
end
--写陈列室 - 拾取能量结晶数
function LF_Player_PickUp(context, uid)
ScriptLib.AddExhibitionReplaceableData(context, uid, "WinterCamp_Boss_PickUp", 1)
return 0
end
LF_Initialize_Watcher(triggers, suites)

View File

@@ -0,0 +1,462 @@
--- ServerUploadTool Save to [/root/env/data/lua/common/V2_3] ---
--[[
2.3雪山活动 铁人三项跑酷
单Group版
]]
--[[
local defs = {
gallery_id = ,
group_id = ,
--开启机关交互后,加载哪个/些suit
load_on_start = {2},
--开启机关的configIDSelectOption为175
starter_gadget = 0,
--全程终点region的ConfigID
end_region = 0,
--玩法RegionID进入此圈开启性能优化在suit1
optimiz_region = {},
--全程终点在哪个suit,如果这个group非终点则配0
ending_suit = 0,
--挑战限时秒
challenge_time = 300,
--金币和冰柱的对应关系
--[冰柱config_id]={金币config_id1,金币config_id2...}
coin_ice = {
[108010] = {108015,108023},
[108011] = {108017,108024},
[108012] = {108019,108025},
},
--镜头注目
look_pos = {x=555, y=555, z=555},
duration = 2,
}
]]
local triggers_start={
--测试用
--[[{ config_id = 8000000, name = "Test_GM", event = EventType.EVENT_VARIABLE_CHANGE, source = "testGM", condition = "", action = "", trigger_count = 0, tag = "100"},
{ config_id = 80000010, name = "Challenge_SuccessTest", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0},]]
{ config_id = 8000001, name = "Select_Option", event = EventType.EVENT_SELECT_OPTION, source = "", condition = "", action = "action_select_option", trigger_count = 0 },
{ config_id = 8000002, name = "Challenge_Fail", event = EventType.EVENT_CHALLENGE_FAIL, source = "",condition = "",action = "action_challenge_fail",trigger_count= 0},
{ config_id = 8000003, name = "Coin_Get", event = EventType.EVENT_VARIABLE_CHANGE, source = "coin_counter", condition = "", action = "", trigger_count = 0, tag = "888"},
{ config_id = 8000004, name = "Spec_Coin_Get", event = EventType.EVENT_VARIABLE_CHANGE, source = "spec_coin_counter", condition = "", action = "", trigger_count = 0, tag = "999"},
--玩法RegionID进入此圈开启性能优化放在load_on_start第一个suit里
{ config_id = 8000005, name = "Enter_Optimiz_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_OptimizRegion", trigger_count = 0 },
{ config_id = 8000006, name = "Leave_Optimiz_Region", event = EventType.EVENT_LEAVE_REGION, source = "",condition = "",action = "action_leave_OptimizRegion",trigger_count= 0},
{ config_id = 8000007, name = "Group_Will_Unload", event = EventType.EVENT_GROUP_WILL_UNLOAD, source = "", condition = "", action = "action_group_will_unload", trigger_count = 0},
{ config_id = 8000008, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0},
}
--[[local triggers_optimiz = {
}]]
local triggers_end={
--终点的trigger单独拿出来以备同一赛道需要多个Group
{ config_id = 8100001, name = "Enter_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "condition_enter_final", action = "", trigger_count = 0, tag = "666" },
{ config_id = 8100002, name = "Challenge_Success", event = EventType.EVENT_CHALLENGE_SUCCESS, source = "",condition = "",action = "action_challenge_success",trigger_count= 0}
}
function LF_Initialize_Group(triggers, suites)
--起点用触发器
for k,v in pairs(triggers_start) do
table.insert(triggers, v)
table.insert(suites[1].triggers, v.name)
end
--[[--性能优化圈用触发器
for k,v in pairs(triggers_optimiz) do
table.insert(triggers, v)
table.insert(suites[defs.optimiz_suit].triggers, v.name)
end]]
--全程结尾触发器 终点的trigger单独拿出来以备同一赛道需要多个Group
for k,v in pairs(triggers_end) do
table.insert(triggers, v)
table.insert(suites[defs.ending_suit].triggers, v.name)
end
table.insert(variables,{ config_id=50000001,name = "coin_counter", value = 0})
table.insert(variables,{ config_id=50000002,name = "spec_coin_counter", value = 0})
return 0
end
function action_enter_TutorialRegion(context, evt)
if defs.guide_regionID == nil then
return 0
elseif evt.param1 == defs.guide_regionID then
LF_Try_StartTutorial(context)
end
return 0
end
function LF_Try_StartTutorial(context)
local UidList = ScriptLib.GetSceneUidList(context)
local ownerUid = UidList[1]
local havePlayed = ScriptLib.GetExhibitionAccumulableData(context, ownerUid, 10901102)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 834, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Parkour_HavePlayed", 1)
end
return 0
end
--统计纹章。0普通 1限时
function SLC_WinterCampCoinGet(context,param1)
ScriptLib.PrintContextLog(context, "[WinterCamp] Got SLC_WinterCampCoinGet. param@"..param1 )
if param1 == 0 then
--触发挑战Trigger
ScriptLib.ChangeGroupVariableValue(context, "coin_counter", 1)
elseif param1 == 1 then
--触发挑战Trigger
ScriptLib.ChangeGroupVariableValue(context, "spec_coin_counter", 1)
end
--["pick_up"] 0普通金币 1限时币 2大跳 3盾 4体力
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["pick_up"] = param1})
return 0
end
--机关开启处理
function action_select_option(context, evt)
--检查SelectOption
if defs.starter_gadget ~= evt.param1 or 175 ~= evt.param2 then
return -1
end
--检查是否单机
if true == ScriptLib.CheckIsInMpMode(context) then
--local starter_entity = ScriptLib.GetEntityIdByConfigId(context, defs.starter_gadget)
--local center = ScriptLib.GetPosByEntityId(context, starter_entity)--这个接口取到的小数位数太多 没法直接用
for k,v in pairs(gadgets) do
if k == defs.starter_gadget then
center = v.pos
break
end
end
ScriptLib.ShowReminderRadius(context, 400053, center, 2)
return -1
end
--LD用多个Region覆盖赛道范围这个变量用于判断是否出圈
ScriptLib.SetGroupTempValue(context, "is_in_region", 0, {})
--切操作台状态
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.GearStart)
--去掉操作台SelectOption
ScriptLib.DelWorktopOptionByGroupId(context, defs.group_id, defs.starter_gadget, 175)
--加载第一波suit
for k,v in pairs(defs.load_on_start) do
ScriptLib.AddExtraGroupSuite(context, defs.group_id, v)
end
--环境小动物关闭
ScriptLib.SwitchSceneEnvAnimal(context, 0)
--VisionType 龙血古树赛道不屏蔽3 神像赛道不屏蔽5
if defs.group_id == 133008671 then
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0,3})
elseif defs.group_id == 133008673 then
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0,5})
else
ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {0})
end
ScriptLib.ForbidPlayerRegionVision(context, context.uid)
--起Gallery
ScriptLib.StartGallery(context, defs.gallery_id)
InitChallenge(context)
--镜头注目
CameraAction(context)
--关闭其他营地黄圈
LF_Close_OtherHintCircle(context)
return 0
end
function InitChallenge(context)
--设置标记
ScriptLib.SetGroupTempValue(context, "challenge_state", 1, {})
--ScriptLib.PrintContextLog(context, "[WinterCamp] Gallery Started. gallery_id@"..evt.param1)
--起挑战
ScriptLib.CreateFatherChallenge(context, 1, defs.father_challenge, defs.challenge_time, {success = 10, fail = 5})
--先开再attach给子挑战保序
ScriptLib.StartFatherChallenge(context,1)
ScriptLib.AttachChildChallenge(context,1, 2003003, 2003003,{4, 666,1,1},{},{success = 10,fail = 5}) --限时到达
ScriptLib.AttachChildChallenge(context, 1, 2003004, 2003004,{3, 888,999},{},{success = 0,fail = 0}) --收集普通纹章
ScriptLib.AttachChildChallenge(context, 1, 2003005, 2003005,{3, 999,999},{},{success = 0,fail = 0}) --收集限时纹章
--ScriptLib.AttachChildChallenge(context, 2003002, 99999, 2003004,{3, 100,1,1},{},{success = 10,fail = 0}) -- 测试结算
return 0
end
function action_challenge_success(context,evt)
if evt.param1 ~= defs.father_challenge then
return -1
end
ScriptLib.SetGroupTempValue(context, "challenge_state", 0, {})
--终点kill特效
ScriptLib.KillEntityByConfigId(context, { group_id = defs.group_id, config_id = defs.end_gadget, entity_type = EntityType.GADGET })
for i = 2, (#suites-1) do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, i)
end
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--ScriptLib.SetPlayerGroupVisionType(context, {context.uid}, {1})
LF_RevertVisionType(context)
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
--设置操作台选项
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, defs.starter_gadget, {175})
ScriptLib.RefreshGroup(context, { group_id = defs.group_id, suite = 1 })
--重置变量
ScriptLib.SetGroupVariableValue(context, "spec_coin_counter", 0)
ScriptLib.SetGroupVariableValue(context, "coin_counter", 0)
--恢复其他营地黄圈
LF_Open_OtherHintCircle(context)
--停Gallery
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
--ScriptLib.StopGallery(context, defs.gallery_id, false)
ScriptLib.StopGalleryByReason(context, defs.gallery_id, 3)
return 0
end
function action_challenge_fail(context, evt)
--evt.param2剩余时间
if evt.param2 <= 0 then
LF_FailChallenge(context,1)
else
LF_FailChallenge(context,2)
end
return 0
end
function LF_FailChallenge(context,reason)
ScriptLib.SetGroupTempValue(context, "challenge_state", 0, {})
-- 设置操作台选项
ScriptLib.SetWorktopOptionsByGroupId(context, defs.group_id, defs.starter_gadget, {175})
for i = 2, #suites do
ScriptLib.RemoveExtraGroupSuite(context, defs.group_id, i)
end
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--ScriptLib.AddPlayerGroupVisionType(context, {context.uid}, {1})
LF_RevertVisionType(context)
ScriptLib.SetGadgetStateByConfigId(context, defs.starter_gadget, GadgetState.Default)
--重置变量
ScriptLib.SetGroupVariableValue(context, "spec_coin_counter", 0)
ScriptLib.SetGroupVariableValue(context, "coin_counter", 0)
--停Gallery
--ScriptLib.StopGallery(context, defs.gallery_id, true)
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
ScriptLib.StopGalleryByReason(context, defs.gallery_id, reason)
ScriptLib.RefreshGroup(context, { group_id = defs.group_id, suite = 1 })
--恢复其他营地黄圈
LF_Open_OtherHintCircle(context)
return 0
end
--跑酷期间,关闭其他两种活动营地的黄圈
--group bundle没在不会报错返回0 活动没开有warnin
function LF_Close_OtherHintCircle(context)
local explore_id = ScriptLib.WinterCampGetExploreGroupBundleId(context)
if explore_id ~= 0 then
ScriptLib.DeactivateGroupLinkBundleByBundleId(context, explore_id)
end
local battle_id = ScriptLib.WinterCampGetBattleGroupBundleId(context)
if battle_id ~= 0 then
ScriptLib.DeactivateGroupLinkBundleByBundleId(context, battle_id)
end
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Close Other HintCircle. explore_id@"..explore_id.." battle_id@"..battle_id)
return 0
end
--跑酷结束,恢复其他两种活动营地的黄圈
function LF_Open_OtherHintCircle(context)
local explore_id = ScriptLib.WinterCampGetExploreGroupBundleId(context)
if explore_id ~= 0 then
ScriptLib.ActivateGroupLinkBundleByBundleId(context, explore_id)
end
local battle_id = ScriptLib.WinterCampGetBattleGroupBundleId(context)
if battle_id ~= 0 then
ScriptLib.ActivateGroupLinkBundleByBundleId(context, battle_id)
end
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Open Other HintCircle. explore_id@"..explore_id.." battle_id@"..battle_id)
return 0
end
--含金币冰柱破碎通知对应的金币gadget切状态
function SLC_SpecialIcePillarBreak(context)
local cfg_id = ScriptLib.GetGadgetConfigId(context, {gadget_eid = context.source_entity_id})
ScriptLib.PrintContextLog(context, "[WinterCampParkour] Break Special IcePillar. cfg_id@"..cfg_id)
for k,v in pairs(defs.coin_ice) do
if k == cfg_id then
ChangeCoinState(context,v)
return 0
end
end
ScriptLib.PrintContextLog(context, "[WinterCamp] #WARN# Break an Special IcePillar with No Coins! Check defs.")
return -1
end
--将table中的金币设为可吃状态
function ChangeCoinState(context, coin_table)
for k,v in pairs(coin_table) do
ScriptLib.SetGadgetStateByConfigId(context, v, 0)
end
return 0
end
--上报获得buff球
function SLC_ReportBuffGet(context, param1)
--["pick_up"] 0普通金币 1限时币 2大跳 3盾 4体力
--ScriptLib.PrintContextLog(context, "[WinterCamp] Got SLC_ReportBuffGet. param@"..param1 )
ScriptLib.UpdatePlayerGalleryScore(context, defs.gallery_id, {["pick_up"] = param1})
return 0
end
function action_enter_OptimizRegion(context,evt)
--检查Region的configId是否是优化圈
if CheckIsInTable(context,evt.param1,defs.optimiz_region) then
ScriptLib.ChangeGroupTempValue(context, "is_in_region", 1, {})
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) == 1 then
--ScriptLib.SetPlayerEyePointStream(context, evt.param1, evt.param1, false)
ScriptLib.PrintContextLog(context, "[WinterCamp] Enter optimiz_region. Region_config_id@"..evt.param1 )
end
end
return 0
end
function action_leave_OptimizRegion(context,evt)
--检查Region的configId是否是优化圈
if CheckIsInTable(context,evt.param1,defs.optimiz_region) then
ScriptLib.ChangeGroupTempValue(context, "is_in_region", -1, {})
if ScriptLib.GetGroupTempValue(context, "challenge_state", {}) ~= 1 then
return 0
end
--ScriptLib.ClearPlayerEyePoint(context, evt.param1)
--如果完全出圈了,触发挑战失败
local is_in_region = ScriptLib.GetGroupTempValue(context, "is_in_region", {})
ScriptLib.PrintContextLog(context, "[WinterCamp] Leave optimiz_region. Region_config_id@"..evt.param1.." is_in_region@"..is_in_region)
if is_in_region <= 0 then
LF_FailChallenge(context,2)
end
end
return 0
end
--终点检查
function condition_enter_final(context, evt)
if evt.param1 ~= defs.end_region then
return false
end
return true
end
--卸载保护
function action_group_will_unload(context,evt)
--停Gallery
--ScriptLib.StopGallery(context, defs.gallery_id, true)
--StopGalleryByReason 0-NONE 1-超时 2-客户端中断 3-lua设置成功 4-lua设置失败
--[[[ScriptLib.StopGalleryByReason(context, defs.gallery_id, 4)
for k,v in pairs(defs.optimiz_region) do
ScriptLib.RemoveEntityByConfigId(context, defs.group_id, EntityType.REGION, v)
end]]
--环境小动物恢复
ScriptLib.SwitchSceneEnvAnimal(context, 2)
--VisionType恢复
LF_RevertVisionType(context)
return 0
end
function LF_RevertVisionType(context)
local uidList = ScriptLib.GetSceneUidList(context)
for k,v in pairs(uidList) do
ScriptLib.RevertPlayerRegionVision(context, v)
end
return 0
end
function CameraAction(context)
if defs.look_pos and defs.duration then
--触发镜头注目,强制注目形式,不广播其他玩家
local pos_follow = {x=0, y=0, z=0}
ScriptLib.BeginCameraSceneLook(context, { look_pos = defs.look_pos, is_allow_input = false, duration = defs.duration, is_force = true, is_broadcast = false, is_recover_keep_current = true, delay = 0,
is_set_follow_pos = false, follow_pos = pos_follow, is_force_walk = false, is_change_play_mode = false,
is_set_screen_XY = false, screen_x = 0, screen_y = 0 })
return 0
else
ScriptLib.PrintContextLog(context, "[WinterCamp] #WARN# Camera action config is nil, Please Check defs.")
end
return 0
end
--用于检查value是否在目标table中
function CheckIsInTable(context,value,check_table)
for i = 1,#check_table do
if check_table[i] == value then
return true
end
end
return false
end
LF_Initialize_Group(triggers, suites)

View File

@@ -0,0 +1,50 @@
--[[
2.3雪山活动 堆雪人 教学弹出
]]
--[[
local defs = {
guide_regionID = [configID],
}
]]
local extraTriggers={
{ config_id = 8000001, name = "Enter_Tutorial_Region", event = EventType.EVENT_ENTER_REGION, source = "", condition = "", action = "action_enter_TutorialRegion", trigger_count = 0}
}
function LF_Initialize_Group(triggers, suites)
for i=1,#extraTriggers do
table.insert(triggers, extraTriggers[i])
table.insert(suites[init_config.suite].triggers,extraTriggers[i].name)
end
end
function action_enter_TutorialRegion(context, evt)
if defs.guide_regionID == nil then
return 0
elseif evt.param1 == defs.guide_regionID then
LF_Try_StartTutorial(context)
end
return 0
end
function LF_Try_StartTutorial(context)
local UidList = ScriptLib.GetSceneUidList(context)
local ownerUid = UidList[1]
local havePlayed = ScriptLib.GetExhibitionAccumulableData(context, ownerUid, 10901101)
if 0 == havePlayed then
ScriptLib.ShowClientTutorial(context, 833, {ownerUid})
ScriptLib.AddExhibitionAccumulableData(context,ownerUid, "WinterCamp_Snowman_HavePlayed", 1)
end
return 0
end
LF_Initialize_Group(triggers, suites)